From 5deba60382e419dc00cd3d32fc35f151bd37be08 Mon Sep 17 00:00:00 2001 From: An Bui <91354810+AnBui2004@users.noreply.github.com> Date: Sun, 25 Jan 2026 19:54:37 +0700 Subject: [PATCH] 3.7.6 - Bugs fixed. --- app/build.gradle | 4 +- .../com/vectras/qemu/MainSettingsManager.java | 7 +- .../com/vectras/vm/ExportRomActivity.java | 6 +- .../Fragment/CreateImageDialogFragment.java | 3 +- .../vectras/vm/creator/VMCreatorActivity.java | 78 ++++++------------- .../java/com/vectras/vm/x11/X11Activity.java | 7 +- web/data/UpdateConfig.json | 8 +- 7 files changed, 47 insertions(+), 66 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c550bdf..f5b353e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "com.vectras.vm" minSdk minApi targetSdk targetApi - versionCode 79 - versionName "3.7.5" + versionCode 80 + versionName "3.7.6" 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 b2741a6..852a558 100644 --- a/app/src/main/java/com/vectras/qemu/MainSettingsManager.java +++ b/app/src/main/java/com/vectras/qemu/MainSettingsManager.java @@ -517,7 +517,12 @@ public class MainSettingsManager extends AppCompatActivity public static String getVncExternalDisplay(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - return prefs.getString("vncExternalDisplay", "1"); + String value = prefs.getString("vncExternalDisplay", "1"); + if (value.isEmpty()) { + return "1"; + } else { + return value; + } } public static void setVncExternalDisplay(Context context, String vncExternalDisplay) { diff --git a/app/src/main/java/com/vectras/vm/ExportRomActivity.java b/app/src/main/java/com/vectras/vm/ExportRomActivity.java index ef7c944..0cd4f8e 100644 --- a/app/src/main/java/com/vectras/vm/ExportRomActivity.java +++ b/app/src/main/java/com/vectras/vm/ExportRomActivity.java @@ -222,12 +222,12 @@ public class ExportRomActivity extends AppCompatActivity { )}; runOnUiThread(() -> { isExporting = false; - progressDialog.dismiss(); + DialogUtils.safeDismiss(this, progressDialog); String finalOutputPath = ""; try { - FileUtils.deleteDirectory(outputPath); - FileUtils.deleteDirectory(tempFolder); + FileUtils.delete(new File(outputPath)); + FileUtils.delete(new File(tempFolder)); finalOutputPath = FileUtils.getPath(this, uri); } catch (Exception e) { Log.e(TAG, "startCreate: ", e); diff --git a/app/src/main/java/com/vectras/vm/Fragment/CreateImageDialogFragment.java b/app/src/main/java/com/vectras/vm/Fragment/CreateImageDialogFragment.java index 2266745..b718782 100644 --- a/app/src/main/java/com/vectras/vm/Fragment/CreateImageDialogFragment.java +++ b/app/src/main/java/com/vectras/vm/Fragment/CreateImageDialogFragment.java @@ -20,6 +20,7 @@ import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputLayout; import com.vectras.vm.AppConfig; import com.vectras.vm.R; +import com.vectras.vm.utils.DialogUtils; import com.vectras.vterm.Terminal; import java.io.File; @@ -100,7 +101,7 @@ public class CreateImageDialogFragment extends DialogFragment { driveLayout.setEndIconDrawable(R.drawable.more_vert_24px); } - dismiss(); + DialogUtils.safeDismiss(requireActivity(), builder.create()); }); builder.setView(view); diff --git a/app/src/main/java/com/vectras/vm/creator/VMCreatorActivity.java b/app/src/main/java/com/vectras/vm/creator/VMCreatorActivity.java index 95dc235..76defbd 100644 --- a/app/src/main/java/com/vectras/vm/creator/VMCreatorActivity.java +++ b/app/src/main/java/com/vectras/vm/creator/VMCreatorActivity.java @@ -8,12 +8,9 @@ import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.ProgressBar; -import android.widget.TextView; import androidx.activity.OnBackPressedCallback; import androidx.activity.result.ActivityResultLauncher; @@ -63,6 +60,8 @@ public class VMCreatorActivity extends AppCompatActivity { private final String TAG = "VMCreatorActivity"; private ActivityVmCreatorBinding binding; private final ExecutorService executor = Executors.newSingleThreadExecutor(); + private DialogProgressStyleBinding dialogProgressStyleBinding; + private AlertDialog progressDialog; boolean iseditparams = false; public String previousName = ""; public boolean addromnowdone = false; @@ -107,6 +106,12 @@ public class VMCreatorActivity extends AppCompatActivity { binding = ActivityVmCreatorBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); + dialogProgressStyleBinding = DialogProgressStyleBinding.inflate(getLayoutInflater()); + progressDialog = new MaterialAlertDialogBuilder(this) + .setView(dialogProgressStyleBinding.getRoot()) + .setCancelable(false) + .create(); + setSupportActionBar(binding.toolbar); Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); @@ -138,7 +143,7 @@ public class VMCreatorActivity extends AppCompatActivity { () -> diskPicker.launch("*/*"), () -> { if (binding.drive.getText().toString().contains(AppConfig.vmFolder + vmID)) { - FileUtils.deleteDirectory(Objects.requireNonNull(binding.drive.getText()).toString()); + FileUtils.delete(new File(Objects.requireNonNull(binding.drive.getText()).toString())); } binding.drive.setText(""); binding.driveField.setEndIconDrawable(R.drawable.add_24px); @@ -383,14 +388,7 @@ public class VMCreatorActivity extends AppCompatActivity { if (uri == null) return; if (MainSettingsManager.copyFile(this)) { - DialogProgressStyleBinding dialogProgressStyleBinding = DialogProgressStyleBinding.inflate(getLayoutInflater()); - dialogProgressStyleBinding.progressText.setText(getString(R.string.copying_file)); - AlertDialog progressDialog = new MaterialAlertDialogBuilder(this, R.style.CenteredDialogTheme) - .setView(dialogProgressStyleBinding.getRoot()) - .setCancelable(false) - .create(); - - progressDialog.show(); + showProgressDialog(getString(R.string.copying_file)); executor.execute(() -> { try { @@ -478,15 +476,7 @@ public class VMCreatorActivity extends AppCompatActivity { private final ActivityResultLauncher filePicker = registerForActivityResult(new ActivityResultContracts.GetContent(), uri -> { if (uri == null) return; - - DialogProgressStyleBinding dialogProgressStyleBinding = DialogProgressStyleBinding.inflate(getLayoutInflater()); - dialogProgressStyleBinding.progressText.setText(getString(R.string.copying_file)); - AlertDialog progressDialog = new MaterialAlertDialogBuilder(this, R.style.CenteredDialogTheme) - .setView(dialogProgressStyleBinding.getRoot()) - .setCancelable(false) - .create(); - - progressDialog.show(); + showProgressDialog(getString(R.string.copying_file)); executor.execute(() -> { try { @@ -711,15 +701,7 @@ public class VMCreatorActivity extends AppCompatActivity { } private void startProcessingThumbnail(Uri uri) { - View progressView = LayoutInflater.from(this).inflate(R.layout.dialog_progress_style, null); - TextView progressText = progressView.findViewById(R.id.progress_text); - progressText.setText(getString(R.string.just_a_sec)); - AlertDialog progressDialog = new MaterialAlertDialogBuilder(this, R.style.CenteredDialogTheme) - .setView(progressView) - .setCancelable(false) - .create(); - - progressDialog.show(); + showProgressDialog(getString(R.string.just_a_sec)); executor.execute(() -> { try { @@ -790,16 +772,7 @@ public class VMCreatorActivity extends AppCompatActivity { if (MainSettingsManager.copyFile(this)) { if (isFinishing() || isDestroyed() || !createVMFolder(true)) return; - - View progressView = LayoutInflater.from(this).inflate(R.layout.dialog_progress_style, null); - TextView progressText = progressView.findViewById(R.id.progress_text); - progressText.setText(getString(R.string.copying_file)); - AlertDialog progressDialog = new MaterialAlertDialogBuilder(this, R.style.CenteredDialogTheme) - .setView(progressView) - .setCancelable(false) - .create(); - - progressDialog.show(); + showProgressDialog(getString(R.string.copying_file)); executor.execute(() -> { try { @@ -914,16 +887,7 @@ public class VMCreatorActivity extends AppCompatActivity { isProcessingFile = true; - View progressView = LayoutInflater.from(this).inflate(R.layout.dialog_progress_style, null); - TextView progressText = progressView.findViewById(R.id.progress_text); - progressText.setText(getString(R.string.importing) + "\n" + getString(R.string.please_stay_here)); - ProgressBar progressBar = progressView.findViewById(R.id.progress_bar); - AlertDialog progressDialog = new MaterialAlertDialogBuilder(this, R.style.CenteredDialogTheme) - .setView(progressView) - .setCancelable(false) - .create(); - - progressDialog.show(); + showProgressDialog(getString(R.string.importing) + "\n" + getString(R.string.please_stay_here)); Log.i(TAG, "importRom: Extracting with " + (isUseUri ? "uri" : "path") + " from " + filePath + " to " + AppConfig.vmFolder + vmID); @@ -932,14 +896,14 @@ public class VMCreatorActivity extends AppCompatActivity { this, fileUri, AppConfig.vmFolder + vmID, - progressText, - progressBar + dialogProgressStyleBinding.progressText, + dialogProgressStyleBinding.progressBar ) : ZipUtils.extract( this, filePath, AppConfig.vmFolder + vmID, - progressText, - progressBar + dialogProgressStyleBinding.progressText, + dialogProgressStyleBinding.progressBar ); runOnUiThread(() -> { @@ -1060,6 +1024,12 @@ public class VMCreatorActivity extends AppCompatActivity { } } + private void showProgressDialog(String message) { + dialogProgressStyleBinding.progressText.setText(message); + dialogProgressStyleBinding.progressBar.setIndeterminate(true); + progressDialog.show(); + } + public String getPath(Uri uri) { return FileUtils.getPath(this, uri); } diff --git a/app/src/main/java/com/vectras/vm/x11/X11Activity.java b/app/src/main/java/com/vectras/vm/x11/X11Activity.java index 5e3f542..49b8cb1 100644 --- a/app/src/main/java/com/vectras/vm/x11/X11Activity.java +++ b/app/src/main/java/com/vectras/vm/x11/X11Activity.java @@ -462,7 +462,12 @@ public class X11Activity extends AppCompatActivity implements View.OnApplyWindow dialog.dismiss(); }); - if (!isFinishing() && !isDestroyed()) dialog.show(); + if (!isFinishing() + && !isDestroyed() + && getWindow() != null + && getWindow().getDecorView().isShown()) { + dialog.show(); + } }); upGameBtn.setOnTouchListener((v, event) -> { diff --git a/web/data/UpdateConfig.json b/web/data/UpdateConfig.json index 9d8ff49..1c717f3 100644 --- a/web/data/UpdateConfig.json +++ b/web/data/UpdateConfig.json @@ -5,11 +5,11 @@ "url": "https://github.com/xoureldeen/Vectras-VM-Android/releases", "Message": "

3.7.0

\nBugs fixed.", "cancellable": true, - "versionCodeBeta":"79", - "versionNameBeta":"3.7.5", - "versionNameBetas":"3.0.0,3.1.0,3.2.1,3.2.2,3.2.3,3.2.4,3.2.5,3.2.6,3.2.7,3.2.8,3.2.9,3.2.10,3.3.1,3.3.2,3.3.3,3.3.4,3.3.5,3.3.6,3.3.7,3.3.8,3.3.9,3.4.1,3.4.2,3.4.3,3.4.4,3.4.5,3.4.6,3.4.7,3.4.8,3.4.9,3.5.1,3.5.2,3.5.3,3.5.4,3.5.5,3.5.6,3.5.7,3.5.8,3.5.9,3.6.1,3.6.2,3.6.3,3.6.4,3.6.5,3.6.6,3.6.7,3.6.8,3.6.9,3.7.1,3.7.2,3.7.3,3.7.4,3.7.5", + "versionCodeBeta":"80", + "versionNameBeta":"3.7.6", + "versionNameBetas":"3.0.0,3.1.0,3.2.1,3.2.2,3.2.3,3.2.4,3.2.5,3.2.6,3.2.7,3.2.8,3.2.9,3.2.10,3.3.1,3.3.2,3.3.3,3.3.4,3.3.5,3.3.6,3.3.7,3.3.8,3.3.9,3.4.1,3.4.2,3.4.3,3.4.4,3.4.5,3.4.6,3.4.7,3.4.8,3.4.9,3.5.1,3.5.2,3.5.3,3.5.4,3.5.5,3.5.6,3.5.7,3.5.8,3.5.9,3.6.1,3.6.2,3.6.3,3.6.4,3.6.5,3.6.6,3.6.7,3.6.8,3.6.9,3.7.1,3.7.2,3.7.3,3.7.4,3.7.5,3.7.6", "sizeBeta": "45 MB", "urlBeta": "https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases", - "MessageBeta": "

3.7.5

Bugs fixed.", + "MessageBeta": "

3.7.6

Bugs fixed.", "cancellableBeta": true }