3939import java .util .ArrayList ;
4040import java .util .Collections ;
4141import java .util .List ;
42- import java .util .function .Predicate ;
4342import java .util .stream .Collectors ;
4443import java .util .stream .Stream ;
4544
@@ -134,6 +133,8 @@ class WindowsState {
134133 private Services mServices ;
135134 private PromptDialogWidget mNoInternetDialog ;
136135 private boolean mCompositorPaused = false ;
136+ private WindowsState mWindowsState ;
137+ private boolean mIsRestoreEnabled ;
137138
138139 public enum PanelType {
139140 NONE ,
@@ -182,6 +183,8 @@ public Windows(Context aContext) {
182183
183184 mWidgetManager .addConnectivityListener (mConnectivityDelegate );
184185
186+ mIsRestoreEnabled = SettingsStore .getInstance (mContext ).isRestoreTabsEnabled ();
187+ mWindowsState = restoreState ();
185188 restoreWindows ();
186189 }
187190
@@ -698,35 +701,12 @@ private WindowWidget getRightWindow() {
698701 }
699702
700703 private void restoreWindows () {
701- boolean restoreEnabled = SettingsStore .getInstance (mContext ).isRestoreTabsEnabled ();
702- WindowsState windowsState = restoreState ();
703- if (restoreEnabled && windowsState != null ) {
704- ArrayList <Session > restoredSessions = new ArrayList <>();
705- if (windowsState .tabs != null ) {
706- windowsState .tabs .forEach (state -> {
707- restoredSessions .add (SessionStore .get ().createSuspendedSession (state ));
708- GleanMetricsService .Tabs .openedCounter (GleanMetricsService .Tabs .TabSource .PRE_EXISTING );
709- });
710- }
711- mPrivateMode = false ;
712- for (WindowState windowState : windowsState .regularWindowsState ) {
713- if (windowState .tabIndex >= 0 && windowState .tabIndex < restoredSessions .size ()) {
714- addRestoredWindow (windowState , restoredSessions .get (windowState .tabIndex ));
715- } else if (windowState .tabIndex < 0 ) {
716- WindowWidget widget = addRestoredWindow (windowState , null );
717- if ((widget != null ) && (widget .getSession () != null )) {
718- widget .getSession ().loadHomePage ();
719- }
720- }
721- }
722- mPrivateMode = !windowsState .privateMode ;
723- if (windowsState .privateMode ) {
724- enterPrivateMode ();
725- } else {
726- exitPrivateMode ();
704+ if (mIsRestoreEnabled && mWindowsState != null ) {
705+ for (WindowState windowState : mWindowsState .regularWindowsState ) {
706+ addRestoredWindow (windowState , null );
727707 }
728708
729- WindowWidget windowToFocus = getWindowWithPlacement (windowsState .focusedWindowPlacement );
709+ WindowWidget windowToFocus = getWindowWithPlacement (mWindowsState .focusedWindowPlacement );
730710 if (windowToFocus == null ) {
731711 windowToFocus = getFrontWindow ();
732712 if (windowToFocus == null && getCurrentWindows ().size () > 0 ) {
@@ -746,6 +726,43 @@ private void restoreWindows() {
746726 updateViews ();
747727 }
748728
729+ public void restoreSessions () {
730+ if (mIsRestoreEnabled && mWindowsState != null ) {
731+ ArrayList <Session > restoredSessions = new ArrayList <>();
732+ if (mWindowsState .tabs != null ) {
733+ mWindowsState .tabs .forEach (state -> {
734+ restoredSessions .add (SessionStore .get ().createSuspendedSession (state ));
735+ GleanMetricsService .Tabs .openedCounter (GleanMetricsService .Tabs .TabSource .PRE_EXISTING );
736+ });
737+ }
738+
739+ for (WindowState windowState : mWindowsState .regularWindowsState ) {
740+ WindowWidget targetWindow = getWindowWithPlacement (windowState .placement );
741+ if (targetWindow != null ) {
742+ if (windowState .tabIndex >= 0 && windowState .tabIndex < restoredSessions .size ()) {
743+ Session defaultSession = targetWindow .getSession ();
744+ Session session = restoredSessions .get (windowState .tabIndex );
745+ targetWindow .setupListeners (session );
746+ session .setActive (true );
747+ targetWindow .setSession (session );
748+ SessionStore .get ().setActiveSession (session );
749+ // Destroy the default blank session
750+ SessionStore .get ().destroySession (defaultSession );
751+
752+ } else {
753+ targetWindow .loadHome ();
754+ }
755+ }
756+ }
757+
758+ if (mWindowsState .privateMode ) {
759+ enterPrivateMode ();
760+ } else {
761+ exitPrivateMode ();
762+ }
763+ }
764+ }
765+
749766 private void removeWindow (@ NonNull WindowWidget aWindow ) {
750767 BitmapCache .getInstance (mContext ).removeBitmap (aWindow .getSession ().getId ());
751768 mWidgetManager .removeWidget (aWindow );
0 commit comments