This commit is contained in:
An Bui 2024-10-04 13:41:55 +07:00
parent 96f29f8e40
commit 05323fae73
12 changed files with 166 additions and 52 deletions

View file

@ -11,7 +11,7 @@ android {
minSdk minApi
targetSdk targetApi
versionCode 17
versionName "v2.9.1-thunderbird"
versionName "v2.9.1-firefox"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}

View file

@ -12,7 +12,7 @@
"filters": [],
"attributes": [],
"versionCode": 17,
"versionName": "v2.9.1-thunderbird",
"versionName": "v2.9.1-firefox",
"outputFile": "app-universal-release.apk"
},
{
@ -25,7 +25,7 @@
],
"attributes": [],
"versionCode": 17,
"versionName": "v2.9.1-thunderbird",
"versionName": "v2.9.1-firefox",
"outputFile": "app-x86_64-release.apk"
},
{
@ -38,7 +38,7 @@
],
"attributes": [],
"versionCode": 17,
"versionName": "v2.9.1-thunderbird",
"versionName": "v2.9.1-firefox",
"outputFile": "app-arm64-v8a-release.apk"
}
],

View file

@ -93,6 +93,8 @@ public class CustomRomActivity extends AppCompatActivity {
public static DataMainRoms current;
private SharedPreferences getAppConfigData;
public void onStart() {
super.onStart();
}
@ -143,6 +145,7 @@ public class CustomRomActivity extends AppCompatActivity {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
setTitle("Rom Options");
getAppConfigData = getSharedPreferences("appconfig", MODE_PRIVATE);
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
@ -331,7 +334,7 @@ public class CustomRomActivity extends AppCompatActivity {
if (modify) {
int position = getIntent().getIntExtra("POS", 0);
final File jsonFile = new File(AppConfig.maindirpath + "roms-data" + ".json");
final File jsonFile = new File(getAppConfigData.getString("maindirpath","") + "roms-data" + ".json");
current.itemDrv1 = drive.getText().toString();
current.itemExtra = qemu.getText().toString();
try {
@ -364,7 +367,7 @@ public class CustomRomActivity extends AppCompatActivity {
editor.putBoolean("isFirstLaunch", Boolean.TRUE);
editor.apply();
loadingPb.setVisibility(View.VISIBLE);
final File jsonFile = new File(AppConfig.maindirpath + "roms-data" + ".json");
final File jsonFile = new File(getAppConfigData.getString("maindirpath","") + "roms-data" + ".json");
RomsJso obj = new RomsJso();
if (jsonFile.exists()) {
try {
@ -549,7 +552,7 @@ public class CustomRomActivity extends AppCompatActivity {
super.onActivityResult(requestCode, resultCode, ReturnedIntent);
if (title.getText().toString().length() > 0) {
File romDir = new File(AppConfig.maindirpath + title.getText().toString());
File romDir = new File(getAppConfigData.getString("maindirpath","") + title.getText().toString());
romDir.mkdirs();
}
@ -581,13 +584,13 @@ public class CustomRomActivity extends AppCompatActivity {
} finally {
try {
try {
SaveImage(selectedImage, new File(AppConfig.maindirpath + "icons"), title.getText().toString() + "-" + selectedFilePath.getName());
SaveImage(selectedImage, new File(getAppConfigData.getString("maindirpath","") + "icons"), title.getText().toString() + "-" + selectedFilePath.getName());
} finally {
Runnable runnable = new Runnable() {
@Override
public void run() {
loadingPb.setVisibility(View.GONE);
icon.setText(AppConfig.maindirpath + "icons" + "/" + title.getText().toString() + "-" + selectedFilePath.getName());
icon.setText(getAppConfigData.getString("maindirpath","") + "icons" + "/" + title.getText().toString() + "-" + selectedFilePath.getName());
}
};
activity.runOnUiThread(runnable);
@ -610,7 +613,7 @@ public class CustomRomActivity extends AppCompatActivity {
} else if (requestCode == 1002 && resultCode == RESULT_OK) {
Uri content_describer = ReturnedIntent.getData();
File selectedFilePath = new File(getPath(content_describer));
drive.setText(AppConfig.maindirpath + title.getText().toString() + "/" + selectedFilePath.getName());
drive.setText(getAppConfigData.getString("maindirpath","") + title.getText().toString() + "/" + selectedFilePath.getName());
loadingPb.setVisibility(View.VISIBLE);
custom.setVisibility(View.GONE);
new Thread(new Runnable() {
@ -624,7 +627,7 @@ public class CustomRomActivity extends AppCompatActivity {
}
try {
try {
OutputStream out = new FileOutputStream(new File(AppConfig.maindirpath + title.getText().toString() + "/" + selectedFilePath.getName()));
OutputStream out = new FileOutputStream(new File(getAppConfigData.getString("maindirpath","") + title.getText().toString() + "/" + selectedFilePath.getName()));
try {
// Transfer bytes from in to out
byte[] buf = new byte[1024];
@ -665,7 +668,7 @@ public class CustomRomActivity extends AppCompatActivity {
Uri content_describer = ReturnedIntent.getData();
File selectedFilePath = new File(getPath(content_describer));
if (selectedFilePath.getName().endsWith(".iso")) {
String cdromPath = AppConfig.maindirpath + title.getText().toString() + "/" + selectedFilePath.getName();
String cdromPath = getAppConfigData.getString("maindirpath","") + title.getText().toString() + "/" + selectedFilePath.getName();
cdrom.setText(cdromPath);
String qemuText = qemu.getText().toString();
@ -695,7 +698,7 @@ public class CustomRomActivity extends AppCompatActivity {
}
try {
try {
OutputStream out = new FileOutputStream(new File(AppConfig.maindirpath + title.getText().toString() + "/" + selectedFilePath.getName()));
OutputStream out = new FileOutputStream(new File(getAppConfigData.getString("maindirpath","") + title.getText().toString() + "/" + selectedFilePath.getName()));
try {
// Transfer bytes from in to out
byte[] buf = new byte[1024];
@ -746,7 +749,7 @@ public class CustomRomActivity extends AppCompatActivity {
FileInputStream zipFile = null;
try {
zipFile = (FileInputStream) getContentResolver().openInputStream(content_describer);
File targetDirectory = new File(AppConfig.maindirpath + selectedFilePath.getName().replace(".cvbi", ""));
File targetDirectory = new File(getAppConfigData.getString("maindirpath","") + selectedFilePath.getName().replace(".cvbi", ""));
ZipInputStream zis = null;
zis = new ZipInputStream(
new BufferedInputStream(zipFile));
@ -788,17 +791,17 @@ public class CustomRomActivity extends AppCompatActivity {
custom.setVisibility(View.VISIBLE);
try {
JSONObject jObj = new JSONObject(FileUtils.readFromFile(MainActivity.activity, new File(AppConfig.maindirpath
JSONObject jObj = new JSONObject(FileUtils.readFromFile(MainActivity.activity, new File(getAppConfigData.getString("maindirpath","")
+ selectedFilePath.getName().replace(".cvbi", "") + "/rom-data.json")));
title.setText(jObj.getString("title"));
icon.setText(AppConfig.maindirpath
icon.setText(getAppConfigData.getString("maindirpath","")
+ selectedFilePath.getName().replace(".cvbi", "") + "/" + jObj.getString("icon"));
drive.setText(AppConfig.maindirpath
drive.setText(getAppConfigData.getString("maindirpath","")
+ selectedFilePath.getName().replace(".cvbi", "") + "/" + jObj.getString("drive"));
qemu.setText(jObj.getString("qemu"));
ImageView ivIcon = findViewById(R.id.ivIcon);
Bitmap bmImg = BitmapFactory.decodeFile(AppConfig.maindirpath
Bitmap bmImg = BitmapFactory.decodeFile(getAppConfigData.getString("maindirpath","")
+ selectedFilePath.getName().replace(".cvbi", "") + "/" + jObj.getString("icon"));
ivIcon.setImageBitmap(bmImg);
UIUtils.UIAlert(activity, "rom by:\n" + jObj.getString("author") + "\n\n" + Html.fromHtml(jObj.getString("desc")), "DESCRIPTION");
@ -851,7 +854,7 @@ public class CustomRomActivity extends AppCompatActivity {
public void onDestroy() {
super.onDestroy();
File lol = new File(AppConfig.maindirpath + drive.getText().toString());
File lol = new File(getAppConfigData.getString("maindirpath","") + drive.getText().toString());
try {
lol.delete();
} catch (Exception e) {

View file

@ -1,6 +1,7 @@
package com.vectras.vm;
import static android.content.Intent.ACTION_OPEN_DOCUMENT;
import static android.content.Intent.ACTION_VIEW;
import static android.os.Build.VERSION.SDK_INT;
import static com.vectras.vm.utils.UIUtils.UIAlert;
@ -9,6 +10,8 @@ import android.app.Dialog;
import android.app.NotificationManager;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@ -228,17 +231,17 @@ public class MainActivity extends AppCompatActivity {
startActivity(new Intent(activity, AboutActivity.class));
}
if (id == R.id.navigation_item_help) {
String tw = AppConfig.vectrasWebsite;
Intent w = new Intent(Intent.ACTION_VIEW);
String tw = getAppConfigData.getString("vectrasWebsite","");
Intent w = new Intent(ACTION_VIEW);
w.setData(Uri.parse(tw));
startActivity(w);
} else if (id == R.id.navigation_item_website) {
String tw = AppConfig.vectrasHelp;
Intent w = new Intent(Intent.ACTION_VIEW);
String tw = getAppConfigData.getString("vectrasHelp","");
Intent w = new Intent(ACTION_VIEW);
w.setData(Uri.parse(tw));
startActivity(w);
} else if (id == R.id.navigation_item_import_iso) {
if (new File(AppConfig.maindirpath + "/drive.iso").exists()) {
if (new File(getAppConfigData.getString("maindirpath","") + "/drive.iso").exists()) {
AlertDialog ad;
ad = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create();
ad.setTitle("REPLACE ISO");
@ -261,7 +264,7 @@ public class MainActivity extends AppCompatActivity {
});
ad.setButton(Dialog.BUTTON_NEGATIVE, "REMOVE", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
File isoFile = new File(AppConfig.maindirpath + "/drive.iso");
File isoFile = new File(getAppConfigData.getString("maindirpath","") + "/drive.iso");
try {
isoFile.delete();
} catch (Exception e) {
@ -285,7 +288,7 @@ public class MainActivity extends AppCompatActivity {
startActivityForResult(intent, 1004);
}
} else if (id == R.id.navigation_item_hdd1) {
if (new File(AppConfig.maindirpath + "/hdd1.qcow2").exists()) {
if (new File(getAppConfigData.getString("maindirpath","") + "/hdd1.qcow2").exists()) {
AlertDialog ad;
ad = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create();
ad.setTitle("REPLACE HDD1");
@ -308,7 +311,7 @@ public class MainActivity extends AppCompatActivity {
});
ad.setButton(Dialog.BUTTON_NEGATIVE, "REMOVE", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
File isoFile = new File(AppConfig.maindirpath + "/hdd1.qcow2");
File isoFile = new File(getAppConfigData.getString("maindirpath","") + "/hdd1.qcow2");
try {
isoFile.delete();
} catch (Exception e) {
@ -321,11 +324,11 @@ public class MainActivity extends AppCompatActivity {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intentShareFile = new Intent(Intent.ACTION_SEND);
File fileWithinMyDir = new File(AppConfig.maindirpath + "/hdd1.qcow2");
File fileWithinMyDir = new File(getAppConfigData.getString("maindirpath","") + "/hdd1.qcow2");
if (fileWithinMyDir.exists()) {
intentShareFile.setType("*/*");
intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + AppConfig.maindirpath + "/hdd1.qcow2"));
intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + getAppConfigData.getString("maindirpath","") + "/hdd1.qcow2"));
intentShareFile.putExtra(Intent.EXTRA_SUBJECT,
"Sharing File...");
@ -350,7 +353,7 @@ public class MainActivity extends AppCompatActivity {
startActivityForResult(intent, 1005);
}
} else if (id == R.id.navigation_item_hdd2) {
if (new File(AppConfig.maindirpath + "/hdd2.qcow2").exists()) {
if (new File(getAppConfigData.getString("maindirpath","") + "/hdd2.qcow2").exists()) {
AlertDialog ad;
ad = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create();
ad.setTitle("REPLACE HDD2");
@ -373,7 +376,7 @@ public class MainActivity extends AppCompatActivity {
});
ad.setButton(Dialog.BUTTON_NEGATIVE, "REMOVE", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
File isoFile = new File(AppConfig.maindirpath + "/hdd2.qcow2");
File isoFile = new File(getAppConfigData.getString("maindirpath","") + "/hdd2.qcow2");
try {
isoFile.delete();
} catch (Exception e) {
@ -386,11 +389,11 @@ public class MainActivity extends AppCompatActivity {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intentShareFile = new Intent(Intent.ACTION_SEND);
File fileWithinMyDir = new File(AppConfig.maindirpath + "/hdd2.qcow2");
File fileWithinMyDir = new File(getAppConfigData.getString("maindirpath","") + "/hdd2.qcow2");
if (fileWithinMyDir.exists()) {
intentShareFile.setType("*/*");
intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + AppConfig.maindirpath + "/hdd2.qcow2"));
intentShareFile.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + getAppConfigData.getString("maindirpath","") + "/hdd2.qcow2"));
intentShareFile.putExtra(Intent.EXTRA_SUBJECT,
"Sharing File...");
@ -474,9 +477,55 @@ public class MainActivity extends AppCompatActivity {
startActivity(new Intent(activity, DataExplorerActivity.class));
} else if (id == R.id.navigation_item_donate) {
String tw = "https://www.buymeacoffee.com/vectrasvm/";
Intent w = new Intent(Intent.ACTION_VIEW);
Intent w = new Intent(ACTION_VIEW);
w.setData(Uri.parse(tw));
startActivity(w);
} else if (id== R.id.setup_sound) {
if (VectrasApp.isAppInstalled("com.termux", getApplicationContext())) {
AlertDialog alertDialog = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create();
alertDialog.setTitle(getResources().getString(R.string.setup_sound));
alertDialog.setMessage(getResources().getString(R.string.setup_sound_guide_content));
alertDialog.setCancelable(false);
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.start_setup), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("Setup", "curl -o setup.sh https://raw.githubusercontent.com/AnBui2004/termux/refs/heads/main/installpulseaudio.sh && chmod +rwx setup.sh && ./setup.sh && rm setup.sh");
clipboard.setPrimaryClip(clip);
Intent intent = new Intent();
intent.setAction(ACTION_VIEW);
intent.setData(Uri.parse("android-app://com.termux"));
startActivity(intent);
Toast.makeText(getApplicationContext(), getResources().getString(R.string.copied), Toast.LENGTH_LONG).show();
return;
}
});
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
alertDialog.show();
} else {
AlertDialog alertDialog = new AlertDialog.Builder(activity, R.style.MainDialogTheme).create();
alertDialog.setTitle(getResources().getString(R.string.termux_is_not_installed));
alertDialog.setMessage(getResources().getString(R.string.you_need_to_install_termux));
alertDialog.setCancelable(false);
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.install), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(ACTION_VIEW);
intent.setData(Uri.parse("https://github.com/termux/termux-app/releases"));
startActivity(intent);
return;
}
});
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
alertDialog.show();
}
}
return false;
}
@ -510,7 +559,7 @@ public class MainActivity extends AppCompatActivity {
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "JOIN", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String tg = "https://t.me/vectras_os";
Intent f = new Intent(Intent.ACTION_VIEW);
Intent f = new Intent(ACTION_VIEW);
f.setData(Uri.parse(tg));
startActivity(f);
return;
@ -629,7 +678,7 @@ public class MainActivity extends AppCompatActivity {
.setNegativeButton("Update", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(obj.getString("url"))));
startActivity(new Intent(ACTION_VIEW, Uri.parse(obj.getString("url"))));
} catch (JSONException e) {
}
@ -657,7 +706,6 @@ public class MainActivity extends AppCompatActivity {
try {
SharedPreferences dataAppConfig = activity.getSharedPreferences("appconfig", activity.MODE_PRIVATE);
jArray = new JSONArray(FileUtils.readFromFile(MainActivity.activity, new File(dataAppConfig.getString("maindirpath","")
+ "roms-data.json")));
@ -771,7 +819,8 @@ public class MainActivity extends AppCompatActivity {
}
public static boolean checkSharedFolder() { //TODO: not work idk why
File folder = new File(AppConfig.sharedFolder);
SharedPreferences dataAppConfig = activity.getSharedPreferences("appconfig", activity.MODE_PRIVATE);
File folder = new File(dataAppConfig.getString("sharedFolder",""));
File[] listOfFiles = folder.listFiles();
if (listOfFiles != null) {
@ -965,7 +1014,7 @@ public class MainActivity extends AppCompatActivity {
}
try {
try {
OutputStream out = new FileOutputStream(new File(AppConfig.maindirpath + "/drive.iso"));
OutputStream out = new FileOutputStream(new File(getAppConfigData.getString("maindirpath","") + "/drive.iso"));
try {
// Transfer bytes from in to out
byte[] buf = new byte[1024];
@ -1016,7 +1065,7 @@ public class MainActivity extends AppCompatActivity {
}
try {
try {
OutputStream out = new FileOutputStream(new File(AppConfig.maindirpath + "/hdd1.qcow2"));
OutputStream out = new FileOutputStream(new File(getAppConfigData.getString("maindirpath","") + "/hdd1.qcow2"));
try {
// Transfer bytes from in to out
byte[] buf = new byte[1024];
@ -1065,7 +1114,7 @@ public class MainActivity extends AppCompatActivity {
}
try {
try {
OutputStream out = new FileOutputStream(new File(AppConfig.maindirpath + "/hdd2.qcow2"));
OutputStream out = new FileOutputStream(new File(getAppConfigData.getString("maindirpath","") + "/hdd2.qcow2"));
try {
// Transfer bytes from in to out
byte[] buf = new byte[1024];
@ -1114,11 +1163,11 @@ public class MainActivity extends AppCompatActivity {
}
try {
try {
File romDir = new File(AppConfig.maindirpath + curRomName + "/");
File romDir = new File(getAppConfigData.getString("maindirpath","") + curRomName + "/");
if (!romDir.exists()) {
romDir.mkdirs();
}
OutputStream out = new FileOutputStream(new File(AppConfig.maindirpath + curRomName + "/" + "drv1-" + selectedFilePath.getName()));
OutputStream out = new FileOutputStream(new File(getAppConfigData.getString("maindirpath","") + curRomName + "/" + "drv1-" + selectedFilePath.getName()));
try {
// Transfer bytes from in to out
byte[] buf = new byte[1024];

View file

@ -84,7 +84,7 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
alertDialog.setCancelable(false);
alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "AUTO SETUP", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
startDownload();
setupVectrasStable();
return;
}
});
@ -413,6 +413,27 @@ public class SetupQemuActivity extends AppCompatActivity implements View.OnClick
" libusb ncurses-libs curl libnfs sdl2 gtk+3.0 fuse libpulse libseccomp jack pipewire liburing awesome lxterminal font-terminus xkeyboard-config fluxbox;" +
" tar -xzvf " + tarPath + " -C /;" +
" rm " + tarPath + ";" +
" apk add qemu-audio-sdl pulseaudio;" +
" echo export PULSE_SERVER=127.0.0.1 >> /etc/profile;" +
" mkdir -p ~/.vnc && echo -e \"555555\\n555555\" | vncpasswd -f > ~/.vnc/passwd && chmod 0600 ~/.vnc/passwd;" +
" echo \"installation successful! xssFjnj58Id\"");
}
private void setupVectrasStable() {
inBtn.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
String filesDir = activity.getFilesDir().getAbsolutePath();
String cmd = "";
cmd += "echo \"http://dl-cdn.alpinelinux.org/alpine/edge/testing\" >> /etc/apk/repositories;";
executeShellCommand(cmd);
executeShellCommand("set -e;" +
" echo 'Starting setup...';" +
" apk update;" +
" apk add tar libslirp libslirp-dev pulseaudio-dev glib-dev pixman-dev zlib-dev spice-dev" +
" libusbredirparser usbredir-dev libiscsi-dev sdl2 sdl2-dev libepoxy-dev virglrenderer-dev rdma-core" +
" libusb ncurses-libs curl libnfs sdl2 gtk+3.0 fuse libpulse libseccomp jack pipewire liburing awesome lxterminal font-terminus xkeyboard-config fluxbox;" +
" apk add qemu-system-x86_64 qemu-system-ppc qemu-system-i386 qemu-system-aarch64 qemu-pr-helper qemu-img qemu-audio-sdl qemu-ui-gtk pulseaudio;" +
" echo export PULSE_SERVER=127.0.0.1 >> /etc/profile;" +
" mkdir -p ~/.vnc && echo -e \"555555\\n555555\" | vncpasswd -f > ~/.vnc/passwd && chmod 0600 ~/.vnc/passwd;" +
" echo \"installation successful! xssFjnj58Id\"");
}

View file

@ -363,7 +363,7 @@ public class SplashActivity extends AppCompatActivity implements Runnable {
public void run() {
String filesDir = activity.getFilesDir().getAbsolutePath();
SharedPreferences prefs = getSharedPreferences(CREDENTIAL_SHARED_PREF, Context.MODE_PRIVATE);
if (new File(filesDir, "/distro/usr/local/bin/qemu-system-x86_64").exists())
if ((new File(filesDir, "/distro/usr/local/bin/qemu-system-x86_64").exists()) || (new File(filesDir, "/distro/usr/bin/qemu-system-x86_64").exists()))
startActivity(new Intent(this, MainActivity.class));
else
startActivity(new Intent(this, SetupQemuActivity.class));

View file

@ -157,7 +157,8 @@ public class StartVM {
spiceStr += "port=6999,disable-ticketing=on";
params.add(spiceStr);
} else if (MainSettingsManager.getVmUi(activity).equals("X11")) {
params.add("-display");
params.add("gtk");
}
params.add(extras);

View file

@ -9,6 +9,7 @@ import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.os.Build;
@ -454,12 +455,12 @@ public class VectrasApp extends Application {
public static void disablerunsh(Context context) {
Terminal vterm = new Terminal(context);
vterm.executeShellCommand("chmod -x /home/run.sh", false, MainActivity.activity);
vterm.executeShellCommand("sed -i '/run.sh/d' /etc/profile && chmod -x /home/run.sh", false, MainActivity.activity);
}
public static void createrunsh(String env,Context context) {
Terminal vterm = new Terminal(context);
vterm.executeShellCommand("echo 'fluxbox &' > /home/run.sh && echo 'chmod -x /home/run.sh' >> /home/run.sh && echo '"+ env +"' >> /home/run.sh && echo 'pkill -SIGKILL -u root' >> /home/run.sh && chmod +rwx /home/run.sh", true, MainActivity.activity);
vterm.executeShellCommand("echo '/home/run.sh' >> /etc/profile && echo 'sed -i '/run.sh/d' /etc/profile' > /home/run.sh && echo 'fluxbox &' >> /home/run.sh && echo 'chmod -x /home/run.sh' >> /home/run.sh && echo '"+ env +"' >> /home/run.sh && echo 'pkill -SIGKILL -u root' >> /home/run.sh && chmod +rwx /home/run.sh", true, MainActivity.activity);
}
public static void addrunshtostartup(Context context) {
@ -483,10 +484,22 @@ public class VectrasApp extends Application {
data.edit().putString("maindirpath", AppConfig.maindirpath).commit();
data.edit().putString("sharedFolder", AppConfig.sharedFolder).commit();
data.edit().putString("downloadsFolder", AppConfig.downloadsFolder).commit();
data.edit().putString("sharedFolder", AppConfig.vectrasWebsite).commit();
data.edit().putString("downloadsFolder", AppConfig.vectrasHelp).commit();
} catch (ExceptionInInitializerError e) {
} catch (NoClassDefFoundError e) {
}
}
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;
}
}
}

View file

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M560,829L560,747Q650,721 705,647Q760,573 760,479Q760,385 705,311Q650,237 560,211L560,129Q684,157 762,254.5Q840,352 840,479Q840,606 762,703.5Q684,801 560,829ZM120,600L120,360L280,360L480,160L480,800L280,600L120,600ZM560,640L560,318Q607,340 633.5,384Q660,428 660,480Q660,531 633.5,574.5Q607,618 560,640ZM400,354L314,440L200,440L200,520L314,520L400,606L400,354ZM300,480L300,480L300,480L300,480L300,480L300,480Z"/>
</vector>

View file

@ -38,6 +38,10 @@
android:id="@+id/navigation_item_settings"
android:icon="@drawable/round_settings_24"
android:title="@string/settings"/>
<item
android:id="@+id/setup_sound"
android:icon="@drawable/volume_up_24px"
android:title="@string/setup_sound"/>
<item
android:id="@+id/navigation_item_help"
android:icon="@drawable/round_help_24"

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">فيكترا</string>
<string name="app_version">v2.9.1 (Thunderbird)</string>
<string name="qemu_version">qemu-8.2.1-3dfx</string>
<string name="app_version">v2.9.1 (Firefox)</string>
<string name="qemu_version">مستقر</string>
<string name="str_home">الرئيسية</string>
<string name="str_logger">سجل</string>
<string name="fab_info">بدء المحاكاة</string>
@ -511,4 +511,10 @@
<string name="cpu">المعالج</string>
<string name="save_changes">حفظ التغييرات</string>
<string name="qemu_create_cmd">إنشاء أمر QEMU</string>
<string name="setup_sound">إعداد الصوت لـ Termux</string>
<string name="setup_sound_guide_content">تحذير: غير مخصص للاستخدام مع X11! يتيح هذا للآلات الافتراضية التي تعمل على VM Vectras تشغيل الصوت باستخدام Termux. إذا لم تقم بإعداد Termux بعد، فحدد بدء الإعداد، وسيتم نسخ الأمر تلقائيًا إلى الحافظة، تحتاج إلى لصق هذا الأمر وتشغيله في Termux لإكمال الإعداد. في المرة القادمة، تأكد من تشغيل Termux لتشغيل الصوت.</string>
<string name="copied">تم نسخها</string>
<string name="start_setup">بدء الإعداد</string>
<string name="termux_is_not_installed">لم يتم تثبيت Termux</string>
<string name="you_need_to_install_termux">تحتاج إلى تثبيت Termux قبل الإعداد.</string>
</resources>

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Vectras VM</string>
<string name="app_version" translatable="false">v2.9.1 (Thunderbird)</string>
<string name="qemu_version" translatable="false">qemu-8.2.1-3dfx</string>
<string name="app_version" translatable="false">v2.9.1 (Firefox)</string>
<string name="qemu_version" translatable="false">Stable</string>
<string name="str_home">Home</string>
<string name="str_logger">Logger</string>
<string name="fab_info">Start Emulation</string>
@ -523,4 +523,10 @@
<string name="cpu">CPU</string>
<string name="save_changes">SAVE CHANGES</string>
<string name="qemu_create_cmd">QEMU CREATE CMD</string>
<string name="setup_sound">Setup sound for Termux</string>
<string name="setup_sound_guide_content">WARNING: NOT FOR USE WITH X11! This enables virtual machines running on the Vectras VM to play audio using Termux. If you have not set up Termux yet, select Start setup, the command will be automatically copied to the clipboard, you need paste that command and run it in Termux to complete the setup. Next times, make sure Termux is running to play sound.</string>
<string name="copied">Copied.</string>
<string name="start_setup">Start setup</string>
<string name="termux_is_not_installed">Termux is not installed</string>
<string name="you_need_to_install_termux">You need to install Termux before setting up.</string>
</resources>