From 08a5be8738968727e752bb8fab9dccf51e563dea Mon Sep 17 00:00:00 2001 From: Manuel Martin Date: Mon, 18 May 2020 14:35:12 +0200 Subject: [PATCH] Improved set session code Simplify setActive to only deactivate the old session Use state for setActive --- .../vrbrowser/ui/widgets/WindowWidget.java | 27 +++++++++------- .../mozilla/vrbrowser/ui/widgets/Windows.java | 31 ++++--------------- 2 files changed, 22 insertions(+), 36 deletions(-) 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 4b933ec53..8391cf780 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 @@ -94,6 +94,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; @@ -1107,21 +1111,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) { @@ -1165,10 +1176,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(); @@ -1178,10 +1186,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 4a077cd9c..f88900b17 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 @@ -39,7 +39,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -1213,21 +1212,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); } } @@ -1238,16 +1230,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) { @@ -1303,9 +1291,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); @@ -1320,8 +1306,6 @@ public void onTabsClose(ArrayList aTabs) { cache.removeBitmap(session.getId()); SessionStore.get().destroySession(session); } - - SessionStore.get().setActiveSession(targetWindow.getSession()); } @Override @@ -1342,10 +1326,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.LEAVE_CURRENT_SESSION_ACTIVE); } }