diff --git a/app/build.gradle b/app/build.gradle index e70d898..5a4d7d0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk minApi targetSdk targetApi versionCode 21 - versionName "v2.9.5-3dfx-rugelach" + versionName "v2.9.5-3dfx-scone" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } @@ -74,21 +74,21 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'com.google.android.material:material:1.12.0' implementation "androidx.annotation:annotation:1.9.1" - implementation "androidx.core:core:1.15.0" + implementation "androidx.core:core:1.16.0" implementation "androidx.drawerlayout:drawerlayout:1.2.0" implementation "androidx.preference:preference:1.2.1" implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation "androidx.viewpager:viewpager:1.1.0" - implementation platform('com.google.firebase:firebase-bom:33.11.0') + implementation platform('com.google.firebase:firebase-bom:33.13.0') implementation 'com.google.firebase:firebase-analytics' implementation("com.google.firebase:firebase-auth") implementation("com.google.firebase:firebase-database") implementation 'com.google.firebase:firebase-storage' implementation("com.google.android.gms:play-services-auth:21.3.0") implementation("com.google.firebase:firebase-crashlytics") - implementation 'com.google.android.gms:play-services-ads:24.1.0' + implementation 'com.google.android.gms:play-services-ads:24.2.0' implementation 'com.github.bumptech.glide:glide:4.16.0' - implementation 'com.google.guava:guava:33.1.0-jre' + implementation 'com.google.guava:guava:33.2.1-jre' implementation 'com.google.code.gson:gson:2.11.0' implementation 'com.squareup.okhttp3:okhttp:4.12.0' implementation "androidx.window:window:1.3.0" diff --git a/app/src/main/java/android/androidVNC/VncCanvas.java b/app/src/main/java/android/androidVNC/VncCanvas.java index 6dbd3f6..26694e1 100644 --- a/app/src/main/java/android/androidVNC/VncCanvas.java +++ b/app/src/main/java/android/androidVNC/VncCanvas.java @@ -499,7 +499,7 @@ public class VncCanvas extends AppCompatImageView { } catch (Exception e) { throw e; } finally { - if (!com.vectras.vm.VectrasApp.isQemuRunning()) { + if (!com.vectras.vm.VMManager.isQemuRunning()) { Log.v(TAG, "Closing VNC Connection"); rfb.close(); } diff --git a/app/src/main/java/com/vectras/qemu/MainVNCActivity.java b/app/src/main/java/com/vectras/qemu/MainVNCActivity.java index f793912..98e6d41 100644 --- a/app/src/main/java/com/vectras/qemu/MainVNCActivity.java +++ b/app/src/main/java/com/vectras/qemu/MainVNCActivity.java @@ -58,6 +58,8 @@ import com.vectras.vm.*; import com.vectras.vm.Fragment.ControlersOptionsFragment; import com.vectras.vm.Fragment.LoggerDialogFragment; import com.vectras.vm.R; +import com.vectras.vm.utils.ListUtils; +import com.vectras.vm.utils.NetworkUtils; import com.vectras.vm.utils.UIUtils; import com.vectras.vm.widgets.JoystickView; @@ -918,7 +920,7 @@ public class MainVNCActivity extends VncCanvasActivity { } public void onDestroy() { - if (IOApplication.isPortOpen("127.0.0.1", Config.QMPPort, 100) && started) { + if (NetworkUtils.isPortOpen("127.0.0.1", Config.QMPPort, 100) && started) { activity.startActivity(new Intent(activity, MainVNCActivity.class)); } super.onDestroy(); @@ -1452,7 +1454,7 @@ public class MainVNCActivity extends VncCanvasActivity { } private void sendkeydialog() { - VectrasApp.setupSendKeyListForListmap(listmapForSendKey); + ListUtils.setupSendKeyListForListmap(listmapForSendKey); rvLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false); sendkeylist.setAdapter(new Recyclerview1Adapter(listmapForSendKey)); sendkeylist.setLayoutManager(rvLayoutManager); @@ -1462,9 +1464,9 @@ public class MainVNCActivity extends VncCanvasActivity { private void isQMPPortOpening() { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); - if (!IOApplication.isPortOpen("127.0.0.1", Config.QMPPort, 100)) { + if (!NetworkUtils.isPortOpen("127.0.0.1", Config.QMPPort, 100)) { started = false; - VectrasApp.oneDialog(getResources().getString(R.string.there_seems_to_be_no_signal), getResources().getString(R.string.do_you_want_to_exit), true, true, MainVNCActivity.this); + UIUtils.oneDialog(getResources().getString(R.string.there_seems_to_be_no_signal), getResources().getString(R.string.do_you_want_to_exit), true, true, MainVNCActivity.this); } } diff --git a/app/src/main/java/com/vectras/vm/AboutActivity.java b/app/src/main/java/com/vectras/vm/AboutActivity.java index a39a64c..ab148c2 100644 --- a/app/src/main/java/com/vectras/vm/AboutActivity.java +++ b/app/src/main/java/com/vectras/vm/AboutActivity.java @@ -21,6 +21,7 @@ import com.google.android.gms.ads.initialization.OnInitializationCompleteListene import com.google.android.gms.ads.interstitial.InterstitialAd; import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback; import com.vectras.vm.adapters.GithubUserAdapter; +import com.vectras.vm.utils.SimpleAnimations; import com.vectras.vm.utils.UIUtils; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; @@ -55,9 +56,9 @@ public class AboutActivity extends AppCompatActivity implements View.OnClickList @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_about); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -85,7 +86,6 @@ public class AboutActivity extends AppCompatActivity implements View.OnClickList //AdView mAdView = findViewById(R.id.adView); //AdRequest adRequest = new AdRequest.Builder().build(); //mAdView.loadAd(adRequest); - VectrasApp.prepareDataForAppConfig(this); FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @@ -160,12 +160,12 @@ public class AboutActivity extends AppCompatActivity implements View.OnClickList } }); - UIController.simpleAnimationScale(findViewById(R.id.card_yagiz), 250); - UIController.simpleTranslationUpToDown(findViewById(R.id.card_yagiz), 250); - UIController.simpleAnimationScale(findViewById(R.id.card_social), 500); - UIController.simpleTranslationUpToDown(findViewById(R.id.card_social), 500); - UIController.simpleAnimationScale(findViewById(R.id.developers), 750); - UIController.simpleTranslationUpToDown(findViewById(R.id.developers), 750); + SimpleAnimations.scale(findViewById(R.id.card_yagiz), 250); + SimpleAnimations.translationUpToDown(findViewById(R.id.card_yagiz), 250); + SimpleAnimations.scale(findViewById(R.id.card_social), 500); + SimpleAnimations.translationUpToDown(findViewById(R.id.card_social), 500); + SimpleAnimations.scale(findViewById(R.id.developers), 750); + SimpleAnimations.translationUpToDown(findViewById(R.id.developers), 750); } @Override diff --git a/app/src/main/java/com/vectras/vm/AppConfig.java b/app/src/main/java/com/vectras/vm/AppConfig.java index 44459fd..ad5aa29 100644 --- a/app/src/main/java/com/vectras/vm/AppConfig.java +++ b/app/src/main/java/com/vectras/vm/AppConfig.java @@ -19,7 +19,8 @@ import java.util.Objects; public class AppConfig { // App Config - public static String vectrasVersion = "2.9.4"; + public static String vectrasVersion = "2.9.5"; + public static int vectrasVersionCode = 21; public static String vectrasWebsite = "https://vectras.vercel.app/"; public static String vectrasWebsiteRaw = "https://raw.githubusercontent.com/xoureldeen/Vectras-VM-Android/refs/heads/master/web/"; public static String bootstrapfileslink = vectrasWebsite + "/data/setupfiles.json"; @@ -58,7 +59,7 @@ public class AppConfig { } // App config - public static String datadirpath(Activity activity) { + public static String datadirpath(Context activity) { File f = new File(activity.getExternalFilesDir("data") + "/Vectras"); return activity.getExternalFilesDir("data") + "/Vectras"; //return FileUtils.getExternalFilesDirectory(activity).getPath(); @@ -81,4 +82,6 @@ public class AppConfig { public static boolean needreinstallsystem = false; + public static String temporaryLastedTerminalOutput = ""; + } diff --git a/app/src/main/java/com/vectras/vm/CqcmActivity.java b/app/src/main/java/com/vectras/vm/CqcmActivity.java index 9ede64d..898b4f0 100644 --- a/app/src/main/java/com/vectras/vm/CqcmActivity.java +++ b/app/src/main/java/com/vectras/vm/CqcmActivity.java @@ -15,6 +15,10 @@ import androidx.core.app.ActivityCompat; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import com.vectras.vm.utils.FileUtils; +import com.vectras.vm.utils.JSONUtils; +import com.vectras.vm.utils.PermissionUtils; +import com.vectras.vm.utils.UIUtils; import java.io.File; import java.util.HashMap; @@ -29,11 +33,10 @@ public class CqcmActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - VectrasApp.prepareDataForAppConfig(this); - if(!VectrasApp.checkpermissionsgranted(this,false)) { - UIController.edgeToEdge(this); + if(!PermissionUtils.storagepermission(this,false)) { + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_cqcm); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); buttonallow = findViewById(R.id.buttonallow); buttonallow.setOnClickListener(new View.OnClickListener() { @Override @@ -55,7 +58,7 @@ public class CqcmActivity extends AppCompatActivity { public void onResume() { super.onResume(); Log.i("CqcmActivity", "Checking access to storage..."); - if(VectrasApp.checkpermissionsgranted(this,false)) { + if(PermissionUtils.storagepermission(this,false)) { if (getIntent().hasExtra("command")) { runCommand(getIntent().getStringExtra("command")); } else { @@ -75,18 +78,18 @@ public class CqcmActivity extends AppCompatActivity { String imgExtra = ""; String vmID = VMManager.idGenerator(); - if (!VectrasApp.isFileExists(AppConfig.romsdatajson)) { - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); + if (!FileUtils.isFileExists(AppConfig.romsdatajson)) { + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); } - if (VectrasApp.checkJSONIsNormal(AppConfig.romsdatajson)) { + if (JSONUtils.isValidFromFile(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)) { + if (JSONUtils.isMapValidFromString(_map)) { mapForCreateNewVM = new Gson().fromJson(_map, new TypeToken>(){}.getType()); if (mapForCreateNewVM.containsKey("imgName")) { imgName = Objects.requireNonNull(mapForCreateNewVM.get("imgName")).toString(); @@ -132,7 +135,6 @@ public class CqcmActivity extends AppCompatActivity { } private void runCommand(String _command) { - VectrasApp.prepareDataForAppConfig(CqcmActivity.this); AppConfig.pendingCommand = _command; if(!MainActivity.isActivate) { diff --git a/app/src/main/java/com/vectras/vm/CustomRomActivity.java b/app/src/main/java/com/vectras/vm/CustomRomActivity.java index 3cf2ca5..7436661 100644 --- a/app/src/main/java/com/vectras/vm/CustomRomActivity.java +++ b/app/src/main/java/com/vectras/vm/CustomRomActivity.java @@ -2,8 +2,6 @@ package com.vectras.vm; import static android.content.Intent.ACTION_OPEN_DOCUMENT; -import static com.vectras.vm.VectrasApp.isFileExists; - import android.Manifest; import android.app.Dialog; import android.content.Context; @@ -55,6 +53,7 @@ import com.vectras.qemu.MainSettingsManager; import com.vectras.vm.Fragment.CreateImageDialogFragment; import com.vectras.vm.MainRoms.DataMainRoms; import com.vectras.vm.logger.VectrasStatus; +import com.vectras.vm.utils.DeviceUtils; import com.vectras.vm.utils.FileUtils; import com.vectras.vm.utils.UIUtils; @@ -87,6 +86,7 @@ import java.util.zip.ZipInputStream; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.vectras.vterm.Terminal; +import com.vectras.vm.utils.PermissionUtils; public class CustomRomActivity extends AppCompatActivity { @@ -157,11 +157,11 @@ public class CustomRomActivity extends AppCompatActivity { // startActivityForResult(intent, 0); //if (mainlayout.getVisibility() == View.VISIBLE) { if (Objects.requireNonNull(title.getText()).toString().isEmpty()) { - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.need_set_name),true, false, activity); + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.need_set_name),true, false, activity); } else if ((!Objects.requireNonNull(drive.getText()).toString().isEmpty()) || (!Objects.requireNonNull(cdrom.getText()).toString().isEmpty())) { checkJsonFile(); } else { - if (VectrasApp.isHaveADisk(Objects.requireNonNull(qemu.getText()).toString())) { + if (VMManager.isHaveADisk(Objects.requireNonNull(qemu.getText()).toString())) { checkJsonFile(); } else { if (qemu.getText().toString().isEmpty()) { @@ -204,9 +204,9 @@ public class CustomRomActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_custom_rom); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); activity = this; Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -335,7 +335,7 @@ public class CustomRomActivity extends AppCompatActivity { }); ad.setButton(Dialog.BUTTON_POSITIVE, getString(R.string.remove), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - VectrasApp.deleteDirectory(drive.getText().toString()); + FileUtils.deleteDirectory(drive.getText().toString()); drive.setText(""); driveLayout.setEndIconDrawable(R.drawable.round_add_24); ad.dismiss(); @@ -392,11 +392,11 @@ public class CustomRomActivity extends AppCompatActivity { @Override public void onClick(View v) { if (Objects.requireNonNull(title.getText()).toString().isEmpty()) { - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.need_set_name),true, false, activity); + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.need_set_name),true, false, activity); } else if ((!Objects.requireNonNull(drive.getText()).toString().isEmpty()) || (!Objects.requireNonNull(cdrom.getText()).toString().isEmpty())) { checkJsonFile(); } else { - if (VectrasApp.isHaveADisk(Objects.requireNonNull(qemu.getText()).toString())) { + if (VMManager.isHaveADisk(Objects.requireNonNull(qemu.getText()).toString())) { checkJsonFile(); } else { if (qemu.getText().toString().isEmpty()) { @@ -465,7 +465,7 @@ public class CustomRomActivity extends AppCompatActivity { if (!thumbnailPath.isEmpty()) return; - VectrasApp.setIconWithName(ivIcon, title.getText().toString()); + VMManager.setIconWithName(ivIcon, title.getText().toString()); } @Override @@ -529,7 +529,7 @@ public class CustomRomActivity extends AppCompatActivity { public void onClick(DialogInterface dialog, int which) { thumbnailPath = ""; ivAddThubnail.setImageResource(R.drawable.round_add_24); - VectrasApp.setIconWithName(ivIcon, Objects.requireNonNull(title.getText()).toString()); + VMManager.setIconWithName(ivIcon, Objects.requireNonNull(title.getText()).toString()); ad.dismiss(); } }); @@ -542,7 +542,7 @@ public class CustomRomActivity extends AppCompatActivity { lineardisclaimer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - VectrasApp.oneDialogNew(getString(R.string.dont_miss_out), getString(R.string.disclaimer_when_using_rom), getString(R.string.i_agree), false, false, CustomRomActivity.this); + UIUtils.oneDialogWithCustomButtonPositive(getString(R.string.dont_miss_out), getString(R.string.disclaimer_when_using_rom), getString(R.string.i_agree), false, false, CustomRomActivity.this); } }); @@ -650,7 +650,6 @@ public class CustomRomActivity extends AppCompatActivity { } } - VectrasApp.prepareDataForAppConfig(activity); } @Override @@ -892,7 +891,7 @@ public class CustomRomActivity extends AppCompatActivity { } } else { - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); startCreateNewVM(); } } @@ -919,7 +918,7 @@ public class CustomRomActivity extends AppCompatActivity { } private void checkpermissions() { - boolean result = VectrasApp.checkpermissionsgranted(activity, true); + boolean result = PermissionUtils.storagepermission(activity, true); } private void startCreateVM() { @@ -1029,18 +1028,18 @@ public class CustomRomActivity extends AppCompatActivity { //activity.startActivity(new Intent(activity, SplashActivity.class)); } if (!previousName.isEmpty() && !title.getText().toString().equals(previousName)) { - if (VectrasApp.isFileExists(AppConfig.vmFolder + previousName + "/vmID.txt")) { - VectrasApp.copyAFile(AppConfig.vmFolder + previousName + "/vmID.txt", AppConfig.vmFolder + vmID + "/vmID.txt"); + if (FileUtils.isFileExists(AppConfig.vmFolder + previousName + "/vmID.txt")) { + FileUtils.copyAFile(AppConfig.vmFolder + previousName + "/vmID.txt", AppConfig.vmFolder + vmID + "/vmID.txt"); } else { - VectrasApp.writeToFile(AppConfig.vmFolder + title.getText().toString(), "/vmID.txt", VMManager.idGenerator()); - VectrasApp.copyAFile(AppConfig.vmFolder + vmID + "/vmID.txt", AppConfig.vmFolder + previousName + "/vmID.txt"); + FileUtils.writeToFile(AppConfig.vmFolder + title.getText().toString(), "/vmID.txt", VMManager.idGenerator()); + FileUtils.copyAFile(AppConfig.vmFolder + vmID + "/vmID.txt", AppConfig.vmFolder + previousName + "/vmID.txt"); } } else { - VectrasApp.writeToFile(AppConfig.vmFolder + title.getText().toString(), "/vmID.txt", VMManager.idGenerator()); + FileUtils.writeToFile(AppConfig.vmFolder + title.getText().toString(), "/vmID.txt", VMManager.idGenerator()); } - if ((!secondVMdirectory.isEmpty()) && VectrasApp.isFileExists(AppConfig.vmFolder + vmID + "/vmID.txt")) { + if ((!secondVMdirectory.isEmpty()) && FileUtils.isFileExists(AppConfig.vmFolder + vmID + "/vmID.txt")) { if (!(AppConfig.vmFolder + title.getText().toString()).equals(secondVMdirectory)) { - VectrasApp.copyAFile(AppConfig.vmFolder + vmID + "/vmID.txt", secondVMdirectory + "/vmID.txt"); + FileUtils.copyAFile(AppConfig.vmFolder + vmID + "/vmID.txt", secondVMdirectory + "/vmID.txt"); } } } @@ -1112,11 +1111,11 @@ public class CustomRomActivity extends AppCompatActivity { ImageView ivIcon = findViewById(R.id.ivIcon); if (_filepath.endsWith(".cvbi") || _filepath.endsWith(".cvbi.zip")) { //Error code: CR_CVBI1 - if (!VectrasApp.isFileExists(_filepath)) { + if (!FileUtils.isFileExists(_filepath)) { if (getIntent().hasExtra("addromnow")) { - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI1), false, true, this); + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI1), false, true, this); } else { - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI1), true, false, this); + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI1), true, false, this); } return; } @@ -1140,7 +1139,10 @@ public class CustomRomActivity extends AppCompatActivity { try { ZipEntry ze; int count; - byte[] buffer = new byte[8192]; + byte[] buffer = new byte[128 * 1024]; + if (DeviceUtils.totalMemoryCapacity(getApplicationContext()) < 4L * 1024 * 1024 * 1024) { + buffer = new byte[64 * 1024]; + } while ((ze = zis.getNextEntry()) != null) { File file = new File(targetDirectory, ze.getName()); File dir = ze.isDirectory() ? file : file.getParentFile(); @@ -1171,135 +1173,7 @@ public class CustomRomActivity extends AppCompatActivity { Runnable runnable = new Runnable() { @Override public void run() { - whenProcessing(false); - custom.setVisibility(View.VISIBLE); - ivIcon.setEnabled(true); - try { - if (!VectrasApp.isFileExists(AppConfig.vmFolder + vmID + "/rom-data.json")) { - String _getDiskFile = VMManager.quickScanDiskFileInFolder(AppConfig.vmFolder + vmID); - if (!_getDiskFile.isEmpty()) { - //Error code: CR_CVBI2 - if (getIntent().hasExtra("addromnow") && !addromnowdone) { - addromnowdone = true; - title.setText(getIntent().getStringExtra("romname")); - if (Objects.requireNonNull(getIntent().getStringExtra("romextra")).isEmpty()) { - setDefault(); - drive.setText(_getDiskFile); - } else { - if (Objects.requireNonNull(getIntent().getStringExtra("romextra")).contains(Objects.requireNonNull(getIntent().getStringExtra("finalromfilename")))) { - qemu.setText(Objects.requireNonNull(getIntent().getStringExtra("romextra")).replaceAll(getIntent().getStringExtra("finalromfilename"), "\"" + _getDiskFile + "\"")); - } else { - drive.setText(_getDiskFile); - qemu.setText(Objects.requireNonNull(getIntent().getStringExtra("romextra")).replaceAll("OhnoIjustrealizeditsmidnightandIstillhavetodothis", AppConfig.vmFolder + vmID + "/")); - } - } - if (!Objects.requireNonNull(getIntent().getStringExtra("romicon")).isEmpty()) { - File imgFile = new File(Objects.requireNonNull(getIntent().getStringExtra("romicon"))); - if (imgFile.exists()) { - thumbnailPath = getIntent().getStringExtra("romicon"); - thumbnailProcessing(); - } - } - } else { - if (Objects.requireNonNull(title.getText()).toString().isEmpty() || title.getText().toString().equals("New VM")) { - title.setText(_filename.replace(".cvbi", "")); - } - if (Objects.requireNonNull(qemu.getText()).toString().isEmpty()) { - setDefault(); - } - drive.setText(_getDiskFile); - VMManager.setArch("X86_64", CustomRomActivity.this); - } - - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI2), true, false, CustomRomActivity.this); - } else { - //Error code: CR_CVBI3 - if (getIntent().hasExtra("addromnow")) { - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI3), false, true, CustomRomActivity.this); - } else { - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI3), true, false, CustomRomActivity.this); - } - } - } else { - JSONObject jObj = new JSONObject(FileUtils.readFromFile(CustomRomActivity.this, new File(AppConfig.vmFolder + vmID + "/rom-data.json"))); - - if (jObj.has("vmID")) { - if (!jObj.isNull("vmID")) { - if (!jObj.getString("vmID").isEmpty()) { - VectrasApp.moveAFile(AppConfig.vmFolder + vmID, AppConfig.vmFolder + jObj.getString("vmID")); - vmID = jObj.getString("vmID"); - } - } - } - - if (jObj.has("title") && !jObj.isNull("title")) { - title.setText(jObj.getString("title")); - } - - if (jObj.has("drive") && !jObj.isNull("drive")) { - if (!jObj.getString("drive").isEmpty()) { - drive.setText(AppConfig.vmFolder + vmID + "/" + jObj.getString("drive")); - } - - } - - if (jObj.has("qemu") && !jObj.isNull("qemu")) { - if (!jObj.getString("qemu").isEmpty()) { - qemu.setText(jObj.getString("qemu").replaceAll("OhnoIjustrealizeditsmidnightandIstillhavetodothis", AppConfig.vmFolder + vmID + "/")); - } - } - - if (jObj.has("icon") && !jObj.isNull("icon")) { - ivAddThubnail.setImageResource(R.drawable.round_edit_24); - thumbnailPath = AppConfig.vmFolder + vmID + "/" + jObj.getString("icon"); - thumbnailProcessing(); - } else { - ivAddThubnail.setImageResource(R.drawable.round_add_24); - VectrasApp.setIconWithName(ivIcon, Objects.requireNonNull(title.getText()).toString()); - } - - if (jObj.has("cdrom") && !jObj.isNull("cdrom")) { - if (!jObj.getString("cdrom").isEmpty()) { - cdrom.setText(AppConfig.vmFolder + vmID + "/" + jObj.getString("cdrom")); - cdromLayout.setEndIconMode(TextInputLayout.END_ICON_CUSTOM); - cdromLayout.setEndIconDrawable(R.drawable.close_24px); - setOnClick(); - } else { - cdromLayout.setEndIconMode(TextInputLayout.END_ICON_NONE); - } - } else { - cdromLayout.setEndIconMode(TextInputLayout.END_ICON_NONE); - } - - if (jObj.has("arch") && !jObj.isNull("arch")) { - VMManager.setArch(jObj.getString("arch"), CustomRomActivity.this); - } else { - VMManager.setArch("x86_64", CustomRomActivity.this); - } - - VectrasApp.moveAFile(AppConfig.vmFolder + _filename.replace(".cvbi", ""), AppConfig.vmFolder + vmID); - - if (!jObj.has("drive") && !jObj.has("cdrom") && !jObj.has("qemu")) { - VectrasApp.oneDialog(getResources().getString(R.string.problem_has_been_detected), getResources().getString(R.string.this_rom_is_missing_too_much_information), true, false, CustomRomActivity.this); - } - - if (!jObj.has("versioncode")) { - VectrasApp.oneDialog(getResources().getString(R.string.problem_has_been_detected), getResources().getString(R.string.this_rom_may_not_be_compatible), true, false, CustomRomActivity.this); - } - - if (jObj.has("author") && !jObj.isNull("author") && jObj.has("desc") && !jObj.isNull("desc")) { - if (jObj.getString("desc").contains("<") && jObj.getString("desc").contains(">")) { - UIUtils.UIAlert(activity, getResources().getString(R.string.from) + ": " + jObj.getString("author"), jObj.getString("desc")); - } else { - VectrasApp.oneDialog(getResources().getString(R.string.from) + ": " + jObj.getString("author"), jObj.getString("desc"), true, false, CustomRomActivity.this); - } - } - } - TextView arch = findViewById(R.id.textArch); - arch.setText(MainSettingsManager.getArch(CustomRomActivity.this)); - } catch (JSONException e) { - throw new RuntimeException(e); - } + afterExtractCVBIFile(_filename); } }; activity.runOnUiThread(runnable); @@ -1318,9 +1192,9 @@ public class CustomRomActivity extends AppCompatActivity { t.start(); } else { if (getIntent().hasExtra("addromnow")) { - VectrasApp.oneDialog(getResources().getString(R.string.problem_has_been_detected), getResources().getString(R.string.format_not_supported_please_select_file_with_format_cvbi), false, true, this); + UIUtils.oneDialog(getResources().getString(R.string.problem_has_been_detected), getResources().getString(R.string.format_not_supported_please_select_file_with_format_cvbi), false, true, this); } else { - VectrasApp.oneDialog(getResources().getString(R.string.problem_has_been_detected), getResources().getString(R.string.format_not_supported_please_select_file_with_format_cvbi), true, false, this); + UIUtils.oneDialog(getResources().getString(R.string.problem_has_been_detected), getResources().getString(R.string.format_not_supported_please_select_file_with_format_cvbi), true, false, this); } } @@ -1459,14 +1333,14 @@ public class CustomRomActivity extends AppCompatActivity { public void onBackPressed() { super.onBackPressed(); if (!created && !modify) { - VectrasApp.deleteDirectory(AppConfig.vmFolder + vmID); + FileUtils.deleteDirectory(AppConfig.vmFolder + vmID); } modify = false; } public void onDestroy() { if (!created && !modify) { - VectrasApp.deleteDirectory(AppConfig.vmFolder + vmID); + FileUtils.deleteDirectory(AppConfig.vmFolder + vmID); } modify = false; super.onDestroy(); @@ -1494,7 +1368,7 @@ public class CustomRomActivity extends AppCompatActivity { ivIcon.setImageBitmap(myBitmap); } else { ivAddThubnail.setImageResource(R.drawable.round_add_24); - VectrasApp.setIconWithName(ivIcon, current.itemName); + VMManager.setIconWithName(ivIcon, current.itemName); } } else { ivAddThubnail.setImageResource(R.drawable.round_add_24); @@ -1513,9 +1387,9 @@ public class CustomRomActivity extends AppCompatActivity { if (!romDir.exists()) { if (!romDir.mkdirs()) { if (getIntent().hasExtra("addromnow")) { - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.unable_to_create_the_directory_to_create_the_vm), false, true, this); + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.unable_to_create_the_directory_to_create_the_vm), false, true, this); } else { - VectrasApp.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.unable_to_create_the_directory_to_create_the_vm), true, false, this); + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.unable_to_create_the_directory_to_create_the_vm), true, false, this); } return false; } else { @@ -1525,4 +1399,137 @@ public class CustomRomActivity extends AppCompatActivity { return true; } } + + private void afterExtractCVBIFile(String _filename) { + LinearLayout custom = findViewById(R.id.custom); + whenProcessing(false); + custom.setVisibility(View.VISIBLE); + ivIcon.setEnabled(true); + try { + if (!FileUtils.isFileExists(AppConfig.vmFolder + vmID + "/rom-data.json")) { + String _getDiskFile = VMManager.quickScanDiskFileInFolder(AppConfig.vmFolder + vmID); + if (!_getDiskFile.isEmpty()) { + //Error code: CR_CVBI2 + if (getIntent().hasExtra("addromnow") && !addromnowdone) { + addromnowdone = true; + title.setText(getIntent().getStringExtra("romname")); + if (Objects.requireNonNull(getIntent().getStringExtra("romextra")).isEmpty()) { + setDefault(); + drive.setText(_getDiskFile); + } else { + if (Objects.requireNonNull(getIntent().getStringExtra("romextra")).contains(Objects.requireNonNull(getIntent().getStringExtra("finalromfilename")))) { + qemu.setText(Objects.requireNonNull(getIntent().getStringExtra("romextra")).replaceAll(getIntent().getStringExtra("finalromfilename"), "\"" + _getDiskFile + "\"")); + } else { + drive.setText(_getDiskFile); + qemu.setText(Objects.requireNonNull(getIntent().getStringExtra("romextra")).replaceAll("OhnoIjustrealizeditsmidnightandIstillhavetodothis", AppConfig.vmFolder + vmID + "/")); + } + } + if (!Objects.requireNonNull(getIntent().getStringExtra("romicon")).isEmpty()) { + File imgFile = new File(Objects.requireNonNull(getIntent().getStringExtra("romicon"))); + if (imgFile.exists()) { + thumbnailPath = getIntent().getStringExtra("romicon"); + thumbnailProcessing(); + } + } + } else { + if (Objects.requireNonNull(title.getText()).toString().isEmpty() || title.getText().toString().equals("New VM")) { + title.setText(_filename.replace(".cvbi", "")); + } + if (Objects.requireNonNull(qemu.getText()).toString().isEmpty()) { + setDefault(); + } + drive.setText(_getDiskFile); + VMManager.setArch("X86_64", CustomRomActivity.this); + } + + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI2), true, false, CustomRomActivity.this); + } else { + //Error code: CR_CVBI3 + if (getIntent().hasExtra("addromnow")) { + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI3), false, true, CustomRomActivity.this); + } else { + UIUtils.oneDialog(getResources().getString(R.string.oops), getResources().getString(R.string.error_CR_CVBI3), true, false, CustomRomActivity.this); + } + } + } else { + JSONObject jObj = new JSONObject(FileUtils.readFromFile(CustomRomActivity.this, new File(AppConfig.vmFolder + vmID + "/rom-data.json"))); + + if (jObj.has("vmID")) { + if (!jObj.isNull("vmID")) { + if (!jObj.getString("vmID").isEmpty()) { + FileUtils.moveAFile(AppConfig.vmFolder + vmID, AppConfig.vmFolder + jObj.getString("vmID")); + vmID = jObj.getString("vmID"); + } + } + } + + if (jObj.has("title") && !jObj.isNull("title")) { + title.setText(jObj.getString("title")); + } + + if (jObj.has("drive") && !jObj.isNull("drive")) { + if (!jObj.getString("drive").isEmpty()) { + drive.setText(AppConfig.vmFolder + vmID + "/" + jObj.getString("drive")); + } + + } + + if (jObj.has("qemu") && !jObj.isNull("qemu")) { + if (!jObj.getString("qemu").isEmpty()) { + qemu.setText(jObj.getString("qemu").replaceAll("OhnoIjustrealizeditsmidnightandIstillhavetodothis", AppConfig.vmFolder + vmID + "/")); + } + } + + if (jObj.has("icon") && !jObj.isNull("icon")) { + ivAddThubnail.setImageResource(R.drawable.round_edit_24); + thumbnailPath = AppConfig.vmFolder + vmID + "/" + jObj.getString("icon"); + thumbnailProcessing(); + } else { + ivAddThubnail.setImageResource(R.drawable.round_add_24); + VMManager.setIconWithName(ivIcon, Objects.requireNonNull(title.getText()).toString()); + } + + if (jObj.has("cdrom") && !jObj.isNull("cdrom")) { + if (!jObj.getString("cdrom").isEmpty()) { + cdrom.setText(AppConfig.vmFolder + vmID + "/" + jObj.getString("cdrom")); + cdromLayout.setEndIconMode(TextInputLayout.END_ICON_CUSTOM); + cdromLayout.setEndIconDrawable(R.drawable.close_24px); + setOnClick(); + } else { + cdromLayout.setEndIconMode(TextInputLayout.END_ICON_NONE); + } + } else { + cdromLayout.setEndIconMode(TextInputLayout.END_ICON_NONE); + } + + if (jObj.has("arch") && !jObj.isNull("arch")) { + VMManager.setArch(jObj.getString("arch"), CustomRomActivity.this); + } else { + VMManager.setArch("x86_64", CustomRomActivity.this); + } + + FileUtils.moveAFile(AppConfig.vmFolder + _filename.replace(".cvbi", ""), AppConfig.vmFolder + vmID); + + if (!jObj.has("drive") && !jObj.has("cdrom") && !jObj.has("qemu")) { + UIUtils.oneDialog(getResources().getString(R.string.problem_has_been_detected), getResources().getString(R.string.this_rom_is_missing_too_much_information), true, false, CustomRomActivity.this); + } + + if (!jObj.has("versioncode")) { + UIUtils.oneDialog(getResources().getString(R.string.problem_has_been_detected), getResources().getString(R.string.this_rom_may_not_be_compatible), true, false, CustomRomActivity.this); + } + + if (jObj.has("author") && !jObj.isNull("author") && jObj.has("desc") && !jObj.isNull("desc")) { + if (jObj.getString("desc").contains("<") && jObj.getString("desc").contains(">")) { + UIUtils.UIAlert(activity, getResources().getString(R.string.from) + ": " + jObj.getString("author"), jObj.getString("desc")); + } else { + UIUtils.oneDialog(getResources().getString(R.string.from) + ": " + jObj.getString("author"), jObj.getString("desc"), true, false, CustomRomActivity.this); + } + } + } + TextView arch = findViewById(R.id.textArch); + arch.setText(MainSettingsManager.getArch(CustomRomActivity.this)); + } catch (JSONException e) { + throw new RuntimeException(e); + } + } } diff --git a/app/src/main/java/com/vectras/vm/DataExplorerActivity.java b/app/src/main/java/com/vectras/vm/DataExplorerActivity.java index f35e93c..e56fe95 100644 --- a/app/src/main/java/com/vectras/vm/DataExplorerActivity.java +++ b/app/src/main/java/com/vectras/vm/DataExplorerActivity.java @@ -97,9 +97,9 @@ public class DataExplorerActivity extends AppCompatActivity { super.onCreate(savedInstanceState); activity = this; - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_data_explorer); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); loadingPb = findViewById(R.id.loadingPb); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); diff --git a/app/src/main/java/com/vectras/vm/EditActivity.java b/app/src/main/java/com/vectras/vm/EditActivity.java index 9e2886b..9487644 100644 --- a/app/src/main/java/com/vectras/vm/EditActivity.java +++ b/app/src/main/java/com/vectras/vm/EditActivity.java @@ -7,6 +7,8 @@ import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; +import com.vectras.vm.utils.UIUtils; + public class EditActivity extends AppCompatActivity { private Button buttondone; @@ -16,9 +18,9 @@ public class EditActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_edit); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); buttondone = findViewById(R.id.materialbutton1); editcontent = findViewById(R.id.edittext1); if (getIntent().hasExtra("content")) { diff --git a/app/src/main/java/com/vectras/vm/ExportRomActivity.java b/app/src/main/java/com/vectras/vm/ExportRomActivity.java index ec5c8ce..57a43f5 100644 --- a/app/src/main/java/com/vectras/vm/ExportRomActivity.java +++ b/app/src/main/java/com/vectras/vm/ExportRomActivity.java @@ -1,7 +1,5 @@ package com.vectras.vm; -import static com.vectras.vm.VectrasApp.getAppInfo; - import android.app.Activity; import android.app.ProgressDialog; import android.content.SharedPreferences; @@ -24,6 +22,7 @@ import androidx.core.view.WindowInsetsCompat; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.vectras.vm.utils.FileUtils; +import com.vectras.vm.utils.PackageUtils; import com.vectras.vm.utils.UIUtils; import org.checkerframework.checker.guieffect.qual.UI; @@ -58,9 +57,9 @@ public class ExportRomActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_export_rom); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); linearone = findViewById(R.id.linearall); linearload = findViewById(R.id.linearload); @@ -143,7 +142,7 @@ public class ExportRomActivity extends AppCompatActivity { listmapForGetData.clear(); mapForGetData.clear(); - listmapForGetData = new Gson().fromJson(VectrasApp.readFile(AppConfig.romsdatajson), new TypeToken>>(){}.getType()); + listmapForGetData = new Gson().fromJson(FileUtils.readAFile(AppConfig.romsdatajson), new TypeToken>>(){}.getType()); getRomPath = AppConfig.vmFolder + Objects.requireNonNull(listmapForGetData.get(pendingPosition).get("vmID")).toString() + "/"; @@ -205,10 +204,9 @@ public class ExportRomActivity extends AppCompatActivity { mapForGetData.put("desc", editdesc.getText().toString()); } - PackageInfo pinfo = getAppInfo(getApplicationContext()); - mapForGetData.put("versioncode", pinfo.versionCode); + mapForGetData.put("versioncode", PackageUtils.getThisVersionCode(getApplicationContext())); - VectrasApp.writeToFile(new File(String.valueOf(getApplicationContext().getExternalFilesDir("data"))).getPath(), "rom-data.json", new Gson().toJson(mapForGetData)); + FileUtils.writeToFile(new File(String.valueOf(getApplicationContext().getExternalFilesDir("data"))).getPath(), "rom-data.json", new Gson().toJson(mapForGetData)); Thread t = new Thread() { @Override diff --git a/app/src/main/java/com/vectras/vm/ImagePrvActivity.java b/app/src/main/java/com/vectras/vm/ImagePrvActivity.java index c714217..d20c41e 100644 --- a/app/src/main/java/com/vectras/vm/ImagePrvActivity.java +++ b/app/src/main/java/com/vectras/vm/ImagePrvActivity.java @@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity; import com.bumptech.glide.Glide; import com.vectras.vm.R; +import com.vectras.vm.utils.UIUtils; public class ImagePrvActivity extends AppCompatActivity { public static String linkIv; @@ -15,9 +16,9 @@ public class ImagePrvActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.iv_prv); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); ivPrv = findViewById(R.id.ivPrv); Glide.with(this).load(linkIv).into(ivPrv); } diff --git a/app/src/main/java/com/vectras/vm/MainActivity.java b/app/src/main/java/com/vectras/vm/MainActivity.java index c0ecc0a..46ea424 100644 --- a/app/src/main/java/com/vectras/vm/MainActivity.java +++ b/app/src/main/java/com/vectras/vm/MainActivity.java @@ -6,9 +6,9 @@ import static android.os.Build.VERSION.SDK_INT; import com.termux.app.TermuxService; import static com.vectras.vm.VectrasApp.getApp; -import static com.vectras.vm.VectrasApp.getAppInfo; import static com.vectras.vm.utils.LibraryChecker.isPackageInstalled2; import static com.vectras.vm.utils.UIUtils.UIAlert; +import com.vectras.vm.utils.PermissionUtils; import android.androidVNC.androidVNC; import android.app.ActivityManager; @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; @@ -86,6 +87,7 @@ import com.vectras.vm.logger.VectrasStatus; import com.vectras.vm.utils.AppUpdater; import com.vectras.vm.utils.FileUtils; import com.vectras.vm.utils.LibraryChecker; +import com.vectras.vm.utils.PackageUtils; import com.vectras.vm.utils.UIUtils; import com.vectras.vterm.Terminal; @@ -150,7 +152,6 @@ public class MainActivity extends AppCompatActivity { RamInfo.activity = this; setContentView(R.layout.activity_main); isActivate = true; - VectrasApp.prepareDataForAppConfig(activity); setupFolders(); NotificationManager notificationManager = (NotificationManager) activity.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); @@ -745,9 +746,8 @@ public class MainActivity extends AppCompatActivity { try { if (!result.contains("Error on getting data")) { final JSONObject obj = new JSONObject(result); - PackageInfo pinfo = getAppInfo(getApplicationContext()); - int versionCode = pinfo.versionCode; - String versionName = pinfo.versionName; + int versionCode = PackageUtils.getThisVersionCode(getApplicationContext()); + String versionName = PackageUtils.getThisVersionName(getApplicationContext()); String versionNameonUpdate; if (obj.getString("versionNameBetas").equals(versionName) && !MainSettingsManager.getcheckforupdatesfromthebetachannel(activity) && !MainSettingsManager.getDontShowAgainJoinBetaUpdateChannelDialog(activity)) { @@ -886,7 +886,8 @@ public class MainActivity extends AppCompatActivity { mRVMainRoms = (RecyclerView) activity.findViewById(R.id.mRVMainRoms); mMainAdapter = new AdapterMainRoms(MainActivity.activity, data); mRVMainRoms.setAdapter(mMainAdapter); - mRVMainRoms.setLayoutManager(new GridLayoutManager(MainActivity.activity, 2)); + int spanCount = activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE ? 3 : 2; + mRVMainRoms.setLayoutManager(new GridLayoutManager(MainActivity.activity, spanCount)); } catch (JSONException e) { } } @@ -917,14 +918,14 @@ public class MainActivity extends AppCompatActivity { alertDialog.setMessage(getResources().getString(R.string.all_running_vms_will_be_forcibly_shut_down)); alertDialog.setCancelable(true); alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.kill_all), (dialog, which) -> { - VectrasApp.killallqemuprocesses(getApplicationContext()); + VMManager.killallqemuprocesses(getApplicationContext()); }); alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(R.string.cancel), (dialog, which) -> { }); alertDialog.show(); } else if (id == R.id.backtothedisplay) { - if (VectrasApp.isQemuRunning()) { + if (VMManager.isQemuRunning()) { if (MainSettingsManager.getVmUi(activity).equals("VNC")) activity.startActivity(new Intent(activity, MainVNCActivity.class)); else if (MainSettingsManager.getVmUi(activity).equals("X11")) @@ -991,11 +992,11 @@ public class MainActivity extends AppCompatActivity { romDir.mkdirs(); if (!VMManager.isthiscommandsafe(env, activity.getApplicationContext())) { - VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected) + " " + activity.getResources().getString(R.string.reason) + ": " + VMManager.latestUnsafeCommandReason, true, false, activity); + UIUtils.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected) + " " + activity.getResources().getString(R.string.reason) + ": " + VMManager.latestUnsafeCommandReason, true, false, activity); return; } - if (VectrasApp.isThisVMRunning(itemExtra, itemPath)) { + if (VMManager.isThisVMRunning(itemExtra, itemPath)) { Toast.makeText(activity, "This VM is already running.", Toast.LENGTH_LONG).show(); if (MainSettingsManager.getVmUi(activity).equals("VNC")) activity.startActivity(new Intent(activity, MainVNCActivity.class)); @@ -1199,11 +1200,11 @@ public class MainActivity extends AppCompatActivity { if (!AppConfig.pendingCommand.isEmpty()) { if (!VMManager.isthiscommandsafe(AppConfig.pendingCommand, getApplicationContext())) { AppConfig.pendingCommand = ""; - VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected) + " " + activity.getResources().getString(R.string.reason) + ": " + VMManager.latestUnsafeCommandReason, true, false, activity); + UIUtils.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected) + " " + activity.getResources().getString(R.string.reason) + ": " + VMManager.latestUnsafeCommandReason, true, false, activity); } else { if (AppConfig.pendingCommand.startsWith("qemu-img")) { if (!VMManager.isthiscommandsafeimg(AppConfig.pendingCommand, getApplicationContext())) { - VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.size_too_large_try_qcow2_format), true, false, activity); + UIUtils.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.size_too_large_try_qcow2_format), true, false, activity); } else { Terminal _vterm = new Terminal(MainActivity.this); _vterm.executeShellCommand2(AppConfig.pendingCommand, false, MainActivity.activity); @@ -1443,13 +1444,13 @@ public class MainActivity extends AppCompatActivity { } private void errorjsondialog() { - if (VectrasApp.isFileExists(AppConfig.romsdatajson)) { + if (FileUtils.isFileExists(AppConfig.romsdatajson)) { if (VMManager.isRomsDataJsonNormal(true, MainActivity.this)) { loadDataVbi(); mdatasize(); } } else { - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); loadDataVbi(); mdatasize(); } @@ -1500,7 +1501,7 @@ public class MainActivity extends AppCompatActivity { } private void checkpermissions() { - if (VectrasApp.checkpermissionsgranted(activity, true)) { + if (PermissionUtils.storagepermission(activity, true)) { errorjsondialog(); } } @@ -1518,7 +1519,7 @@ public class MainActivity extends AppCompatActivity { alertDialog.setMessage(getResources().getString(R.string.all_running_vms_will_be_forcibly_shut_down)); alertDialog.setCancelable(true); alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.kill_all), (dialog, which) -> { - VectrasApp.killallqemuprocesses(getApplicationContext()); + VMManager.killallqemuprocesses(getApplicationContext()); }); alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(R.string.cancel), (dialog, which) -> { diff --git a/app/src/main/java/com/vectras/vm/MainRoms/AdapterMainRoms.java b/app/src/main/java/com/vectras/vm/MainRoms/AdapterMainRoms.java index a277e39..eeccc88 100644 --- a/app/src/main/java/com/vectras/vm/MainRoms/AdapterMainRoms.java +++ b/app/src/main/java/com/vectras/vm/MainRoms/AdapterMainRoms.java @@ -104,7 +104,7 @@ public class AdapterMainRoms extends RecyclerView.Adapter { - if (VectrasApp.isAppInstalled("com.termux", getApplicationContext())) { + if (PackageUtils.isInstalled("com.termux", getApplicationContext())) { AlertDialog alertDialog = new AlertDialog.Builder(Minitools.this, R.style.MainDialogTheme).create(); alertDialog.setTitle(getResources().getString(R.string.setup_sound)); alertDialog.setMessage(getResources().getString(R.string.setup_sound_guide_content)); @@ -149,7 +154,7 @@ public class Minitools extends AppCompatActivity { alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.continuetext), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { VMManager.restoreVMs(); - VectrasApp.oneDialog(getResources().getString(R.string.done), getResources().getString(R.string.restored) + " " + String.valueOf(VMManager.restoredVMs) + ".", true, false, Minitools.this); + UIUtils.oneDialog(getResources().getString(R.string.done), getResources().getString(R.string.restored) + " " + String.valueOf(VMManager.restoredVMs) + ".", true, false, Minitools.this); restore.setVisibility(GONE); } }); @@ -167,13 +172,13 @@ public class Minitools extends AppCompatActivity { alertDialog.setMessage(getResources().getString(R.string.delete_all_vm_content)); alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.delete_all), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - VectrasApp.killallqemuprocesses(getApplicationContext()); - VectrasApp.deleteDirectory(AppConfig.vmFolder); - VectrasApp.deleteDirectory(AppConfig.recyclebin); - VectrasApp.deleteDirectory(AppConfig.romsdatajson); + VMManager.killallqemuprocesses(getApplicationContext()); + FileUtils.deleteDirectory(AppConfig.vmFolder); + FileUtils.deleteDirectory(AppConfig.recyclebin); + FileUtils.deleteDirectory(AppConfig.romsdatajson); File vDir = new File(AppConfig.maindirpath); vDir.mkdirs(); - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); cleanup.setVisibility(GONE); restore.setVisibility(GONE); deleteallvm.setVisibility(GONE); @@ -194,11 +199,11 @@ public class Minitools extends AppCompatActivity { alertDialog.setMessage(getResources().getString(R.string.delete_all_content)); alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.delete_all), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - VectrasApp.killallqemuprocesses(getApplicationContext()); - VectrasApp.deleteDirectory(AppConfig.maindirpath); + VMManager.killallqemuprocesses(getApplicationContext()); + FileUtils.deleteDirectory(AppConfig.maindirpath); File vDir = new File(AppConfig.maindirpath); vDir.mkdirs(); - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); cleanup.setVisibility(GONE); restore.setVisibility(GONE); deleteallvm.setVisibility(GONE); @@ -222,10 +227,10 @@ public class Minitools extends AppCompatActivity { public void onClick(DialogInterface dialog, int which) { MainActivity.isActivate = false; AppConfig.needreinstallsystem = true; - VectrasApp.killallqemuprocesses(Minitools.this); - VectrasApp.deleteDirectory(getFilesDir().getAbsolutePath() + "/data"); - VectrasApp.deleteDirectory(getFilesDir().getAbsolutePath() + "/distro"); - VectrasApp.deleteDirectory(getFilesDir().getAbsolutePath() + "/usr"); + VMManager.killallqemuprocesses(Minitools.this); + FileUtils.deleteDirectory(getFilesDir().getAbsolutePath() + "/data"); + FileUtils.deleteDirectory(getFilesDir().getAbsolutePath() + "/distro"); + FileUtils.deleteDirectory(getFilesDir().getAbsolutePath() + "/usr"); Intent intent = new Intent(); intent.setClass(Minitools.this, SetupQemuActivity.class); startActivity(intent); @@ -245,7 +250,7 @@ public class Minitools extends AppCompatActivity { 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); + CommandUtils.run(selectedMirrorCommand + "&& exit", false, Minitools.this); } @Override @@ -271,7 +276,7 @@ public class Minitools extends AppCompatActivity { } private void setupSpiner() { - VectrasApp.setupMirrorListForListmap(listmapForSelectMirrors); + ListUtils.setupMirrorListForListmap(listmapForSelectMirrors); spinnerselectmirror.setAdapter(new SpinnerSelectMirrorAdapter(listmapForSelectMirrors)); spinnerselectmirror.setSelection(MainSettingsManager.getSelectedMirror(Minitools.this)); @@ -320,9 +325,9 @@ public class Minitools extends AppCompatActivity { String apkLoaderAssetPath = "bootstrap/loader.apk"; String apkLoaderextractedFilePath = TermuxService.PREFIX_PATH + "/libexec/termux-x11/loader.apk"; - VectrasApp.deleteDirectory(apkLoaderextractedFilePath); + FileUtils.deleteDirectory(apkLoaderextractedFilePath); if (copyAssetToFile(apkLoaderAssetPath, apkLoaderextractedFilePath)) { - VectrasApp.copyAFile(TermuxService.PREFIX_PATH + "/libexec/termux-x11/loader.apk", AppConfig.maindirpath); + FileUtils.copyAFile(TermuxService.PREFIX_PATH + "/libexec/termux-x11/loader.apk", AppConfig.maindirpath); } } diff --git a/app/src/main/java/com/vectras/vm/ReceiveRomFileActivity.java b/app/src/main/java/com/vectras/vm/ReceiveRomFileActivity.java index 0c7c04a..a45a704 100644 --- a/app/src/main/java/com/vectras/vm/ReceiveRomFileActivity.java +++ b/app/src/main/java/com/vectras/vm/ReceiveRomFileActivity.java @@ -17,14 +17,17 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Objects; +import com.vectras.vm.utils.UIUtils; +import com.vectras.vm.utils.PermissionUtils; + public class ReceiveRomFileActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (VectrasApp.checkpermissionsgranted(this, false)) { - UIController.edgeToEdge(this); + if (PermissionUtils.storagepermission(this, false)) { + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_cqcm); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); Button buttonallow; buttonallow = findViewById(R.id.buttonallow); buttonallow.setOnClickListener(v -> { @@ -43,7 +46,7 @@ public class ReceiveRomFileActivity extends AppCompatActivity { @Override public void onResume() { super.onResume(); - if (VectrasApp.checkpermissionsgranted(this, false)) { + if (PermissionUtils.storagepermission(this, false)) { String filesDir = getFilesDir().getAbsolutePath(); if ((new File(filesDir, "/distro/usr/local/bin/qemu-system-x86_64").exists()) || (new File(filesDir, "/distro/usr/bin/qemu-system-x86_64").exists())) { Intent intent = getIntent(); diff --git a/app/src/main/java/com/vectras/vm/RomInfo.java b/app/src/main/java/com/vectras/vm/RomInfo.java index 0368516..ad0acd1 100644 --- a/app/src/main/java/com/vectras/vm/RomInfo.java +++ b/app/src/main/java/com/vectras/vm/RomInfo.java @@ -25,6 +25,7 @@ import androidx.core.view.WindowInsetsCompat; import com.bumptech.glide.Glide; import com.vectras.qemu.MainSettingsManager; import com.vectras.vm.utils.FileUtils; +import com.vectras.vm.utils.UIUtils; import java.io.File; import java.util.Objects; @@ -38,7 +39,7 @@ public class RomInfo extends AppCompatActivity { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_rom_info); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); ImageView ivIcon; TextView textName; @@ -135,7 +136,7 @@ public class RomInfo extends AppCompatActivity { } startActivity(intent); } else { - VectrasApp.oneDialog(getString(R.string.problem_has_been_detected), getString(R.string.please_select) + " " + getIntent().getStringExtra("filename"), true, false, this); + UIUtils.oneDialog(getString(R.string.problem_has_been_detected), getString(R.string.please_select) + " " + getIntent().getStringExtra("filename"), true, false, this); } } diff --git a/app/src/main/java/com/vectras/vm/RomsManagerActivity.java b/app/src/main/java/com/vectras/vm/RomsManagerActivity.java index 23b6789..f9b20a2 100644 --- a/app/src/main/java/com/vectras/vm/RomsManagerActivity.java +++ b/app/src/main/java/com/vectras/vm/RomsManagerActivity.java @@ -196,7 +196,6 @@ public class RomsManagerActivity extends AppCompatActivity { activity = this; StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); - VectrasApp.prepareDataForAppConfig(activity); sAvailable = getResources().getString(R.string.available); sUnavailable = getResources().getString(R.string.unavailable); sInstalled = getResources().getString(R.string.installed); @@ -204,9 +203,9 @@ public class RomsManagerActivity extends AppCompatActivity { boolean isAccessed = prefs.getBoolean("isFirstLaunch", false); //if (!isAccessed && !checkConnection(activity)) //UIUtils.UIAlert(activity, "for first time you need internet connection to load app data!", "No internet connection!"); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_roms_manager); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); linearload = findViewById(R.id.linearload); linearnothinghere = findViewById(R.id.linearnothinghere); buttontryagain = findViewById(R.id.buttontryagain); diff --git a/app/src/main/java/com/vectras/vm/SetArchActivity.java b/app/src/main/java/com/vectras/vm/SetArchActivity.java index 61328f6..5fc3dc1 100644 --- a/app/src/main/java/com/vectras/vm/SetArchActivity.java +++ b/app/src/main/java/com/vectras/vm/SetArchActivity.java @@ -14,6 +14,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.cardview.widget.CardView; import com.vectras.qemu.MainSettingsManager; +import com.vectras.vm.utils.UIUtils; public class SetArchActivity extends AppCompatActivity implements View.OnClickListener { @@ -23,9 +24,9 @@ public class SetArchActivity extends AppCompatActivity implements View.OnClickLi protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHandler = new Handler(); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_set_arch); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); activity = this; Button archi386 = findViewById(R.id.archi386); Button archx86_64 = findViewById(R.id.archx86_64); diff --git a/app/src/main/java/com/vectras/vm/SetupQemuActivity.java b/app/src/main/java/com/vectras/vm/SetupQemuActivity.java index bbf666d..1ab1936 100644 --- a/app/src/main/java/com/vectras/vm/SetupQemuActivity.java +++ b/app/src/main/java/com/vectras/vm/SetupQemuActivity.java @@ -47,6 +47,10 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.vectras.qemu.MainSettingsManager; import com.vectras.vm.utils.FileUtils; +import com.vectras.vm.utils.JSONUtils; +import com.vectras.vm.utils.ListUtils; +import com.vectras.vm.utils.UIUtils; +import com.vectras.vm.utils.PermissionUtils; import com.vectras.vterm.view.ZoomableTextView; import java.io.BufferedReader; @@ -108,9 +112,9 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_setup_qemu); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); activity = this; linearload = findViewById(R.id.linearload); @@ -150,7 +154,6 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick setupSpiner(); tarPath = getExternalFilesDir("data") + "/data.tar.gz"; - VectrasApp.prepareDataForAppConfig(activity); spinnerselectmirror.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override @@ -172,7 +175,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick public void onResponse(String tag, String response, HashMap responseHeaders) { linearload.setVisibility(View.GONE); contentJSON = response; - if (VectrasApp.checkJSONMapIsNormalFromString(contentJSON)) { + if (JSONUtils.isMapValidFromString(contentJSON)) { mmap.clear(); mmap= new Gson().fromJson(contentJSON, new TypeToken>(){}.getType()); if(mmap.containsKey("arm64") && mmap.containsKey("x86_64")) { @@ -274,7 +277,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick if (process != null) { process.destroy(); } - //VectrasApp.deleteDirectory(apkLoaderextractedFilePath); + //FileUtils.deleteDirectory(apkLoaderextractedFilePath); //if (!copyAssetToFile(apkLoaderAssetPath, apkLoaderextractedFilePath)) { //errorMessage = "Failed to copy loader.apk file."; //} @@ -739,7 +742,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick private void checkabi() { if (!AppConfig.getSetupFiles().contains("arm64-v8a")) { if (!AppConfig.getSetupFiles().contains("x86_64")) { - VectrasApp.oneDialog(getResources().getString(R.string.warning), getResources().getString(R.string.cpu_not_support_64), true, false, activity); + UIUtils.oneDialog(getResources().getString(R.string.warning), getResources().getString(R.string.cpu_not_support_64), true, false, activity); } } @@ -777,7 +780,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick } private void checkpermissions() { - if (VectrasApp.checkpermissionsgranted(activity, true)) { + if (PermissionUtils.storagepermission(activity, true)) { if (!settingup) { settingup = true; checkabi(); @@ -884,7 +887,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick } private void setupSpiner() { - VectrasApp.setupMirrorListForListmap(listmapForSelectMirrors); + ListUtils.setupMirrorListForListmap(listmapForSelectMirrors); spinnerselectmirror.setAdapter(new SpinnerSelectMirrorAdapter(listmapForSelectMirrors)); spinnerselectmirror.setSelection(MainSettingsManager.getSelectedMirror(activity)); diff --git a/app/src/main/java/com/vectras/vm/SplashActivity.java b/app/src/main/java/com/vectras/vm/SplashActivity.java index b77ae50..f7251e1 100644 --- a/app/src/main/java/com/vectras/vm/SplashActivity.java +++ b/app/src/main/java/com/vectras/vm/SplashActivity.java @@ -39,6 +39,7 @@ import androidx.preference.PreferenceManager; import com.vectras.qemu.MainSettingsManager; import com.vectras.vm.utils.FileUtils; +import com.vectras.vm.utils.UIUtils; import java.io.BufferedInputStream; import java.io.File; @@ -59,15 +60,14 @@ public class SplashActivity extends AppCompatActivity implements Runnable { protected void onCreate(Bundle bundle) { super.onCreate(bundle); activity = this; - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_splash); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); //TextView textversionname; //textversionname = findViewById(R.id.versionname); //PackageInfo pinfo = MainActivity.activity.getAppInfo(getApplicationContext()); //textversionname.setText(pinfo.versionName); - VectrasApp.prepareDataForAppConfig(activity); setupFolders(); SharedPreferences prefs = getSharedPreferences(CREDENTIAL_SHARED_PREF, Context.MODE_PRIVATE); diff --git a/app/src/main/java/com/vectras/vm/StoreActivity.java b/app/src/main/java/com/vectras/vm/StoreActivity.java index c0a0210..dade54e 100644 --- a/app/src/main/java/com/vectras/vm/StoreActivity.java +++ b/app/src/main/java/com/vectras/vm/StoreActivity.java @@ -67,9 +67,9 @@ public class StoreActivity extends AppCompatActivity { @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_store); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); loadingPb = findViewById(R.id.loadingPb); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -78,7 +78,6 @@ public class StoreActivity extends AppCompatActivity { toolbar.setTitle(getString(R.string.app_name)); activity = this; - VectrasApp.prepareDataForAppConfig(activity); //AdView mAdView = findViewById(R.id.adView); //AdRequest adRequest = new AdRequest.Builder().build(); //mAdView.loadAd(adRequest); diff --git a/app/src/main/java/com/vectras/vm/StoreItemActivity.java b/app/src/main/java/com/vectras/vm/StoreItemActivity.java index dc02880..b87e5e6 100644 --- a/app/src/main/java/com/vectras/vm/StoreItemActivity.java +++ b/app/src/main/java/com/vectras/vm/StoreItemActivity.java @@ -68,9 +68,9 @@ public class StoreItemActivity extends AppCompatActivity { protected void onCreate(Bundle bundle) { activity = this; super.onCreate(bundle); - UIController.edgeToEdge(this); + UIUtils.edgeToEdge(this); setContentView(R.layout.activity_store_item); - UIController.setOnApplyWindowInsetsListener(findViewById(R.id.main)); + UIUtils.setOnApplyWindowInsetsListener(findViewById(R.id.main)); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -207,7 +207,6 @@ public class StoreItemActivity extends AppCompatActivity { startActivity(new Intent(activity, ImagePrvActivity.class)); } }); - VectrasApp.prepareDataForAppConfig(activity); } public static final int DIALOG_DOWNLOAD_PROGRESS = 0; diff --git a/app/src/main/java/com/vectras/vm/VMManager.java b/app/src/main/java/com/vectras/vm/VMManager.java index 5515eba..e69b1ed 100644 --- a/app/src/main/java/com/vectras/vm/VMManager.java +++ b/app/src/main/java/com/vectras/vm/VMManager.java @@ -1,7 +1,6 @@ package com.vectras.vm; -import static com.vectras.vm.VectrasApp.isFileExists; -import static com.vectras.vm.VectrasApp.readFile; +import static com.vectras.vm.utils.FileUtils.isFileExists; import android.app.Activity; import android.app.Dialog; @@ -10,6 +9,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.util.Log; +import android.widget.ImageView; import androidx.appcompat.app.AlertDialog; import androidx.recyclerview.widget.GridLayoutManager; @@ -19,7 +19,10 @@ import com.google.gson.reflect.TypeToken; import com.vectras.qemu.Config; import com.vectras.qemu.MainSettingsManager; import com.vectras.vm.MainRoms.AdapterMainRoms; +import com.vectras.vm.utils.FileUtils; +import com.vectras.vm.utils.JSONUtils; import com.vectras.vm.utils.UIUtils; +import com.vectras.vterm.Terminal; import java.io.BufferedWriter; import java.io.File; @@ -59,20 +62,20 @@ public class VMManager { mapForCreateNewVM.put("qmpPort", port); listmapForCreateNewVM.clear(); - listmapForCreateNewVM = new Gson().fromJson(VectrasApp.readFile(AppConfig.romsdatajson), new TypeToken>>(){}.getType()); + listmapForCreateNewVM = new Gson().fromJson(FileUtils.readAFile(AppConfig.romsdatajson), new TypeToken>>(){}.getType()); listmapForCreateNewVM.add(0,mapForCreateNewVM); finalJson = new Gson().toJson(listmapForCreateNewVM); - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", finalJson); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", finalJson); finalJson = new Gson().toJson(mapForCreateNewVM); - VectrasApp.writeToFile(AppConfig.maindirpath + "/roms/" + Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString(), "rom-data.json", finalJson.replace("\\u003d", "=")); - VectrasApp.writeToFile(AppConfig.maindirpath + "/roms/" + Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString(), "vmID.txt", Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString()); + FileUtils.writeToFile(AppConfig.maindirpath + "/roms/" + Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString(), "rom-data.json", finalJson.replace("\\u003d", "=")); + FileUtils.writeToFile(AppConfig.maindirpath + "/roms/" + Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString(), "vmID.txt", Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString()); } public static void editVM(String name, String thumbnail, String drive, String arch, String cdrom, String params, int position) { listmapForCreateNewVM.clear(); - listmapForCreateNewVM = new Gson().fromJson(VectrasApp.readFile(AppConfig.romsdatajson), new TypeToken>>(){}.getType()); + listmapForCreateNewVM = new Gson().fromJson(FileUtils.readAFile(AppConfig.romsdatajson), new TypeToken>>(){}.getType()); mapForCreateNewVM.clear(); mapForCreateNewVM.put("imgName", name); @@ -95,10 +98,10 @@ public class VMManager { listmapForCreateNewVM.set(position,mapForCreateNewVM); finalJson = new Gson().toJson(listmapForCreateNewVM); - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", finalJson); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", finalJson); finalJson = new Gson().toJson(mapForCreateNewVM); - VectrasApp.writeToFile(AppConfig.maindirpath + "/roms/" + Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString(), "rom-data.json", finalJson.replace("\\u003d", "=")); - VectrasApp.writeToFile(AppConfig.maindirpath + "/roms/" + Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString(), "vmID.txt", Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString()); + FileUtils.writeToFile(AppConfig.maindirpath + "/roms/" + Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString(), "rom-data.json", finalJson.replace("\\u003d", "=")); + FileUtils.writeToFile(AppConfig.maindirpath + "/roms/" + Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString(), "vmID.txt", Objects.requireNonNull(mapForCreateNewVM.get("vmID")).toString()); } public static void deleteVMDialog(String _vmName, int _position, Activity _activity) { @@ -108,7 +111,7 @@ public class VMManager { ad.setButton(Dialog.BUTTON_NEGATIVE, _activity.getString(R.string.remove) + " " + _vmName, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { pendingPosition = _position; - pendingJsonContent = VectrasApp.readFile(AppConfig.maindirpath + "roms-data.json"); + pendingJsonContent = FileUtils.readAFile(AppConfig.maindirpath + "roms-data.json"); AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.activity, R.style.MainDialogTheme).create(); alertDialog.setTitle(_activity.getString(R.string.keep_files_question_mark)); @@ -124,8 +127,8 @@ public class VMManager { isKeptSomeFiles = false; deleteVM(); - if (isKeptSomeFiles && VectrasApp.readFile(AppConfig.maindirpath + "roms-data.json").contains("{")) { - VectrasApp.oneDialog(_activity.getString(R.string.keep), _activity.getString(R.string.kept_some_files), true, false, _activity); + if (isKeptSomeFiles && FileUtils.readAFile(AppConfig.maindirpath + "roms-data.json").contains("{")) { + UIUtils.oneDialog(_activity.getString(R.string.keep), _activity.getString(R.string.kept_some_files), true, false, _activity); } } }); @@ -146,7 +149,7 @@ public class VMManager { UIUtils.toastLong(_activity, e.toString()); } UIUtils.toastLong(_activity, _vmName + _activity.getString(R.string.are_removed_successfully)); - if (!VectrasApp.readFile(AppConfig.maindirpath + "roms-data.json").contains("{")) { + if (!FileUtils.readAFile(AppConfig.maindirpath + "roms-data.json").contains("{")) { MainActivity.mdatasize2(); } } @@ -199,7 +202,7 @@ public class VMManager { addAdb = "j"; } else if (randomAbc == 10) { addAdb = "k"; - } else if (randomAbc == 11) { + } else { addAdb = "l"; } return addAdb + String.valueOf((long)(random.nextInt(65535))); @@ -212,11 +215,11 @@ public class VMManager { int _max = 65535; _result = _random.nextInt(_max - _min + 1) + _min; - if (VectrasApp.isFileExists(AppConfig.romsdatajson)) { - if (readFile(AppConfig.romsdatajson).contains("\"qmpPort\":" + _result)) { + if (FileUtils.isFileExists(AppConfig.romsdatajson)) { + if (FileUtils.readAFile(AppConfig.romsdatajson).contains("\"qmpPort\":" + _result)) { _result = _random.nextInt(_max - _min + 1) + _min; } - if (readFile(AppConfig.romsdatajson).contains("\"qmpPort\":" + _result)) { + if (FileUtils.readAFile(AppConfig.romsdatajson).contains("\"qmpPort\":" + _result)) { _result = _random.nextInt(_max - _min + 1) + _min; } } @@ -229,7 +232,7 @@ public class VMManager { listmapForRemoveVM = new Gson().fromJson(pendingJsonContent, new TypeToken>>(){}.getType()); if (listmapForRemoveVM.get(pendingPosition).containsKey("vmID")) { pendingVMID = Objects.requireNonNull(listmapForRemoveVM.get(pendingPosition).get("vmID")).toString(); - VectrasApp.deleteDirectory(Config.getCacheDir()+ "/" + pendingVMID); + FileUtils.deleteDirectory(Config.getCacheDir()+ "/" + pendingVMID); Log.i("VMManager", "deleteVM: ID obtained: " + pendingVMID); } else { Log.e("VMManager", "deleteVM: Cannot get ID."); @@ -241,16 +244,16 @@ public class VMManager { int _startRepeat = 0; String _currentVMIDToScan = ""; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(AppConfig.vmFolder, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(AppConfig.vmFolder, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { if (isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.txt")) { - _currentVMIDToScan = VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt").replace("\n", ""); + _currentVMIDToScan = FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt").replace("\n", ""); if (!_currentVMIDToScan.isEmpty()) { if (_currentVMIDToScan.equals(pendingVMID)) { if (!finalJson.contains(_filelist.get((int)(_startRepeat)))) { - VectrasApp.deleteDirectory(_filelist.get((int)(_startRepeat))); + FileUtils.deleteDirectory(_filelist.get((int)(_startRepeat))); } else { isKeptSomeFiles = true; hideVMID(pendingVMID); @@ -270,15 +273,15 @@ public class VMManager { int _startRepeat = 0; String _currentVMIDToScan = ""; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(AppConfig.vmFolder, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(AppConfig.vmFolder, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { if (isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.txt")) { - _currentVMIDToScan = VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt").replace("\n", ""); + _currentVMIDToScan = FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt").replace("\n", ""); if (!_currentVMIDToScan.isEmpty()) { if (_currentVMIDToScan.equals(_vmID)) { - VectrasApp.moveAFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt", _filelist.get((int)(_startRepeat)) + "/vmID.old.txt"); + FileUtils.moveAFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt", _filelist.get((int)(_startRepeat)) + "/vmID.old.txt"); } } } @@ -301,15 +304,15 @@ public class VMManager { int _startRepeat = 0; String _currentVMIDToScan = ""; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(AppConfig.vmFolder, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(AppConfig.vmFolder, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { if (isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.txt")) { - _currentVMIDToScan = VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt").replace("\n", ""); + _currentVMIDToScan = FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt").replace("\n", ""); if (!_currentVMIDToScan.isEmpty()) { if (_currentVMIDToScan.equals(pendingVMID)) { - VectrasApp.moveAFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt", _filelist.get((int)(_startRepeat)) + "/vmID.old.txt"); + FileUtils.moveAFile(_filelist.get((int)(_startRepeat)) + "/vmID.txt", _filelist.get((int)(_startRepeat)) + "/vmID.old.txt"); } } } @@ -321,17 +324,17 @@ public class VMManager { } public static void cleanUp() { - finalJson = VectrasApp.readFile(AppConfig.romsdatajson); + finalJson = FileUtils.readAFile(AppConfig.romsdatajson); if (!finalJson.isEmpty()) { int _startRepeat = 0; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(AppConfig.vmFolder, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(AppConfig.vmFolder, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { if (!isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.txt")) { if (!finalJson.contains(_filelist.get((int) (_startRepeat)))) { - VectrasApp.deleteDirectory(_filelist.get((int) (_startRepeat))); + FileUtils.deleteDirectory(_filelist.get((int) (_startRepeat))); } } } @@ -347,44 +350,44 @@ public class VMManager { String _result =""; restoredVMs = 0; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(AppConfig.vmFolder, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(AppConfig.vmFolder, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { if (!isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.txt")) { if (isFileExists(_filelist.get((int)(_startRepeat)) + "/rom-data.json")) { - if (VectrasApp.checkJSONMapIsNormalFromString(VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"))) { + if (JSONUtils.isMapValidFromString(FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"))) { if (_resulttemp.contains("}")) { - _resulttemp += "," + VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _resulttemp += "," + FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } else { - _resulttemp = VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _resulttemp = FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } - if (VectrasApp.checkJSONIsNormalFromString(VectrasApp.readFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", _resulttemp + "]"))) { + if (JSONUtils.isValidFromString(FileUtils.readAFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", _resulttemp + "]"))) { if (_result.contains("}")) { - _result += "," + VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _result += "," + FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } else { - _result = VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _result = FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } if (isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt")) { - enableVMID(VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt")); + enableVMID(FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt")); } else { - VectrasApp.writeToFile(_filelist.get((int)(_startRepeat)), "/vmID.txt", VMManager.idGenerator()); + FileUtils.writeToFile(_filelist.get((int)(_startRepeat)), "/vmID.txt", VMManager.idGenerator()); } restoredVMs++; - } else if (VectrasApp.checkJSONIsNormalFromString(VectrasApp.readFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", "," + _resulttemp + "]"))) { + } else if (JSONUtils.isValidFromString(FileUtils.readAFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", "," + _resulttemp + "]"))) { if (_result.contains("}")) { - _result += "," + VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _result += "," + FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } else { - _result = "," + VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _result = "," + FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } if (isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt")) { - enableVMID(VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt")); + enableVMID(FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt")); } else { - VectrasApp.writeToFile(_filelist.get((int)(_startRepeat)), "/vmID.txt", VMManager.idGenerator()); + FileUtils.writeToFile(_filelist.get((int)(_startRepeat)), "/vmID.txt", VMManager.idGenerator()); } restoredVMs++; } else { - Log.i("CqcmActivity", VectrasApp.readFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", _resulttemp + "]")); + Log.i("CqcmActivity", FileUtils.readAFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", _resulttemp + "]")); } } } @@ -393,13 +396,13 @@ public class VMManager { _startRepeat++; if (_startRepeat == _filelist.size()) { if (!_result.isEmpty()) { - if (VectrasApp.checkJSONIsNormalFromString("[" + _result + "]")) { + if (JSONUtils.isValidFromString("[" + _result + "]")) { if (isFileExists(AppConfig.romsdatajson)) { - if (VectrasApp.checkJSONIsNormal(AppConfig.romsdatajson)) { - String _JSONcontent = VectrasApp.readFile(AppConfig.romsdatajson); + if (JSONUtils.isValidFromFile(AppConfig.romsdatajson)) { + String _JSONcontent = FileUtils.readAFile(AppConfig.romsdatajson); String _JSONcontentnew = _JSONcontent.replaceAll("]", _result + "]"); - if (VectrasApp.checkJSONIsNormalFromString(_JSONcontentnew)) { - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", _JSONcontentnew); + if (JSONUtils.isValidFromString(_JSONcontentnew)) { + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", _JSONcontentnew); } else { restoredVMs = 0; } @@ -407,7 +410,7 @@ public class VMManager { restoredVMs = 0; } } else { - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[" + _result + "]"); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[" + _result + "]"); } } else { restoredVMs = 0; @@ -428,34 +431,34 @@ public class VMManager { String _result =""; restoredVMs = 0; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(AppConfig.vmFolder, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(AppConfig.vmFolder, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { if (isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.txt")) { if (isFileExists(_filelist.get((int)(_startRepeat)) + "/rom-data.json")) { - if (VectrasApp.checkJSONMapIsNormalFromString(VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"))) { + if (JSONUtils.isMapValidFromString(FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"))) { if (_resulttemp.contains("}")) { - _resulttemp += "," + VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _resulttemp += "," + FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } else { - _resulttemp = VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _resulttemp = FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } - if (VectrasApp.checkJSONIsNormalFromString(VectrasApp.readFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", _resulttemp + "]"))) { + if (JSONUtils.isValidFromString(FileUtils.readAFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", _resulttemp + "]"))) { if (_result.contains("}")) { - _result += "," + VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _result += "," + FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } else { - _result = VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _result = FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } restoredVMs++; - } else if (VectrasApp.checkJSONIsNormalFromString(VectrasApp.readFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", "," + _resulttemp + "]"))) { + } else if (JSONUtils.isValidFromString(FileUtils.readAFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", "," + _resulttemp + "]"))) { if (_result.contains("}")) { - _result += "," + VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _result += "," + FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } else { - _result = "," + VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); + _result = "," + FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/rom-data.json"); } restoredVMs++; } else { - Log.i("CqcmActivity", VectrasApp.readFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", _resulttemp + "]")); + Log.i("CqcmActivity", FileUtils.readAFile(AppConfig.maindirpath + "/roms-data.json").replaceAll("]", _resulttemp + "]")); } } } @@ -464,13 +467,13 @@ public class VMManager { _startRepeat++; if (_startRepeat == _filelist.size()) { if (!_result.isEmpty()) { - if (VectrasApp.checkJSONIsNormalFromString("[" + _result + "]")) { + if (JSONUtils.isValidFromString("[" + _result + "]")) { if (isFileExists(AppConfig.romsdatajson)) { - if (VectrasApp.checkJSONIsNormal(AppConfig.romsdatajson)) { - String _JSONcontent = VectrasApp.readFile(AppConfig.romsdatajson); + if (JSONUtils.isValidFromFile(AppConfig.romsdatajson)) { + String _JSONcontent = FileUtils.readAFile(AppConfig.romsdatajson); String _JSONcontentnew = _JSONcontent.replaceAll("]", _result + "]"); - if (VectrasApp.checkJSONIsNormalFromString(_JSONcontentnew)) { - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", _JSONcontentnew); + if (JSONUtils.isValidFromString(_JSONcontentnew)) { + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", _JSONcontentnew); } else { restoredVMs = 0; } @@ -478,7 +481,7 @@ public class VMManager { restoredVMs = 0; } } else { - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[" + _result + "]"); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[" + _result + "]"); } } else { restoredVMs = 0; @@ -498,13 +501,13 @@ public class VMManager { return; int _startRepeat = 0; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(AppConfig.vmFolder, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(AppConfig.vmFolder, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { if (isFileExists(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt")) { - if (VectrasApp.readFile(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt").equals(_vmID)) { - VectrasApp.moveAFile(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt", _filelist.get((int)(_startRepeat)) + "/vmID.txt"); + if (FileUtils.readAFile(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt").equals(_vmID)) { + FileUtils.moveAFile(_filelist.get((int)(_startRepeat)) + "/vmID.old.txt", _filelist.get((int)(_startRepeat)) + "/vmID.txt"); } } } @@ -520,16 +523,16 @@ public class VMManager { return; } } - finalJson = VectrasApp.readFile(AppConfig.romsdatajson); + finalJson = FileUtils.readAFile(AppConfig.romsdatajson); if (!finalJson.isEmpty()) { int _startRepeat = 0; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(AppConfig.vmFolder, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(AppConfig.vmFolder, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { - if (!finalJson.contains(Uri.parse(_filelist.get((int) (_startRepeat))).getLastPathSegment())) { - VectrasApp.moveAFile(_filelist.get((int) (_startRepeat)), AppConfig.recyclebin + Uri.parse(_filelist.get((int) (_startRepeat))).getLastPathSegment()); + if (!finalJson.contains(Objects.requireNonNull(Uri.parse(_filelist.get((int) (_startRepeat))).getLastPathSegment()))) { + FileUtils.moveAFile(_filelist.get((int) (_startRepeat)), AppConfig.recyclebin + Uri.parse(_filelist.get((int) (_startRepeat))).getLastPathSegment()); } } _startRepeat++; @@ -542,7 +545,7 @@ public class VMManager { if (!_foderpath.isEmpty()) { int _startRepeat = 0; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(_foderpath, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(_foderpath, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { @@ -561,9 +564,7 @@ public class VMManager { if (_filepath.contains(".")) { String _getFileName = Objects.requireNonNull(Uri.parse(_filepath).getLastPathSegment()).toLowerCase(); String _getFileFormat = _getFileName.substring((int)(_getFileName.lastIndexOf(".") + 1), (int)(_getFileName.length())); - if ("qcow2,img,vhd,vhdx,vdi,qcow,vmdk,vpc".contains(_getFileFormat)){ - return true; - } + return "qcow2,img,vhd,vhdx,vdi,qcow,vmdk,vpc".contains(_getFileFormat); } return false; } @@ -572,7 +573,7 @@ public class VMManager { if (!_foderpath.isEmpty()) { int _startRepeat = 0; ArrayList _filelist = new ArrayList<>(); - VectrasApp.listDir(_foderpath, _filelist); + FileUtils.getAListOfAllFilesAndFoldersInADirectory(_foderpath, _filelist); if (!_filelist.isEmpty()) { for (int _repeat = 0; _repeat < (int)(_filelist.size()); _repeat++) { if (_startRepeat < _filelist.size()) { @@ -591,9 +592,7 @@ public class VMManager { if (_filepath.contains(".")) { String _getFileName = Objects.requireNonNull(Uri.parse(_filepath).getLastPathSegment()).toLowerCase(); String _getFileFormat = _getFileName.substring((int)(_getFileName.lastIndexOf(".") + 1), (int)(_getFileName.length())); - if ("iso".contains(_getFileFormat)){ - return true; - } + return "iso".contains(_getFileFormat); } return false; } @@ -629,9 +628,9 @@ public class VMManager { alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, _activity.getResources().getString(R.string.continuetext), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { MainActivity.isActivate = false; - VectrasApp.deleteDirectory(_activity.getFilesDir().getAbsolutePath() + "/data"); - VectrasApp.deleteDirectory(_activity.getFilesDir().getAbsolutePath() + "/distro"); - VectrasApp.deleteDirectory(_activity.getFilesDir().getAbsolutePath() + "/usr"); + FileUtils.deleteDirectory(_activity.getFilesDir().getAbsolutePath() + "/data"); + FileUtils.deleteDirectory(_activity.getFilesDir().getAbsolutePath() + "/distro"); + FileUtils.deleteDirectory(_activity.getFilesDir().getAbsolutePath() + "/usr"); Intent intent = new Intent(); intent.setClass(_activity, SplashActivity.class); _activity.startActivity(intent); @@ -647,7 +646,7 @@ public class VMManager { return true; } else if (_result.contains(") exists") && _result.contains("drive with bus")) { //Error code: DRIVE_INDEX_0_EXISTS - VectrasApp.oneDialog(_activity.getResources().getString(R.string.problem_has_been_detected), _activity.getResources().getString(R.string.error_DRIVE_INDEX_0_EXISTS), true, false, _activity); + UIUtils.oneDialog(_activity.getResources().getString(R.string.problem_has_been_detected), _activity.getResources().getString(R.string.error_DRIVE_INDEX_0_EXISTS), true, false, _activity); return true; } else if (_result.contains("gtk initialization failed") || _result.contains("x11 not available")) { //Error code: X11_NOT_AVAILABLE @@ -658,7 +657,7 @@ public class VMManager { alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, _activity.getResources().getString(R.string.continuetext), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { MainSettingsManager.setVmUi(_activity, "VNC"); - VectrasApp.oneDialog(_activity.getResources().getString(R.string.done), _activity.getResources().getString(R.string.switched_to_VNC), true, false, _activity); + UIUtils.oneDialog(_activity.getResources().getString(R.string.done), _activity.getResources().getString(R.string.switched_to_VNC), true, false, _activity); } }); alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, _activity.getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() { @@ -670,7 +669,7 @@ public class VMManager { return true; } else if (_result.contains("No such file or directory1")) { //Error code: NO_SUCH_FILE_OR_DIRECTORY - VectrasApp.oneDialog(_activity.getResources().getString(R.string.problem_has_been_detected), _activity.getResources().getString(R.string.error_NO_SUCH_FILE_OR_DIRECTORY), true, false, _activity); + UIUtils.oneDialog(_activity.getResources().getString(R.string.problem_has_been_detected), _activity.getResources().getString(R.string.error_NO_SUCH_FILE_OR_DIRECTORY), true, false, _activity); _activity.stopService(new Intent(_activity, MainService.class)); return true; } else { @@ -680,15 +679,15 @@ public class VMManager { public static boolean isRomsDataJsonNormal(Boolean _needfix, Context _context) { if (isFileExists(AppConfig.romsdatajson)) { - if (!VectrasApp.checkJSONIsNormal(AppConfig.romsdatajson)) { + if (!JSONUtils.isValidFromFile(AppConfig.romsdatajson)) { if (_needfix) { AlertDialog alertDialog = new AlertDialog.Builder(_context, R.style.MainDialogTheme).create(); alertDialog.setTitle(_context.getResources().getString(R.string.oops)); alertDialog.setMessage(_context.getResources().getString(R.string.need_fix_json_before_create)); alertDialog.setCancelable(true); alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, _context.getResources().getString(R.string.continuetext), (dialog, which) -> { - VectrasApp.moveAFile(AppConfig.maindirpath + "roms-data.json", AppConfig.maindirpath + "roms-data.old.json"); - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); + FileUtils.moveAFile(AppConfig.maindirpath + "roms-data.json", AppConfig.maindirpath + "roms-data.old.json"); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); startFixRomsDataJson(); fixRomsDataJsonResult(_context); }); @@ -703,16 +702,16 @@ public class VMManager { return true; } } else { - VectrasApp.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); + FileUtils.writeToFile(AppConfig.maindirpath, "roms-data.json", "[]"); return true; } } public static void fixRomsDataJsonResult(Context _context) { if (restoredVMs == 0) { - VectrasApp.oneDialogWithContext(_context.getString(R.string.done), _context.getString(R.string.roms_data_json_fixed_unsuccessfully),true, _context); + UIUtils.oneDialogWithContext(_context.getString(R.string.done), _context.getString(R.string.roms_data_json_fixed_unsuccessfully),true, _context); } else { - VectrasApp.oneDialogWithContext(_context.getString(R.string.done), _context.getString(R.string.roms_data_json_fixed_successfully),true, _context); + UIUtils.oneDialogWithContext(_context.getString(R.string.done), _context.getString(R.string.roms_data_json_fixed_successfully),true, _context); } MainActivity.loadDataVbi(); MainActivity.mdatasize2(); @@ -778,4 +777,77 @@ public class VMManager { } return true; } + + public static boolean isThisVMRunning(String intemExtra, String itemPath) { + Terminal vterm = new Terminal(MainActivity.activity); + vterm.executeShellCommand2("ps -e", false, MainActivity.activity); + if (AppConfig.temporaryLastedTerminalOutput.contains(intemExtra) && AppConfig.temporaryLastedTerminalOutput.contains(itemPath)) { + Log.d("VMManager.isThisVMRunning", "Yes"); + return true; + } else { + Log.d("VMManager.isThisVMRunning", "No"); + return false; + } + } + + public static boolean isQemuRunning() { + Terminal vterm = new Terminal(MainActivity.activity); + vterm.executeShellCommand2("ps -e", false, MainActivity.activity); + if (AppConfig.temporaryLastedTerminalOutput.contains("qemu-system")) { + Log.d("VMManager.isQemuRunning", "Yes"); + return true; + } else { + Log.d("VMManager.isQemuRunning", "No"); + return false; + } + } + + public static boolean isHaveADisk(String env) { + if (env.contains("-drive") || env.contains("-hda") || env.contains("-hdb") || env.contains("-cdrom") || env.contains("-fda") || env.contains("-fdb")) + return true; + return false; + } + + public static void setIconWithName(ImageView imageview, String name) { + String itemName = name.toLowerCase(); + if (itemName.contains("linux") || itemName.contains("ubuntu") || itemName.contains("debian") || itemName.contains("arch") || itemName.contains("kali")) { + imageview.setImageResource(R.drawable.linux); + } else if (itemName.contains("windows")) { + imageview.setImageResource(R.drawable.windows); + } else if (itemName.contains("macos") || itemName.contains("mac os")) { + imageview.setImageResource(R.drawable.macos); + } else if (itemName.contains("android")) { + imageview.setImageResource(R.drawable.android); + } else { + imageview.setImageResource(R.drawable.no_machine_image); + } + } + + public static void killcurrentqemuprocess(Context context) { + Terminal vterm = new Terminal(context); + String env = "killall -9 "; + switch (MainSettingsManager.getArch(MainActivity.activity)) { + case "ARM64": + env += "qemu-system-aarch64"; + break; + case "PPC": + env += "qemu-system-ppc"; + break; + case "I386": + env += "qemu-system-i386"; + break; + default: + env += "qemu-system-x86_64"; + break; + } + vterm.executeShellCommand2(env, false, MainActivity.activity); + } + + public static void killallqemuprocesses(Context context) { + Terminal vterm = new Terminal(context); + vterm.executeShellCommand2("killall -9 qemu-system-i386", false, MainActivity.activity); + vterm.executeShellCommand2("killall -9 qemu-system-x86_64", false, MainActivity.activity); + vterm.executeShellCommand2("killall -9 qemu-system-aarch64", false, MainActivity.activity); + vterm.executeShellCommand2("killall -9 qemu-system-ppc", false, MainActivity.activity); + } } diff --git a/app/src/main/java/com/vectras/vm/VectrasApp.java b/app/src/main/java/com/vectras/vm/VectrasApp.java index 50acaf7..0f11c7a 100644 --- a/app/src/main/java/com/vectras/vm/VectrasApp.java +++ b/app/src/main/java/com/vectras/vm/VectrasApp.java @@ -39,8 +39,10 @@ import androidx.core.content.res.ResourcesCompat; import com.google.android.material.color.DynamicColors; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import com.vectras.qemu.Config; import com.vectras.qemu.MainSettingsManager; import com.vectras.vm.utils.FileUtils; +import com.vectras.vm.utils.PackageUtils; import com.vectras.vterm.Terminal; import java.io.BufferedReader; @@ -79,11 +81,10 @@ public class VectrasApp extends Application { private static Handler MAIN_HANDLER = new Handler(Looper.getMainLooper()); - public static String TerminalOutput =""; - @Override public void onCreate() { super.onCreate(); + setupAppConfig(getApplicationContext()); vectrasapp = this; CrashHandler.getInstance().registerGlobal(this); CrashHandler.getInstance().registerPart(this); @@ -429,783 +430,15 @@ public class VectrasApp extends Application { } } - public static boolean checkpermissionsgranted(Activity activity, boolean request) { - if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { - return true; - } else { - if (request) { - AlertDialog alertDialog = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); - alertDialog.setTitle(activity.getResources().getString(R.string.allow_permissions)); - alertDialog.setMessage(activity.getResources().getString(R.string.you_need_to_grant_permission_to_access_the_storage_before_use)); - alertDialog.setCancelable(false); - alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, activity.getResources().getString(R.string.allow), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (activity.shouldShowRequestPermissionRationale(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setData(Uri.parse("package:" + activity.getPackageName())); - activity.startActivity(intent); - Toast.makeText(activity, activity.getResources().getString(R.string.find_and_allow_access_to_storage_in_settings), Toast.LENGTH_LONG).show(); - } else { - ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1000); - } - alertDialog.dismiss(); - } - }); - alertDialog.show(); - } - return false; - } - } - - public static boolean checkJSONIsNormal(String _filepath) { - ArrayList> mmap = new ArrayList<>(); - String contentjson = ""; - if (VectrasApp.isFileExists(_filepath)) { - contentjson = readFile(_filepath); - try { - mmap.clear(); - mmap = new Gson().fromJson(contentjson, new TypeToken>>() { - }.getType()); - return true; - } catch (Exception e) { - return false; - } - } else { - return false; - } - } - - public static boolean checkJSONIsNormalFromString(String _content) { - ArrayList> mmap = new ArrayList<>(); - try { - mmap.clear(); - mmap = new Gson().fromJson(_content, new TypeToken>>() { - }.getType()); - return true; - } catch (Exception e) { - return false; - } - } - - public static boolean checkJSONMapIsNormalFromString(String _content) { - HashMap mmap = new HashMap<>(); - try { - mmap.clear(); - mmap= new Gson().fromJson(_content, new TypeToken>(){}.getType()); - return true; - } catch (Exception e) { - return false; - } - } - - public static boolean isFileExists(String filePath) { - File file = new File(filePath.replaceAll("\n", "")); - return file.exists(); - } - - public static String readFile(String filePath) { - StringBuilder content = new StringBuilder(); - try (FileInputStream inputStream = new FileInputStream(filePath); - BufferedReader reader = new BufferedReader(new - InputStreamReader(inputStream))) { - String line; - while ((line = reader.readLine()) != null) { - content.append(line).append("\n"); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - return content.toString(); - - } - - public static void writeToFile(String folderPath, String fileName, String content) { - File vDir = new File(folderPath); - if (!vDir.exists()) { - vDir.mkdirs(); - } - File file = new File(folderPath, fileName); - FileOutputStream outputStream = null; - try { - outputStream = new FileOutputStream(file); - outputStream.write(content.getBytes()); - outputStream.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static void deleteDirectory(String _pathToDelete) { - File _dir = new File(_pathToDelete); - if (_dir.isDirectory()) { - String[] children = _dir.list(); - - if (children == null) { - Log.e("ERROR", "Deletion failed. " + _dir); - return; - } - - for (int i = 0; i < children.length; i++) { - File temp = new File(_dir, children[i]); - deleteDirectory(String.valueOf(temp)); - } - } - boolean success = _dir.delete(); - if (!success) { - Log.e("ERROR", "Deletion failed. " + _dir); - } - } - - public static void copyAFile(String _sourceFile, String _destFile) { - File vDir = new File(_destFile.substring((int)0, (int)(_destFile.lastIndexOf("/")))); - if (!vDir.exists()) { - vDir.mkdirs(); - } - try { - File source = new File(_sourceFile); - File dest = new File(_destFile); - - if (!source.exists()) - { - throw new IOException("Source file not found"); - } - - FileInputStream inStream = new FileInputStream(source); - FileOutputStream outStream = new FileOutputStream(dest); - - byte[] buffer = new byte[1024]; - int length; - while ((length = inStream.read(buffer)) - > 0) { - outStream.write(buffer, 0, length); - } - - inStream.close(); - outStream.close(); - } catch (IOException e) { - - } - - } - - public static void moveAFile(String _from, String _to) { - File oldFile = new File(_from); - File newFile = new File(_to); - - boolean success = oldFile.renameTo(newFile); - if (success) { - Log.d("File", "Done!"); - } else { - Log.e("File", "Failed!"); - } - - } - - public static void listDir(String path, ArrayList list) { - File dir = new File(path); - if (!dir.exists() || dir.isFile()) return; - - File[] listFiles = dir.listFiles(); - if (listFiles == null || listFiles.length <= 0) return; - - if (list == null) return; - list.clear(); - for (File file : listFiles) { - list.add(file.getAbsolutePath()); - } - } - - public static void runACommand(String _command, Activity _activity) { - Terminal vterm = new Terminal(_activity); - vterm.executeShellCommand2(_command, false, _activity); - } - - public static void killallqemuprocesses(Context context) { - Terminal vterm = new Terminal(context); - vterm.executeShellCommand2("killall -9 qemu-system-i386", false, MainActivity.activity); - vterm.executeShellCommand2("killall -9 qemu-system-x86_64", false, MainActivity.activity); - vterm.executeShellCommand2("killall -9 qemu-system-aarch64", false, MainActivity.activity); - vterm.executeShellCommand2("killall -9 qemu-system-ppc", false, MainActivity.activity); - } - - public static void killcurrentqemuprocess(Context context) { - Terminal vterm = new Terminal(context); - String env = "killall -9 "; - switch (MainSettingsManager.getArch(MainActivity.activity)) { - case "ARM64": - env += "qemu-system-aarch64"; - break; - case "PPC": - env += "qemu-system-ppc"; - break; - case "I386": - env += "qemu-system-i386"; - break; - default: - env += "qemu-system-x86_64"; - break; - } - vterm.executeShellCommand2(env, false, MainActivity.activity); - } - - public static boolean isAppInstalled(String packagename, Context context) { - PackageManager pm = context.getPackageManager(); - try { - pm.getPackageInfo(packagename,PackageManager.GET_ACTIVITIES); - return true; - } catch (PackageManager.NameNotFoundException e) { - return false; - } - } - - public static void setIconWithName(ImageView imageview, String name) { - String itemName = name.toLowerCase(); - if (itemName.contains("linux") || itemName.contains("ubuntu") || itemName.contains("debian") || itemName.contains("arch") || itemName.contains("kali")) { - imageview.setImageResource(R.drawable.linux); - } else if (itemName.contains("windows")) { - imageview.setImageResource(R.drawable.windows); - } else if (itemName.contains("macos") || itemName.contains("mac os")) { - imageview.setImageResource(R.drawable.macos); - } else if (itemName.contains("android")) { - imageview.setImageResource(R.drawable.android); - } else { - imageview.setImageResource(R.drawable.no_machine_image); - } - } - - public static boolean isHaveADisk(String env) { - if (env.contains("-drive") || env.contains("-hda") || env.contains("-hdb") || env.contains("-cdrom") || env.contains("-fda") || env.contains("-fdb")) - return true; - return false; - } - - public static boolean isQemuRunning() { - Terminal vterm = new Terminal(MainActivity.activity); - vterm.executeShellCommand2("ps -e", false, MainActivity.activity); - if (TerminalOutput.contains("qemu-system")) { - Log.d("VectrasApp.isQemuRunning", "Yes"); - return true; - } else { - Log.d("VectrasApp.isQemuRunning", "No"); - return false; - } - } - - public static boolean isThisVMRunning(String intemExtra, String itemPath) { - Terminal vterm = new Terminal(MainActivity.activity); - vterm.executeShellCommand2("ps -e", false, MainActivity.activity); - if (TerminalOutput.contains(intemExtra) && TerminalOutput.contains(itemPath)) { - Log.d("VectrasApp.isThisVMRunning", "Yes"); - return true; - } else { - Log.d("VectrasApp.isThisVMRunning", "No"); - return false; - } - } - - public static void oneDialog(String _title, String _message, boolean _cancel, boolean _finish, Activity _activity) { - AlertDialog alertDialog = new AlertDialog.Builder(_activity, R.style.MainDialogTheme).create(); - alertDialog.setTitle(_title); - alertDialog.setMessage(_message); - if (!_cancel) { - alertDialog.setCancelable(false); - } - alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (_finish) { - _activity.finish(); - } - } - }); - alertDialog.show(); - } - - public static void oneDialogNew(String _title, String _message, String _buttontext,boolean _cancel, boolean _finish, Activity _activity) { - AlertDialog alertDialog = new AlertDialog.Builder(_activity, R.style.MainDialogTheme).create(); - alertDialog.setTitle(_title); - alertDialog.setMessage(_message); - if (!_cancel) { - alertDialog.setCancelable(false); - } - alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, _buttontext, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - if (_finish) { - _activity.finish(); - } - } - }); - alertDialog.show(); - } - - public static void oneDialogWithContext(String _title, String _message, boolean _cancel, Context _context) { - AlertDialog alertDialog = new AlertDialog.Builder(_context, R.style.MainDialogTheme).create(); - alertDialog.setTitle(_title); - alertDialog.setMessage(_message); - if (!_cancel) { - alertDialog.setCancelable(false); - } - alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - - } - }); - alertDialog.show(); - } - - public static void prepareDataForAppConfig(Activity _activity) { - AppConfig.vectrasVersion = "2.9.4"; - AppConfig.vectrasWebsite = "https://vectras.vercel.app/"; - AppConfig.vectrasWebsiteRaw = "https://raw.githubusercontent.com/xoureldeen/Vectras-VM-Android/refs/heads/master/web/"; - AppConfig.bootstrapfileslink = AppConfig.vectrasWebsiteRaw + "/data/setupfiles.json"; - AppConfig.vectrasHelp = AppConfig.vectrasWebsite + "how.html"; - AppConfig.community = AppConfig.vectrasWebsite + "community.html"; - AppConfig.vectrasRaw = AppConfig.vectrasWebsiteRaw + "data/"; - AppConfig.vectrasLicense = AppConfig.vectrasRaw + "LICENSE.md"; - AppConfig.vectrasPrivacy = AppConfig.vectrasRaw + "PRIVACYANDPOLICY.md"; - AppConfig.vectrasTerms = AppConfig.vectrasRaw + "TERMSOFSERVICE.md"; - AppConfig.vectrasInfo = AppConfig.vectrasRaw + "info.md"; - AppConfig.vectrasRepo = "https://github.com/xoureldeen/Vectras-VM-Android"; - AppConfig.updateJson = AppConfig.vectrasRaw + "UpdateConfig.json"; - AppConfig.blogJson = AppConfig.vectrasRaw + "news_list.json"; - AppConfig.storeJson = AppConfig.vectrasWebsiteRaw + "store_list.json"; - AppConfig.releaseUrl = AppConfig.vectrasWebsite; - AppConfig.basefiledir = AppConfig.datadirpath(_activity) + "/.qemu/"; - AppConfig.maindirpath = FileUtils.getExternalFilesDirectory(_activity).getPath() + "/"; + private static void setupAppConfig(Context _context) { + AppConfig.vectrasVersion = PackageUtils.getThisVersionName(_context); + AppConfig.vectrasVersionCode = PackageUtils.getThisVersionCode(_context); + AppConfig.basefiledir = AppConfig.datadirpath(_context) + "/.qemu/"; + AppConfig.maindirpath = FileUtils.getExternalFilesDirectory(_context).getPath() + "/"; AppConfig.sharedFolder = AppConfig.maindirpath + "SharedFolder/"; AppConfig.downloadsFolder = AppConfig.maindirpath + "Downloads/"; AppConfig.romsdatajson = AppConfig.maindirpath + "roms-data.json"; AppConfig.vmFolder = AppConfig.maindirpath + "roms/"; AppConfig.recyclebin = AppConfig.maindirpath + "recyclebin/"; } - - public static PackageInfo getAppInfo(Context context) { - try { - return context.getPackageManager().getPackageInfo(context.getPackageName(), 0); - } catch (PackageManager.NameNotFoundException e) { - throw new RuntimeException(e); - } - } - - public static void setupMirrorListForListmap(ArrayList> listmapForSelectMirrors) { - HashMap 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/yttGkok69Je/v3.19/community\" /etc/apk/repositories && sed -i -e \"1ihttps://xssFjnj58Id/yttGkok69Je/v3.19/main\" /etc/apk/repositories"; - command = command.replaceAll("/yttGkok69Je", _beforemain); - if (!_https) - command = command.replaceAll("https://", "http://"); - return command.replaceAll("xssFjnj58Id", _url); - } - - public static void setupSendKeyListForListmap(ArrayList> listmapForSendKey) { - HashMap mapForAddItems = new HashMap<>(); - - mapForAddItems.put("keyname", "Ctrl + Alt + Del"); - mapForAddItems.put("keycode", 0); - mapForAddItems.put("useKeyEvent", false); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Esc"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_ESCAPE); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Windows"); - mapForAddItems.put("keycode", 91); - mapForAddItems.put("useKeyEvent", false); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.grid_view_24px); - listmapForSendKey.add(mapForAddItems); - -// mapForAddItems = new HashMap<>(); -// mapForAddItems.put("keyname", "Menu"); -// mapForAddItems.put("keycode", 93); -// mapForAddItems.put("useKeyEvent", false); -// mapForAddItems.put("useIcon", true); -// mapForAddItems.put("rIcon", R.drawable.menu_24px); -// listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Backspace"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_DEL); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.backspace_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Enter"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_ENTER); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.keyboard_return_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Tab"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_TAB); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.sync_alt_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Up"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_UP); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.arrow_upward_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Down"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_DOWN); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.arrow_downward_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Left"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_LEFT); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.arrow_back_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Left"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_RIGHT); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.arrow_forward_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "Home"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_MOVE_HOME); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.vertical_align_top_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "End"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_MOVE_END); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.vertical_align_bottom_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "End"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_PAGE_UP); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.arrow_warm_up_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "End"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_PAGE_DOWN); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.arrow_cool_down_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "End"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_INSERT); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", true); - mapForAddItems.put("rIcon", R.drawable.insert_text_24px); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F1"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F1); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F2"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F2); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F3"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F3); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F4"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F4); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F5"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F5); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F6"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F6); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F7"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F7); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F8"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F8); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F9"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F9); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F10"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F10); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F11"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F11); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - - mapForAddItems = new HashMap<>(); - mapForAddItems.put("keyname", "F12"); - mapForAddItems.put("keycode", KeyEvent.KEYCODE_F12); - mapForAddItems.put("useKeyEvent", true); - mapForAddItems.put("useIcon", false); - mapForAddItems.put("rIcon", 0); - listmapForSendKey.add(mapForAddItems); - } } diff --git a/app/src/main/java/com/vectras/vm/utils/CommandUtils.java b/app/src/main/java/com/vectras/vm/utils/CommandUtils.java new file mode 100644 index 0000000..01a3f3c --- /dev/null +++ b/app/src/main/java/com/vectras/vm/utils/CommandUtils.java @@ -0,0 +1,20 @@ +package com.vectras.vm.utils; + +import android.app.Activity; + +import com.vectras.vterm.Terminal; + +public class CommandUtils { + public static String createForSelectedMirror(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/yttGkok69Je/v3.19/community\" /etc/apk/repositories && sed -i -e \"1ihttps://xssFjnj58Id/yttGkok69Je/v3.19/main\" /etc/apk/repositories"; + command = command.replaceAll("/yttGkok69Je", _beforemain); + if (!_https) + command = command.replaceAll("https://", "http://"); + return command.replaceAll("xssFjnj58Id", _url); + } + + public static void run(String _command, boolean _isShowResult, Activity _activity) { + Terminal vterm = new Terminal(_activity); + vterm.executeShellCommand2(_command, _isShowResult, _activity); + } +} diff --git a/app/src/main/java/com/vectras/vm/utils/DeviceUtils.java b/app/src/main/java/com/vectras/vm/utils/DeviceUtils.java new file mode 100644 index 0000000..9093916 --- /dev/null +++ b/app/src/main/java/com/vectras/vm/utils/DeviceUtils.java @@ -0,0 +1,13 @@ +package com.vectras.vm.utils; + +import android.app.ActivityManager; +import android.content.Context; + +public class DeviceUtils { + public static double totalMemoryCapacity(Context context) { + ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + activityManager.getMemoryInfo(memoryInfo); + return memoryInfo.totalMem; + } +} diff --git a/app/src/main/java/com/vectras/vm/utils/FileUtils.java b/app/src/main/java/com/vectras/vm/utils/FileUtils.java index 17916bb..a19bb46 100644 --- a/app/src/main/java/com/vectras/vm/utils/FileUtils.java +++ b/app/src/main/java/com/vectras/vm/utils/FileUtils.java @@ -599,15 +599,15 @@ public class FileUtils { } return contents; } - + public static boolean moveFile(String oldfilename, String newFolderPath, String newFilename) { File folder = new File(newFolderPath); if (!folder.exists()) folder.mkdirs(); - + File oldfile = new File(oldfilename); File newFile = new File(newFolderPath, newFilename); - + if (!newFile.exists()) try { newFile.createNewFile(); @@ -618,4 +618,119 @@ public class FileUtils { return oldfile.renameTo(newFile); } + public static boolean isFileExists(String filePath) { + File file = new File(filePath.replaceAll("\n", "")); + return file.exists(); + } + + public static void moveAFile(String _from, String _to) { + File oldFile = new File(_from); + File newFile = new File(_to); + + boolean success = oldFile.renameTo(newFile); + if (success) { + Log.d("File", "Done!"); + } else { + Log.e("File", "Failed!"); + } + } + + public static void copyAFile(String _sourceFile, String _destFile) { + File vDir = new File(_destFile.substring((int)0, (int)(_destFile.lastIndexOf("/")))); + if (!vDir.exists()) { + vDir.mkdirs(); + } + try { + File source = new File(_sourceFile); + File dest = new File(_destFile); + + if (!source.exists()) + { + throw new IOException("Source file not found"); + } + + FileInputStream inStream = new FileInputStream(source); + FileOutputStream outStream = new FileOutputStream(dest); + + byte[] buffer = new byte[1024]; + int length; + while ((length = inStream.read(buffer)) + > 0) { + outStream.write(buffer, 0, length); + } + + inStream.close(); + outStream.close(); + } catch (IOException e) { + + } + + } + + public static void deleteDirectory(String _pathToDelete) { + File _dir = new File(_pathToDelete); + if (_dir.isDirectory()) { + String[] children = _dir.list(); + + if (children == null) { + Log.e("ERROR", "Deletion failed. " + _dir); + return; + } + + for (int i = 0; i < children.length; i++) { + File temp = new File(_dir, children[i]); + deleteDirectory(String.valueOf(temp)); + } + } + boolean success = _dir.delete(); + if (!success) { + Log.e("ERROR", "Deletion failed. " + _dir); + } + } + + public static String readAFile(String filePath) { + StringBuilder content = new StringBuilder(); + try (FileInputStream inputStream = new FileInputStream(filePath); + BufferedReader reader = new BufferedReader(new + InputStreamReader(inputStream))) { + String line; + while ((line = reader.readLine()) != null) { + content.append(line).append("\n"); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + return content.toString(); + + } + + public static void writeToFile(String folderPath, String fileName, String content) { + File vDir = new File(folderPath); + if (!vDir.exists()) { + vDir.mkdirs(); + } + File file = new File(folderPath, fileName); + FileOutputStream outputStream = null; + try { + outputStream = new FileOutputStream(file); + outputStream.write(content.getBytes()); + outputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static void getAListOfAllFilesAndFoldersInADirectory(String path, ArrayList list) { + File dir = new File(path); + if (!dir.exists() || dir.isFile()) return; + + File[] listFiles = dir.listFiles(); + if (listFiles == null || listFiles.length <= 0) return; + + if (list == null) return; + list.clear(); + for (File file : listFiles) { + list.add(file.getAbsolutePath()); + } + } } diff --git a/app/src/main/java/com/vectras/vm/utils/JSONUtils.java b/app/src/main/java/com/vectras/vm/utils/JSONUtils.java new file mode 100644 index 0000000..1ea2948 --- /dev/null +++ b/app/src/main/java/com/vectras/vm/utils/JSONUtils.java @@ -0,0 +1,51 @@ +package com.vectras.vm.utils; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Objects; + +public class JSONUtils { + public static boolean isValidFromString(String _content) { + ArrayList> mmap = new ArrayList<>(); + try { + mmap.clear(); + mmap = new Gson().fromJson(_content, new TypeToken>>() { + }.getType()); + return true; + } catch (Exception e) { + return false; + } + } + + public static boolean isMapValidFromString(String _content) { + HashMap mmap = new HashMap<>(); + try { + mmap.clear(); + mmap= new Gson().fromJson(_content, new TypeToken>(){}.getType()); + return true; + } catch (Exception e) { + return false; + } + } + + public static boolean isValidFromFile(String _filepath) { + ArrayList> mmap = new ArrayList<>(); + String contentjson = ""; + if (FileUtils.isFileExists(_filepath)) { + contentjson = FileUtils.readAFile(_filepath); + try { + mmap.clear(); + mmap = new Gson().fromJson(contentjson, new TypeToken>>() { + }.getType()); + return true; + } catch (Exception e) { + return false; + } + } else { + return false; + } + } +} diff --git a/app/src/main/java/com/vectras/vm/utils/ListUtils.java b/app/src/main/java/com/vectras/vm/utils/ListUtils.java new file mode 100644 index 0000000..7709172 --- /dev/null +++ b/app/src/main/java/com/vectras/vm/utils/ListUtils.java @@ -0,0 +1,425 @@ +package com.vectras.vm.utils; + +import android.view.KeyEvent; + +import com.vectras.vm.R; + +import java.util.ArrayList; +import java.util.HashMap; + +public class ListUtils { + public static void setupMirrorListForListmap(ArrayList> listmapForSelectMirrors) { + HashMap mapForAddItems = new HashMap<>(); + + mapForAddItems.put("location", "United States (Default)"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "dl-cdn.alpinelinux.org", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Australia"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(false,"mirror.aarnet.edu.au", "/pub/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Austria"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.alwyzon.net", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Bulgaria"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirrors.neterra.net", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Brazil"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.uepg.br", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Cambodia"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.sabay.com.kh", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Canada"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "mirror.csclub.uwaterloo.ca", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Chile"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"elmirror.cl", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "China"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "mirrors.tuna.tsinghua.edu.cn", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Czech Republic"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "mirror.fel.cvut.cz", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Denmark"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "mirrors.dotsrc.org", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Finland"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "mirror.5i.fi", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "France"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirrors.ircam.fr", "/pub/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Germany"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"ftp.halifax.rwth-aachen.de", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Hong Kong"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "mirror.xtom.com.hk", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Indonesia"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(false,"foobar.turbo.net.id", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Iran"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.bardia.tech", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Italy"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"alpinelinux.mirror.garr.it", "")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Japan"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "repo.jing.rocks", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Kazakhstan"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.ps.kz", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Moldova"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.ihost.md", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Morocco"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "mirror.marwan.ma", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "New Caledonia"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.lagoon.nc", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "New Zealand"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.2degrees.nz", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Poland"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"ftp.icm.edu.pl", "/pub/Linux/distributions/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Portugal"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.leitecastro.com", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Romania"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirrors.hosterion.ro", "/alpinelinux")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Russia"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.hyperdedic.ru", "/alpinelinux")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Singapore"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.jingk.ai", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Slovenia"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.tux.si", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Spain"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.raiolanetworks.com", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Sweden"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "ftp.lysator.liu.se/pub", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Switzerland"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "pkg.adfinis.com", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Taiwan"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true, "mirror.twds.com.tw", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "Thailand"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"mirror.kku.ac.th", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "The Netherlands"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"alpine.mirror.wearetriple.com", "")); + listmapForSelectMirrors.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("location", "United Kingdom"); + mapForAddItems.put("mirror", CommandUtils.createForSelectedMirror(true,"uk.alpinelinux.org", "/alpine")); + listmapForSelectMirrors.add(mapForAddItems); + } + + public static void setupSendKeyListForListmap(ArrayList> listmapForSendKey) { + HashMap mapForAddItems = new HashMap<>(); + + mapForAddItems.put("keyname", "Ctrl + Alt + Del"); + mapForAddItems.put("keycode", 0); + mapForAddItems.put("useKeyEvent", false); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Esc"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_ESCAPE); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Windows"); + mapForAddItems.put("keycode", 91); + mapForAddItems.put("useKeyEvent", false); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.grid_view_24px); + listmapForSendKey.add(mapForAddItems); + +// mapForAddItems = new HashMap<>(); +// mapForAddItems.put("keyname", "Menu"); +// mapForAddItems.put("keycode", 93); +// mapForAddItems.put("useKeyEvent", false); +// mapForAddItems.put("useIcon", true); +// mapForAddItems.put("rIcon", R.drawable.menu_24px); +// listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Backspace"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_DEL); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.backspace_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Enter"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_ENTER); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.keyboard_return_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Tab"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_TAB); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.sync_alt_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Up"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_UP); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.arrow_upward_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Down"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_DOWN); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.arrow_downward_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Left"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_LEFT); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.arrow_back_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Left"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_DPAD_RIGHT); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.arrow_forward_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "Home"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_MOVE_HOME); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.vertical_align_top_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "End"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_MOVE_END); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.vertical_align_bottom_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "End"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_PAGE_UP); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.arrow_warm_up_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "End"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_PAGE_DOWN); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.arrow_cool_down_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "End"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_INSERT); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", true); + mapForAddItems.put("rIcon", R.drawable.insert_text_24px); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F1"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F1); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F2"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F2); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F3"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F3); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F4"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F4); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F5"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F5); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F6"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F6); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F7"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F7); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F8"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F8); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F9"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F9); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F10"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F10); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F11"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F11); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + + mapForAddItems = new HashMap<>(); + mapForAddItems.put("keyname", "F12"); + mapForAddItems.put("keycode", KeyEvent.KEYCODE_F12); + mapForAddItems.put("useKeyEvent", true); + mapForAddItems.put("useIcon", false); + mapForAddItems.put("rIcon", 0); + listmapForSendKey.add(mapForAddItems); + } +} diff --git a/app/src/main/java/com/vectras/vm/IOApplication.java b/app/src/main/java/com/vectras/vm/utils/NetworkUtils.java similarity index 91% rename from app/src/main/java/com/vectras/vm/IOApplication.java rename to app/src/main/java/com/vectras/vm/utils/NetworkUtils.java index db8a6a7..5512741 100644 --- a/app/src/main/java/com/vectras/vm/IOApplication.java +++ b/app/src/main/java/com/vectras/vm/utils/NetworkUtils.java @@ -1,10 +1,10 @@ -package com.vectras.vm; +package com.vectras.vm.utils; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; -public class IOApplication { +public class NetworkUtils { public static boolean isPortOpen(String host, int port, int timeout) { Socket socket = new Socket(); try { diff --git a/app/src/main/java/com/vectras/vm/utils/PackageUtils.java b/app/src/main/java/com/vectras/vm/utils/PackageUtils.java new file mode 100644 index 0000000..dbd655b --- /dev/null +++ b/app/src/main/java/com/vectras/vm/utils/PackageUtils.java @@ -0,0 +1,39 @@ +package com.vectras.vm.utils; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; + +import com.vectras.vm.AppConfig; + +public class PackageUtils { + public static boolean isInstalled(String packagename, Context context) { + PackageManager pm = context.getPackageManager(); + try { + pm.getPackageInfo(packagename,PackageManager.GET_ACTIVITIES); + return true; + } catch (PackageManager.NameNotFoundException e) { + return false; + } + } + + public static int getThisVersionCode(Context context) { + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + return packageInfo.versionCode; + } catch (Exception ignored){ + + } + return AppConfig.vectrasVersionCode; + } + + public static String getThisVersionName(Context context) { + try { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + return packageInfo.versionName; + } catch (Exception ignored){ + + } + return AppConfig.vectrasVersion; + } +} diff --git a/app/src/main/java/com/vectras/vm/utils/PermissionUtils.java b/app/src/main/java/com/vectras/vm/utils/PermissionUtils.java new file mode 100644 index 0000000..0f76027 --- /dev/null +++ b/app/src/main/java/com/vectras/vm/utils/PermissionUtils.java @@ -0,0 +1,46 @@ +package com.vectras.vm.utils; + +import android.Manifest; +import android.app.Activity; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.provider.Settings; +import android.widget.Toast; + +import androidx.appcompat.app.AlertDialog; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import com.vectras.vm.R; + +public class PermissionUtils { + public static boolean storagepermission(Activity activity, boolean request) { + if (ContextCompat.checkSelfPermission(activity, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { + return true; + } else { + if (request) { + AlertDialog alertDialog = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create(); + alertDialog.setTitle(activity.getResources().getString(R.string.allow_permissions)); + alertDialog.setMessage(activity.getResources().getString(R.string.you_need_to_grant_permission_to_access_the_storage_before_use)); + alertDialog.setCancelable(false); + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, activity.getResources().getString(R.string.allow), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + if (activity.shouldShowRequestPermissionRationale(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.parse("package:" + activity.getPackageName())); + activity.startActivity(intent); + Toast.makeText(activity, activity.getResources().getString(R.string.find_and_allow_access_to_storage_in_settings), Toast.LENGTH_LONG).show(); + } else { + ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1000); + } + alertDialog.dismiss(); + } + }); + alertDialog.show(); + } + return false; + } + } +} diff --git a/app/src/main/java/com/vectras/vm/UIController.java b/app/src/main/java/com/vectras/vm/utils/SimpleAnimations.java similarity index 50% rename from app/src/main/java/com/vectras/vm/UIController.java rename to app/src/main/java/com/vectras/vm/utils/SimpleAnimations.java index 6364251..f36eb7d 100644 --- a/app/src/main/java/com/vectras/vm/UIController.java +++ b/app/src/main/java/com/vectras/vm/utils/SimpleAnimations.java @@ -1,30 +1,11 @@ -package com.vectras.vm; +package com.vectras.vm.utils; import android.animation.ObjectAnimator; -import android.animation.ValueAnimator; import android.view.View; import android.view.animation.LinearInterpolator; -import androidx.activity.ComponentActivity; -import androidx.activity.EdgeToEdge; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; - -public class UIController { - public static void edgeToEdge(ComponentActivity _activity) { - EdgeToEdge.enable(_activity); - } - - public static void setOnApplyWindowInsetsListener(View _view) { - ViewCompat.setOnApplyWindowInsetsListener(_view, (v, insets) -> { - Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout() | WindowInsetsCompat.Type.ime()); - v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); - return insets; - }); - } - - public static void simpleAnimationScale(View _view, int _duration) { +public class SimpleAnimations { + public static void scale(View _view, int _duration) { ObjectAnimator ani1 = new ObjectAnimator(); ani1.setTarget(_view); ani1.setPropertyName("scaleX"); @@ -42,7 +23,7 @@ public class UIController { ani2.start(); } - public static void simpleTranslationUpToDown(View _view, int _duration) { + public static void translationUpToDown(View _view, int _duration) { ObjectAnimator ani1 = new ObjectAnimator(); ani1.setTarget(_view); ani1.setPropertyName("translationY"); diff --git a/app/src/main/java/com/vectras/vm/utils/UIUtils.java b/app/src/main/java/com/vectras/vm/utils/UIUtils.java index a503d01..e1718d6 100644 --- a/app/src/main/java/com/vectras/vm/utils/UIUtils.java +++ b/app/src/main/java/com/vectras/vm/utils/UIUtils.java @@ -1,7 +1,14 @@ package com.vectras.vm.utils; import android.app.Activity; + +import androidx.activity.ComponentActivity; +import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AlertDialog; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; @@ -367,5 +374,64 @@ public class UIUtils { } + public static void oneDialog(String _title, String _message, boolean _cancel, boolean _finish, Activity _activity) { + AlertDialog alertDialog = new AlertDialog.Builder(_activity, R.style.MainDialogTheme).create(); + alertDialog.setTitle(_title); + alertDialog.setMessage(_message); + if (!_cancel) { + alertDialog.setCancelable(false); + } + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + if (_finish) { + _activity.finish(); + } + } + }); + alertDialog.show(); + } + public static void oneDialogWithCustomButtonPositive(String _title, String _message, String _buttontext,boolean _cancel, boolean _finish, Activity _activity) { + AlertDialog alertDialog = new AlertDialog.Builder(_activity, R.style.MainDialogTheme).create(); + alertDialog.setTitle(_title); + alertDialog.setMessage(_message); + if (!_cancel) { + alertDialog.setCancelable(false); + } + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, _buttontext, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + if (_finish) { + _activity.finish(); + } + } + }); + alertDialog.show(); + } + + public static void oneDialogWithContext(String _title, String _message, boolean _cancel, Context _context) { + AlertDialog alertDialog = new AlertDialog.Builder(_context, R.style.MainDialogTheme).create(); + alertDialog.setTitle(_title); + alertDialog.setMessage(_message); + if (!_cancel) { + alertDialog.setCancelable(false); + } + alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + + } + }); + alertDialog.show(); + } + + public static void edgeToEdge(ComponentActivity _activity) { + EdgeToEdge.enable(_activity); + } + + public static void setOnApplyWindowInsetsListener(View _view) { + ViewCompat.setOnApplyWindowInsetsListener(_view, (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout() | WindowInsetsCompat.Type.ime()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + } } 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 08b9048..0874ea1 100644 --- a/app/src/main/java/com/vectras/vm/x11/X11Activity.java +++ b/app/src/main/java/com/vectras/vm/x11/X11Activity.java @@ -19,6 +19,7 @@ import com.vectras.qemu.MainSettingsManager; import com.vectras.vm.Fragment.ControlersOptionsFragment; import com.vectras.vm.Fragment.LoggerDialogFragment; import com.vectras.vm.MainService; +import com.vectras.vm.VMManager; import com.vectras.vm.VectrasApp; import com.vectras.vm.widgets.JoystickView; import com.vectras.qemu.MainSettingsManager; @@ -598,7 +599,7 @@ public class X11Activity extends AppCompatActivity implements View.OnApplyWindow // Stop the service MainService.stopService(); //Terminal.killQemuProcess(); - VectrasApp.killcurrentqemuprocess(getApplicationContext()); + VMManager.killcurrentqemuprocess(getApplicationContext()); finish(); }) .setNegativeButton(getString(R.string.no), null) diff --git a/app/src/main/java/com/vectras/vterm/Terminal.java b/app/src/main/java/com/vectras/vterm/Terminal.java index a6aa18f..d725fa9 100644 --- a/app/src/main/java/com/vectras/vterm/Terminal.java +++ b/app/src/main/java/com/vectras/vterm/Terminal.java @@ -4,7 +4,6 @@ import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; -import android.content.Intent; import android.os.Build; import android.os.Handler; import android.os.Looper; @@ -28,14 +27,12 @@ import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; -import com.vectras.qemu.MainSettingsManager; import com.vectras.qemu.MainVNCActivity; import com.vectras.vm.MainActivity; import com.vectras.vm.MainService; import com.vectras.vm.R; -import com.vectras.vm.SplashActivity; import com.vectras.vm.VMManager; -import com.vectras.vm.VectrasApp; +import com.vectras.vm.AppConfig; public class Terminal { private static final String TAG = "Vterm"; @@ -171,7 +168,7 @@ public class Terminal { } finally { new Handler(Looper.getMainLooper()).post(() -> { progressDialog.dismiss(); // Dismiss ProgressDialog - VectrasApp.TerminalOutput = output.toString(); + AppConfig.temporaryLastedTerminalOutput = output.toString(); if (showResultDialog) { String finalOutput = output.toString(); String finalErrors = errors.toString(); @@ -280,7 +277,7 @@ public class Terminal { } finally { // Switch to main thread after execution new Handler(Looper.getMainLooper()).post(() -> { - VectrasApp.TerminalOutput = output.toString(); + AppConfig.temporaryLastedTerminalOutput = output.toString(); // If showResultDialog is enabled, show the dialog with the result or errors if (showResultDialog) { String finalOutput = output.toString(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2bd04c6..adccdf1 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.5 (3dfx - Rugelach) + v2.9.5 (3dfx - Scone) Stable Home Logger diff --git a/build.gradle b/build.gradle index b9abfcd..4f602f0 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:8.9.1' // Android Gradle plugin + classpath 'com.android.tools.build:gradle:8.9.2' // Android Gradle plugin // Add other classpaths like Google Services and Firebase Crashlytics if needed here. classpath 'com.google.gms:google-services:4.4.2' // assuming you need it for your project classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.3' diff --git a/web/data/UpdateConfig.json b/web/data/UpdateConfig.json index 3f2a6ba..6663e9d 100644 --- a/web/data/UpdateConfig.json +++ b/web/data/UpdateConfig.json @@ -1,15 +1,15 @@ { "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,v2.9.5-3dfx-gugelhupf,v2.9.5-3dfx-hamentaschen,v2.9.5-3dfx-italianice,v2.9.5-3dfx-ladyfingers,v2.9.5-3dfx-madeleine,v2.9.5-3dfx-neapolitanicecream,v2.9.5-3dfx-orangecake,v2.9.5-3dfx-profiterole,v2.9.5-3dfx-quincejelly,v2.9.5-3dfx-rugelach", + "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,v2.9.5-3dfx-hamentaschen,v2.9.5-3dfx-italianice,v2.9.5-3dfx-ladyfingers,v2.9.5-3dfx-madeleine,v2.9.5-3dfx-neapolitanicecream,v2.9.5-3dfx-orangecake,v2.9.5-3dfx-profiterole,v2.9.5-3dfx-quincejelly,v2.9.5-3dfx-rugelach,v2.9.5-3dfx-scone", "size": "46 MB", "url": "https://github.com/xoureldeen/Vectras-VM-Android/releases/v2.9.5", "Message": "

v2.9.5-3dfx

  • Bring back 3dfx support.
  • Enhance app execution.
  • Added some linux programs in x11 display.
  • Added alpine linux (x11).
  • Russian language by @OFGING


New updates are live!", "cancellable": true, "versionCodeBeta":"21", - "versionNameBeta":"v2.9.5-3dfx-rugelach", - "versionNameBetas":"v2.9.5-3dfx-madeleine,v2.9.5-3dfx-neapolitanicecream,v2.9.5-3dfx-orangecake,v2.9.5-3dfx-profiterole,v2.9.5-3dfx-quincejelly,v2.9.5-3dfx-rugelach", + "versionNameBeta":"v2.9.5-3dfx-scone", + "versionNameBetas":"v2.9.5-3dfx-madeleine,v2.9.5-3dfx-neapolitanicecream,v2.9.5-3dfx-orangecake,v2.9.5-3dfx-profiterole,v2.9.5-3dfx-quincejelly,v2.9.5-3dfx-rugelach,v2.9.5-3dfx-scone", "sizeBeta": "48 MB", "urlBeta": "https://github.com/AnBui2004/Vectras-VM-Emu-Android/releases", - "MessageBeta": "

Rugelach

Bugs fixed.", + "MessageBeta": "

Scone

Bugs fixed.", "cancellableBeta": true }