diff --git a/.idea/other.xml b/.idea/other.xml
deleted file mode 100644
index 104e542..0000000
--- a/.idea/other.xml
+++ /dev/null
@@ -1,329 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ae63deb..0b264e3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -12,7 +12,7 @@ android {
minSdk minApi
targetSdk targetApi
versionCode 20
- versionName "v2.9.4-croissant"
+ versionName "v2.9.4-danishpastry"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
diff --git a/app/src/main/java/com/vectras/vm/CqcmActivity.java b/app/src/main/java/com/vectras/vm/CqcmActivity.java
index fc53398..cea4d48 100644
--- a/app/src/main/java/com/vectras/vm/CqcmActivity.java
+++ b/app/src/main/java/com/vectras/vm/CqcmActivity.java
@@ -13,37 +13,35 @@ import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
import java.io.File;
+import java.util.HashMap;
import java.util.Objects;
public class CqcmActivity extends AppCompatActivity {
private Intent gotoActivity = new Intent();
private Intent openURL = new Intent();
- private String contentJson = "";
- private String contentJsonNow = "";
private Button buttonallow;
- private String vmID = VMManager.idGenerator();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
VectrasApp.prepareDataForAppConfig(this);
if(!VectrasApp.checkpermissionsgranted(this,false)) {
- Log.i("CqcmActivity", "Creating layout...");
setContentView(R.layout.activity_cqcm);
buttonallow = findViewById(R.id.buttonallow);
buttonallow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (shouldShowRequestPermissionRationale(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- Log.i("CqcmActivity", "Start granting access to storage in Settings.");
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
Toast.makeText(getApplicationContext(), getResources().getString(R.string.find_and_allow_access_to_storage_in_settings), Toast.LENGTH_LONG).show();
} else {
- Log.i("CqcmActivity", "Start granting access to storage.");
ActivityCompat.requestPermissions(CqcmActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1000);
}
}
@@ -56,80 +54,73 @@ public class CqcmActivity extends AppCompatActivity {
super.onResume();
Log.i("CqcmActivity", "Checking access to storage...");
if(VectrasApp.checkpermissionsgranted(this,false)) {
- Log.i("CqcmActivity", "Access to storage has been granted.");
- File vDir = new File(AppConfig.maindirpath);
- if (!vDir.exists()) {
- Log.w("CqcmActivity", "The main directory has not been created.");
- boolean wasSuccessful = vDir.mkdirs();
- if (!wasSuccessful) {
- Log.e("CqcmActivity", "Main directory was created unsuccessfully.");
- Toast.makeText(getApplicationContext(), getResources().getString(R.string.cannot_create_VM_at_this_time), Toast.LENGTH_LONG).show();
- return;
- } else {
- Log.i("CqcmActivity", "Main directory created successfully");
- }
- }
- if (!VectrasApp.isFileExists(AppConfig.romsdatajson)) {
- Log.w("CqcmActivity", "roms-data.json file does not exist.");
- VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]");
- Log.i("CqcmActivity", "Successfully created roms-data.json file.");
- }
- if (getIntent().hasExtra("content")) {
- Log.i("CqcmActivity", "Read roms-data.json file.");
- contentJson = VectrasApp.readFile(AppConfig.romsdatajson);
- Log.i("CqcmActivity", "Successfully read roms-data.json file.");
- if (contentJson.isEmpty()) {
- Log.w("CqcmActivity", "The roms-data.json file is empty.");
- contentJson = "[]";
- Log.i("CqcmActivity", "Added raw data to roms-data.json file.");
- }
- if (VectrasApp.checkJSONIsNormalFromString(contentJson)) {
- Log.i("CqcmActivity", "Checked roms-data.json and no errors.");
- if (contentJson.contains("}")) {
- Log.i("CqcmActivity", "The roms-data.json file contains data about the VMs.");
- contentJsonNow = contentJson.replaceAll("]", "," + getIntent().getStringExtra("content").replaceAll("\\}\\]", ",\"vmID\":\"" + vmID + "\"}]"));
- } else {
- Log.i("CqcmActivity", "The roms-data.json file does not contain data about the VMs.");
- contentJsonNow = contentJson.replaceAll("]", Objects.requireNonNull(getIntent().getStringExtra("content")).replaceAll("\\}\\]", ",\"vmID\":\"" + vmID + "\"}]"));
- }
- Log.i("CqcmActivity", "Double check the data has been edited before adding.");
- if (VectrasApp.checkJSONIsNormalFromString(contentJsonNow)) {
- VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", contentJsonNow);
- Log.i("CqcmActivity", "Successfully added new VM to roms-data.json file.");
- // "\}\]" = Fix java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1
- VectrasApp.writeToFile(AppConfig.maindirpath + "roms/" + vmID, "rom-data.json", Objects.requireNonNull(getIntent().getStringExtra("content")).replaceAll("\\}\\]", ",\"vmID\":\"" + vmID + "\"}"));
- Log.i("CqcmActivity", "Successfully created rom-data.json file.");
-
- VectrasApp.writeToFile(AppConfig.maindirpath + "roms/" + vmID, "vmID.txt", vmID);
- Log.i("CqcmActivity", "Successfully created ID for new VM.");
- } else {
- Log.e("CqcmActivity", "Cannot add VM to roms-data.json as it will corrupt the roms-data.json file after adding.");
- Toast.makeText(getApplicationContext(), getResources().getString(R.string.cannot_create_VM_at_this_time), Toast.LENGTH_LONG).show();
- }
- } else {
- Log.e("CqcmActivity", "Unable to add VM to rom-data.json because roms-data.json file has corrupted data from before and needs action before adding VM.");
- Toast.makeText(getApplicationContext(), getResources().getString(R.string.cannot_create_VM_at_this_time), Toast.LENGTH_LONG).show();
- }
- } else {
- Log.e("CqcmActivity", "Unable to add VM to rom-data.json because the required data was not provided. This happens because this activity was not opened properly.");
- Toast.makeText(getApplicationContext(), getResources().getString(R.string.no_data), Toast.LENGTH_LONG).show();
- }
- if(!MainActivity.isActivate) {
- Log.i("CqcmActivity", "Vectras VM is not opening.");
- gotoActivity.setClass(getApplicationContext(), SplashActivity.class);
- startActivity(gotoActivity);
- Log.i("CqcmActivity", "Opened SplashActivity");
- } else {
- Log.i("CqcmActivity", "Vectras VM is opening.");
- openURL.setAction(Intent.ACTION_VIEW);
- openURL.setData(Uri.parse("android-app://com.vectras.vm"));
- startActivity(openURL);
- Log.i("CqcmActivity", "Opened Vectras VM using URL.");
- }
- Log.i("CqcmActivity", "Finished.");
- finish();
- } else {
- Log.w("CqcmActivity", "Access to storage not granted.");
+ startAdd();
}
}
+ private void startAdd() {
+ HashMap mapForCreateNewVM = new HashMap<>();
+ String _map;
+ String imgName = "";
+ String imgIcon = "";
+ String imgPath = "";
+ String imgArch = "";
+ String imgCdrom = "";
+ String imgExtra = "";
+ String vmID = VMManager.idGenerator();
+
+ if (!VectrasApp.isFileExists(AppConfig.romsdatajson)) {
+ VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]");
+ }
+
+ if (VectrasApp.checkJSONIsNormal(AppConfig.romsdatajson)) {
+ if (getIntent().hasExtra("content")) {
+ if (Objects.requireNonNull(getIntent().getStringExtra("content")).endsWith("}]")) {
+ _map = Objects.requireNonNull(getIntent().getStringExtra("content")).substring((int) 0, (int)(Objects.requireNonNull(getIntent().getStringExtra("content")).length() - 1));
+ } else {
+ _map = Objects.requireNonNull(getIntent().getStringExtra("content"));
+ }
+ if (VectrasApp.checkJSONMapIsNormalFromString(_map)) {
+ mapForCreateNewVM = new Gson().fromJson(_map, new TypeToken>(){}.getType());
+ if (mapForCreateNewVM.containsKey("imgName")) {
+ imgName = Objects.requireNonNull(mapForCreateNewVM.get("imgName")).toString();
+ }
+ if (mapForCreateNewVM.containsKey("imgIcon")) {
+ imgIcon = Objects.requireNonNull(mapForCreateNewVM.get("imgIcon")).toString();
+ }
+ if (mapForCreateNewVM.containsKey("imgPath")) {
+ imgPath = Objects.requireNonNull(mapForCreateNewVM.get("imgPath")).toString();
+ }
+ if (mapForCreateNewVM.containsKey("imgArch")) {
+ imgArch = Objects.requireNonNull(mapForCreateNewVM.get("imgArch")).toString();
+ }
+ if (mapForCreateNewVM.containsKey("imgCdrom")) {
+ imgCdrom = Objects.requireNonNull(mapForCreateNewVM.get("imgCdrom")).toString();
+ }
+ if (mapForCreateNewVM.containsKey("imgExtra")) {
+ imgExtra = Objects.requireNonNull(mapForCreateNewVM.get("imgExtra")).toString();
+ }
+ VMManager.createNewVM(imgName, imgIcon, imgPath, imgArch, imgCdrom, imgExtra, vmID);
+ } else {
+ Toast.makeText(getApplicationContext(), "The data for the new virtual machine is corrupted and cannot be created.", Toast.LENGTH_LONG).show();
+ }
+ } else {
+ Toast.makeText(getApplicationContext(), "There is no data about the new virtual machine to create.", Toast.LENGTH_LONG).show();
+ }
+ } else {
+ Toast.makeText(getApplicationContext(), "The virtual machine list data is corrupted and new virtual machines cannot be added right now.", Toast.LENGTH_LONG).show();
+ }
+ if(!MainActivity.isActivate) {
+ Log.i("CqcmActivity", "Vectras VM is not opening.");
+ gotoActivity.setClass(getApplicationContext(), SplashActivity.class);
+ startActivity(gotoActivity);
+ Log.i("CqcmActivity", "Opened SplashActivity");
+ } else {
+ Log.i("CqcmActivity", "Vectras VM is opening.");
+ openURL.setAction(Intent.ACTION_VIEW);
+ openURL.setData(Uri.parse("android-app://com.vectras.vm"));
+ startActivity(openURL);
+ Log.i("CqcmActivity", "Opened Vectras VM using URL.");
+ }
+ finish();
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/vectras/vm/CustomRomActivity.java b/app/src/main/java/com/vectras/vm/CustomRomActivity.java
index f316fc4..5762f5a 100644
--- a/app/src/main/java/com/vectras/vm/CustomRomActivity.java
+++ b/app/src/main/java/com/vectras/vm/CustomRomActivity.java
@@ -954,7 +954,7 @@ public class CustomRomActivity extends AppCompatActivity {
private void importCVBI(String _filepath, String _filename) {
LinearLayout custom = findViewById(R.id.custom);
ImageView ivIcon = findViewById(R.id.ivIcon);
- if (_filepath.endsWith(".cvbi")) {
+ if (_filepath.endsWith(".cvbi") || _filepath.endsWith(".cvbi.zip")) {
//Error code: CR_CVBI1
if (!VectrasApp.isFileExists(_filepath)) {
if (getIntent().hasExtra("addromnow")) {
@@ -1021,19 +1021,19 @@ public class CustomRomActivity extends AppCompatActivity {
if (getIntent().hasExtra("addromnow") && !addromnowdone) {
addromnowdone = true;
title.setText(getIntent().getStringExtra("romname"));
- if (getIntent().getStringExtra("romextra").isEmpty()) {
+ if (Objects.requireNonNull(getIntent().getStringExtra("romextra")).isEmpty()) {
setDefault();
drive.setText(_getDiskFile);
} else {
- if (getIntent().getStringExtra("romextra").contains(getIntent().getStringExtra("finalromfilename"))) {
- qemu.setText(getIntent().getStringExtra("romextra").replaceAll(getIntent().getStringExtra("finalromfilename"), "\"" + _getDiskFile + "\""));
+ if (Objects.requireNonNull(getIntent().getStringExtra("romextra")).contains(getIntent().getStringExtra("finalromfilename"))) {
+ qemu.setText(Objects.requireNonNull(getIntent().getStringExtra("romextra")).replaceAll(getIntent().getStringExtra("finalromfilename"), "\"" + _getDiskFile + "\""));
} else {
drive.setText(_getDiskFile);
qemu.setText(getIntent().getStringExtra("romextra"));
}
}
icon.setText(getIntent().getStringExtra("romicon"));
- if (!getIntent().getStringExtra("romicon").isEmpty()) {
+ if (!Objects.requireNonNull(getIntent().getStringExtra("romicon")).isEmpty()) {
File imgFile = new File(getIntent().getStringExtra("romicon"));
if (imgFile.exists()) {
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
@@ -1041,10 +1041,10 @@ public class CustomRomActivity extends AppCompatActivity {
}
}
} else {
- if (title.getText().toString().isEmpty() || title.getText().toString().equals("New VM")) {
+ if (Objects.requireNonNull(title.getText()).toString().isEmpty() || title.getText().toString().equals("New VM")) {
title.setText(_filename.replace(".cvbi", ""));
}
- if (qemu.getText().toString().isEmpty()) {
+ if (Objects.requireNonNull(qemu.getText()).toString().isEmpty()) {
setDefault();
}
drive.setText(_getDiskFile);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2a714cb..23e022b 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.4 (Croissant)
+ v2.9.4 (Danish pastry)
Stable
Home
Logger
diff --git a/web/data/UpdateConfig.json b/web/data/UpdateConfig.json
index 7cbce8a..9b9187b 100644
--- a/web/data/UpdateConfig.json
+++ b/web/data/UpdateConfig.json
@@ -1,6 +1,6 @@
{
"versionCode":"20",
- "versionName":"v2.9.4,v2.9.4-jellybean,v2.9.4-lemonmeringuepie,v2.9.4-newyorkcheesecake,v2.9.4-oatmealcookie,v2.9.4-apricottart,v2.9.4-biscuit,v2.9.4-croissant",
+ "versionName":"v2.9.4,v2.9.4-jellybean,v2.9.4-lemonmeringuepie,v2.9.4-newyorkcheesecake,v2.9.4-oatmealcookie,v2.9.4-apricottart,v2.9.4-biscuit,v2.9.4-croissant,v2.9.4-danishpastry",
"size": "60 MB",
"url": "https://github.com/xoureldeen/Vectras-VM-Android/releases/v2.9.4",
"Message": "v2.9.4
- Now you can change locale in app settings.
- Now you can access x11 settings.
- New button to set full screen in x11 display.
- Enhanced UI.
- Chinese language by @adk23333
New updates are live!",