Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 992065ba authored by Brian Isganitis's avatar Brian Isganitis Committed by Android (Google) Code Review
Browse files

Merge changes from topics "all-apps-search-delegate-qpr", "search-container-view" into udc-qpr-dev

* changes:
  Add initial support for search session in Taskbar All Apps.
  Add All Apps search delegate for inflating search box.
parents 89be8eec 7a5809e4
Loading
Loading
Loading
Loading
+5 −12
Original line number Original line Diff line number Diff line
@@ -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>
+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>
+1 −0
Original line number Original line Diff line number Diff line
@@ -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();
+38 −10
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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;
@@ -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. */
@@ -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)
@@ -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
+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