diff --git a/app/build.gradle b/app/build.gradle
index c2518b7..03b718d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,7 +11,7 @@ android {
minSdk minApi
targetSdk targetApi
versionCode 23
- versionName "3.1.0"
+ versionName "3.2.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
@@ -89,7 +89,7 @@ dependencies {
// implementation 'com.google.android.gms:play-services-ads:24.6.0'
implementation 'com.google.guava:guava:33.5.0-jre'
implementation 'com.google.code.gson:gson:2.13.2'
- implementation 'com.squareup.okhttp3:okhttp:5.1.0'
+ implementation 'com.squareup.okhttp3:okhttp:5.2.0'
implementation "androidx.window:window:1.5.0"
implementation "commons-io:commons-io:2.20.0"
implementation 'org.zeroturnaround:zt-zip:1.17'
diff --git a/app/src/main/java/com/vectras/vm/AboutActivity.java b/app/src/main/java/com/vectras/vm/AboutActivity.java
index c4a2f48..3178254 100644
--- a/app/src/main/java/com/vectras/vm/AboutActivity.java
+++ b/app/src/main/java/com/vectras/vm/AboutActivity.java
@@ -9,6 +9,7 @@ import android.os.Bundle;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.vectras.vm.adapters.GithubUserAdapter;
+import com.vectras.vm.utils.CommandUtils;
import com.vectras.vm.utils.UIUtils;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
@@ -28,9 +29,11 @@ import android.widget.TextView;
import com.vectras.vterm.Terminal;
import java.util.Objects;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
public class AboutActivity extends AppCompatActivity implements View.OnClickListener{
-
+ ExecutorService executor = Executors.newSingleThreadExecutor();
Button btn_osl, btn_clog;
ImageButton btn_discord, btn_youtube, btn_github, btn_telegram, btn_instagram, btn_facebook;
@@ -127,18 +130,9 @@ public class AboutActivity extends AppCompatActivity implements View.OnClickList
TextView qemuVersion = findViewById(R.id.qemuVersion);
-
- String command = "qemu-system-x86_64 --version";
- new Terminal(this).extractQemuVersion(command, false, this, (output, errors) -> {
- if (errors.isEmpty()) {
- String versionStr = "Unknown";
- if (output.equals("8.2.1") || output.equals("9.2.2"))
- versionStr = output + " - 3dfx";
- Log.d(TAG, "QEMU Version: " + versionStr);
- qemuVersion.setText(versionStr);
- } else {
- Log.e(TAG, "Errors: " + errors);
- }
+ executor.execute(() -> {
+ String qemuVersionName = CommandUtils.getQemuVersionName();
+ runOnUiThread(() -> qemuVersion.setText(qemuVersionName));
});
// SimpleAnimations.scale(findViewById(R.id.card_yagiz), 250);
diff --git a/app/src/main/java/com/vectras/vm/SetupQemuActivity.java b/app/src/main/java/com/vectras/vm/SetupQemuActivity.java
index 38dfd54..54bedef 100644
--- a/app/src/main/java/com/vectras/vm/SetupQemuActivity.java
+++ b/app/src/main/java/com/vectras/vm/SetupQemuActivity.java
@@ -109,6 +109,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
private String downloadBootstrapsCommand = "";
private boolean aria2Error = false;
private boolean isexecutingCommand = false;
+ private boolean isEdgeServerError = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -311,7 +312,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
Toast.LENGTH_SHORT)
.show();
- if (fromAsset.equals("alpine")) {
+ if (fromAsset.contains("alpine")) {
File rootDir = new File(filesDir + "/distro/root");
if (!rootDir.exists()) rootDir.mkdir();
@@ -441,6 +442,8 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
libprooterror = true;
} else if (textToAdd.contains("not complete: /root/setup.tar.gz")) {
aria2Error = true;
+ } else if (textToAdd.contains("edge") && textToAdd.contains("temporary error")) {
+ isEdgeServerError = true;
}
if (textToAdd.contains("Starting setup...")) {
@@ -567,7 +570,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
if (exitValue != 0) {
isexecutingCommand = false;
// If exit value is not zero, display a toast message
- if (!aria2Error) {
+ if (!aria2Error && isEdgeServerError) {
String toastMessage = "Command failed with exit code: " + exitValue;
activity.runOnUiThread(() -> {
appendTextAndScroll("Error: " + toastMessage + "\n");
@@ -597,13 +600,22 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
} else if (aria2Error && downloadBootstrapsCommand.contains("aria2c")) {
activity.runOnUiThread(() -> {
downloadBootstrapsCommand = " curl -o setup.tar.gz -L " + bootstrapfilelink;
- if (AppConfig.getSetupFiles().contains("arm64-v8a") || AppConfig.getSetupFiles().contains("x86_64")) {
+ if (AppConfig.getSetupFiles().contains("64")) {
+ setupVectras64();
+ } else {
+ setupVectras32();
+ }
+ });
+ } else if (isEdgeServerError) {
+ isEdgeServerError = false;
+ activity.runOnUiThread(() -> {
+ selectedMirrorCommand += " && sed '/edge/d' /etc/apk/repositories";
+ if (AppConfig.getSetupFiles().contains("64")) {
setupVectras64();
} else {
setupVectras32();
}
});
-
}
}
} catch (IOException | InterruptedException e) {
diff --git a/app/src/main/java/com/vectras/vm/home/monitor/SystemMonitorFragment.java b/app/src/main/java/com/vectras/vm/home/monitor/SystemMonitorFragment.java
index 8ab1634..663a142 100644
--- a/app/src/main/java/com/vectras/vm/home/monitor/SystemMonitorFragment.java
+++ b/app/src/main/java/com/vectras/vm/home/monitor/SystemMonitorFragment.java
@@ -27,6 +27,7 @@ import com.vectras.qemu.MainSettingsManager;
import com.vectras.vm.R;
import com.vectras.vm.VMManager;
import com.vectras.vm.databinding.FragmentHomeSystemMonitorBinding;
+import com.vectras.vm.utils.CommandUtils;
import com.vectras.vm.utils.DialogUtils;
import com.vectras.vterm.Terminal;
@@ -186,20 +187,15 @@ public class SystemMonitorFragment extends Fragment {
@SuppressLint("SetTextI18n")
private void getQemuInfo() {
String currentArch = MainSettingsManager.getArch(requireActivity());
- String command = "qemu-system-x86_64 --version";
- new Terminal(requireActivity()).extractQemuVersion(command, false, requireActivity(), (output, errors) -> {
- if (errors.isEmpty()) {
- binding.tvQemuversion.setText(getString(R.string.version) + " " + (output.equals("8.2.1") || output.equals("9.2.2") ? output + " - 3dfx" : getString(R.string.unknow)) + ".");
- } else {
- Log.e(TAG, "Errors: " + errors);
- }
- });
binding.tvQemuarch.setText(getString(R.string.arch) + " " + currentArch + ".");
executor.execute(() -> {
+ String qemuVersionName = CommandUtils.getQemuVersionName();
String result = Terminal.executeShellCommandWithResult("ps -e command", requireActivity());
requireActivity().runOnUiThread(() -> {
+ binding.tvQemuversion.setText(getString(R.string.version) + " " + qemuVersionName + ".");
+
if (!result.isEmpty()) {
switch (currentArch) {
case "X86_64" ->
diff --git a/app/src/main/java/com/vectras/vm/utils/CommandUtils.java b/app/src/main/java/com/vectras/vm/utils/CommandUtils.java
index 5b62166..320923d 100644
--- a/app/src/main/java/com/vectras/vm/utils/CommandUtils.java
+++ b/app/src/main/java/com/vectras/vm/utils/CommandUtils.java
@@ -2,6 +2,7 @@ package com.vectras.vm.utils;
import android.app.Activity;
+import com.vectras.vm.VectrasApp;
import com.vectras.vterm.Terminal;
public class CommandUtils {
@@ -17,4 +18,16 @@ public class CommandUtils {
Terminal vterm = new Terminal(_activity);
vterm.executeShellCommand2(_command, _isShowResult, _activity);
}
+
+ public static String getQemuVersionName() {
+ return getQemuVersion() + (is3dfxVersion() ? " - 3dfx" : "");
+ }
+
+ public static String getQemuVersion() {
+ return VectrasApp.getContext() == null ? "Unknow" : Terminal.executeShellCommandWithResult("qemu-system-x86_64 --version | head -n1 | awk '{print $4}'", VectrasApp.getContext()).replaceAll("\n", "");
+ }
+
+ public static boolean is3dfxVersion() {
+ return VectrasApp.getContext() != null && Terminal.executeShellCommandWithResult("qemu-system-x86_64 --version", VectrasApp.getContext()).contains("3dfx");
+ }
}
diff --git a/app/src/main/java/com/vectras/vterm/Terminal.java b/app/src/main/java/com/vectras/vterm/Terminal.java
index a1f4be5..00ccb99 100644
--- a/app/src/main/java/com/vectras/vterm/Terminal.java
+++ b/app/src/main/java/com/vectras/vterm/Terminal.java
@@ -287,7 +287,7 @@ public class Terminal {
}).start();
}
- public static String executeShellCommandWithResult(String userCommand, Activity activity) {
+ public static String executeShellCommandWithResult(String userCommand, Context context) {
StringBuilder output = new StringBuilder();
StringBuilder errors = new StringBuilder();
Log.d(TAG, userCommand);
@@ -296,8 +296,8 @@ public class Terminal {
try {
ProcessBuilder processBuilder = new ProcessBuilder();
- String filesDir = Objects.requireNonNull(activity.getFilesDir().getAbsolutePath());
- File tmpDir = new File(Objects.requireNonNull(activity.getFilesDir()), "usr/tmp");
+ String filesDir = Objects.requireNonNull(context.getFilesDir().getAbsolutePath());
+ File tmpDir = new File(Objects.requireNonNull(context.getFilesDir()), "usr/tmp");
processBuilder.environment().put("PROOT_TMP_DIR", tmpDir.getAbsolutePath());
processBuilder.environment().put("HOME", "/root");
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b7d35be..86aa617 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,7 +3,7 @@