Loading src/com/android/launcher3/Launcher.java +20 −3 Original line number Diff line number Diff line Loading @@ -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.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; Loading @@ -44,7 +45,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; Loading Loading @@ -426,6 +427,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); Loading Loading @@ -1318,7 +1321,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 Loading Loading @@ -2158,16 +2163,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 Loading Loading @@ -2218,6 +2230,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. Loading Loading @@ -3406,6 +3419,10 @@ public class Launcher extends StatefulActivity<LauncherState> // Overridden } public boolean getIsFirstPagePinnedItemEnabled() { return mIsFirstPagePinnedItemEnabled; } /** * Returns the animation coordinator for playing one-off animations */ Loading src/com/android/launcher3/LauncherAppState.java +19 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading src/com/android/launcher3/Workspace.java +18 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading @@ -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); } Loading @@ -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(); Loading Loading @@ -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); Loading src/com/android/launcher3/graphics/LauncherPreviewRenderer.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading src/com/android/launcher3/model/BaseLauncherBinder.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
src/com/android/launcher3/Launcher.java +20 −3 Original line number Diff line number Diff line Loading @@ -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.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; Loading @@ -44,7 +45,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; Loading Loading @@ -426,6 +427,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); Loading Loading @@ -1318,7 +1321,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 Loading Loading @@ -2158,16 +2163,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 Loading Loading @@ -2218,6 +2230,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. Loading Loading @@ -3406,6 +3419,10 @@ public class Launcher extends StatefulActivity<LauncherState> // Overridden } public boolean getIsFirstPagePinnedItemEnabled() { return mIsFirstPagePinnedItemEnabled; } /** * Returns the animation coordinator for playing one-off animations */ Loading
src/com/android/launcher3/LauncherAppState.java +19 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading
src/com/android/launcher3/Workspace.java +18 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading @@ -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); } Loading @@ -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(); Loading Loading @@ -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); Loading
src/com/android/launcher3/graphics/LauncherPreviewRenderer.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
src/com/android/launcher3/model/BaseLauncherBinder.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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