Loading quickstep/res/layout/taskbar_all_apps.xml +5 −12 Original line number Original line Diff line number Diff line Loading @@ -14,18 +14,11 @@ See the License for the specific language governing permissions and See the License for the specific language governing permissions and limitations under the License. limitations under the License. --> --> <com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:accessibilityPaneTitle="@string/all_apps_label"> <com.android.launcher3.taskbar.allapps.TaskbarAllAppsContainerView <com.android.launcher3.taskbar.allapps.TaskbarAllAppsContainerView android:id="@+id/apps_view" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_height="match_parent" android:clipChildren="true" android:clipChildren="true" android:clipToPadding="false" android:clipToPadding="false" android:focusable="false" android:focusable="false" android:saveEnabled="false" /> android:saveEnabled="false" /> </com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView> quickstep/res/layout/taskbar_all_apps_sheet.xml 0 → 100644 +26 −0 Original line number Original line Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2023 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:accessibilityPaneTitle="@string/all_apps_label"> <include android:id="@+id/apps_view" layout="@layout/taskbar_all_apps" /> </com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView> quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -226,6 +226,7 @@ public class TaskbarControllers { taskbarPopupController.onDestroy(); taskbarPopupController.onDestroy(); taskbarForceVisibleImmersiveController.onDestroy(); taskbarForceVisibleImmersiveController.onDestroy(); taskbarOverlayController.onDestroy(); taskbarOverlayController.onDestroy(); taskbarAllAppsController.onDestroy(); navButtonController.onDestroy(); navButtonController.onDestroy(); taskbarInsetsController.onDestroy(); taskbarInsetsController.onDestroy(); voiceInteractionWindowController.onDestroy(); voiceInteractionWindowController.onDestroy(); Loading quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java +38 −10 Original line number Original line Diff line number Diff line Loading @@ -45,8 +45,10 @@ import java.util.function.Predicate; public final class TaskbarAllAppsController { public final class TaskbarAllAppsController { private TaskbarControllers mControllers; private TaskbarControllers mControllers; private @Nullable TaskbarOverlayContext mOverlayContext; private @Nullable TaskbarAllAppsSlideInView mSlideInView; private @Nullable TaskbarAllAppsSlideInView mSlideInView; private @Nullable TaskbarAllAppsContainerView mAppsView; private @Nullable TaskbarAllAppsContainerView mAppsView; private @Nullable TaskbarSearchSessionController mSearchSessionController; // Application data models. // Application data models. private AppInfo[] mApps; private AppInfo[] mApps; Loading @@ -70,6 +72,11 @@ public final class TaskbarAllAppsController { } } } } /** Clean up the controller. */ public void onDestroy() { cleanUpOverlay(); } /** Updates the current {@link AppInfo} instances. */ /** Updates the current {@link AppInfo} instances. */ public void setApps(AppInfo[] apps, int flags, Map<PackageUserKey, Integer> map) { public void setApps(AppInfo[] apps, int flags, Map<PackageUserKey, Integer> map) { mApps = apps; mApps = apps; Loading @@ -96,6 +103,9 @@ public final class TaskbarAllAppsController { .findFixedRowByType(PredictionRowView.class) .findFixedRowByType(PredictionRowView.class) .setPredictedApps(mPredictedApps); .setPredictedApps(mPredictedApps); } } if (mSearchSessionController != null) { mSearchSessionController.setZeroStatePredictedItems(predictedApps); } } } /** Updates the current notification dots. */ /** Updates the current notification dots. */ Loading Loading @@ -127,20 +137,25 @@ public final class TaskbarAllAppsController { // to catch invalid states. // to catch invalid states. mControllers.getSharedState().allAppsVisible = true; mControllers.getSharedState().allAppsVisible = true; TaskbarOverlayContext overlayContext = mOverlayContext = mControllers.taskbarOverlayController.requestWindow(); mControllers.taskbarOverlayController.requestWindow(); mSlideInView = (TaskbarAllAppsSlideInView) overlayContext.getLayoutInflater().inflate( // Initialize search session for All Apps. R.layout.taskbar_all_apps, overlayContext.getDragLayer(), false); mSearchSessionController = TaskbarSearchSessionController.newInstance(mOverlayContext); mOverlayContext.setSearchSessionController(mSearchSessionController); mSearchSessionController.setZeroStatePredictedItems(mPredictedApps); mSearchSessionController.startLifecycle(); mSlideInView = (TaskbarAllAppsSlideInView) mOverlayContext.getLayoutInflater().inflate( R.layout.taskbar_all_apps_sheet, mOverlayContext.getDragLayer(), false); mSlideInView.addOnCloseListener(() -> { mSlideInView.addOnCloseListener(() -> { mControllers.getSharedState().allAppsVisible = false; mControllers.getSharedState().allAppsVisible = false; mSlideInView = null; cleanUpOverlay(); mAppsView = null; }); }); TaskbarAllAppsViewController viewController = new TaskbarAllAppsViewController( TaskbarAllAppsViewController viewController = new TaskbarAllAppsViewController( overlayContext, mSlideInView, mControllers); mOverlayContext, mSlideInView, mControllers); viewController.show(animate); viewController.show(animate); mAppsView = overlayContext.getAppsView(); mAppsView = mOverlayContext.getAppsView(); mAppsView.getAppsStore().setApps(mApps, mAppsModelFlags, mPackageUserKeytoUidMap); mAppsView.getAppsStore().setApps(mApps, mAppsModelFlags, mPackageUserKeytoUidMap); mAppsView.getFloatingHeaderView() mAppsView.getFloatingHeaderView() .findFixedRowByType(PredictionRowView.class) .findFixedRowByType(PredictionRowView.class) Loading @@ -149,8 +164,21 @@ public final class TaskbarAllAppsController { // Create a shared drag layer between taskbar and taskbarAllApps so that when dragging // Create a shared drag layer between taskbar and taskbarAllApps so that when dragging // starts and taskbarAllApps can close, but the drag layer that the view is being dragged in // starts and taskbarAllApps can close, but the drag layer that the view is being dragged in // doesn't also close // doesn't also close overlayContext.getDragController().setDisallowGlobalDrag(mDisallowGlobalDrag); mOverlayContext.getDragController().setDisallowGlobalDrag(mDisallowGlobalDrag); overlayContext.getDragController().setDisallowLongClick(mDisallowLongClick); mOverlayContext.getDragController().setDisallowLongClick(mDisallowLongClick); } private void cleanUpOverlay() { if (mSearchSessionController != null) { mSearchSessionController.onDestroy(); mSearchSessionController = null; } if (mOverlayContext != null) { mOverlayContext.setSearchSessionController(null); mOverlayContext = null; } mSlideInView = null; mAppsView = null; } } @VisibleForTesting @VisibleForTesting Loading quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarSearchSessionController.kt 0 → 100644 +52 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.taskbar.allapps import android.content.Context import com.android.launcher3.R import com.android.launcher3.config.FeatureFlags import com.android.launcher3.model.data.ItemInfo import com.android.launcher3.util.ResourceBasedOverride import com.android.launcher3.util.ResourceBasedOverride.Overrides /** Stub for managing the Taskbar search session. */ open class TaskbarSearchSessionController : ResourceBasedOverride { /** Start the search session lifecycle. */ open fun startLifecycle() {} /** Destroy the search session. */ open fun onDestroy() {} /** Updates the predicted items shown in the zero-state. */ open fun setZeroStatePredictedItems(items: List<ItemInfo>) {} companion object { @JvmStatic fun newInstance(context: Context): TaskbarSearchSessionController { if (!FeatureFlags.ENABLE_ALL_APPS_SEARCH_IN_TASKBAR.get()) { return TaskbarSearchSessionController() } return Overrides.getObject( TaskbarSearchSessionController::class.java, context, R.string.taskbar_search_session_controller_class, ) } } } Loading
quickstep/res/layout/taskbar_all_apps.xml +5 −12 Original line number Original line Diff line number Diff line Loading @@ -14,18 +14,11 @@ See the License for the specific language governing permissions and See the License for the specific language governing permissions and limitations under the License. limitations under the License. --> --> <com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:accessibilityPaneTitle="@string/all_apps_label"> <com.android.launcher3.taskbar.allapps.TaskbarAllAppsContainerView <com.android.launcher3.taskbar.allapps.TaskbarAllAppsContainerView android:id="@+id/apps_view" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_height="match_parent" android:clipChildren="true" android:clipChildren="true" android:clipToPadding="false" android:clipToPadding="false" android:focusable="false" android:focusable="false" android:saveEnabled="false" /> android:saveEnabled="false" /> </com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView>
quickstep/res/layout/taskbar_all_apps_sheet.xml 0 → 100644 +26 −0 Original line number Original line Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2023 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:accessibilityPaneTitle="@string/all_apps_label"> <include android:id="@+id/apps_view" layout="@layout/taskbar_all_apps" /> </com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView>
quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -226,6 +226,7 @@ public class TaskbarControllers { taskbarPopupController.onDestroy(); taskbarPopupController.onDestroy(); taskbarForceVisibleImmersiveController.onDestroy(); taskbarForceVisibleImmersiveController.onDestroy(); taskbarOverlayController.onDestroy(); taskbarOverlayController.onDestroy(); taskbarAllAppsController.onDestroy(); navButtonController.onDestroy(); navButtonController.onDestroy(); taskbarInsetsController.onDestroy(); taskbarInsetsController.onDestroy(); voiceInteractionWindowController.onDestroy(); voiceInteractionWindowController.onDestroy(); Loading
quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java +38 −10 Original line number Original line Diff line number Diff line Loading @@ -45,8 +45,10 @@ import java.util.function.Predicate; public final class TaskbarAllAppsController { public final class TaskbarAllAppsController { private TaskbarControllers mControllers; private TaskbarControllers mControllers; private @Nullable TaskbarOverlayContext mOverlayContext; private @Nullable TaskbarAllAppsSlideInView mSlideInView; private @Nullable TaskbarAllAppsSlideInView mSlideInView; private @Nullable TaskbarAllAppsContainerView mAppsView; private @Nullable TaskbarAllAppsContainerView mAppsView; private @Nullable TaskbarSearchSessionController mSearchSessionController; // Application data models. // Application data models. private AppInfo[] mApps; private AppInfo[] mApps; Loading @@ -70,6 +72,11 @@ public final class TaskbarAllAppsController { } } } } /** Clean up the controller. */ public void onDestroy() { cleanUpOverlay(); } /** Updates the current {@link AppInfo} instances. */ /** Updates the current {@link AppInfo} instances. */ public void setApps(AppInfo[] apps, int flags, Map<PackageUserKey, Integer> map) { public void setApps(AppInfo[] apps, int flags, Map<PackageUserKey, Integer> map) { mApps = apps; mApps = apps; Loading @@ -96,6 +103,9 @@ public final class TaskbarAllAppsController { .findFixedRowByType(PredictionRowView.class) .findFixedRowByType(PredictionRowView.class) .setPredictedApps(mPredictedApps); .setPredictedApps(mPredictedApps); } } if (mSearchSessionController != null) { mSearchSessionController.setZeroStatePredictedItems(predictedApps); } } } /** Updates the current notification dots. */ /** Updates the current notification dots. */ Loading Loading @@ -127,20 +137,25 @@ public final class TaskbarAllAppsController { // to catch invalid states. // to catch invalid states. mControllers.getSharedState().allAppsVisible = true; mControllers.getSharedState().allAppsVisible = true; TaskbarOverlayContext overlayContext = mOverlayContext = mControllers.taskbarOverlayController.requestWindow(); mControllers.taskbarOverlayController.requestWindow(); mSlideInView = (TaskbarAllAppsSlideInView) overlayContext.getLayoutInflater().inflate( // Initialize search session for All Apps. R.layout.taskbar_all_apps, overlayContext.getDragLayer(), false); mSearchSessionController = TaskbarSearchSessionController.newInstance(mOverlayContext); mOverlayContext.setSearchSessionController(mSearchSessionController); mSearchSessionController.setZeroStatePredictedItems(mPredictedApps); mSearchSessionController.startLifecycle(); mSlideInView = (TaskbarAllAppsSlideInView) mOverlayContext.getLayoutInflater().inflate( R.layout.taskbar_all_apps_sheet, mOverlayContext.getDragLayer(), false); mSlideInView.addOnCloseListener(() -> { mSlideInView.addOnCloseListener(() -> { mControllers.getSharedState().allAppsVisible = false; mControllers.getSharedState().allAppsVisible = false; mSlideInView = null; cleanUpOverlay(); mAppsView = null; }); }); TaskbarAllAppsViewController viewController = new TaskbarAllAppsViewController( TaskbarAllAppsViewController viewController = new TaskbarAllAppsViewController( overlayContext, mSlideInView, mControllers); mOverlayContext, mSlideInView, mControllers); viewController.show(animate); viewController.show(animate); mAppsView = overlayContext.getAppsView(); mAppsView = mOverlayContext.getAppsView(); mAppsView.getAppsStore().setApps(mApps, mAppsModelFlags, mPackageUserKeytoUidMap); mAppsView.getAppsStore().setApps(mApps, mAppsModelFlags, mPackageUserKeytoUidMap); mAppsView.getFloatingHeaderView() mAppsView.getFloatingHeaderView() .findFixedRowByType(PredictionRowView.class) .findFixedRowByType(PredictionRowView.class) Loading @@ -149,8 +164,21 @@ public final class TaskbarAllAppsController { // Create a shared drag layer between taskbar and taskbarAllApps so that when dragging // Create a shared drag layer between taskbar and taskbarAllApps so that when dragging // starts and taskbarAllApps can close, but the drag layer that the view is being dragged in // starts and taskbarAllApps can close, but the drag layer that the view is being dragged in // doesn't also close // doesn't also close overlayContext.getDragController().setDisallowGlobalDrag(mDisallowGlobalDrag); mOverlayContext.getDragController().setDisallowGlobalDrag(mDisallowGlobalDrag); overlayContext.getDragController().setDisallowLongClick(mDisallowLongClick); mOverlayContext.getDragController().setDisallowLongClick(mDisallowLongClick); } private void cleanUpOverlay() { if (mSearchSessionController != null) { mSearchSessionController.onDestroy(); mSearchSessionController = null; } if (mOverlayContext != null) { mOverlayContext.setSearchSessionController(null); mOverlayContext = null; } mSlideInView = null; mAppsView = null; } } @VisibleForTesting @VisibleForTesting Loading
quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarSearchSessionController.kt 0 → 100644 +52 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.taskbar.allapps import android.content.Context import com.android.launcher3.R import com.android.launcher3.config.FeatureFlags import com.android.launcher3.model.data.ItemInfo import com.android.launcher3.util.ResourceBasedOverride import com.android.launcher3.util.ResourceBasedOverride.Overrides /** Stub for managing the Taskbar search session. */ open class TaskbarSearchSessionController : ResourceBasedOverride { /** Start the search session lifecycle. */ open fun startLifecycle() {} /** Destroy the search session. */ open fun onDestroy() {} /** Updates the predicted items shown in the zero-state. */ open fun setZeroStatePredictedItems(items: List<ItemInfo>) {} companion object { @JvmStatic fun newInstance(context: Context): TaskbarSearchSessionController { if (!FeatureFlags.ENABLE_ALL_APPS_SEARCH_IN_TASKBAR.get()) { return TaskbarSearchSessionController() } return Overrides.getObject( TaskbarSearchSessionController::class.java, context, R.string.taskbar_search_session_controller_class, ) } } }