v2.9.5.11-3dfx

- Fixed keyboard not showing up after changing resolution in VNC screen.
- Added opening VNC settings in VNC screen.
- New VNC settings section.
- Added option to force refresh when there is a change in VNC screen.
This commit is contained in:
An Bui 2025-09-28 13:52:48 +07:00
parent f732bfb6dd
commit 22002abd70
19 changed files with 298 additions and 54 deletions

View file

@ -182,6 +182,7 @@ public class Config {
public static final String defaultInputMode = VncCanvasActivity.TOUCH_ZOOM_MODE;
public static String vmID = "";
public static String currentVNCServervmID = "";
public static boolean forceRefeshVNCDisplay = false;
public static void setDefault () {
defaultVNCHost = "0.0.0.0";

View file

@ -950,4 +950,16 @@ public class MainSettingsManager extends AppCompatActivity
return prefs.getInt("vncScaleMode", 0);
}
public static void setForceRefeshVNCDisplay(Context context, Boolean _boolean) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean("forceRefeshVNCDisplay", _boolean);
edit.commit();
}
public static Boolean getForceRefeshVNCDisplay(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
return prefs.getBoolean("forceRefeshVNCDisplay", false);
}
}

View file

@ -764,6 +764,7 @@ public class MainVNCActivity extends VncCanvasActivity {
setUIModeMobile(screenMode == VNCScreenMode.FitToScreen);
binding.lnNosignal.setVisibility(View.GONE);
this.vncCanvas.setFocusableInTouchMode(true);
});
}
@ -800,7 +801,11 @@ public class MainVNCActivity extends VncCanvasActivity {
// }
} else {
// Try reconnect.
tryReconnect();
if (Config.forceRefeshVNCDisplay) {
finish();
} else {
tryReconnect();
}
}
}

View file

@ -14,8 +14,7 @@ import static com.vectras.vm.utils.LibraryChecker.isPackageInstalled2;
import static com.vectras.vm.utils.UIUtils.UIAlert;
import com.vectras.vm.settings.UpdaterActivity;
import com.vectras.vm.settings.VNCActivity;
import com.vectras.vm.utils.DeviceUtils;
import com.vectras.vm.settings.ExternalVNCSettingsActivity;
import com.vectras.vm.utils.DialogUtils;
import com.vectras.vm.utils.NetworkUtils;
import com.vectras.vm.utils.NotificationUtils;
@ -35,7 +34,6 @@ import android.os.Environment;
import android.os.Handler;
import android.os.StrictMode;
import android.provider.DocumentsContract;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@ -845,7 +843,7 @@ public class MainActivity extends AppCompatActivity {
activity.getString(R.string.go_to_settings),
activity.getString(R.string.close),
true, R.drawable.warning_48px, true,
() -> activity.startActivity(new Intent(activity, VNCActivity.class)),
() -> activity.startActivity(new Intent(activity, ExternalVNCSettingsActivity.class)),
null,
null);
return;

View file

@ -40,6 +40,7 @@ import com.vectras.qemu.VNCConfig;
import com.vectras.qemu.utils.QmpClient;
import com.vectras.vm.MainRoms.AdapterMainRoms;
import com.vectras.vm.home.HomeActivity;
import com.vectras.vm.settings.VNCSettingsActivity;
import com.vectras.vm.utils.DialogUtils;
import com.vectras.vm.utils.FileUtils;
import com.vectras.vm.utils.JSONUtils;
@ -922,6 +923,11 @@ public class VMManager {
_dialog.dismiss();
});
_view.findViewById(R.id.ln_settings).setOnClickListener(v -> {
_activity.startActivity(new Intent(_activity, VNCSettingsActivity.class));
_dialog.dismiss();
});
if (MainSettingsManager.getVNCScaleMode(_activity) == VNCConfig.oneToOne) {
_view.findViewById(R.id.iv_screenOneToOne).setBackgroundResource(R.drawable.dialog_shape_single_button);
} else {

View file

@ -300,6 +300,7 @@ public class HomeActivity extends AppCompatActivity implements RomStoreFragment.
Log.d(TAG, "onResume");
Config.ui = MainSettingsManager.getVmUi(this);
Config.defaultVNCPort = Integer.parseInt(MainSettingsManager.getVncExternalDisplay(this));
Config.forceRefeshVNCDisplay = MainSettingsManager.getForceRefeshVNCDisplay(this);
if (!MainSettingsManager.getVncExternal(this))
NotificationUtils.clearAll(this);

View file

@ -25,7 +25,7 @@ import com.vectras.vm.MainService;
import com.vectras.vm.R;
import com.vectras.vm.VMManager;
import com.vectras.vm.logger.VectrasStatus;
import com.vectras.vm.settings.VNCActivity;
import com.vectras.vm.settings.ExternalVNCSettingsActivity;
import com.vectras.vm.utils.DialogUtils;
import com.vectras.vm.utils.NetworkUtils;
import com.vectras.vm.utils.ServiceUtils;
@ -100,7 +100,7 @@ public class HomeStartVM {
activity.getString(R.string.go_to_settings),
activity.getString(R.string.close),
true, R.drawable.warning_48px, true,
() -> activity.startActivity(new Intent(activity, VNCActivity.class)),
() -> activity.startActivity(new Intent(activity, ExternalVNCSettingsActivity.class)),
null,
null);
return;

View file

@ -11,21 +11,21 @@ import androidx.appcompat.app.AppCompatActivity;
import com.vectras.qemu.MainSettingsManager;
import com.vectras.vm.R;
import com.vectras.vm.databinding.ActivityVncactivityBinding;
import com.vectras.vm.databinding.ActivityExternalVncSettingsBinding;
import com.vectras.vm.utils.ClipboardUltils;
import java.util.Objects;
public class VNCActivity extends AppCompatActivity {
public class ExternalVNCSettingsActivity extends AppCompatActivity {
ActivityVncactivityBinding binding;
ActivityExternalVncSettingsBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_vncactivity);
binding = ActivityVncactivityBinding.inflate(getLayoutInflater());
setContentView(R.layout.activity_external_vnc_settings);
binding = ActivityExternalVncSettingsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);

View file

@ -37,7 +37,7 @@ public class UpdaterActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_vncactivity);
setContentView(R.layout.activity_external_vnc_settings);
binding = ActivityUpdaterBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);

View file

@ -0,0 +1,42 @@
package com.vectras.vm.settings;
import android.content.Intent;
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import com.vectras.qemu.MainSettingsManager;
import com.vectras.vm.R;
import com.vectras.vm.databinding.ActivityVncSettingsBinding;
import java.util.Objects;
public class VNCSettingsActivity extends AppCompatActivity {
ActivityVncSettingsBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_external_vnc_settings);
binding = ActivityVncSettingsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
binding.toolbar.setNavigationOnClickListener(view -> onBackPressed());
initialize();
}
private void initialize() {
binding.swForcerefesh.setOnCheckedChangeListener((buttonView, isChecked) -> MainSettingsManager.setForceRefeshVNCDisplay(this, isChecked));
binding.lnForcerefesh.setOnClickListener(v -> binding.swForcerefesh.toggle());
binding.swExternal.setOnCheckedChangeListener((buttonView, isChecked) -> MainSettingsManager.setVncExternal(this, isChecked));
binding.lnExternal.setOnClickListener( v -> startActivity(new Intent(this, ExternalVNCSettingsActivity.class)));
binding.swForcerefesh.setChecked(MainSettingsManager.getForceRefeshVNCDisplay(this));
binding.swExternal.setChecked(MainSettingsManager.getVncExternal(this));
}
}