diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9196721..937b5a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk minApi targetSdk targetApi versionCode 21 - versionName "v2.9.5-3dfx-flan" + versionName "v2.9.5-3dfx-gugelhupf" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } diff --git a/app/src/main/java/com/vectras/qemu/MainSettingsManager.java b/app/src/main/java/com/vectras/qemu/MainSettingsManager.java index fd2ab92..21fbd8c 100644 --- a/app/src/main/java/com/vectras/qemu/MainSettingsManager.java +++ b/app/src/main/java/com/vectras/qemu/MainSettingsManager.java @@ -762,4 +762,16 @@ public class MainSettingsManager extends AppCompatActivity return prefs.getBoolean("setUpWithManualSetupBefore", false); } + public static void setSelectedMirror(Context context, int _int) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences.Editor edit = prefs.edit(); + edit.putInt("SelectedMirror", _int); + edit.commit(); + } + + public static int getSelectedMirror(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + return prefs.getInt("SelectedMirror", 0); + } + } diff --git a/app/src/main/java/com/vectras/vm/Minitools.java b/app/src/main/java/com/vectras/vm/Minitools.java index 3a9db40..3d05010 100644 --- a/app/src/main/java/com/vectras/vm/Minitools.java +++ b/app/src/main/java/com/vectras/vm/Minitools.java @@ -14,10 +14,16 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.DocumentsContract; +import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; import android.widget.LinearLayout; +import android.widget.Spinner; +import android.widget.TextView; import android.widget.Toast; +import android.widget.BaseAdapter; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AlertDialog; @@ -27,10 +33,18 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.vectras.qemu.MainSettingsManager; + import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; public class Minitools extends AppCompatActivity { + private ArrayList> listmapForSelectMirrors = new ArrayList<>(); + private Spinner spinnerselectmirror; + private String selectedMirrorCommand = ""; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -54,6 +68,7 @@ public class Minitools extends AppCompatActivity { LinearLayout deleteallvm = findViewById(R.id.deleteallvm); LinearLayout reinstallsystem = findViewById(R.id.reinstallsystem); LinearLayout deleteall = findViewById(R.id.deleteall); + spinnerselectmirror = findViewById(R.id.spinnerselectmirror); setupsoundfortermux.setOnClickListener(v -> { if (VectrasApp.isAppInstalled("com.termux", getApplicationContext())) { @@ -219,6 +234,22 @@ public class Minitools extends AppCompatActivity { }); alertDialog.show(); }); + + spinnerselectmirror.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + selectedMirrorCommand = listmapForSelectMirrors.get(position).get("mirror"); + MainSettingsManager.setSelectedMirror(Minitools.this, position); + VectrasApp.runACommand(selectedMirrorCommand + "&& exit", Minitools.this); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + + setupSpiner(); } @Override @@ -233,4 +264,50 @@ public class Minitools extends AppCompatActivity { } return super.onOptionsItemSelected(item); } + + private void setupSpiner() { + VectrasApp.setupMirrorListForListmap(listmapForSelectMirrors); + + spinnerselectmirror.setAdapter(new SpinnerSelectMirrorAdapter(listmapForSelectMirrors)); + spinnerselectmirror.setSelection(MainSettingsManager.getSelectedMirror(Minitools.this)); + } + + public class SpinnerSelectMirrorAdapter extends BaseAdapter { + + ArrayList> _data; + + public SpinnerSelectMirrorAdapter(ArrayList> _arr) { + _data = _arr; + } + + @Override + public int getCount() { + return _data.size(); + } + + @Override + public HashMap getItem(int _index) { + return _data.get(_index); + } + + @Override + public long getItemId(int _index) { + return _index; + } + + @Override + public View getView(final int _position, View _v, ViewGroup _container) { + LayoutInflater _inflater = getLayoutInflater(); + View _view = _v; + if (_view == null) { + _view = _inflater.inflate(R.layout.simple_layout_for_spiner, null); + } + + final TextView textViewLocation = _view.findViewById(R.id.textViewLocation); + + textViewLocation.setText(_data.get((int) _position).get("location")); + + return _view; + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/vectras/vm/SetupQemuActivity.java b/app/src/main/java/com/vectras/vm/SetupQemuActivity.java index c232320..f7160bf 100644 --- a/app/src/main/java/com/vectras/vm/SetupQemuActivity.java +++ b/app/src/main/java/com/vectras/vm/SetupQemuActivity.java @@ -21,14 +21,20 @@ import android.os.Bundle; import android.os.Environment; import android.provider.DocumentsContract; import android.provider.Settings; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.ScrollView; +import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.Manifest; +import android.widget.BaseAdapter; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; @@ -56,7 +62,9 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; +import java.util.Objects; public class SetupQemuActivity extends AppCompatActivity implements View.OnClickListener { Activity activity; @@ -80,6 +88,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick MaterialButton buttonsetupshowlog; TextView textviewshowadvancedsetup; TextView textviewhideadvancedsetup; + Spinner spinnerselectmirror; AlertDialog alertDialog; private boolean settingup = false; @@ -90,6 +99,9 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick private String contentJSON = ""; private HashMap mmap = new HashMap<>(); private String bootstrapfilelink = ""; + private ArrayList> listmapForSelectMirrors = new ArrayList<>(); + private String selectedMirrorCommand = ""; + private String selectedMirrorLocation = ""; @Override protected void onCreate(Bundle savedInstanceState) { @@ -111,6 +123,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick buttonsetupshowlog = findViewById(R.id.buttonsetupshowlog); textviewshowadvancedsetup = findViewById(R.id.textviewshowadvancedsetup); textviewhideadvancedsetup = findViewById(R.id.textviewhideadvancedsetup); + spinnerselectmirror = findViewById(R.id.spinnerselectmirror); buttontryconnectagain.setOnClickListener(this); buttonautosetup.setOnClickListener(this); @@ -127,10 +140,25 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick inBtn = findViewById(R.id.btnInstall); title = findViewById(R.id.title); inBtn.setOnClickListener(this); + setupSpiner(); tarPath = getExternalFilesDir("data") + "/data.tar.gz"; VectrasApp.prepareDataForAppConfig(activity); + spinnerselectmirror.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + selectedMirrorCommand = Objects.requireNonNull(listmapForSelectMirrors.get(position).get("mirror")); + selectedMirrorLocation = Objects.requireNonNull(listmapForSelectMirrors.get(position).get("location")); + MainSettingsManager.setSelectedMirror(activity, position); + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + }); + net = new RequestNetwork(this); _net_request_listener = new RequestNetwork.RequestListener() { @Override @@ -354,6 +382,9 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick if (textToAdd.contains("Starting setup...")) { title.setText("Getting ready for you..."); textviewsettingup.setText(R.string.getting_ready_for_you_please_don_t_disconnect_the_network); + } else if (textToAdd.contains("fetch http")) { + title.setText(getString(R.string.connecting_to_mirror_in) + "\n" + selectedMirrorLocation + "..."); + textviewsettingup.setText(getString(R.string.connecting_to_mirror_in) + "\n" + selectedMirrorLocation + "..."); } else if (textToAdd.contains("Installing packages...")) { title.setText(R.string.it_won_t_take_long); textviewsettingup.setText(R.string.completed_10_it_won_t_take_long); @@ -623,7 +654,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick progressBar.setVisibility(View.VISIBLE); String filesDir = activity.getFilesDir().getAbsolutePath(); String cmd = ""; - cmd += "echo \"https://dl-cdn.alpinelinux.org/alpine/edge/testing\" | tee -a /etc/apk/repositories;"; + cmd += selectedMirrorCommand + ";"; executeShellCommand(cmd); executeShellCommand("set -e;" + " echo \"Starting setup...\";" + @@ -645,7 +676,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick progressBar.setVisibility(View.VISIBLE); String filesDir = activity.getFilesDir().getAbsolutePath(); String cmd = ""; - cmd += "echo \"https://dl-cdn.alpinelinux.org/alpine/edge/testing\" | tee -a /etc/apk/repositories;"; + cmd += selectedMirrorCommand + ";"; executeShellCommand(cmd); executeShellCommand("set -e;" + " echo \"Starting setup...\";" + @@ -667,7 +698,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick progressBar.setVisibility(View.VISIBLE); String filesDir = activity.getFilesDir().getAbsolutePath(); String cmd = ""; - cmd += "echo \"https://dl-cdn.alpinelinux.org/alpine/edge/testing\" | tee -a /etc/apk/repositories;"; + cmd += selectedMirrorCommand + ";"; executeShellCommand(cmd); executeShellCommand("set -e;" + " echo \"Starting setup...\";" + @@ -832,4 +863,50 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick alertDialog.show(); } } + + private void setupSpiner() { + VectrasApp.setupMirrorListForListmap(listmapForSelectMirrors); + + spinnerselectmirror.setAdapter(new SpinnerSelectMirrorAdapter(listmapForSelectMirrors)); + spinnerselectmirror.setSelection(MainSettingsManager.getSelectedMirror(activity)); + } + + public class SpinnerSelectMirrorAdapter extends BaseAdapter { + + ArrayList> _data; + + public SpinnerSelectMirrorAdapter(ArrayList> _arr) { + _data = _arr; + } + + @Override + public int getCount() { + return _data.size(); + } + + @Override + public HashMap getItem(int _index) { + return _data.get(_index); + } + + @Override + public long getItemId(int _index) { + return _index; + } + + @Override + public View getView(final int _position, View _v, ViewGroup _container) { + LayoutInflater _inflater = getLayoutInflater(); + View _view = _v; + if (_view == null) { + _view = _inflater.inflate(R.layout.simple_layout_for_spiner, null); + } + + final TextView textViewLocation = _view.findViewById(R.id.textViewLocation); + + textViewLocation.setText(Objects.requireNonNull(_data.get((int) _position).get("location"))); + + return _view; + } + } } diff --git a/app/src/main/java/com/vectras/vm/VectrasApp.java b/app/src/main/java/com/vectras/vm/VectrasApp.java index 40fc882..b5325cf 100644 --- a/app/src/main/java/com/vectras/vm/VectrasApp.java +++ b/app/src/main/java/com/vectras/vm/VectrasApp.java @@ -614,6 +614,11 @@ public class VectrasApp extends Application { } } + public static void runACommand(String _command, Activity _activity) { + Terminal vterm = new Terminal(_activity); + vterm.executeShellCommand2(_command, false, _activity); + } + public static void killallqemuprocesses(Context context) { Terminal vterm = new Terminal(context); vterm.executeShellCommand2("killall -9 qemu-system-i386", false, MainActivity.activity); @@ -762,4 +767,200 @@ public class VectrasApp extends Application { throw new RuntimeException(e); } } + + public static void setupMirrorListForListmap(ArrayList> listmapForSelectMirrors) { + HashMap mapForAddItems = new HashMap<>(); + + mapForAddItems.put("location", "United States (Default)"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "dl-cdn.alpinelinux.org", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Australia"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(false,"mirror.aarnet.edu.au", "/pub/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Austria"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.alwyzon.net", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Bulgaria"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirrors.neterra.net", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Brazil"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.uepg.br", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Cambodia"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.sabay.com.kh", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Canada"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "mirror.csclub.uwaterloo.ca", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Chile"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"elmirror.cl", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "China"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "mirrors.tuna.tsinghua.edu.cn", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Czech Republic"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "mirror.fel.cvut.cz", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Denmark"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "mirrors.dotsrc.org", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Finland"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "mirror.5i.fi", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "France"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirrors.ircam.fr", "/pub/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Germany"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"ftp.halifax.rwth-aachen.de", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Hong Kong"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "mirror.xtom.com.hk", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Indonesia"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(false,"foobar.turbo.net.id", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Iran"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.bardia.tech", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Italy"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"alpinelinux.mirror.garr.it", "")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Japan"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "repo.jing.rocks", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Kazakhstan"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.ps.kz", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Moldova"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.ihost.md", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Morocco"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "mirror.marwan.ma", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "New Caledonia"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.lagoon.nc", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "New Zealand"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.2degrees.nz", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Poland"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"ftp.icm.edu.pl", "/pub/Linux/distributions/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Portugal"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.leitecastro.com", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Romania"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirrors.hosterion.ro", "/alpinelinux")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Russia"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.hyperdedic.ru", "/alpinelinux")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Singapore"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.jingk.ai", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Slovenia"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.tux.si", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Spain"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.raiolanetworks.com", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Sweden"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "ftp.lysator.liu.se/pub", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Switzerland"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "pkg.adfinis.com", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Taiwan"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true, "mirror.twds.com.tw", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Thailand"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"mirror.kku.ac.th", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "The Netherlands"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"alpine.mirror.wearetriple.com", "")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "United Kingdom"); + mapForAddItems.put("mirror", createCommandForSelectedMirror(true,"uk.alpinelinux.org", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + } + + public static String createCommandForSelectedMirror(boolean _https, String _url, String _beforemain) { + String command = "echo \"\" > /etc/apk/repositories && sed -i -e \"1ihttps://xssFjnj58Id/yttGkok69Je/edge/testing\" /etc/apk/repositories && sed -i -e \"1ihttps://xssFjnj58Id/alpine/v3.19/community\" /etc/apk/repositories && sed -i -e \"1ihttps://xssFjnj58Id/alpine/v3.19/main\" /etc/apk/repositories"; + command = command.replaceAll("/yttGkok69Je", _beforemain); + if (!_https) + command = command.replaceAll("https://", "http://"); + return command.replaceAll("xssFjnj58Id", _url); + } } diff --git a/app/src/main/res/drawable/backgroud_stroke_for_spinner.xml b/app/src/main/res/drawable/backgroud_stroke_for_spinner.xml new file mode 100644 index 0000000..63f6a73 --- /dev/null +++ b/app/src/main/res/drawable/backgroud_stroke_for_spinner.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/host_24px.xml b/app/src/main/res/drawable/host_24px.xml new file mode 100644 index 0000000..69a0055 --- /dev/null +++ b/app/src/main/res/drawable/host_24px.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_minitools.xml b/app/src/main/res/layout/activity_minitools.xml index 906e86c..107fff2 100644 --- a/app/src/main/res/layout/activity_minitools.xml +++ b/app/src/main/res/layout/activity_minitools.xml @@ -40,6 +40,41 @@ android:orientation="vertical" android:animateLayoutChanges="true" > + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cd61993..dc80469 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,7 +3,7 @@ Vectras VM - v2.9.5 (3dfx - Flan) + v2.9.5 (3dfx - Gugelhupf) Stable Home Logger @@ -401,6 +401,9 @@ Change Change hard drive Do you want to change, create or remove? + Do you want to change the mirror before setting up?\nThe current mirror is: + Connecting to mirror in + Mirror diff --git a/build.gradle b/build.gradle index 5889ece..8b2ceec 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:8.8.2' // Android Gradle plugin + classpath 'com.android.tools.build:gradle:8.9.0' // Android Gradle plugin // Add other classpaths like Google Services and Firebase Crashlytics if needed here. classpath 'com.google.gms:google-services:4.4.0' // assuming you need it for your project classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 71c4d8a..f9fd840 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/web/data/UpdateConfig.json b/web/data/UpdateConfig.json index 0cd8f23..ae69e94 100644 --- a/web/data/UpdateConfig.json +++ b/web/data/UpdateConfig.json @@ -1,6 +1,6 @@ { "versionCode":"21", - "versionName":"v2.9.5-3dfx,v2.9.5-3dfx-almondcake,v2.9.5-3dfx-bread,v2.9.5-3dfx-churro,v2.9.5-3dfx-doughnut,v2.9.5-3dfx-empanada,v2.9.5-3dfx-flan", + "versionName":"v2.9.5-3dfx,v2.9.5-3dfx-almondcake,v2.9.5-3dfx-bread,v2.9.5-3dfx-churro,v2.9.5-3dfx-doughnut,v2.9.5-3dfx-empanada,v2.9.5-3dfx-flan,v2.9.5-3dfx-gugelhupf", "size": "46 MB", "url": "https://github.com/xoureldeen/Vectras-VM-Android/releases/v2.9.5", "Message": "

v2.9.5-3dfx

  • Bring back 3dfx support.
  • Enhance app execution.
  • Added some linux programs in x11 display.
  • Added alpine linux (x11).
  • Russian language by @OFGING


New updates are live!",