From e58aaf1802e43f73bbd417658c1c4c42e2fe28fd Mon Sep 17 00:00:00 2001 From: fbaron Date: Mon, 25 Sep 2023 11:34:56 -0700 Subject: [PATCH] Add smartspace as a widget to first page (implementation 2) Flag: SMARTSPACE_AS_A_WIDGET Test: verify that the smartspace gets replaced with a smartspace widget Bug: 300140279 Change-Id: I42c170de5e2a9fd3d24d99bb8b09cf412c55e3a5 --- .../launcher3/model/LauncherBinder.java | 4 ++ src/com/android/launcher3/Launcher.java | 51 ++++++++++++++++--- src/com/android/launcher3/LauncherPrefs.kt | 5 ++ src/com/android/launcher3/Workspace.java | 8 ++- .../launcher3/config/FeatureFlags.java | 5 ++ .../graphics/LauncherPreviewRenderer.java | 4 +- .../launcher3/model/BaseLauncherBinder.java | 5 ++ .../android/launcher3/model/BgDataModel.java | 6 ++- .../launcher3/model/DatabaseHelper.java | 4 +- .../model/GridSizeMigrationUtil.java | 5 +- .../android/launcher3/model/LoaderCursor.java | 4 +- .../android/launcher3/model/LoaderTask.java | 15 ++++++ .../model/WorkspaceItemSpaceFinder.java | 4 +- .../launcher3/qsb/QsbContainerView.java | 4 +- .../com/android/launcher3/BuildConfig.java | 5 ++ .../launcher3/model/LauncherBinder.java | 5 ++ 16 files changed, 119 insertions(+), 15 deletions(-) diff --git a/go/src/com/android/launcher3/model/LauncherBinder.java b/go/src/com/android/launcher3/model/LauncherBinder.java index 437d8caf94..7a0dce853b 100644 --- a/go/src/com/android/launcher3/model/LauncherBinder.java +++ b/go/src/com/android/launcher3/model/LauncherBinder.java @@ -38,4 +38,8 @@ public class LauncherBinder extends BaseLauncherBinder { @Override public void bindWidgets() { } + + @Override + public void bindSmartspaceWidget() { + } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 4215e3111f..29fd0eb1c3 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -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 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 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 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; diff --git a/src/com/android/launcher3/LauncherPrefs.kt b/src/com/android/launcher3/LauncherPrefs.kt index e8d5116431..bdd92eb4cc 100644 --- a/src/com/android/launcher3/LauncherPrefs.kt +++ b/src/com/android/launcher3/LauncherPrefs.kt @@ -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 = diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index a1a3974eeb..e7e6c92a9a 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -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 extends PagedView * 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 extends PagedView 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); } diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 9fb175d154..6902ea7396 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -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; @@ -177,6 +178,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, diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java index ae44f0a498..7ce5c20a51 100644 --- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java +++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java @@ -22,6 +22,7 @@ import static android.view.View.VISIBLE; import static com.android.launcher3.DeviceProfile.DEFAULT_SCALE; import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION; +import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget; import static com.android.launcher3.model.ModelUtils.filterCurrentWorkspaceItems; import static com.android.launcher3.model.ModelUtils.getMissingHotseatRanks; @@ -526,7 +527,8 @@ public class LauncherPreviewRenderer extends ContextWrapper } // Add first page QSB - if (FeatureFlags.QSB_ON_FIRST_SCREEN) { + if (FeatureFlags.QSB_ON_FIRST_SCREEN + && !shouldShowFirstPageWidget()) { CellLayout firstScreen = mWorkspaceScreens.get(FIRST_SCREEN_ID); View qsb = mHomeElementInflater.inflate(R.layout.qsb_preview, firstScreen, false); CellLayoutLayoutParams lp = new CellLayoutLayoutParams( diff --git a/src/com/android/launcher3/model/BaseLauncherBinder.java b/src/com/android/launcher3/model/BaseLauncherBinder.java index 68544cf0a2..74212059e2 100644 --- a/src/com/android/launcher3/model/BaseLauncherBinder.java +++ b/src/com/android/launcher3/model/BaseLauncherBinder.java @@ -171,6 +171,11 @@ public abstract class BaseLauncherBinder { */ public abstract void bindWidgets(); + /** + * bindWidgets is abstract because it is a no-op for the go launcher. + */ + public abstract void bindSmartspaceWidget(); + /** * Sorts the set of items by hotseat, workspace (spatially from top to bottom, left to right) */ diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java index 5e88b9bc36..0ffedc8c1a 100644 --- a/src/com/android/launcher3/model/BgDataModel.java +++ b/src/com/android/launcher3/model/BgDataModel.java @@ -17,6 +17,7 @@ package com.android.launcher3.model; import static android.content.pm.LauncherApps.ShortcutQuery.FLAG_GET_KEY_FIELDS_ONLY; +import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget; import static com.android.launcher3.model.WidgetsModel.GO_DISABLE_WIDGETS; import static com.android.launcher3.shortcuts.ShortcutRequest.PINNED; @@ -152,7 +153,9 @@ public class BgDataModel { screenSet.add(item.screenId); } } - if (FeatureFlags.QSB_ON_FIRST_SCREEN || screenSet.isEmpty()) { + if ((FeatureFlags.QSB_ON_FIRST_SCREEN + && !shouldShowFirstPageWidget()) + || screenSet.isEmpty()) { screenSet.add(Workspace.FIRST_SCREEN_ID); } return screenSet.getArray(); @@ -505,6 +508,7 @@ public class BgDataModel { default void bindRestoreItemsChange(HashSet updates) { } default void bindWorkspaceComponentsRemoved(Predicate matcher) { } default void bindAllWidgets(List widgets) { } + default void bindSmartspaceWidget() { } /** Called when workspace has been bound. */ default void onInitialBindComplete(IntSet boundPages, RunnableList pendingTasks, diff --git a/src/com/android/launcher3/model/DatabaseHelper.java b/src/com/android/launcher3/model/DatabaseHelper.java index ecf5f67a97..8167b97818 100644 --- a/src/com/android/launcher3/model/DatabaseHelper.java +++ b/src/com/android/launcher3/model/DatabaseHelper.java @@ -16,6 +16,7 @@ package com.android.launcher3.model; import static com.android.launcher3.LauncherSettings.Favorites.addTableToDb; +import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget; import static com.android.launcher3.provider.LauncherDbUtils.dropTable; import android.content.ContentValues; @@ -257,7 +258,8 @@ public class DatabaseHelper extends NoLocaleSQLiteHelper implements Favorites.SCREEN, IntArray.wrap(-777, -778)), null); } case 30: { - if (FeatureFlags.QSB_ON_FIRST_SCREEN) { + if (FeatureFlags.QSB_ON_FIRST_SCREEN + && !shouldShowFirstPageWidget()) { // Clean up first row in screen 0 as it might contain junk data. Log.d(TAG, "Cleaning up first row"); db.delete(Favorites.TABLE_NAME, diff --git a/src/com/android/launcher3/model/GridSizeMigrationUtil.java b/src/com/android/launcher3/model/GridSizeMigrationUtil.java index 78875a3cc1..c06ab8cd07 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationUtil.java +++ b/src/com/android/launcher3/model/GridSizeMigrationUtil.java @@ -18,6 +18,7 @@ package com.android.launcher3.model; import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME; import static com.android.launcher3.LauncherSettings.Favorites.TMP_TABLE; +import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget; import static com.android.launcher3.provider.LauncherDbUtils.copyTable; import static com.android.launcher3.provider.LauncherDbUtils.dropTable; @@ -327,7 +328,9 @@ public class GridSizeMigrationUtil { @NonNull final List sortedItemsToPlace, final boolean matchingScreenIdOnly) { final GridOccupancy occupied = new GridOccupancy(trgX, trgY); final Point trg = new Point(trgX, trgY); - final Point next = new Point(0, screenId == 0 && FeatureFlags.QSB_ON_FIRST_SCREEN + final Point next = new Point(0, screenId == 0 + && (FeatureFlags.QSB_ON_FIRST_SCREEN + && !shouldShowFirstPageWidget()) ? 1 /* smartspace */ : 0); List existedEntries = destReader.mWorkspaceEntriesByScreenId.get(screenId); if (existedEntries != null) { diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java index 33332f01ed..9c4cd46af4 100644 --- a/src/com/android/launcher3/model/LoaderCursor.java +++ b/src/com/android/launcher3/model/LoaderCursor.java @@ -17,6 +17,7 @@ package com.android.launcher3.model; import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME; +import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget; import android.content.ComponentName; import android.content.ContentValues; @@ -528,7 +529,8 @@ public class LoaderCursor extends CursorWrapper { if (!mOccupied.containsKey(item.screenId)) { GridOccupancy screen = new GridOccupancy(countX + 1, countY + 1); - if (item.screenId == Workspace.FIRST_SCREEN_ID && FeatureFlags.QSB_ON_FIRST_SCREEN) { + if (item.screenId == Workspace.FIRST_SCREEN_ID && (FeatureFlags.QSB_ON_FIRST_SCREEN + && !shouldShowFirstPageWidget())) { // Mark the first X columns (X is width of the search container) in the first row as // occupied (if the feature is enabled) in order to account for the search // container. diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 08a6cf01e2..6ba6642099 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -16,6 +16,7 @@ package com.android.launcher3.model; +import static com.android.launcher3.BuildConfig.WIDGET_ON_FIRST_SCREEN; import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME; import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_HAS_SHORTCUT_PERMISSION; import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_QUIET_MODE_CHANGE_PERMISSION; @@ -57,6 +58,7 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherModel; +import com.android.launcher3.LauncherPrefs; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.Utilities; import com.android.launcher3.config.FeatureFlags; @@ -296,6 +298,19 @@ public class LoaderTask implements Runnable { logASplit("bindWidgets"); verifyNotStopped(); + if (LauncherPrefs.get(mApp.getContext()).get(LauncherPrefs.SHOULD_SHOW_SMARTSPACE)) { + mLauncherBinder.bindSmartspaceWidget(); + // Turn off pref. + LauncherPrefs.get(mApp.getContext()).putSync( + LauncherPrefs.backedUpItem( + LauncherPrefs.SHOULD_SHOW_SMARTSPACE_KEY, + WIDGET_ON_FIRST_SCREEN, + true) + .to(false)); + logASplit("bindSmartspaceWidget"); + verifyNotStopped(); + } + if (FeatureFlags.CHANGE_MODEL_DELEGATE_LOADING_ORDER.get()) { mModelDelegate.loadAndBindOtherItems(mLauncherBinder.mCallbacksList); logASplit("otherDelegateItems"); diff --git a/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java b/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java index 1fc8a03a83..929f698236 100644 --- a/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java +++ b/src/com/android/launcher3/model/WorkspaceItemSpaceFinder.java @@ -16,6 +16,7 @@ package com.android.launcher3.model; import static com.android.launcher3.WorkspaceLayoutManager.FIRST_SCREEN_ID; +import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget; import android.util.LongSparseArray; @@ -66,7 +67,8 @@ public class WorkspaceItemSpaceFinder { int screenCount = workspaceScreens.size(); // First check the preferred screen. IntSet screensToExclude = new IntSet(); - if (FeatureFlags.QSB_ON_FIRST_SCREEN) { + if (FeatureFlags.QSB_ON_FIRST_SCREEN + && !shouldShowFirstPageWidget()) { screensToExclude.add(FIRST_SCREEN_ID); } diff --git a/src/com/android/launcher3/qsb/QsbContainerView.java b/src/com/android/launcher3/qsb/QsbContainerView.java index 1e3be27b93..f0f376fd32 100644 --- a/src/com/android/launcher3/qsb/QsbContainerView.java +++ b/src/com/android/launcher3/qsb/QsbContainerView.java @@ -20,6 +20,8 @@ import static android.appwidget.AppWidgetManager.ACTION_APPWIDGET_BIND; import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID; import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_PROVIDER; +import static com.android.launcher3.config.FeatureFlags.shouldShowFirstPageWidget; + import android.app.Activity; import android.app.Fragment; import android.app.SearchManager; @@ -290,7 +292,7 @@ public class QsbContainerView extends FrameLayout { } public boolean isQsbEnabled() { - return FeatureFlags.QSB_ON_FIRST_SCREEN; + return FeatureFlags.QSB_ON_FIRST_SCREEN && !shouldShowFirstPageWidget(); } protected Bundle createBindOptions() { diff --git a/src_build_config/com/android/launcher3/BuildConfig.java b/src_build_config/com/android/launcher3/BuildConfig.java index 1f2e0e5387..3841969e9d 100644 --- a/src_build_config/com/android/launcher3/BuildConfig.java +++ b/src_build_config/com/android/launcher3/BuildConfig.java @@ -26,6 +26,11 @@ public final class BuildConfig { */ public static final boolean QSB_ON_FIRST_SCREEN = true; + /** + * Flag to state if the widget on the top of the first screen should be shown. + */ + public static final boolean WIDGET_ON_FIRST_SCREEN = false; + /** * Flag to control various developer centric features */ diff --git a/src_shortcuts_overrides/com/android/launcher3/model/LauncherBinder.java b/src_shortcuts_overrides/com/android/launcher3/model/LauncherBinder.java index e1a5f24148..7e73ab5fbb 100644 --- a/src_shortcuts_overrides/com/android/launcher3/model/LauncherBinder.java +++ b/src_shortcuts_overrides/com/android/launcher3/model/LauncherBinder.java @@ -51,4 +51,9 @@ public class LauncherBinder extends BaseLauncherBinder { mBgDataModel.widgetsModel.getWidgetsListForPicker(mApp.getContext()); executeCallbacksTask(c -> c.bindAllWidgets(widgets), mUiExecutor); } + + @Override + public void bindSmartspaceWidget() { + executeCallbacksTask(c -> c.bindSmartspaceWidget(), mUiExecutor); + } }