Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 45 additions & 8 deletions src/plugins/browser/android/com/foxdebug/browser/Browser.java
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,7 @@ public void onGlobalLayout() {
case "Set as Default":
if (deviceEmulator != null) {
deviceEmulator.saveAsDefault();
updateDefaultItems(emulator);
Toast
.makeText(
context,
Expand All @@ -304,6 +305,7 @@ public void onGlobalLayout() {
break;
case "Clear Default":
Emulator.clearDefault(context);
updateDefaultItems(emulator);
Toast
.makeText(context, "Default cleared", Toast.LENGTH_SHORT)
.show();
Expand Down Expand Up @@ -334,13 +336,38 @@ 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() {
// 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;

// 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(
Expand All @@ -352,21 +379,25 @@ public void onGlobalLayout() {

if (deviceEmulator == null) {
createDeviceEmulatorLayout();
deviceEmulator.setRestoredListener(
new Runnable() {
@Override
public void run() {
reloadAfterLayout();
}
}
);
}

emulator = true;
menu.setChecked("Devices", true);
updateDefaultItems(true);
setDesktopMode(true);
setConsoleVisible(false);
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.
}
}
);
Expand Down Expand Up @@ -403,6 +434,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();
Expand All @@ -424,7 +459,9 @@ private void setDesktopMode(boolean enabled) {
webSettings.setLoadWithOverviewMode(enabled);
webSettings.setSupportZoom(enabled);
webSettings.setBuiltInZoomControls(enabled);
webView.reload();
if (reload) {
webView.reload();
}
}

public void setDesktopMode() {
Expand Down
81 changes: 54 additions & 27 deletions src/plugins/browser/android/com/foxdebug/browser/Emulator.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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();
}
}

Expand Down
Loading