diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml index aa039ed..17c03f6 100644 --- a/.github/ISSUE_TEMPLATE/bug.yaml +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -31,6 +31,8 @@ body: description: What version of our software are you running? options: - Latest + - Beta + - 4.1.0 - 4.0.0 - 3.9.0 - 3.8.0 diff --git a/app/build.gradle b/app/build.gradle index f22e573..7da47df 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,8 +12,8 @@ android { applicationId "com.vectras.vm" minSdk minApi targetSdk targetApi - versionCode 113 - versionName "4.0.9" + versionCode 114 + versionName "4.1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true diff --git a/app/src/main/cpp/cpu-info.cpp b/app/src/main/cpp/cpu-info.cpp index 1ab37a5..f9dc116 100644 --- a/app/src/main/cpp/cpu-info.cpp +++ b/app/src/main/cpp/cpu-info.cpp @@ -1,9 +1,9 @@ #include #include #include -#include #if defined(__aarch64__) + #include #include #elif defined(__x86_64__) #include diff --git a/app/src/main/java/com/vectras/vm/ExportRomActivity.java b/app/src/main/java/com/vectras/vm/ExportRomActivity.java index ba1eebc..9c8fab1 100644 --- a/app/src/main/java/com/vectras/vm/ExportRomActivity.java +++ b/app/src/main/java/com/vectras/vm/ExportRomActivity.java @@ -151,7 +151,7 @@ public class ExportRomActivity extends AppCompatActivity { vmConfigMap.put("isUseLocalTime", current.isUseLocalTime); vmConfigMap.put("isUseUefi", current.isUseUefi); vmConfigMap.put("isUseDefaultBios", current.isUseDefaultBios); - vmConfigMap.put("qemu", VmFileManager.pathToTextMark(current.vmID, current.itemExtra)); + vmConfigMap.put("qemu", VmFileManager.pathToTextMark(this, current.vmID, current.itemExtra)); vmConfigMap.put("arch", current.itemArch); if (Objects.requireNonNull(binding.edAuthor.getText()).toString().isEmpty()) { @@ -189,7 +189,7 @@ public class ExportRomActivity extends AppCompatActivity { String snapshotParams = FileUtils.readAFile(_filelist.get(_repeat)); snapshotParams = StartVM.removeQmpParams(snapshotParams); snapshotParams = StartVM.removeDisplayParams(snapshotParams); - FileUtils.writeToFile(tempFolder, VmFileManager.SNAPSHOT_SH_FILE_NAME, snapshotParams.replace(getRomPath, VmFileManager.TEXT_MARK_VM_PATH)); + FileUtils.writeToFile(tempFolder, VmFileManager.SNAPSHOT_SH_FILE_NAME, VmFileManager.pathToTextMark(this, current.vmID, snapshotParams)); pathList.add(tempFolder + VmFileManager.SNAPSHOT_SH_FILE_NAME); } } else if (_filelist.get(_repeat).endsWith(VmFileManager.CREATE_COMMAND_CONFIG_FILE_NAME)) { diff --git a/app/src/main/java/com/vectras/vm/Fragment/ControlersOptionsFragment.java b/app/src/main/java/com/vectras/vm/Fragment/ControlersOptionsFragment.java index 8c238be..c1ef858 100644 --- a/app/src/main/java/com/vectras/vm/Fragment/ControlersOptionsFragment.java +++ b/app/src/main/java/com/vectras/vm/Fragment/ControlersOptionsFragment.java @@ -55,11 +55,11 @@ public class ControlersOptionsFragment extends DialogFragment { public void onClick(View v) { MainSettingsManager.setControlMode(getActivity(), "H"); if (MainSettingsManager.getVmUi(getActivity()).equals("X11")) { - X11Activity.desktop.setVisibility(View.GONE); - X11Activity.gamepad.setVisibility(View.GONE); + if (X11Activity.desktop != null) X11Activity.desktop.setVisibility(View.GONE); + if (X11Activity.gamepad != null) X11Activity.gamepad.setVisibility(View.GONE); } else if (MainSettingsManager.getVmUi(getActivity()).equals("VNC")) { - MainVNCActivity.desktop.setVisibility(View.GONE); - MainVNCActivity.gamepad.setVisibility(View.GONE); + if (MainVNCActivity.desktop != null) MainVNCActivity.desktop.setVisibility(View.GONE); + if (MainVNCActivity.gamepad != null) MainVNCActivity.gamepad.setVisibility(View.GONE); } alertDialog.cancel(); } 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 15e586f..501b854 100644 --- a/app/src/main/java/com/vectras/vm/creator/VMCreatorActivity.java +++ b/app/src/main/java/com/vectras/vm/creator/VMCreatorActivity.java @@ -96,7 +96,7 @@ public class VMCreatorActivity extends AppCompatActivity { return true; } else if (id == R.id.add_file) { try { - filePicker.launch("*/*"); + filePicker.launch("*/*"); } catch (Exception e) { IntentUtils.showErrorDialog(this); } @@ -140,14 +140,14 @@ public class VMCreatorActivity extends AppCompatActivity { binding.drive.setOnClickListener(v -> { try { - diskPicker.launch("*/*"); + diskPicker.launch("*/*"); } catch (Exception e) { IntentUtils.showErrorDialog(this); } }); binding.driveField.setOnClickListener(v -> { try { - diskPicker.launch("*/*"); + diskPicker.launch("*/*"); } catch (Exception e) { IntentUtils.showErrorDialog(this); } @@ -339,7 +339,7 @@ public class VMCreatorActivity extends AppCompatActivity { if (Objects.requireNonNull(getIntent().getStringExtra("romextra")).isEmpty()) { setDefault(); } else { - binding.qemu.setText(VmFileManager.textMarkToPath(vmID, Objects.requireNonNull(getIntent().getStringExtra("romextra")))); + binding.qemu.setText(VmFileManager.textMarkToPath(this, vmID, Objects.requireNonNull(getIntent().getStringExtra("romextra")))); } binding.title.setText(getIntent().getStringExtra("romname")); @@ -645,7 +645,7 @@ public class VMCreatorActivity extends AppCompatActivity { } if (current.itemExtra != null) { - binding.qemu.setText(VmFileManager.textMarkToPath(vmID, current.itemExtra)); + binding.qemu.setText(VmFileManager.textMarkToPath(this, vmID, current.itemExtra)); } cpu = current.cpu; @@ -968,27 +968,27 @@ public class VMCreatorActivity extends AppCompatActivity { } }); } else { - if (!FileUtils.isValidFilePath(this, FileUtils.getPath(this, _content_describer), false)) { - DialogUtils.oneDialog(this, - getString(R.string.problem_has_been_detected), - getString(R.string.invalid_file_path_content), - getString(R.string.ok), - true, - R.drawable.warning_48px, - true, - null, - null); - return; - } - ProgressDialog progressDialog1 = new ProgressDialog(this); progressDialog1.show(); new Thread(() -> { - File selectedFilePath = new File(getPath(_content_describer)); + String path = getPath(_content_describer); runOnUiThread(() -> { progressDialog1.reset(); - binding.drive.setText(selectedFilePath.getPath()); - binding.driveField.setEndIconDrawable(R.drawable.more_vert_24px); + + if (!FileUtils.isValidFilePath(this, path, false)) { + DialogUtils.oneDialog(this, + getString(R.string.problem_has_been_detected), + getString(R.string.invalid_file_path_content), + getString(R.string.ok), + true, + R.drawable.warning_48px, + true, + null, + null); + } else { + binding.drive.setText(path); + binding.driveField.setEndIconDrawable(R.drawable.more_vert_24px); + } }); }).start(); } @@ -1121,7 +1121,7 @@ public class VMCreatorActivity extends AppCompatActivity { binding.qemu.setText(Objects.requireNonNull(getIntent().getStringExtra("romextra")).replaceAll(Objects.requireNonNull(getIntent().getStringExtra("finalromfilename")), "\"" + _getDiskFile + "\"")); } else { binding.drive.setText(_getDiskFile); - binding.qemu.setText(VmFileManager.textMarkToPath(vmID, Objects.requireNonNull(getIntent().getStringExtra("romextra")))); + binding.qemu.setText(VmFileManager.textMarkToPath(this, vmID, Objects.requireNonNull(getIntent().getStringExtra("romextra")))); } } @@ -1204,11 +1204,13 @@ public class VMCreatorActivity extends AppCompatActivity { } if (VmFileManager.isCreateCommandConfigFileExists(vmID)) { - FileUtils.writeToFile(VmFileManager.getPath(vmID), VmFileManager.CREATE_COMMAND_CONFIG_FILE_NAME, VmFileManager.textMarkToPath(vmID, FileUtils.readAFile(VmFileManager.getCreateCommandConfigFile(vmID)))); + FileUtils.writeToFile(VmFileManager.getPath(vmID), VmFileManager.CREATE_COMMAND_CONFIG_FILE_NAME, VmFileManager.textMarkToPath(this, vmID, FileUtils.readAFile(VmFileManager.getCreateCommandConfigFile(vmID)))); } if (VmFileManager.isSnapshotShExists(vmID)) { - FileUtils.writeToFile(VmFileManager.getPath(vmID), VmFileManager.SNAPSHOT_SH_FILE_NAME, VmFileManager.textMarkToPath(vmID, FileUtils.readAFile(VmFileManager.getSnapshotSh(vmID)))); + String snapshotParams = FileUtils.readAFile(VmFileManager.getSnapshotSh(vmID)); + if (snapshotParams.isEmpty()) return; + FileUtils.writeToFile(VmFileManager.getPath(vmID), VmFileManager.SNAPSHOT_SH_FILE_NAME, VmFileManager.textMarkToPath(this, vmID, snapshotParams)); } } diff --git a/app/src/main/java/com/vectras/vm/manager/VmFileManager.java b/app/src/main/java/com/vectras/vm/manager/VmFileManager.java index c2a89e6..d4a317c 100644 --- a/app/src/main/java/com/vectras/vm/manager/VmFileManager.java +++ b/app/src/main/java/com/vectras/vm/manager/VmFileManager.java @@ -21,6 +21,8 @@ public class VmFileManager { public static final String CREATE_COMMAND_CONFIG_FILE_NAME = "cqcm.json"; public static final String LOG_FILE_NAME = "vm.log"; public static final String TEXT_MARK_VM_PATH = "OhnoIjustrealizeditsmidnightandIstillhavetodothis"; + public static final String TEXT_MARK_EXTERNAL_DATA_PATH = "%external_data%"; + public static final String TEXT_MARK_VM_TEMP_PATH = "%vm_temp%"; public static final String HIDE_VM_SUFFIX = "_"; @@ -198,11 +200,15 @@ public class VmFileManager { return VmFileManager.getPath(vmId, CREATE_COMMAND_CONFIG_FILE_NAME); } - public static String textMarkToPath(String vmId, String content) { - return content.replace(TEXT_MARK_VM_PATH, getPath(vmId)); + public static String textMarkToPath(Context context, String vmId, String content) { + return content.replace(TEXT_MARK_VM_PATH, getPath(vmId)) + .replace(TEXT_MARK_VM_TEMP_PATH, getTempPath(context, vmId)) + .replace(TEXT_MARK_EXTERNAL_DATA_PATH, AppConfig.datadirpath(context) + "/"); } - public static String pathToTextMark(String vmId, String content) { - return content.replace(getPath(vmId), TEXT_MARK_VM_PATH); + public static String pathToTextMark(Context context, String vmId, String content) { + return content.replace(getPath(vmId), TEXT_MARK_VM_PATH) + .replace(getTempPath(context, vmId), TEXT_MARK_VM_TEMP_PATH) + .replace(AppConfig.datadirpath(context) + "/", TEXT_MARK_EXTERNAL_DATA_PATH); } } diff --git a/web/data/UpdateConfig.json b/web/data/UpdateConfig.json index 181901c..fb88d1b 100644 --- a/web/data/UpdateConfig.json +++ b/web/data/UpdateConfig.json @@ -1,15 +1,15 @@ { - "versionCode":"104", - "versionName":"4.0.0", + "versionCode":"114", + "versionName":"4.1.0", "size": "45 MB", "url": "https://github.com/xoureldeen/Vectras-VM-Android/releases", - "Message": "

4.0.0

\nBugs fixed.", + "Message": "

4.1.0

\nBugs fixed.", "cancellable": true, - "versionCodeBeta":"113", - "versionNameBeta":"4.0.9", - "versionNameBetas":"4.0.0,4.0.1,4.0.2,4.0.3,4.0.4,4.0.5,4.0.6,4.0.7,4.0.8,4.0.9", + "versionCodeBeta":"114", + "versionNameBeta":"4.1.0", + "versionNameBetas":"4.0.0,4.0.1,4.0.2,4.0.3,4.0.4,4.0.5,4.0.6,4.0.7,4.0.8,4.0.9,4.1.0", "sizeBeta": "45 MB", "urlBeta": "https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases", - "MessageBeta": "

4.0.9

Bugs fixed.", + "MessageBeta": "

4.1.0

Bugs fixed.", "cancellableBeta": true }