diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java index d2e24e5bfa..a5999ccaac 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java @@ -116,7 +116,7 @@ public class TaskbarControllers { taskbarEduController.init(this); taskbarPopupController.init(this); taskbarForceVisibleImmersiveController.init(this); - taskbarAllAppsController.init(this); + taskbarAllAppsController.init(this, sharedState); mControllersToLog = new LoggableTaskbarController[] { taskbarDragController, navButtonController, navbarButtonsViewController, @@ -152,6 +152,7 @@ public class TaskbarControllers { taskbarAutohideSuspendController.onDestroy(); taskbarPopupController.onDestroy(); taskbarForceVisibleImmersiveController.onDestroy(); + taskbarAllAppsController.onDestroy(); mControllersToLog = null; } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java index 23beef0a8a..a5c55b0027 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarSharedState.java @@ -24,4 +24,6 @@ public class TaskbarSharedState { public boolean setupUIVisible = false; + public boolean allAppsVisible = false; + } diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsContext.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsContext.java index a67ca7089b..23da499c8f 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsContext.java @@ -166,7 +166,6 @@ class TaskbarAllAppsContext extends BaseTaskbarContext { super.onAttachedToWindow(); ViewTreeObserverWrapper.addOnComputeInsetsListener( getViewTreeObserver(), this); - mActivity.mAllAppsViewController.show(); } @Override diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java index cf9d778296..044459e33a 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java @@ -38,6 +38,7 @@ import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.taskbar.TaskbarActivityContext; import com.android.launcher3.taskbar.TaskbarControllers; +import com.android.launcher3.taskbar.TaskbarSharedState; import java.util.List; import java.util.Optional; @@ -62,6 +63,7 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList private final LayoutParams mLayoutParams; private TaskbarControllers mControllers; + private TaskbarSharedState mSharedState; /** Window context for all apps if it is open. */ private @Nullable TaskbarAllAppsContext mAllAppsContext; @@ -77,9 +79,19 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList } /** Initialize the controller. */ - public void init(TaskbarControllers controllers) { - if (FeatureFlags.ENABLE_ALL_APPS_IN_TASKBAR.get()) { - mControllers = controllers; + public void init(TaskbarControllers controllers, TaskbarSharedState sharedState) { + if (!FeatureFlags.ENABLE_ALL_APPS_IN_TASKBAR.get()) { + return; + } + mControllers = controllers; + mSharedState = sharedState; + + /* + * Recreate All Apps if it was open in the previous Taskbar instance (e.g. the configuration + * changed). + */ + if (mSharedState.allAppsVisible) { + show(false); } } @@ -112,10 +124,15 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList /** Opens the {@link TaskbarAllAppsContainerView} in a new window. */ public void show() { + show(true); + } + + private void show(boolean animate) { if (mProxyView.isOpen()) { return; } mProxyView.show(); + mSharedState.allAppsVisible = true; mAllAppsContext = new TaskbarAllAppsContext(mTaskbarContext, this, @@ -129,6 +146,7 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList mAllAppsContext.getAppsView().getFloatingHeaderView() .findFixedRowByType(PredictionRowView.class) .setPredictedApps(mPredictedApps); + mAllAppsContext.getAllAppsViewController().show(animate); } /** Closes the {@link TaskbarAllAppsContainerView}. */ @@ -148,6 +166,12 @@ public final class TaskbarAllAppsController implements OnDeviceProfileChangeList return; } mProxyView.close(false); + mSharedState.allAppsVisible = false; + onDestroy(); + } + + /** Destroys the controller and any All Apps window if present. */ + public void onDestroy() { mTaskbarContext.removeOnDeviceProfileChangeListener(this); Optional.ofNullable(mAllAppsContext) .map(c -> c.getSystemService(WindowManager.class)) diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java index 02aa3f208b..5d2d72af37 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java @@ -50,17 +50,21 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView