diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java index 1a2d3a5b6..2b0cdf96a 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java @@ -95,6 +95,10 @@ public class WindowWidget extends UIWidget implements SessionChangeListener, public static final int SESSION_RELEASE_DISPLAY = 0; public static final int SESSION_DO_NOT_RELEASE_DISPLAY = 1; + @IntDef(value = { DEACTIVATE_CURRENT_SESSION, LEAVE_CURRENT_SESSION_ACTIVE}) + public @interface SetSessionActiveState {} + public static final int DEACTIVATE_CURRENT_SESSION = 0; + public static final int LEAVE_CURRENT_SESSION_ACTIVE = 1; private Surface mSurface; private int mWidth; @@ -1108,21 +1112,28 @@ public void draw(Canvas aCanvas) { } } - public void setSession(@NonNull Session aSession) { - setSession(aSession, SESSION_RELEASE_DISPLAY); + public void setSession(@NonNull Session aSession, @SetSessionActiveState int previousSessionState) { + setSession(aSession, SESSION_RELEASE_DISPLAY, previousSessionState); } - public void setSession(@NonNull Session aSession, @OldSessionDisplayAction int aDisplayAction) { + public void setSession(@NonNull Session aSession, @OldSessionDisplayAction int aDisplayAction, @SetSessionActiveState int previousSessionState) { if (mSession != aSession) { Session oldSession = mSession; if (oldSession != null) { cleanListeners(oldSession); + if (previousSessionState == DEACTIVATE_CURRENT_SESSION) { + oldSession.setActive(false); + } if (aDisplayAction == SESSION_RELEASE_DISPLAY) { oldSession.releaseDisplay(); } } mSession = aSession; + + setupListeners(mSession); + SessionStore.get().setActiveSession(mSession); + mViewModel.setIsPrivateSession(mSession.isPrivateMode()); if (oldSession != null) { @@ -1166,10 +1177,7 @@ public void onStackSession(Session aSession) { // e.g. tab opened via window.open() aSession.updateLastUse(); Session current = mSession; - setupListeners(aSession); - setSession(aSession); - SessionStore.get().setActiveSession(aSession); - aSession.setActive(true); + setSession(aSession, WindowWidget.DEACTIVATE_CURRENT_SESSION); current.captureBackgroundBitmap(getWindowWidth(), getWindowHeight()).thenAccept(aVoid -> current.setActive(false)); mWidgetManager.getWindows().showTabAddedNotification(); @@ -1179,10 +1187,7 @@ public void onStackSession(Session aSession) { @Override public void onUnstackSession(Session aSession, Session aParent) { if (mSession == aSession) { - aParent.setActive(true); - setupListeners(aParent); - setSession(aParent); - SessionStore.get().setActiveSession(aParent); + setSession(aParent, WindowWidget.DEACTIVATE_CURRENT_SESSION); SessionStore.get().destroySession(aSession); } } diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java index d9625282f..b4f474d42 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java @@ -1230,21 +1230,14 @@ public void onTabSelect(Session aTab) { Session moveTo = targetWindow.getSession(); moveFrom.surfaceDestroyed(); moveTo.surfaceDestroyed(); - windowToMove.setupListeners(moveTo); - windowToMove.setSession(moveTo, WindowWidget.SESSION_DO_NOT_RELEASE_DISPLAY); - targetWindow.setupListeners(moveFrom); - targetWindow.setSession(moveFrom, WindowWidget.SESSION_DO_NOT_RELEASE_DISPLAY); - SessionStore.get().setActiveSession(targetWindow.getSession()); + windowToMove.setSession(moveTo, WindowWidget.SESSION_DO_NOT_RELEASE_DISPLAY, WindowWidget.LEAVE_CURRENT_SESSION_ACTIVE); + targetWindow.setSession(moveFrom, WindowWidget.SESSION_DO_NOT_RELEASE_DISPLAY, WindowWidget.LEAVE_CURRENT_SESSION_ACTIVE); windowToMove.setActiveWindow(false); targetWindow.setActiveWindow(true); } else { setFirstPaint(targetWindow, aTab); - targetWindow.getSession().setActive(false); - targetWindow.setupListeners(aTab); - aTab.setActive(true); - targetWindow.setSession(aTab); - SessionStore.get().setActiveSession(aTab); + targetWindow.setSession(aTab, WindowWidget.DEACTIVATE_CURRENT_SESSION); } } @@ -1255,16 +1248,12 @@ public void addTab(WindowWidget targetWindow) { public void addTab(@NonNull WindowWidget targetWindow, @Nullable String aUri) { Session session = SessionStore.get().createSuspendedSession(aUri, targetWindow.getSession().isPrivateMode()); setFirstPaint(targetWindow, session); - targetWindow.getSession().setActive(false); - targetWindow.setupListeners(session); - session.setActive(true); - targetWindow.setSession(session); + targetWindow.setSession(session, WindowWidget.DEACTIVATE_CURRENT_SESSION); if (aUri == null || aUri.isEmpty()) { session.loadHomePage(); } else { session.loadUri(aUri); } - SessionStore.get().setActiveSession(session); } public void addBackgroundTab(WindowWidget targetWindow, String aUri) { @@ -1320,9 +1309,7 @@ public void onTabsClose(ArrayList aTabs) { Session tab = available.get(0); if (tab != null) { setFirstPaint(window, tab); - window.setupListeners(tab); - tab.setActive(true); - window.setSession(tab); + window.setSession(tab, WindowWidget.LEAVE_CURRENT_SESSION_ACTIVE); } available.remove(0); @@ -1337,8 +1324,6 @@ public void onTabsClose(ArrayList aTabs) { cache.removeBitmap(session.getId()); SessionStore.get().destroySession(session); } - - SessionStore.get().setActiveSession(targetWindow.getSession()); } @Override @@ -1359,10 +1344,7 @@ public void onTabsReceived(@NonNull List aTabs) { if (i == 0 && !fullscreen) { // Set the first received tab of the list the current one. - SessionStore.get().setActiveSession(session); - targetWindow.setupListeners(session); - targetWindow.getSession().setActive(false); - targetWindow.setSession(session); + targetWindow.setSession(session, WindowWidget.DEACTIVATE_CURRENT_SESSION); } }