mirror of
https://github.com/xoureldeen/Vectras-VM-Android.git
synced 2026-04-29 14:59:50 +00:00
Kuchen
This commit is contained in:
parent
e8559457e4
commit
aa9e285f2b
13 changed files with 109 additions and 35 deletions
|
|
@ -104,7 +104,7 @@ public class CqcmActivity extends AppCompatActivity {
|
|||
if (mapForCreateNewVM.containsKey("imgExtra")) {
|
||||
imgExtra = Objects.requireNonNull(mapForCreateNewVM.get("imgExtra")).toString();
|
||||
}
|
||||
VMManager.createNewVM(imgName, imgIcon, imgPath, imgArch, imgCdrom, imgExtra, vmID);
|
||||
VMManager.createNewVM(imgName, imgIcon, imgPath, imgArch, imgCdrom, imgExtra, vmID, VMManager.startRandomPort());
|
||||
} else {
|
||||
Toast.makeText(getApplicationContext(), "The data for the new virtual machine is corrupted and cannot be created.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ public class CustomRomActivity extends AppCompatActivity {
|
|||
public String secondVMdirectory = "";
|
||||
public boolean addromnowdone = false;
|
||||
public String vmID = VMManager.idGenerator();
|
||||
public int port = VMManager.startRandomPort();
|
||||
private boolean created = false;
|
||||
|
||||
public static CustomRomActivity activity;
|
||||
|
|
@ -1034,7 +1035,7 @@ public class CustomRomActivity extends AppCompatActivity {
|
|||
if (modify) {
|
||||
VMManager.editVM(Objects.requireNonNull(title.getText()).toString(), thumbnailPath, Objects.requireNonNull(drive.getText()).toString(), MainSettingsManager.getArch(activity), Objects.requireNonNull(cdrom.getText()).toString(), Objects.requireNonNull(qemu.getText()).toString(), getIntent().getIntExtra("POS", 0));
|
||||
} else {
|
||||
VMManager.createNewVM(Objects.requireNonNull(title.getText()).toString(), thumbnailPath, Objects.requireNonNull(drive.getText()).toString(), MainSettingsManager.getArch(activity), Objects.requireNonNull(cdrom.getText()).toString(), Objects.requireNonNull(qemu.getText()).toString(), vmID);
|
||||
VMManager.createNewVM(Objects.requireNonNull(title.getText()).toString(), thumbnailPath, Objects.requireNonNull(drive.getText()).toString(), MainSettingsManager.getArch(activity), Objects.requireNonNull(cdrom.getText()).toString(), Objects.requireNonNull(qemu.getText()).toString(), vmID, port);
|
||||
}
|
||||
|
||||
created = true;
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ public class MainActivity extends AppCompatActivity {
|
|||
linearnothinghere = findViewById(R.id.linearnothinghere);
|
||||
|
||||
TextView tvLogin = findViewById(R.id.tvLogin);
|
||||
tvLogin.setText("LOGIN --> " + Config.defaultVNCHost + ":" + (5900 + Config.defaultVNCPort)/* + "\nPASSWORD --> " + Config.defaultVNCPasswd*/);
|
||||
tvLogin.setText("LOGIN --> " + Config.defaultVNCHost + ":" + (5901)/* + "\nPASSWORD --> " + Config.defaultVNCPasswd*/);
|
||||
|
||||
Button stopBtn = findViewById(R.id.stopBtn);
|
||||
stopBtn.setOnClickListener(new View.OnClickListener() {
|
||||
|
|
@ -747,25 +747,42 @@ public class MainActivity extends AppCompatActivity {
|
|||
|
||||
if (MainSettingsManager.getcheckforupdatesfromthebetachannel(activity)) {
|
||||
versionNameonUpdate = obj.getString("versionNameBeta");
|
||||
|
||||
if (versionCode < obj.getInt("versionCode") || !versionNameonUpdate.equals(versionName)) {
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(activity, R.style.MainDialogTheme);
|
||||
alert.setTitle("Install the latest version")
|
||||
.setMessage(Html.fromHtml(obj.getString("MessageBeta") + "<br><br>Update size:<br>" + obj.getString("sizeBeta")))
|
||||
.setCancelable(obj.getBoolean("cancellableBeta"))
|
||||
.setNegativeButton("Update", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
try {
|
||||
startActivity(new Intent(ACTION_VIEW, Uri.parse(obj.getString("urlBeta"))));
|
||||
} catch (JSONException e) {
|
||||
|
||||
}
|
||||
}
|
||||
}).show();
|
||||
|
||||
}
|
||||
} else {
|
||||
versionNameonUpdate = obj.getString("versionName");
|
||||
}
|
||||
|
||||
if (versionCode < obj.getInt("versionCode") || !versionNameonUpdate.contains(versionName)) {
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(activity, R.style.MainDialogTheme);
|
||||
alert.setTitle("Install the latest version")
|
||||
.setMessage(Html.fromHtml(obj.getString("Message") + "<br><br>update size:<br>" + obj.getString("size")))
|
||||
.setCancelable(obj.getBoolean("cancellable"))
|
||||
.setNegativeButton("Update", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
try {
|
||||
startActivity(new Intent(ACTION_VIEW, Uri.parse(obj.getString("url"))));
|
||||
} catch (JSONException e) {
|
||||
if (versionCode < obj.getInt("versionCode") || !versionNameonUpdate.contains(versionName)) {
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(activity, R.style.MainDialogTheme);
|
||||
alert.setTitle("Install the latest version")
|
||||
.setMessage(Html.fromHtml(obj.getString("Message") + "<br><br>Update size:<br>" + obj.getString("size")))
|
||||
.setCancelable(obj.getBoolean("cancellable"))
|
||||
.setNegativeButton("Update", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
try {
|
||||
startActivity(new Intent(ACTION_VIEW, Uri.parse(obj.getString("url"))));
|
||||
} catch (JSONException e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}).show();
|
||||
}).show();
|
||||
|
||||
}
|
||||
}
|
||||
} else if (result.contains("Error on getting data") && showDialog) {
|
||||
errorUpdateDialog(result);
|
||||
|
|
@ -811,6 +828,11 @@ public class MainActivity extends AppCompatActivity {
|
|||
} catch (JSONException ignored) {
|
||||
romsMainData.vmID = "";
|
||||
}
|
||||
try {
|
||||
romsMainData.qmpPort = json_data.getInt("qmpPort");
|
||||
} catch (JSONException ignored) {
|
||||
romsMainData.qmpPort= 0;
|
||||
}
|
||||
try {
|
||||
romsMainData.itemDrv1 = json_data.getString("imgDrv1");
|
||||
} catch (JSONException ignored) {
|
||||
|
|
@ -930,6 +952,9 @@ public class MainActivity extends AppCompatActivity {
|
|||
|
||||
public static void startVM(String vmName, String env, String itemExtra, String itemPath) {
|
||||
|
||||
File romDir = new File(Config.getCacheDir()+ "/" + Config.vmID);
|
||||
romDir.mkdirs();
|
||||
|
||||
if (!VMManager.isthiscommandsafe(env)) {
|
||||
VectrasApp.oneDialog(activity.getResources().getString(R.string.problem_has_been_detected), activity.getResources().getString(R.string.harmful_command_was_detected), true, false, activity);
|
||||
return;
|
||||
|
|
@ -995,15 +1020,20 @@ public class MainActivity extends AppCompatActivity {
|
|||
handler.postDelayed(
|
||||
new Runnable() {
|
||||
public void run() {
|
||||
Intent serviceIntent = new Intent(activity, MainService.class);
|
||||
MainService.env = env;
|
||||
MainService.CHANNEL_ID = vmName;
|
||||
if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||
activity.startForegroundService(serviceIntent);
|
||||
if (isRunning) {
|
||||
MainService.startCommand(env, activity);
|
||||
} else {
|
||||
activity.startService(serviceIntent);
|
||||
Intent serviceIntent = new Intent(activity, MainService.class);
|
||||
MainService.env = env;
|
||||
MainService.CHANNEL_ID = vmName;
|
||||
if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||
activity.startForegroundService(serviceIntent);
|
||||
} else {
|
||||
activity.startService(serviceIntent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (MainSettingsManager.getVmUi(activity).equals("VNC")) {
|
||||
if (MainSettingsManager.getVncExternal(MainActivity.activity)) {
|
||||
extVncLayout.setVisibility(View.VISIBLE);
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import com.vectras.qemu.Config;
|
||||
import com.vectras.qemu.MainSettingsManager;
|
||||
import com.vectras.qemu.MainVNCActivity;
|
||||
import com.vectras.vm.AppConfig;
|
||||
|
|
@ -151,6 +152,12 @@ public class AdapterMainRoms extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||
public void onClick(View view) {
|
||||
VMManager.setArch(current.itemArch, MainActivity.activity);
|
||||
StartVM.cdrompath = current.imgCdrom;
|
||||
if (current.qmpPort == 0) {
|
||||
Config.setDefault();
|
||||
} else {
|
||||
Config.QMPPort = current.qmpPort;
|
||||
}
|
||||
Config.vmID = current.vmID;
|
||||
String env = StartVM.env(MainActivity.activity, current.itemExtra, current.itemPath, "");
|
||||
MainActivity.startVM(current.itemName, env, current.itemExtra, current.itemPath);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,4 +9,5 @@ public class DataMainRoms {
|
|||
public String itemExtra;
|
||||
public String imgCdrom;
|
||||
public String vmID;
|
||||
public int qmpPort;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
package com.vectras.vm;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
|
|
@ -107,4 +109,10 @@ public class MainService extends Service {
|
|||
manager.createNotificationChannel(serviceChannel);
|
||||
}
|
||||
}
|
||||
|
||||
public static void startCommand(String _env, Activity _activity) {
|
||||
Terminal vterm = new Terminal(_activity);
|
||||
vterm.executeShellCommand2("dwm", false, _activity);
|
||||
vterm.executeShellCommand2(_env, true, _activity);
|
||||
}
|
||||
}
|
||||
|
|
@ -257,7 +257,7 @@ public class StartVM {
|
|||
//params.add("-full-screen");
|
||||
|
||||
params.add("-qmp");
|
||||
params.add("tcp:localhost:4444,server,nowait");
|
||||
params.add("tcp:localhost:" + Config.QMPPort + ",server,nowait");
|
||||
|
||||
return String.join(" ", params);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ public class VMManager {
|
|||
public static int restoredVMs = 0;
|
||||
public static boolean isKeptSomeFiles = false;
|
||||
|
||||
public static void createNewVM(String name, String thumbnail, String drive, String arch, String cdrom, String params, String vmID) {
|
||||
public static void createNewVM(String name, String thumbnail, String drive, String arch, String cdrom, String params, String vmID, int port) {
|
||||
mapForCreateNewVM.clear();
|
||||
mapForCreateNewVM.put("imgName", name);
|
||||
mapForCreateNewVM.put("imgIcon", thumbnail);
|
||||
|
|
@ -52,6 +52,7 @@ public class VMManager {
|
|||
mapForCreateNewVM.put("imgExtra", params);
|
||||
mapForCreateNewVM.put("imgArch", arch);
|
||||
mapForCreateNewVM.put("vmID", vmID);
|
||||
mapForCreateNewVM.put("qmpPort", port);
|
||||
|
||||
listmapForCreateNewVM.clear();
|
||||
listmapForCreateNewVM = new Gson().fromJson(VectrasApp.readFile(AppConfig.romsdatajson), new TypeToken<ArrayList<HashMap<String, Object>>>(){}.getType());
|
||||
|
|
@ -76,6 +77,11 @@ public class VMManager {
|
|||
mapForCreateNewVM.put("imgCdrom", cdrom);
|
||||
mapForCreateNewVM.put("imgExtra", params);
|
||||
mapForCreateNewVM.put("imgArch", arch);
|
||||
if (listmapForCreateNewVM.get(position).containsKey("qmpPort")) {
|
||||
mapForCreateNewVM.put("qmpPort", listmapForCreateNewVM.get(position).get("qmpPort"));
|
||||
} else {
|
||||
mapForCreateNewVM.put("qmpPort", startRandomPort());
|
||||
}
|
||||
|
||||
if (listmapForCreateNewVM.get(position).containsKey("vmID")) {
|
||||
mapForCreateNewVM.put("vmID", Objects.requireNonNull(listmapForCreateNewVM.get(position).get("vmID")).toString());
|
||||
|
|
@ -195,6 +201,13 @@ public class VMManager {
|
|||
return addAdb + String.valueOf((long)(random.nextInt(10001)));
|
||||
}
|
||||
|
||||
public static int startRandomPort() {
|
||||
Random _random = new Random();
|
||||
int _min = 10000;
|
||||
int _max = 65535;
|
||||
return _random.nextInt(_max - _min + 1) + _min;
|
||||
}
|
||||
|
||||
public static void deleteVM() {
|
||||
listmapForRemoveVM.clear();
|
||||
listmapForRemoveVM = new Gson().fromJson(pendingJsonContent, new TypeToken<ArrayList<HashMap<String, Object>>>(){}.getType());
|
||||
|
|
@ -638,7 +651,7 @@ public class VMManager {
|
|||
});
|
||||
alertDialog.show();
|
||||
return true;
|
||||
} else if (_result.contains("No such file or directory")) {
|
||||
} 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);
|
||||
_activity.stopService(new Intent(_activity, MainService.class));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue