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

Commit 80c138f2 authored by Federico Baron's avatar Federico Baron Committed by Android (Google) Code Review
Browse files

Merge "Add smartspace as a widget to first page (implementation 2)" into main

parents d31f9080 e58aaf18
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -38,4 +38,8 @@ public class LauncherBinder extends BaseLauncherBinder {
    @Override
    public void bindWidgets() {
    }

    @Override
    public void bindSmartspaceWidget() {
    }
}
+45 −6
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static com.android.launcher3.AbstractFloatingView.TYPE_ICON_SURFACE;
import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE;
import static com.android.launcher3.AbstractFloatingView.TYPE_SNACKBAR;
import static com.android.launcher3.AbstractFloatingView.getTopOpenViewWithType;
import static com.android.launcher3.BuildConfig.APPLICATION_ID;
import static com.android.launcher3.LauncherAnimUtils.HOTSEAT_SCALE_PROPERTY_FACTORY;
import static com.android.launcher3.LauncherAnimUtils.SCALE_INDEX_WIDGET_TRANSITION;
import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
@@ -43,9 +44,12 @@ import static com.android.launcher3.LauncherState.NO_OFFSET;
import static com.android.launcher3.LauncherState.NO_SCALE;
import static com.android.launcher3.LauncherState.SPRING_LOADED;
import static com.android.launcher3.Utilities.postAsyncCallback;
import static com.android.launcher3.WorkspaceLayoutManager.FIRST_SCREEN_ID;
import static com.android.launcher3.accessibility.LauncherAccessibilityDelegate.getSupportedActions;
import static com.android.launcher3.config.FeatureFlags.FOLDABLE_SINGLE_PAGE;
import static com.android.launcher3.config.FeatureFlags.MULTI_SELECT_EDIT_MODE;
import static com.android.launcher3.config.FeatureFlags.SHOW_DOT_PAGINATION;
import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget;
import static com.android.launcher3.logging.StatsLogManager.EventEnum;
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_BACKGROUND;
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME;
@@ -2177,11 +2181,14 @@ public class Launcher extends StatefulActivity<LauncherState>
    public void bindScreens(IntArray orderedScreenIds) {
        mWorkspace.mPageIndicator.setAreScreensBinding(true);
        int firstScreenPosition = 0;
        if (FeatureFlags.QSB_ON_FIRST_SCREEN &&
                orderedScreenIds.indexOf(Workspace.FIRST_SCREEN_ID) != firstScreenPosition) {
            orderedScreenIds.removeValue(Workspace.FIRST_SCREEN_ID);
            orderedScreenIds.add(firstScreenPosition, Workspace.FIRST_SCREEN_ID);
        } else if (!FeatureFlags.QSB_ON_FIRST_SCREEN && orderedScreenIds.isEmpty()) {
        if ((FeatureFlags.QSB_ON_FIRST_SCREEN
                && !shouldShowFirstPageWidget())
                && orderedScreenIds.indexOf(FIRST_SCREEN_ID) != firstScreenPosition) {
            orderedScreenIds.removeValue(FIRST_SCREEN_ID);
            orderedScreenIds.add(firstScreenPosition, FIRST_SCREEN_ID);
        } else if ((!FeatureFlags.QSB_ON_FIRST_SCREEN
                || shouldShowFirstPageWidget())
                && orderedScreenIds.isEmpty()) {
            // If there are no screens, we need to have an empty screen
            mWorkspace.addExtraEmptyScreens();
        }
@@ -2229,7 +2236,9 @@ public class Launcher extends StatefulActivity<LauncherState>
        int count = orderedScreenIds.size();
        for (int i = 0; i < count; i++) {
            int screenId = orderedScreenIds.get(i);
            if (FeatureFlags.QSB_ON_FIRST_SCREEN && screenId == Workspace.FIRST_SCREEN_ID) {
            if (FeatureFlags.QSB_ON_FIRST_SCREEN
                    && !shouldShowFirstPageWidget()
                    && screenId == FIRST_SCREEN_ID) {
                // No need to bind the first screen, as its always bound.
                continue;
            }
@@ -2929,6 +2938,36 @@ public class Launcher extends StatefulActivity<LauncherState>
        mPopupDataProvider.setAllWidgets(allWidgets);
    }

    @Override
    public void bindSmartspaceWidget() {
        CellLayout cl = mWorkspace.getScreenWithId(FIRST_SCREEN_ID);
        int spanX = InvariantDeviceProfile.INSTANCE.get(this).numSearchContainerColumns;
        if (cl != null) {
            for (int col = 0; col < spanX; col++) {
                if (cl.isOccupied(col, 0)) {
                    return;
                }
            }
        } else {
            return;
        }

        WidgetsListBaseEntry widgetsListBaseEntry = getPopupDataProvider()
                .getAllWidgets().stream().filter(
                        item -> item.mPkgItem.packageName.equals(
                                APPLICATION_ID))
                .findFirst()
                .orElse(null);
        if (widgetsListBaseEntry != null) {
            LauncherAppWidgetProviderInfo launcherAppWidgetProviderInfo =
                    widgetsListBaseEntry.mWidgets.get(0).widgetInfo;
            PendingAddWidgetInfo info = new PendingAddWidgetInfo(launcherAppWidgetProviderInfo,
                    CONTAINER_DESKTOP);
            addPendingItem(info, info.container, FIRST_SCREEN_ID, new int[]{0, 0}, info.spanX,
                    info.spanY);
        }
    }

    @Override
    public void bindStringCache(StringCache cache) {
        mStringCache = cache;
+5 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.util.Log
import androidx.annotation.VisibleForTesting
import com.android.launcher3.BuildConfig.WIDGET_ON_FIRST_SCREEN
import com.android.launcher3.LauncherFiles.DEVICE_PREFERENCES_KEY
import com.android.launcher3.LauncherFiles.SHARED_PREFERENCES_KEY
import com.android.launcher3.allapps.WorkProfileManager
@@ -278,6 +279,7 @@ class LauncherPrefs(private val encryptedContext: Context) {
        @JvmStatic fun get(context: Context): LauncherPrefs = INSTANCE.get(context)

        const val TASKBAR_PINNING_KEY = "TASKBAR_PINNING_KEY"
        const val SHOULD_SHOW_SMARTSPACE_KEY = "SHOULD_SHOW_SMARTSPACE_KEY"
        @JvmField val ICON_STATE = nonRestorableItem(LauncherAppState.KEY_ICON_STATE, "", true)
        @JvmField
        val ALL_APPS_OVERVIEW_THRESHOLD =
@@ -292,6 +294,9 @@ class LauncherPrefs(private val encryptedContext: Context) {
        @JvmField
        val DEVICE_TYPE =
            backedUpItem(DeviceGridState.KEY_DEVICE_TYPE, InvariantDeviceProfile.TYPE_PHONE, true)
        @JvmField
        val SHOULD_SHOW_SMARTSPACE =
            backedUpItem("SHOULD_SHOW_SMARTSPACE_KEY", WIDGET_ON_FIRST_SCREEN, true)
        @JvmField val DB_FILE = backedUpItem(DeviceGridState.KEY_DB_FILE, "", true)
        @JvmField
        val RESTORE_DEVICE =
+6 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static com.android.launcher3.LauncherState.SPRING_LOADED;
import static com.android.launcher3.MotionEventsUtils.isTrackpadMultiFingerSwipe;
import static com.android.launcher3.anim.AnimatorListeners.forSuccessCallback;
import static com.android.launcher3.config.FeatureFlags.FOLDABLE_SINGLE_PAGE;
import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget;
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPELEFT;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPERIGHT;
@@ -594,7 +595,8 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
     * Initializes and binds the first page
     */
    public void bindAndInitFirstWorkspaceScreen() {
        if (!FeatureFlags.QSB_ON_FIRST_SCREEN) {
        if (!FeatureFlags.QSB_ON_FIRST_SCREEN
                || shouldShowFirstPageWidget()) {
            return;
        }

@@ -1012,7 +1014,9 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
            int id = mWorkspaceScreens.keyAt(i);
            CellLayout cl = mWorkspaceScreens.valueAt(i);
            // FIRST_SCREEN_ID can never be removed.
            if ((!FeatureFlags.QSB_ON_FIRST_SCREEN || id > FIRST_SCREEN_ID)
            if (((!FeatureFlags.QSB_ON_FIRST_SCREEN
                    || shouldShowFirstPageWidget())
                    || id > FIRST_SCREEN_ID)
                    && cl.getShortcutsAndWidgets().getChildCount() == 0) {
                removeScreens.add(id);
            }
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.launcher3.config;

import static com.android.launcher3.BuildConfig.WIDGET_ON_FIRST_SCREEN;
import static com.android.launcher3.config.FeatureFlags.FlagState.DISABLED;
import static com.android.launcher3.config.FeatureFlags.FlagState.ENABLED;
import static com.android.launcher3.config.FeatureFlags.FlagState.TEAMFOOD;
@@ -165,6 +166,10 @@ public final class FeatureFlags {
    public static final BooleanFlag SMARTSPACE_AS_A_WIDGET = getDebugFlag(299181941,
            "SMARTSPACE_AS_A_WIDGET", DISABLED, "Enable SmartSpace as a widget");

    public static boolean shouldShowFirstPageWidget() {
        return SMARTSPACE_AS_A_WIDGET.get() && WIDGET_ON_FIRST_SCREEN;
    }

    // TODO(Block 10): Clean up flags
    public static final BooleanFlag ENABLE_BACK_SWIPE_LAUNCHER_ANIMATION = getDebugFlag(270614790,
            "ENABLE_BACK_SWIPE_LAUNCHER_ANIMATION", DISABLED,
Loading