Skip to content

Commit

Permalink
Add full screen mode feature for 2D browsing
Browse files Browse the repository at this point in the history
This commit adds a Fullscreen item in the hamburger menu to set the current window in the fullscreen mode. The commit also enables three edge cases:
- When users sets fullscreen mode, go into a fullscreen video, exit fullscreen video, the fullscreen mode is reserved.
- When users sets fullscreen mode, opens a new tab, that tab is opened in fullscreen mode too.
- When exitFullScreenMode() is called (e.g., in onPause()), fullscreen mode is exited correctly.

Fixes #1494
  • Loading branch information
haanhvu committed Feb 8, 2025
1 parent 8a40a50 commit 56b40ba
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,12 @@ private void updateUI() {
if (mAttachedWindow != null) {
mAttachedWindow.setIsFullScreen(false);
}
if (mAttachedWindow.getKeepFullscreenInHamburgerMenu()) {
postDelayed(() -> {
mAttachedWindow.setIsFullScreen(true);
mAttachedWindow.setKeepFullscreenInHamburgerMenu(false);
}, 2000);
}
if (mAudio != null) {
mAudio.playSound(AudioEngine.Sound.CLICK);
}
Expand Down Expand Up @@ -792,6 +798,11 @@ private void exitFullScreenMode() {
if (getSession().isInFullScreen()) {
getSession().exitFullScreen();
}
if (mAttachedWindow.getKeepFullscreenInHamburgerMenu()) {
mAttachedWindow.setIsFullScreen(false);
mAttachedWindow.setFullscreenInHamburgerMenuEnabled(false);
mAttachedWindow.setKeepFullscreenInHamburgerMenu(false);
}
}, 50);

mWidgetManager.updateWidget(mAttachedWindow);
Expand Down Expand Up @@ -1358,6 +1369,11 @@ public void onResize() {
enterResizeMode();
}

@Override
public void onFullScreen() {
mAttachedWindow.setFullscreenInHamburgerMenu();
}

@Override
public void onPassthrough() {
mWidgetManager.togglePassthrough();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@ public class WindowWidget extends UIWidget implements SessionChangeListener,
private SharedPreferences mPrefs;
private DownloadsManager mDownloadsManager;
private float mBrowserDensity;
private boolean fullscreenInHamburgerMenuEnabled;
private boolean keepFullscreenInHamburgerMenu;

public interface WindowListener {
default void onFocusRequest(@NonNull WindowWidget aWindow) {}
Expand Down Expand Up @@ -966,7 +968,16 @@ public boolean isResizing() {
return mIsResizing;
}

public void setFullscreenInHamburgerMenu() {
setIsFullScreen(true);
setFullscreenInHamburgerMenuEnabled(true);
}

public void setIsFullScreen(boolean isFullScreen) {
if (isFullScreen && fullscreenInHamburgerMenuEnabled) {
keepFullscreenInHamburgerMenu = true;
}

if (mViewModel.getIsFullscreen().getValue().get() != isFullScreen) {
mViewModel.setIsFullscreen(isFullScreen);
for (WindowListener listener: mListeners) {
Expand Down Expand Up @@ -2367,4 +2378,20 @@ private float getBrowserDensity() {
}
return mBrowserDensity;
}

public boolean getFullscreenInHamburgerMenuEnabled() {
return fullscreenInHamburgerMenuEnabled;
}

public void setFullscreenInHamburgerMenuEnabled(boolean fullscreenInHamburgerMenuEnabled) {
this.fullscreenInHamburgerMenuEnabled = fullscreenInHamburgerMenuEnabled;
}

public boolean getKeepFullscreenInHamburgerMenu() {
return keepFullscreenInHamburgerMenu;
}

public void setKeepFullscreenInHamburgerMenu(boolean keepFullscreenInHamburgerMenu) {
this.keepFullscreenInHamburgerMenu = keepFullscreenInHamburgerMenu;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1771,6 +1771,12 @@ public void showTabAddedNotification() {
}
}

if (mFocusedWindow.getFullscreenInHamburgerMenuEnabled()) {
mFocusedWindow.postDelayed(() -> {
mFocusedWindow.setIsFullScreen(true);
mFocusedWindow.setKeepFullscreenInHamburgerMenu(false);
}, 2000);
}
}

public void showTabSentNotification() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public interface MenuDelegate {
void onPageZoomIn();
void onPageZoomOut();
int getCurrentZoomLevel();
void onFullScreen();
}

public static final int SWITCH_ITEM_ID = 0;
Expand Down Expand Up @@ -189,6 +190,18 @@ private void updateItems() {

// In kiosk mode, only resize, find in page and passthrough are available.
if (!mWidgetManager.getFocusedWindow().isKioskMode()) {
mItems.add(new HamburgerMenuAdapter.MenuItem.Builder(
HamburgerMenuAdapter.MenuItem.TYPE_DEFAULT,
(menuItem) -> {
if (mDelegate != null) {
mDelegate.onFullScreen();
}
return null;
})
.withTitle(getContext().getString(R.string.hamburger_menu_fullscreen))
.withIcon(R.drawable.fullscreen_button)
.build());

final Session activeSession = SessionStore.get().getActiveSession();

if (!BuildConfig.FLAVOR_backend.equals("chromium")) {
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2089,6 +2089,10 @@ the Select` button. When clicked it bookmarks all the previously selected tabs -
it saves the Web App provided by the current page -->
<string name="hamburger_menu_save_web_app">Save Web app…</string>

<!-- This string is displayed inside the Hamburger menu at the right of the navigation bar. When clicked
it put the current window in fullscreen mode -->
<string name="hamburger_menu_fullscreen">Fullscreen</string>

<!-- This string is displayed in the tooltip that is displayed when the user hovers the hamburger menu icon -->
<string name="hamburger_menu_tooltip">Menu</string>

Expand Down

0 comments on commit 56b40ba

Please sign in to comment.