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

Commit c0e687ba authored by fbaron's avatar fbaron Committed by Federico Baron
Browse files

Add smartspace removal option as a toggle

Bug: 303471576
Test: try removing smartspace by going to home settings and turning it off
Flag: ENABLE_SMARTSPACE_REMOVAL
Change-Id: Idd95da1b302927885a8c469e38db6d3c5130f8c1
parent d0da4c00
Loading
Loading
Loading
Loading
+20 −3
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ 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.BuildConfig.QSB_ON_FIRST_SCREEN;
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;
@@ -45,7 +46,7 @@ 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.ENABLE_SMARTSPACE_REMOVAL;
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.shouldShowFirstPageWidget;
@@ -423,6 +424,8 @@ public class Launcher extends StatefulActivity<LauncherState>
    private BaseSearchConfig mBaseSearchConfig;
    private StartupLatencyLogger mStartupLatencyLogger;
    private CellPosMapper mCellPosMapper = CellPosMapper.DEFAULT;
    private boolean mIsFirstPagePinnedItemEnabled = QSB_ON_FIRST_SCREEN
            && !ENABLE_SMARTSPACE_REMOVAL.get();

    private final CannedAnimationCoordinator mAnimationCoordinator =
            new CannedAnimationCoordinator(this);
@@ -1307,7 +1310,9 @@ public class Launcher extends StatefulActivity<LauncherState>
        // Until the workspace is bound, ensure that we keep the wallpaper offset locked to the
        // default state, otherwise we will update to the wrong offsets in RTL
        mWorkspace.lockWallpaperToDefaultPage();
        if (!ENABLE_SMARTSPACE_REMOVAL.get()) {
            mWorkspace.bindAndInitFirstWorkspaceScreen();
        }
        mDragController.addDragListener(mWorkspace);

        // Get the search/delete/uninstall bar
@@ -2172,16 +2177,23 @@ public class Launcher extends StatefulActivity<LauncherState>
        TraceHelper.INSTANCE.endSection();
    }

    @Override
    public void setIsFirstPagePinnedItemEnabled(boolean isFirstPagePinnedItemEnabled) {
        mIsFirstPagePinnedItemEnabled = isFirstPagePinnedItemEnabled;
        mWorkspace.bindAndInitFirstWorkspaceScreen();
    }

    @Override
    public void bindScreens(IntArray orderedScreenIds) {
        mWorkspace.mPageIndicator.setAreScreensBinding(true);
        int firstScreenPosition = 0;
        if ((FeatureFlags.QSB_ON_FIRST_SCREEN
                && mIsFirstPagePinnedItemEnabled
                && !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
        } else if (((!FeatureFlags.QSB_ON_FIRST_SCREEN && !mIsFirstPagePinnedItemEnabled)
                || shouldShowFirstPageWidget())
                && orderedScreenIds.isEmpty()) {
            // If there are no screens, we need to have an empty screen
@@ -2232,6 +2244,7 @@ public class Launcher extends StatefulActivity<LauncherState>
        for (int i = 0; i < count; i++) {
            int screenId = orderedScreenIds.get(i);
            if (FeatureFlags.QSB_ON_FIRST_SCREEN
                    && mIsFirstPagePinnedItemEnabled
                    && !shouldShowFirstPageWidget()
                    && screenId == FIRST_SCREEN_ID) {
                // No need to bind the first screen, as its always bound.
@@ -3450,6 +3463,10 @@ public class Launcher extends StatefulActivity<LauncherState>
        // Overridden
    }

    public boolean getIsFirstPagePinnedItemEnabled() {
        return mIsFirstPagePinnedItemEnabled;
    }

    /**
     * Returns the animation coordinator for playing one-off animations
     */
+19 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import static android.content.Context.RECEIVER_EXPORTED;

import static com.android.launcher3.LauncherPrefs.ICON_STATE;
import static com.android.launcher3.LauncherPrefs.THEMED_ICONS;
import static com.android.launcher3.config.FeatureFlags.ENABLE_SMARTSPACE_REMOVAL;
import static com.android.launcher3.model.LoaderTask.SMARTSPACE_ON_HOME_SCREEN;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.SettingsCache.NOTIFICATION_BADGING_URI;

@@ -123,6 +125,23 @@ public class LauncherAppState implements SafeCloseable {
                .addUserEventListener(mModel::onUserEvent);
        mOnTerminateCallback.add(userChangeListener::close);

        if (ENABLE_SMARTSPACE_REMOVAL.get()) {
            OnSharedPreferenceChangeListener firstPagePinnedItemListener =
                    new OnSharedPreferenceChangeListener() {
                        @Override
                        public void onSharedPreferenceChanged(
                                SharedPreferences sharedPreferences, String key) {
                            if (SMARTSPACE_ON_HOME_SCREEN.equals(key)) {
                                mModel.forceReload();
                            }
                        }
                    };
            LauncherPrefs.getPrefs(mContext).registerOnSharedPreferenceChangeListener(
                    firstPagePinnedItemListener);
            mOnTerminateCallback.add(() -> LauncherPrefs.getPrefs(mContext)
                    .unregisterOnSharedPreferenceChangeListener(firstPagePinnedItemListener));
        }

        LockedUserState.get(context).runOnUserUnlocked(() -> {
            CustomWidgetManager cwm = CustomWidgetManager.INSTANCE.get(mContext);
            cwm.setWidgetRefreshCallback(mModel::refreshAndBindWidgetsAndShortcuts);
+18 −7
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static com.android.launcher3.LauncherState.NORMAL;
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.ENABLE_SMARTSPACE_REMOVAL;
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;
@@ -596,18 +597,19 @@ 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
                || !mLauncher.getIsFirstPagePinnedItemEnabled())
                || shouldShowFirstPageWidget()) {
            mFirstPagePinnedItem = null;
            return;
        }

        // Add the first page
        CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, getChildCount());
        // Always add a first page pinned widget on the first screen.
        if (mFirstPagePinnedItem == null) {
            // In transposed layout, we add the first page pinned widget in the Grid.
            // As workspace does not touch the edges, we do not need a full
            // width first page pinned widget.
            // width first page pinned item.
            mFirstPagePinnedItem = LayoutInflater.from(getContext())
                    .inflate(R.layout.search_container_workspace, firstPage, false);
        }
@@ -627,7 +629,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
        // transition animations competing with us changing the scroll when we add pages
        disableLayoutTransitions();

        // Recycle the first page pinned widget
        // Recycle the first page pinned item
        if (mFirstPagePinnedItem != null) {
            ((ViewGroup) mFirstPagePinnedItem.getParent()).removeView(mFirstPagePinnedItem);
        }
@@ -638,11 +640,13 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
        mScreenOrder.clear();
        mWorkspaceScreens.clear();

        // Remove any deferred refresh callbacks
        mLauncher.mHandler.removeCallbacksAndMessages(DeferredWidgetRefresh.class);

        // Ensure that the first page is always present
        if (!ENABLE_SMARTSPACE_REMOVAL.get()) {
            bindAndInitFirstWorkspaceScreen();
        }

        // Remove any deferred refresh callbacks
        mLauncher.mHandler.removeCallbacksAndMessages(DeferredWidgetRefresh.class);

        // Re-enable the layout transitions
        enableLayoutTransitions();
@@ -802,6 +806,13 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
        // and we store them as extra empty screens.
        for (int i = 0; i < finalScreens.size(); i++) {
            int screenId = finalScreens.keyAt(i);

            // We don't want to remove the first screen even if it's empty because that's where
            // first page pinned item would go if it gets turned back on.
            if (ENABLE_SMARTSPACE_REMOVAL.get() && screenId == FIRST_SCREEN_ID) {
                continue;
            }

            CellLayout screen = finalScreens.get(screenId);

            mWorkspaceScreens.remove(screenId);
+1 −1
Original line number Diff line number Diff line
@@ -527,7 +527,7 @@ public class LauncherPreviewRenderer extends ContextWrapper
        }

        // Add first page QSB
        if (FeatureFlags.QSB_ON_FIRST_SCREEN
        if (FeatureFlags.QSB_ON_FIRST_SCREEN && dataModel.isFirstPagePinnedItemEnabled
                && !shouldShowFirstPageWidget()) {
            CellLayout firstScreen = mWorkspaceScreens.get(FIRST_SCREEN_ID);
            View qsb = mHomeElementInflater.inflate(R.layout.qsb_preview, firstScreen, false);
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.launcher3.model;

import static com.android.launcher3.config.FeatureFlags.ENABLE_SMARTSPACE_REMOVAL;
import static com.android.launcher3.model.ItemInstallQueue.FLAG_LOADER_RUNNING;
import static com.android.launcher3.model.ModelUtils.filterCurrentWorkspaceItems;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
@@ -293,6 +294,10 @@ public abstract class BaseLauncherBinder {
            executeCallbacksTask(c -> {
                c.clearPendingBinds();
                c.startBinding();
                if (ENABLE_SMARTSPACE_REMOVAL.get()) {
                    c.setIsFirstPagePinnedItemEnabled(
                            mBgDataModel.isFirstPagePinnedItemEnabled);
                }
            }, mUiExecutor);

            // Bind workspace screens
Loading