mirror of
https://github.com/xoureldeen/Vectras-VM-Android.git
synced 2026-05-07 02:36:03 +00:00
commit
05b405dee0
15 changed files with 475 additions and 8 deletions
6
.idea/AndroidProjectSystem.xml
generated
Normal file
6
.idea/AndroidProjectSystem.xml
generated
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AndroidProjectSystem">
|
||||||
|
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -11,7 +11,7 @@ android {
|
||||||
minSdk minApi
|
minSdk minApi
|
||||||
targetSdk targetApi
|
targetSdk targetApi
|
||||||
versionCode 21
|
versionCode 21
|
||||||
versionName "v2.9.5-3dfx-flan"
|
versionName "v2.9.5-3dfx-gugelhupf"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -762,4 +762,16 @@ public class MainSettingsManager extends AppCompatActivity
|
||||||
return prefs.getBoolean("setUpWithManualSetupBefore", false);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,16 @@ import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.provider.DocumentsContract;
|
import android.provider.DocumentsContract;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.AdapterView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.Spinner;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
import android.widget.BaseAdapter;
|
||||||
|
|
||||||
import androidx.activity.EdgeToEdge;
|
import androidx.activity.EdgeToEdge;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
|
@ -27,10 +33,18 @@ import androidx.core.graphics.Insets;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
|
|
||||||
|
import com.vectras.qemu.MainSettingsManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class Minitools extends AppCompatActivity {
|
public class Minitools extends AppCompatActivity {
|
||||||
|
|
||||||
|
private ArrayList<HashMap<String, String>> listmapForSelectMirrors = new ArrayList<>();
|
||||||
|
private Spinner spinnerselectmirror;
|
||||||
|
private String selectedMirrorCommand = "";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
@ -54,6 +68,7 @@ public class Minitools extends AppCompatActivity {
|
||||||
LinearLayout deleteallvm = findViewById(R.id.deleteallvm);
|
LinearLayout deleteallvm = findViewById(R.id.deleteallvm);
|
||||||
LinearLayout reinstallsystem = findViewById(R.id.reinstallsystem);
|
LinearLayout reinstallsystem = findViewById(R.id.reinstallsystem);
|
||||||
LinearLayout deleteall = findViewById(R.id.deleteall);
|
LinearLayout deleteall = findViewById(R.id.deleteall);
|
||||||
|
spinnerselectmirror = findViewById(R.id.spinnerselectmirror);
|
||||||
|
|
||||||
setupsoundfortermux.setOnClickListener(v -> {
|
setupsoundfortermux.setOnClickListener(v -> {
|
||||||
if (VectrasApp.isAppInstalled("com.termux", getApplicationContext())) {
|
if (VectrasApp.isAppInstalled("com.termux", getApplicationContext())) {
|
||||||
|
|
@ -219,6 +234,22 @@ public class Minitools extends AppCompatActivity {
|
||||||
});
|
});
|
||||||
alertDialog.show();
|
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
|
@Override
|
||||||
|
|
@ -233,4 +264,50 @@ public class Minitools extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
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<HashMap<String, String>> _data;
|
||||||
|
|
||||||
|
public SpinnerSelectMirrorAdapter(ArrayList<HashMap<String, String>> _arr) {
|
||||||
|
_data = _arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return _data.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HashMap<String, String> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -21,14 +21,20 @@ import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.provider.DocumentsContract;
|
import android.provider.DocumentsContract;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
|
import android.widget.BaseAdapter;
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
@ -56,7 +62,9 @@ import java.io.OutputStream;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class SetupQemuActivity extends AppCompatActivity implements View.OnClickListener {
|
public class SetupQemuActivity extends AppCompatActivity implements View.OnClickListener {
|
||||||
Activity activity;
|
Activity activity;
|
||||||
|
|
@ -80,6 +88,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
|
||||||
MaterialButton buttonsetupshowlog;
|
MaterialButton buttonsetupshowlog;
|
||||||
TextView textviewshowadvancedsetup;
|
TextView textviewshowadvancedsetup;
|
||||||
TextView textviewhideadvancedsetup;
|
TextView textviewhideadvancedsetup;
|
||||||
|
Spinner spinnerselectmirror;
|
||||||
|
|
||||||
AlertDialog alertDialog;
|
AlertDialog alertDialog;
|
||||||
private boolean settingup = false;
|
private boolean settingup = false;
|
||||||
|
|
@ -90,6 +99,9 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
|
||||||
private String contentJSON = "";
|
private String contentJSON = "";
|
||||||
private HashMap<String, Object> mmap = new HashMap<>();
|
private HashMap<String, Object> mmap = new HashMap<>();
|
||||||
private String bootstrapfilelink = "";
|
private String bootstrapfilelink = "";
|
||||||
|
private ArrayList<HashMap<String, String>> listmapForSelectMirrors = new ArrayList<>();
|
||||||
|
private String selectedMirrorCommand = "";
|
||||||
|
private String selectedMirrorLocation = "";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
@ -111,6 +123,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
|
||||||
buttonsetupshowlog = findViewById(R.id.buttonsetupshowlog);
|
buttonsetupshowlog = findViewById(R.id.buttonsetupshowlog);
|
||||||
textviewshowadvancedsetup = findViewById(R.id.textviewshowadvancedsetup);
|
textviewshowadvancedsetup = findViewById(R.id.textviewshowadvancedsetup);
|
||||||
textviewhideadvancedsetup = findViewById(R.id.textviewhideadvancedsetup);
|
textviewhideadvancedsetup = findViewById(R.id.textviewhideadvancedsetup);
|
||||||
|
spinnerselectmirror = findViewById(R.id.spinnerselectmirror);
|
||||||
|
|
||||||
buttontryconnectagain.setOnClickListener(this);
|
buttontryconnectagain.setOnClickListener(this);
|
||||||
buttonautosetup.setOnClickListener(this);
|
buttonautosetup.setOnClickListener(this);
|
||||||
|
|
@ -127,10 +140,25 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
|
||||||
inBtn = findViewById(R.id.btnInstall);
|
inBtn = findViewById(R.id.btnInstall);
|
||||||
title = findViewById(R.id.title);
|
title = findViewById(R.id.title);
|
||||||
inBtn.setOnClickListener(this);
|
inBtn.setOnClickListener(this);
|
||||||
|
setupSpiner();
|
||||||
|
|
||||||
tarPath = getExternalFilesDir("data") + "/data.tar.gz";
|
tarPath = getExternalFilesDir("data") + "/data.tar.gz";
|
||||||
VectrasApp.prepareDataForAppConfig(activity);
|
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 = new RequestNetwork(this);
|
||||||
_net_request_listener = new RequestNetwork.RequestListener() {
|
_net_request_listener = new RequestNetwork.RequestListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -354,6 +382,9 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
|
||||||
if (textToAdd.contains("Starting setup...")) {
|
if (textToAdd.contains("Starting setup...")) {
|
||||||
title.setText("Getting ready for you...");
|
title.setText("Getting ready for you...");
|
||||||
textviewsettingup.setText(R.string.getting_ready_for_you_please_don_t_disconnect_the_network);
|
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...")) {
|
} else if (textToAdd.contains("Installing packages...")) {
|
||||||
title.setText(R.string.it_won_t_take_long);
|
title.setText(R.string.it_won_t_take_long);
|
||||||
textviewsettingup.setText(R.string.completed_10_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);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
String filesDir = activity.getFilesDir().getAbsolutePath();
|
String filesDir = activity.getFilesDir().getAbsolutePath();
|
||||||
String cmd = "";
|
String cmd = "";
|
||||||
cmd += "echo \"https://dl-cdn.alpinelinux.org/alpine/edge/testing\" | tee -a /etc/apk/repositories;";
|
cmd += selectedMirrorCommand + ";";
|
||||||
executeShellCommand(cmd);
|
executeShellCommand(cmd);
|
||||||
executeShellCommand("set -e;" +
|
executeShellCommand("set -e;" +
|
||||||
" echo \"Starting setup...\";" +
|
" echo \"Starting setup...\";" +
|
||||||
|
|
@ -645,7 +676,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
String filesDir = activity.getFilesDir().getAbsolutePath();
|
String filesDir = activity.getFilesDir().getAbsolutePath();
|
||||||
String cmd = "";
|
String cmd = "";
|
||||||
cmd += "echo \"https://dl-cdn.alpinelinux.org/alpine/edge/testing\" | tee -a /etc/apk/repositories;";
|
cmd += selectedMirrorCommand + ";";
|
||||||
executeShellCommand(cmd);
|
executeShellCommand(cmd);
|
||||||
executeShellCommand("set -e;" +
|
executeShellCommand("set -e;" +
|
||||||
" echo \"Starting setup...\";" +
|
" echo \"Starting setup...\";" +
|
||||||
|
|
@ -667,7 +698,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
String filesDir = activity.getFilesDir().getAbsolutePath();
|
String filesDir = activity.getFilesDir().getAbsolutePath();
|
||||||
String cmd = "";
|
String cmd = "";
|
||||||
cmd += "echo \"https://dl-cdn.alpinelinux.org/alpine/edge/testing\" | tee -a /etc/apk/repositories;";
|
cmd += selectedMirrorCommand + ";";
|
||||||
executeShellCommand(cmd);
|
executeShellCommand(cmd);
|
||||||
executeShellCommand("set -e;" +
|
executeShellCommand("set -e;" +
|
||||||
" echo \"Starting setup...\";" +
|
" echo \"Starting setup...\";" +
|
||||||
|
|
@ -832,4 +863,50 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
|
||||||
alertDialog.show();
|
alertDialog.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupSpiner() {
|
||||||
|
VectrasApp.setupMirrorListForListmap(listmapForSelectMirrors);
|
||||||
|
|
||||||
|
spinnerselectmirror.setAdapter(new SpinnerSelectMirrorAdapter(listmapForSelectMirrors));
|
||||||
|
spinnerselectmirror.setSelection(MainSettingsManager.getSelectedMirror(activity));
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SpinnerSelectMirrorAdapter extends BaseAdapter {
|
||||||
|
|
||||||
|
ArrayList<HashMap<String, String>> _data;
|
||||||
|
|
||||||
|
public SpinnerSelectMirrorAdapter(ArrayList<HashMap<String, String>> _arr) {
|
||||||
|
_data = _arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return _data.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HashMap<String, String> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
public static void killallqemuprocesses(Context context) {
|
||||||
Terminal vterm = new Terminal(context);
|
Terminal vterm = new Terminal(context);
|
||||||
vterm.executeShellCommand2("killall -9 qemu-system-i386", false, MainActivity.activity);
|
vterm.executeShellCommand2("killall -9 qemu-system-i386", false, MainActivity.activity);
|
||||||
|
|
@ -762,4 +767,200 @@ public class VectrasApp extends Application {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setupMirrorListForListmap(ArrayList<HashMap<String, String>> listmapForSelectMirrors) {
|
||||||
|
HashMap<String, String> 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<stroke android:width="1dp" android:color="#20757575" />
|
||||||
|
<solid android:color="@android:color/transparent" />
|
||||||
|
<corners android:topLeftRadius="360dp" android:bottomLeftRadius="360dp" android:topRightRadius="360dp" android:bottomRightRadius="360dp" />
|
||||||
|
</shape>
|
||||||
10
app/src/main/res/drawable/host_24px.xml
Normal file
10
app/src/main/res/drawable/host_24px.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="960"
|
||||||
|
android:viewportHeight="960"
|
||||||
|
android:tint="?attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M160,840Q127,840 103.5,816.5Q80,793 80,760L80,200Q80,167 103.5,143.5Q127,120 160,120L360,120Q393,120 416.5,143.5Q440,167 440,200L440,760Q440,793 416.5,816.5Q393,840 360,840L160,840ZM600,840Q567,840 543.5,816.5Q520,793 520,760L520,200Q520,167 543.5,143.5Q567,120 600,120L800,120Q833,120 856.5,143.5Q880,167 880,200L880,760Q880,793 856.5,816.5Q833,840 800,840L600,840ZM160,760L360,760Q360,760 360,760Q360,760 360,760L360,200Q360,200 360,200Q360,200 360,200L160,200Q160,200 160,200Q160,200 160,200L160,760Q160,760 160,760Q160,760 160,760ZM600,760L800,760Q800,760 800,760Q800,760 800,760L800,200Q800,200 800,200Q800,200 800,200L600,200Q600,200 600,200Q600,200 600,200L600,760Q600,760 600,760Q600,760 600,760ZM200,600L320,600L320,520L200,520L200,600ZM640,600L760,600L760,520L640,520L640,600ZM200,480L320,480L320,400L200,400L200,480ZM640,480L760,480L760,400L640,400L640,480ZM200,360L320,360L320,280L200,280L200,360ZM640,360L760,360L760,280L640,280L640,360ZM160,760Q160,760 160,760Q160,760 160,760L160,760Q160,760 160,760Q160,760 160,760L360,760Q360,760 360,760Q360,760 360,760L360,760Q360,760 360,760Q360,760 360,760L160,760ZM600,760Q600,760 600,760Q600,760 600,760L600,760Q600,760 600,760Q600,760 600,760L800,760Q800,760 800,760Q800,760 800,760L800,760Q800,760 800,760Q800,760 800,760L600,760Z"/>
|
||||||
|
</vector>
|
||||||
|
|
@ -40,6 +40,41 @@
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:animateLayoutChanges="true" >
|
android:animateLayoutChanges="true" >
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
|
android:paddingRight="16dp"
|
||||||
|
android:id="@+id/mirror"
|
||||||
|
android:background="?android:attr/selectableItemBackground" >
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/host_24px"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/mirror"
|
||||||
|
android:layout_marginLeft="8dp"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/backgroud_stroke_for_spinner">
|
||||||
|
|
||||||
|
<Spinner
|
||||||
|
android:id="@+id/spinnerselectmirror"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:spinnerMode="dialog"
|
||||||
|
tools:listitem="@layout/simple_layout_for_spiner"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,32 @@
|
||||||
android:gravity="center_horizontal|center_vertical"
|
android:gravity="center_horizontal|center_vertical"
|
||||||
android:text="@string/manual" />
|
android:text="@string/manual" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/linear6"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="8dp"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="20dp"
|
||||||
|
android:paddingBottom="8dp"
|
||||||
|
android:text="@string/do_you_want_to_change_the_mirror_before_setting_up_the_current_mirror_is" />
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/backgroud_stroke_for_spinner">
|
||||||
|
<Spinner
|
||||||
|
android:id="@+id/spinnerselectmirror"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:spinnerMode="dialog"
|
||||||
|
tools:listitem="@layout/simple_layout_for_spiner"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/linearsettingup"
|
android:id="@+id/linearsettingup"
|
||||||
|
|
|
||||||
14
app/src/main/res/layout/simple_layout_for_spiner.xml
Normal file
14
app/src/main/res/layout/simple_layout_for_spiner.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewLocation"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="TextView"
|
||||||
|
android:padding="16dp"
|
||||||
|
android:background="?android:attr/selectableItemBackground" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<string name="app_name">Vectras VM</string>
|
<string name="app_name">Vectras VM</string>
|
||||||
|
|
||||||
<!--======================VECTRAS STRINGS====================-->
|
<!--======================VECTRAS STRINGS====================-->
|
||||||
<string name="app_version" translatable="false">v2.9.5 (3dfx - Flan)</string>
|
<string name="app_version" translatable="false">v2.9.5 (3dfx - Gugelhupf)</string>
|
||||||
<string name="qemu_version" translatable="false">Stable</string>
|
<string name="qemu_version" translatable="false">Stable</string>
|
||||||
<string name="str_home">Home</string>
|
<string name="str_home">Home</string>
|
||||||
<string name="str_logger">Logger</string>
|
<string name="str_logger">Logger</string>
|
||||||
|
|
@ -401,6 +401,9 @@
|
||||||
<string name="change">Change</string>
|
<string name="change">Change</string>
|
||||||
<string name="change_hard_drive">Change hard drive</string>
|
<string name="change_hard_drive">Change hard drive</string>
|
||||||
<string name="do_you_want_to_change_create_or_remove">Do you want to change, create or remove?</string>
|
<string name="do_you_want_to_change_create_or_remove">Do you want to change, create or remove?</string>
|
||||||
|
<string name="do_you_want_to_change_the_mirror_before_setting_up_the_current_mirror_is">Do you want to change the mirror before setting up?\nThe current mirror is:</string>
|
||||||
|
<string name="connecting_to_mirror_in">Connecting to mirror in</string>
|
||||||
|
<string name="mirror">Mirror</string>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ buildscript {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
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.
|
// 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.gms:google-services:4.4.0' // assuming you need it for your project
|
||||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
|
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
|
||||||
|
|
|
||||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
|
@ -1,6 +1,6 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
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
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"versionCode":"21",
|
"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",
|
"size": "46 MB",
|
||||||
"url": "https://github.com/xoureldeen/Vectras-VM-Android/releases/v2.9.5",
|
"url": "https://github.com/xoureldeen/Vectras-VM-Android/releases/v2.9.5",
|
||||||
"Message": "<h2>v2.9.5-3dfx</h2><ul><li>Bring back 3dfx support.</li><li>Enhance app execution.</li><li>Added some linux programs in x11 display.</li><li>Added alpine linux (x11).</li><li>Russian language by <a href=\"https://github.com/OFGING\" target=\"_blank\">@OFGING</a></li></ul><br><br>New updates are live!",
|
"Message": "<h2>v2.9.5-3dfx</h2><ul><li>Bring back 3dfx support.</li><li>Enhance app execution.</li><li>Added some linux programs in x11 display.</li><li>Added alpine linux (x11).</li><li>Russian language by <a href=\"https://github.com/OFGING\" target=\"_blank\">@OFGING</a></li></ul><br><br>New updates are live!",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue