From 28d28bc8722af5b872083c77cd970e0ca5003faa Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 09:46:06 +0530 Subject: [PATCH 01/11] refactor(browser): allow applying desktop mode without reloading --- src/plugins/browser/android/com/foxdebug/browser/Browser.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index 7cfea53fb..80d3fda6f 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -403,6 +403,10 @@ private void setTextViewProperties(TextView textView, int height) { } private void setDesktopMode(boolean enabled) { + setDesktopMode(enabled, true); + } + + private void setDesktopMode(boolean enabled, boolean reload) { int width = 0; int height = 0; WebSettings webSettings = webView.getSettings(); From 752a64c4844dba30c6a8c594b0aa3ce40a4e5f66 Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 09:46:13 +0530 Subject: [PATCH 02/11] refactor(browser): make the reload in setDesktopMode optional --- src/plugins/browser/android/com/foxdebug/browser/Browser.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index 80d3fda6f..bb7a84a59 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -428,7 +428,9 @@ private void setDesktopMode(boolean enabled, boolean reload) { webSettings.setLoadWithOverviewMode(enabled); webSettings.setSupportZoom(enabled); webSettings.setBuiltInZoomControls(enabled); - webView.reload(); + if (reload) { + webView.reload(); + } } public void setDesktopMode() { From 477aedc7f9135339cd3ff9091f48ab5c95d6a0a6 Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 09:46:20 +0530 Subject: [PATCH 03/11] fix(browser): apply saved desktop mode before the first load to avoid a reload --- src/plugins/browser/android/com/foxdebug/browser/Browser.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index bb7a84a59..f407b8e38 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -341,6 +341,10 @@ private void restoreEmulator() { if (onlyConsole) return; if (!Emulator.hasDefault(context)) return; + // Apply the saved mode before the first navigation so the page is not + // loaded with the wrong user agent and then reloaded. + setDesktopMode(true, false); + webView .getViewTreeObserver() .addOnGlobalLayoutListener( From e0a18dbf29ce94190778a7629b3783c24c57b256 Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 09:46:27 +0530 Subject: [PATCH 04/11] fix(browser): only apply dimensions after layout, not desktop mode --- src/plugins/browser/android/com/foxdebug/browser/Browser.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index f407b8e38..fc8687255 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -361,7 +361,6 @@ public void onGlobalLayout() { emulator = true; menu.setChecked("Devices", true); updateDefaultItems(true); - setDesktopMode(true); setConsoleVisible(false); menu.setChecked("Console", false); menu.setVisible("Console", false); From 5a534528fffc6663f1ef5b37384f316e4f4b1a5f Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 18:53:53 +0530 Subject: [PATCH 05/11] fix(browser): re-fit saved presets to the current screen on restore --- .../com/foxdebug/browser/Emulator.java | 81 ++++++++++++------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Emulator.java b/src/plugins/browser/android/com/foxdebug/browser/Emulator.java index 862ae033f..25f0d70ea 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Emulator.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Emulator.java @@ -333,6 +333,12 @@ public void saveAsDefault() { .apply(); } + private Runnable restoredListener; + + public void setRestoredListener(Runnable listener) { + restoredListener = listener; + } + private void restoreDefaultDevice() { if (!hasDefault(context)) return; @@ -343,39 +349,60 @@ private void restoreDefaultDevice() { SeekBar widthSeekBar = seekBars.get("width"); SeekBar heightSeekBar = seekBars.get("height"); SeekBar scaleSeekBar = seekBars.get("scale"); - - int width = Math.min( - prefs.getInt("default_width", widthSeekBar.getMax()), - widthSeekBar.getMax() - ); - int height = Math.min( - prefs.getInt("default_height", heightSeekBar.getMax()), - heightSeekBar.getMax() - ); - - widthSeekBar.setProgress(width); - heightSeekBar.setProgress(height); - setMaxScale(width, height); - int scale = Math.min( - prefs.getInt("default_scale", 100), - scaleSeekBar.getMax() - ); - scaleSeekBar.setProgress(scale); - String name = prefs.getString("default_device", "Custom"); + + Device preset = null; for (Device device : deviceListView.devices) { - if (device.name.equals(name)) { - if (deviceListView.selectedDeviceView != null) { - deviceListView.selectedDeviceView.deselect(); - } - deviceListView.select(device); - selectedDevice = device; + if (device.id != customDevice.id && device.name.equals(name)) { + preset = device; break; } } - if (listener != null) { - listener.onChange(width, height, scale / 100f); + if (preset != null && listener != null) { + // A preset is re-fitted to the current screen, so it keeps its shape if + // the screen size changed since it was saved (rotation, split-screen, + // foldables). Only the scale is restored from the saved value. + if (deviceListView.selectedDeviceView != null) { + deviceListView.selectedDeviceView.deselect(); + } + deviceListView.select(preset); + selectDevice(preset); + + int scale = Math.min( + prefs.getInt("default_scale", scaleSeekBar.getMax()), + scaleSeekBar.getMax() + ); + scaleSeekBar.setProgress(scale); + listener.onChange(getWidthProgress(), getHeightProgress(), scale / 100f); + } else { + // Custom sizes are restored from the saved width/height. + int width = Math.min( + prefs.getInt("default_width", widthSeekBar.getMax()), + widthSeekBar.getMax() + ); + int height = Math.min( + prefs.getInt("default_height", heightSeekBar.getMax()), + heightSeekBar.getMax() + ); + + widthSeekBar.setProgress(width); + heightSeekBar.setProgress(height); + setMaxScale(width, height); + int scale = Math.min( + prefs.getInt("default_scale", 100), + scaleSeekBar.getMax() + ); + scaleSeekBar.setProgress(scale); + selectedDevice = customDevice; + + if (listener != null) { + listener.onChange(width, height, scale / 100f); + } + } + + if (restoredListener != null) { + restoredListener.run(); } } From b43da8f4fe8b8199733d98e8639ee8e7f476a863 Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 18:54:01 +0530 Subject: [PATCH 06/11] fix(browser): reload once after the saved size is applied --- .../browser/android/com/foxdebug/browser/Browser.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index fc8687255..4839de7f9 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -356,6 +356,14 @@ public void onGlobalLayout() { if (deviceEmulator == null) { createDeviceEmulatorLayout(); + deviceEmulator.setRestoredListener( + new Runnable() { + @Override + public void run() { + reloadAfterLayout(); + } + } + ); } emulator = true; From c7fcd738230039f8d50297e2674dc434a748e07e Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 18:54:10 +0530 Subject: [PATCH 07/11] fix(browser): don't resize the webview before the emulator is set up --- .../browser/android/com/foxdebug/browser/Browser.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index 4839de7f9..9fd8d8240 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -373,11 +373,8 @@ public void run() { menu.setChecked("Console", false); menu.setVisible("Console", false); addView(deviceEmulator); - fitWebViewTo( - deviceEmulator.getWidthProgress(), - deviceEmulator.getHeightProgress(), - deviceEmulator.getScaleProgress() - ); + // The emulator sets up its sliders on a later layout pass and then + // applies the saved size itself, so the webview is not resized here. } } ); From 4c629f7f8695513090928de6cc678a830903be90 Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 18:54:18 +0530 Subject: [PATCH 08/11] fix(browser): add reloadAfterLayout helper, only when a page was requested --- .../android/com/foxdebug/browser/Browser.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index 9fd8d8240..dada9dcb9 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -337,6 +337,24 @@ private void updateDefaultItems(boolean emulatorOn) { menu.setVisible("Clear Default", emulatorOn); } + private void reloadAfterLayout() { + // If no page was requested yet, the first load will already happen at + // the saved size, so there is nothing to reload. + if (url.isEmpty()) return; + + webView + .getViewTreeObserver() + .addOnGlobalLayoutListener( + new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + webView.getViewTreeObserver().removeOnGlobalLayoutListener(this); + webView.reload(); + } + } + ); + } + private void restoreEmulator() { if (onlyConsole) return; if (!Emulator.hasDefault(context)) return; From 1d23d80c47ca5b8d3d88883b9e9ea3175238746c Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 18:54:27 +0530 Subject: [PATCH 09/11] fix(browser): show "Clear Default" only when a default is saved --- .../browser/android/com/foxdebug/browser/Browser.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index dada9dcb9..cfcd2338b 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -334,7 +334,10 @@ public void onGlobalLayout() { private void updateDefaultItems(boolean emulatorOn) { menu.setVisible("Set as Default", emulatorOn); - menu.setVisible("Clear Default", emulatorOn); + menu.setVisible( + "Clear Default", + emulatorOn && Emulator.hasDefault(context) + ); } private void reloadAfterLayout() { From bf0ec37c1054b41e9d525c18460bc3dbf6a55651 Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 18:54:34 +0530 Subject: [PATCH 10/11] fix(browser): refresh default menu items after Set as Default --- src/plugins/browser/android/com/foxdebug/browser/Browser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index cfcd2338b..b032aef71 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -293,6 +293,7 @@ public void onGlobalLayout() { case "Set as Default": if (deviceEmulator != null) { deviceEmulator.saveAsDefault(); + updateDefaultItems(emulator); Toast .makeText( context, From 7f4afd86be8b990f2432cee62587a09e229bc76a Mon Sep 17 00:00:00 2001 From: Aadin Date: Sun, 11 Oct 2026 18:54:41 +0530 Subject: [PATCH 11/11] fix(browser): refresh default menu items after Clear Default --- src/plugins/browser/android/com/foxdebug/browser/Browser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/browser/android/com/foxdebug/browser/Browser.java b/src/plugins/browser/android/com/foxdebug/browser/Browser.java index b032aef71..bd0d4ab93 100644 --- a/src/plugins/browser/android/com/foxdebug/browser/Browser.java +++ b/src/plugins/browser/android/com/foxdebug/browser/Browser.java @@ -305,6 +305,7 @@ public void onGlobalLayout() { break; case "Clear Default": Emulator.clearDefault(context); + updateDefaultItems(emulator); Toast .makeText(context, "Default cleared", Toast.LENGTH_SHORT) .show();