diff --git a/quickstep/res/values/strings.xml b/quickstep/res/values/strings.xml index 81b0dd297c..c0d52a42bd 100644 --- a/quickstep/res/values/strings.xml +++ b/quickstep/res/values/strings.xml @@ -68,7 +68,6 @@ Easily access your most-used apps right on the Home screen. Suggestions will change based on your routines. Apps on the bottom row will move up to your Home screen. Easily access your most-used apps right on the Home screen. Suggestions will change based on your routines. Apps in favorites row will move to your Home screen. - Easily access your most-used apps, right on the Home screen. Suggestions will change based on your routines. Apps on the bottom row will move to a new folder. Get app suggestions diff --git a/quickstep/src/com/android/launcher3/hybridhotseat/HotseatEduController.java b/quickstep/src/com/android/launcher3/hybridhotseat/HotseatEduController.java index d63bc18a33..048243e345 100644 --- a/quickstep/src/com/android/launcher3/hybridhotseat/HotseatEduController.java +++ b/quickstep/src/com/android/launcher3/hybridhotseat/HotseatEduController.java @@ -26,22 +26,17 @@ import android.view.View; import com.android.launcher3.BubbleTextView; import com.android.launcher3.CellLayout; import com.android.launcher3.Hotseat; -import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherSettings; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; -import com.android.launcher3.config.FeatureFlags; -import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; -import com.android.launcher3.util.GridOccupancy; import com.android.launcher3.util.IntArray; import com.android.launcher3.views.ArrowTipView; import com.android.launcher3.views.Snackbar; -import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; import java.util.stream.IntStream; @@ -74,101 +69,12 @@ public class HotseatEduController { */ void migrate() { HotseatRestoreHelper.createBackup(mLauncher); - if (FeatureFlags.HOTSEAT_MIGRATE_TO_FOLDER.get()) { - migrateToFolder(); - } else { - migrateHotseatWhole(); - } + migrateHotseatWhole(); Snackbar.show(mLauncher, R.string.hotsaet_tip_prediction_enabled, R.string.hotseat_prediction_settings, null, () -> mLauncher.startActivity(getSettingsIntent())); } - /** - * This migration places all non folder items in the hotseat into a folder and then moves - * all folders in the hotseat to a workspace page that has enough empty spots. - * - * @return pageId that has accepted the items. - */ - private int migrateToFolder() { - ArrayDeque folders = new ArrayDeque<>(); - ArrayList putIntoFolder = new ArrayList<>(); - - //separate folders and items that can get in folders - for (int i = 0; i < mLauncher.getDeviceProfile().numShownHotseatIcons; i++) { - View view = mHotseat.getChildAt(i, 0); - if (view == null) continue; - ItemInfo info = (ItemInfo) view.getTag(); - if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { - folders.add((FolderInfo) info); - } else if (info instanceof WorkspaceItemInfo && info.container == LauncherSettings - .Favorites.CONTAINER_HOTSEAT) { - putIntoFolder.add((WorkspaceItemInfo) info); - } - } - - // create a temp folder and add non folder items to it - if (!putIntoFolder.isEmpty()) { - ItemInfo firstItem = putIntoFolder.get(0); - FolderInfo folderInfo = new FolderInfo(); - mLauncher.getModelWriter().addItemToDatabase(folderInfo, firstItem.container, - firstItem.screenId, firstItem.cellX, firstItem.cellY); - folderInfo.setTitle("", mLauncher.getModelWriter()); - folderInfo.contents.addAll(putIntoFolder); - for (int i = 0; i < folderInfo.contents.size(); i++) { - ItemInfo item = folderInfo.contents.get(i); - item.rank = i; - mLauncher.getModelWriter().moveItemInDatabase(item, folderInfo.id, 0, - item.cellX, item.cellY); - } - folders.add(folderInfo); - } - mNewItems.addAll(folders); - - return placeFoldersInWorkspace(folders); - } - - private int placeFoldersInWorkspace(ArrayDeque folders) { - if (folders.isEmpty()) return 0; - - Workspace workspace = mLauncher.getWorkspace(); - InvariantDeviceProfile idp = mLauncher.getDeviceProfile().inv; - - GridOccupancy[] occupancyList = new GridOccupancy[workspace.getChildCount()]; - for (int i = 0; i < occupancyList.length; i++) { - occupancyList[i] = ((CellLayout) workspace.getChildAt(i)).cloneGridOccupancy(); - } - //scan every screen to find available spots to place folders - int occupancyIndex = 0; - int[] itemXY = new int[2]; - while (occupancyIndex < occupancyList.length && !folders.isEmpty()) { - GridOccupancy occupancy = occupancyList[occupancyIndex]; - if (occupancy.findVacantCell(itemXY, 1, 1)) { - FolderInfo info = folders.poll(); - mLauncher.getModelWriter().moveItemInDatabase(info, - LauncherSettings.Favorites.CONTAINER_DESKTOP, - workspace.getScreenIdForPageIndex(occupancyIndex), itemXY[0], itemXY[1]); - occupancy.markCells(info, true); - } else { - occupancyIndex++; - } - } - if (folders.isEmpty()) return workspace.getScreenIdForPageIndex(occupancyIndex); - int screenId = LauncherSettings.Settings.call(mLauncher.getContentResolver(), - LauncherSettings.Settings.METHOD_NEW_SCREEN_ID) - .getInt(LauncherSettings.Settings.EXTRA_VALUE); - // if all screens are full and we still have folders left, put those on a new page - FolderInfo folderInfo; - int col = 0; - while ((folderInfo = folders.poll()) != null) { - mLauncher.getModelWriter().moveItemInDatabase(folderInfo, - LauncherSettings.Favorites.CONTAINER_DESKTOP, screenId, col++, - idp.numRows - 1); - } - mNewScreens = IntArray.wrap(screenId); - return workspace.getPageCount(); - } - /** * This migration option attempts to move the entire hotseat up to the first workspace that * has space to host items. If no such page is found, it moves items to a new page. diff --git a/quickstep/src/com/android/launcher3/hybridhotseat/HotseatEduDialog.java b/quickstep/src/com/android/launcher3/hybridhotseat/HotseatEduDialog.java index 7b48332e84..21008344f7 100644 --- a/quickstep/src/com/android/launcher3/hybridhotseat/HotseatEduDialog.java +++ b/quickstep/src/com/android/launcher3/hybridhotseat/HotseatEduDialog.java @@ -15,8 +15,7 @@ */ package com.android.launcher3.hybridhotseat; -import static com.android.launcher3.logging.StatsLogManager.LauncherEvent - .LAUNCHER_HOTSEAT_EDU_ACCEPT; +import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_HOTSEAT_EDU_ACCEPT; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_HOTSEAT_EDU_DENY; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_HOTSEAT_EDU_SEEN; @@ -39,7 +38,6 @@ import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.anim.Interpolators; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.uioverrides.PredictedAppIcon; import com.android.launcher3.views.AbstractSlideInView; @@ -112,12 +110,6 @@ public class HotseatEduDialog extends AbstractSlideInView implements I ((LinearLayout.LayoutParams) buttonContainer.getLayoutParams()).setMarginEnd( adjustedMarginEnd); } - - // update ui to reflect which migration method is going to be used - if (FeatureFlags.HOTSEAT_MIGRATE_TO_FOLDER.get()) { - ((TextView) findViewById(R.id.hotseat_edu_content)).setText( - R.string.hotseat_edu_message_migrate_alt); - } } private void onAccept(View v) { diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 21f03be517..951226cd1a 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -26,7 +26,6 @@ import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.LauncherState.OVERVIEW_MODAL_TASK; import static com.android.launcher3.compat.AccessibilityManagerCompat.sendCustomAccessibilityEvent; -import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_WIDGET_APP_START; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_APP_LAUNCH_TAP; import static com.android.launcher3.testing.shared.TestProtocol.HINT_STATE_ORDINAL; import static com.android.launcher3.testing.shared.TestProtocol.HINT_STATE_TWO_BUTTON_ORDINAL; @@ -339,9 +338,7 @@ public class QuickstepLauncher extends BaseQuickstepLauncher { protected LauncherAppWidgetHost createAppWidgetHost() { LauncherAppWidgetHost appWidgetHost = super.createAppWidgetHost(); - if (ENABLE_QUICKSTEP_WIDGET_APP_START.get()) { - appWidgetHost.setInteractionHandler(new QuickstepInteractionHandler(this)); - } + appWidgetHost.setInteractionHandler(new QuickstepInteractionHandler(this)); return appWidgetHost; } diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java index 34a6821ac5..30bb892c9a 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java @@ -25,7 +25,6 @@ import static com.android.launcher3.allapps.AllAppsTransitionController.ALL_APPS import static com.android.launcher3.allapps.AllAppsTransitionController.ALL_APPS_PULL_BACK_TRANSLATION; import static com.android.launcher3.anim.AnimatorListeners.forSuccessCallback; import static com.android.launcher3.anim.Interpolators.DEACCEL_3; -import static com.android.launcher3.config.FeatureFlags.ENABLE_ALL_APPS_EDU; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_HOME_GESTURE; import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS; @@ -106,7 +105,7 @@ public class NavBarToHomeTouchController implements TouchController, if (mStartState.overviewUi || mStartState == ALL_APPS) { return true; } - int typeToClose = ENABLE_ALL_APPS_EDU.get() ? TYPE_ALL & ~TYPE_ALL_APPS_EDU : TYPE_ALL; + int typeToClose = TYPE_ALL & ~TYPE_ALL_APPS_EDU; if (AbstractFloatingView.getTopOpenViewWithType(mLauncher, typeToClose) != null) { return true; } diff --git a/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java b/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java index bd0250d27d..99553e819e 100644 --- a/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java +++ b/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java @@ -40,7 +40,6 @@ import android.util.Xml; import com.android.launcher3.AutoInstallsLayout; import com.android.launcher3.R; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.logging.InstanceId; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.logging.StatsLogManager.StatsLogger; @@ -179,11 +178,9 @@ public class SettingsChangeLogger implements logger::log); SharedPreferences prefs = getPrefs(mContext); - if (FeatureFlags.ENABLE_THEMED_ICONS.get()) { - logger.log(prefs.getBoolean(KEY_THEMED_ICONS, false) - ? LAUNCHER_THEMED_ICON_ENABLED - : LAUNCHER_THEMED_ICON_DISABLED); - } + logger.log(prefs.getBoolean(KEY_THEMED_ICONS, false) + ? LAUNCHER_THEMED_ICON_ENABLED + : LAUNCHER_THEMED_ICON_DISABLED); mLoggablePrefs.forEach((key, lp) -> logger.log(() -> prefs.getBoolean(key, lp.defaultValue) ? lp.eventIdOn : lp.eventIdOff)); diff --git a/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java b/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java index fb32581508..fc44b99a4d 100644 --- a/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java +++ b/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java @@ -29,7 +29,6 @@ import com.android.launcher3.LauncherState; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; import com.android.launcher3.appprediction.AppsDividerView; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.hybridhotseat.HotseatPredictionController; import com.android.launcher3.statemanager.StateManager; import com.android.launcher3.statemanager.StateManager.StateListener; @@ -88,8 +87,7 @@ public class QuickstepOnboardingPrefs extends OnboardingPrefs }); } - if (DisplayController.getNavigationMode(launcher) == NO_BUTTON - && FeatureFlags.ENABLE_ALL_APPS_EDU.get()) { + if (DisplayController.getNavigationMode(launcher) == NO_BUTTON) { stateManager.addStateListener(new StateListener() { private static final int MAX_NUM_SWIPES_TO_TRIGGER_EDU = 3; diff --git a/src/com/android/launcher3/DropTarget.java b/src/com/android/launcher3/DropTarget.java index 70d84760fc..2d995103e7 100644 --- a/src/com/android/launcher3/DropTarget.java +++ b/src/com/android/launcher3/DropTarget.java @@ -20,7 +20,6 @@ import android.content.Context; import android.graphics.Rect; import com.android.launcher3.accessibility.DragViewStateAnnouncer; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.dragndrop.DragOptions; import com.android.launcher3.dragndrop.DragView; import com.android.launcher3.dragndrop.DraggableView; @@ -82,11 +81,8 @@ public interface DropTarget { public final InstanceId logInstanceId = new InstanceIdSequence().newInstanceId(); public DragObject(Context context) { - if (FeatureFlags.FOLDER_NAME_SUGGEST.get()) { - Executors.MODEL_EXECUTOR.post(() -> { - folderNameProvider = FolderNameProvider.newInstance(context); - }); - } + Executors.MODEL_EXECUTOR.post(() -> + folderNameProvider = FolderNameProvider.newInstance(context)); } /** diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 597bc8da3a..ea3f723e29 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -19,7 +19,6 @@ package com.android.launcher3; import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_RESOURCE_UPDATED; import static com.android.launcher3.Utilities.getDevicePrefs; -import static com.android.launcher3.config.FeatureFlags.ENABLE_THEMED_ICONS; import static com.android.launcher3.util.Executors.MODEL_EXECUTOR; import static com.android.launcher3.util.SettingsCache.NOTIFICATION_BADGING_URI; @@ -118,12 +117,10 @@ public class LauncherAppState implements SafeCloseable { observer, MODEL_EXECUTOR.getHandler()); mOnTerminateCallback.add(iconChangeTracker::close); MODEL_EXECUTOR.execute(observer::verifyIconChanged); - if (ENABLE_THEMED_ICONS.get()) { - SharedPreferences prefs = Utilities.getPrefs(mContext); - prefs.registerOnSharedPreferenceChangeListener(observer); - mOnTerminateCallback.add( - () -> prefs.unregisterOnSharedPreferenceChangeListener(observer)); - } + SharedPreferences prefs = Utilities.getPrefs(mContext); + prefs.registerOnSharedPreferenceChangeListener(observer); + mOnTerminateCallback.add( + () -> prefs.unregisterOnSharedPreferenceChangeListener(observer)); InstallSessionTracker installSessionTracker = InstallSessionHelper.INSTANCE.get(context).registerInstallTracker(mModel); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index f7907890ef..68b77011f2 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -457,9 +457,6 @@ public class LauncherModel extends LauncherApps.Callback implements InstallSessi @Override public void onSessionFailure(String packageName, UserHandle user) { - if (!FeatureFlags.PROMISE_APPS_NEW_INSTALLS.get()) { - return; - } enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { diff --git a/src/com/android/launcher3/SecondaryDropTarget.java b/src/com/android/launcher3/SecondaryDropTarget.java index f8bc1f4e6e..0ee7aae088 100644 --- a/src/com/android/launcher3/SecondaryDropTarget.java +++ b/src/com/android/launcher3/SecondaryDropTarget.java @@ -159,7 +159,7 @@ public class SecondaryDropTarget extends ButtonDropTarget implements OnAlarmList return RECONFIGURE; } return INVALID; - } else if (FeatureFlags.ENABLE_PREDICTION_DISMISS.get() && info.isPredictedItem()) { + } else if (info.isPredictedItem()) { return DISMISS_PREDICTION; } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index f4a8ce5ff7..b49d64625b 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -152,10 +152,6 @@ public class Workspace extends PagedView public static final int DEFAULT_PAGE = 0; - private static final int DEFAULT_SMARTSPACE_HEIGHT = 1; - - private static final int EXPANDED_SMARTSPACE_HEIGHT = 2; - private LayoutTransition mLayoutTransition; @Thunk final WallpaperManager mWallpaperManager; @@ -562,10 +558,8 @@ public class Workspace extends PagedView .inflate(R.layout.search_container_workspace, firstPage, false); } - int cellVSpan = FeatureFlags.EXPANDED_SMARTSPACE.get() - ? EXPANDED_SMARTSPACE_HEIGHT : DEFAULT_SMARTSPACE_HEIGHT; int cellHSpan = mLauncher.getDeviceProfile().inv.numSearchContainerColumns; - CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, cellHSpan, cellVSpan); + CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, cellHSpan, 1); lp.canReorder = false; if (!firstPage.addViewToCellLayout(mQsb, 0, R.id.search_container_workspace, lp, true)) { Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout"); diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index eabbf60f29..dd58e710e4 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -67,11 +67,6 @@ public final class FeatureFlags { public static final BooleanFlag PROMISE_APPS_IN_ALL_APPS = getDebugFlag( "PROMISE_APPS_IN_ALL_APPS", false, "Add promise icon in all-apps"); - // When enabled a promise icon is added to the home screen when install session is active. - public static final BooleanFlag PROMISE_APPS_NEW_INSTALLS = getDebugFlag( - "PROMISE_APPS_NEW_INSTALLS", true, - "Adds a promise icon to the home screen for new install sessions."); - // TODO: b/206508141: Long pressing on some icons on home screen cause launcher to crash. public static final BooleanFlag ENABLE_LOCAL_COLOR_POPUPS = getDebugFlag( "ENABLE_LOCAL_COLOR_POPUPS", false, "Enable local color extraction for popups."); @@ -82,10 +77,6 @@ public final class FeatureFlags { public static final BooleanFlag ENABLE_QUICKSTEP_LIVE_TILE = getDebugFlag( "ENABLE_QUICKSTEP_LIVE_TILE", true, "Enable live tile in Quickstep overview"); - public static final BooleanFlag ENABLE_QUICKSTEP_WIDGET_APP_START = getDebugFlag( - "ENABLE_QUICKSTEP_WIDGET_APP_START", true, - "Enable Quickstep animation when launching activities from an app widget"); - public static final BooleanFlag ENABLE_DEVICE_SEARCH = new DeviceFlag( "ENABLE_DEVICE_SEARCH", true, "Allows on device search in all apps"); @@ -116,30 +107,14 @@ public final class FeatureFlags { "ENABLE_PEOPLE_TILE_PREVIEW", false, "Experimental: Shows conversation shortcuts on home screen as search results"); - public static final BooleanFlag FOLDER_NAME_SUGGEST = new DeviceFlag( - "FOLDER_NAME_SUGGEST", true, - "Suggests folder names instead of blank text."); - public static final BooleanFlag FOLDER_NAME_MAJORITY_RANKING = getDebugFlag( "FOLDER_NAME_MAJORITY_RANKING", true, "Suggests folder names based on majority based ranking."); - public static final BooleanFlag ENABLE_PREDICTION_DISMISS = getDebugFlag( - "ENABLE_PREDICTION_DISMISS", true, "Allow option to dimiss apps from predicted list"); - public static final BooleanFlag ASSISTANT_GIVES_LAUNCHER_FOCUS = getDebugFlag( "ASSISTANT_GIVES_LAUNCHER_FOCUS", false, "Allow Launcher to handle nav bar gestures while Assistant is running over it"); - public static final BooleanFlag HOTSEAT_MIGRATE_TO_FOLDER = getDebugFlag( - "HOTSEAT_MIGRATE_TO_FOLDER", false, "Should move hotseat items into a folder"); - - public static final BooleanFlag ENABLE_DEEP_SHORTCUT_ICON_CACHE = getDebugFlag( - "ENABLE_DEEP_SHORTCUT_ICON_CACHE", true, "R/W deep shortcut in IconCache"); - - public static final BooleanFlag ENABLE_THEMED_ICONS = getDebugFlag( - "ENABLE_THEMED_ICONS", true, "Enable themed icons on workspace"); - public static final BooleanFlag ENABLE_BULK_WORKSPACE_ICON_LOADING = getDebugFlag( "ENABLE_BULK_WORKSPACE_ICON_LOADING", true, @@ -181,10 +156,6 @@ public final class FeatureFlags { "ALWAYS_USE_HARDWARE_OPTIMIZATION_FOR_FOLDER_ANIMATIONS", false, "Always use hardware optimization for folder animations."); - public static final BooleanFlag ENABLE_ALL_APPS_EDU = getDebugFlag( - "ENABLE_ALL_APPS_EDU", true, - "Shows user a tutorial on how to get to All Apps after X amount of attempts."); - public static final BooleanFlag SEPARATE_RECENTS_ACTIVITY = getDebugFlag( "SEPARATE_RECENTS_ACTIVITY", false, "Uses a separate recents activity instead of using the integrated recents+Launcher UI"); @@ -193,10 +164,6 @@ public final class FeatureFlags { "ENABLE_MINIMAL_DEVICE", false, "Allow user to toggle minimal device mode in launcher."); - public static final BooleanFlag EXPANDED_SMARTSPACE = new DeviceFlag( - "EXPANDED_SMARTSPACE", false, "Expands smartspace height to two rows. " - + "Any apps occupying the first row will be removed from workspace."); - // TODO: b/172467144 Remove ENABLE_LAUNCHER_ACTIVITY_THEME_CROSSFADE feature flag. public static final BooleanFlag ENABLE_LAUNCHER_ACTIVITY_THEME_CROSSFADE = new DeviceFlag( "ENABLE_LAUNCHER_ACTIVITY_THEME_CROSSFADE", false, "Enables a " diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java index e68ebdb6e5..7e1491287f 100644 --- a/src/com/android/launcher3/folder/Folder.java +++ b/src/com/android/launcher3/folder/Folder.java @@ -368,9 +368,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo public void startEditingFolderName() { post(() -> { - if (FeatureFlags.FOLDER_NAME_SUGGEST.get()) { - showLabelSuggestions(); - } + showLabelSuggestions(); mFolderName.setHint(""); mIsEditingName = true; }); @@ -1080,8 +1078,7 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo if (!items.isEmpty()) { mLauncherDelegate.getModelWriter().moveItemsInDatabase(items, mInfo.id, 0); } - if (FeatureFlags.FOLDER_NAME_SUGGEST.get() && !isBind - && total > 1 /* no need to update if there's one icon */) { + if (!isBind && total > 1 /* no need to update if there's one icon */) { Executors.MODEL_EXECUTOR.post(() -> { FolderNameInfos nameInfos = new FolderNameInfos(); FolderNameProvider fnp = FolderNameProvider.newInstance(getContext()); diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java index b1e27019c3..33e090285a 100644 --- a/src/com/android/launcher3/folder/FolderIcon.java +++ b/src/com/android/launcher3/folder/FolderIcon.java @@ -57,7 +57,6 @@ import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; import com.android.launcher3.allapps.ActivityAllAppsContainerView; import com.android.launcher3.anim.Interpolators; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.dot.FolderDotInfo; import com.android.launcher3.dragndrop.BaseItemDragListener; import com.android.launcher3.dragndrop.DragLayer; @@ -418,35 +417,23 @@ public class FolderIcon extends FrameLayout implements FolderListener, IconLabel if (!itemAdded) mPreviewItemManager.hidePreviewItem(index, true); FolderNameInfos nameInfos = new FolderNameInfos(); - if (FeatureFlags.FOLDER_NAME_SUGGEST.get()) { - Executors.MODEL_EXECUTOR.post(() -> { - d.folderNameProvider.getSuggestedFolderName( - getContext(), mInfo.contents, nameInfos); - showFinalView(finalIndex, item, nameInfos, d.logInstanceId); - }); - } else { - showFinalView(finalIndex, item, nameInfos, d.logInstanceId); - } + Executors.MODEL_EXECUTOR.post(() -> { + d.folderNameProvider.getSuggestedFolderName( + getContext(), mInfo.contents, nameInfos); + postDelayed(() -> { + setLabelSuggestion(nameInfos, d.logInstanceId); + invalidate(); + }, DROP_IN_ANIMATION_DURATION); + }); } else { addItem(item); } } - private void showFinalView(int finalIndex, final WorkspaceItemInfo item, - FolderNameInfos nameInfos, InstanceId instanceId) { - postDelayed(() -> { - setLabelSuggestion(nameInfos, instanceId); - invalidate(); - }, DROP_IN_ANIMATION_DURATION); - } - /** * Set the suggested folder name. */ public void setLabelSuggestion(FolderNameInfos nameInfos, InstanceId instanceId) { - if (!FeatureFlags.FOLDER_NAME_SUGGEST.get()) { - return; - } if (!mInfo.getLabelState().equals(LabelState.UNLABELED)) { return; } diff --git a/src/com/android/launcher3/graphics/GridCustomizationsProvider.java b/src/com/android/launcher3/graphics/GridCustomizationsProvider.java index fc8d855801..c28bab51f4 100644 --- a/src/com/android/launcher3/graphics/GridCustomizationsProvider.java +++ b/src/com/android/launcher3/graphics/GridCustomizationsProvider.java @@ -26,7 +26,6 @@ import android.util.Log; import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.InvariantDeviceProfile.GridOption; import com.android.launcher3.Utilities; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.util.Executors; /** @@ -143,11 +142,9 @@ public class GridCustomizationsProvider extends ContentProvider { } case ICON_THEMED: case SET_ICON_THEMED: { - if (FeatureFlags.ENABLE_THEMED_ICONS.get()) { - getPrefs(getContext()).edit() - .putBoolean(KEY_THEMED_ICONS, values.getAsBoolean(BOOLEAN_VALUE)) - .apply(); - } + getPrefs(getContext()).edit() + .putBoolean(KEY_THEMED_ICONS, values.getAsBoolean(BOOLEAN_VALUE)) + .apply(); return 1; } default: diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java index fe9b633b66..7621dc206b 100644 --- a/src/com/android/launcher3/icons/IconCache.java +++ b/src/com/android/launcher3/icons/IconCache.java @@ -51,7 +51,6 @@ import androidx.core.util.Pair; import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.LauncherFiles; import com.android.launcher3.Utilities; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.icons.ComponentWithLabel.ComponentCachingLogic; import com.android.launcher3.icons.cache.BaseIconCache; import com.android.launcher3.icons.cache.CachingLogic; @@ -231,14 +230,8 @@ public class IconCache extends BaseIconCache { */ public void getShortcutIcon(T info, ShortcutInfo si, @NonNull Predicate fallbackIconCheck) { - BitmapInfo bitmapInfo; - if (FeatureFlags.ENABLE_DEEP_SHORTCUT_ICON_CACHE.get()) { - bitmapInfo = cacheLocked(ShortcutKey.fromInfo(si).componentName, si.getUserHandle(), - () -> si, mShortcutCachingLogic, false, false).bitmap; - } else { - // If caching is disabled, load the full icon - bitmapInfo = mShortcutCachingLogic.loadIcon(mContext, si); - } + BitmapInfo bitmapInfo = cacheLocked(ShortcutKey.fromInfo(si).componentName, + si.getUserHandle(), () -> si, mShortcutCachingLogic, false, false).bitmap; if (bitmapInfo.isNullOrLowRes()) { bitmapInfo = getDefaultIcon(si.getUserHandle()); } diff --git a/src/com/android/launcher3/icons/ShortcutCachingLogic.java b/src/com/android/launcher3/icons/ShortcutCachingLogic.java index 6a8f34a93d..1e46344725 100644 --- a/src/com/android/launcher3/icons/ShortcutCachingLogic.java +++ b/src/com/android/launcher3/icons/ShortcutCachingLogic.java @@ -31,7 +31,6 @@ import android.util.Log; import androidx.annotation.NonNull; import com.android.launcher3.LauncherAppState; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.icons.cache.CachingLogic; import com.android.launcher3.shortcuts.ShortcutKey; import com.android.launcher3.util.Themes; @@ -78,7 +77,7 @@ public class ShortcutCachingLogic implements CachingLogic { @Override public long getLastUpdatedTime(ShortcutInfo shortcutInfo, PackageInfo info) { - if (shortcutInfo == null || !FeatureFlags.ENABLE_DEEP_SHORTCUT_ICON_CACHE.get()) { + if (shortcutInfo == null) { return info.lastUpdateTime; } return Math.max(shortcutInfo.getLastChangedTimestamp(), info.lastUpdateTime); diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java index 87e8ebf1bb..6c62b31cbe 100644 --- a/src/com/android/launcher3/model/LoaderCursor.java +++ b/src/com/android/launcher3/model/LoaderCursor.java @@ -465,7 +465,7 @@ public class LoaderCursor extends CursorWrapper { // occupied (if the feature is enabled) in order to account for the search // container. int spanX = mIDP.numSearchContainerColumns; - int spanY = FeatureFlags.EXPANDED_SMARTSPACE.get() ? 2 : 1; + int spanY = 1; screen.markCells(0, 0, spanX, spanY, true); } occupied.put(item.screenId, screen); diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index f1c5d59fc8..b644b6b408 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -256,12 +256,10 @@ public class LoaderTask implements Runnable { mApp.getModel()::onPackageIconsUpdated); logASplit(logger, "update icon cache"); - if (FeatureFlags.ENABLE_DEEP_SHORTCUT_ICON_CACHE.get()) { - verifyNotStopped(); - logASplit(logger, "save shortcuts in icon cache"); - updateHandler.updateIcons(allShortcuts, new ShortcutCachingLogic(), - mApp.getModel()::onPackageIconsUpdated); - } + verifyNotStopped(); + logASplit(logger, "save shortcuts in icon cache"); + updateHandler.updateIcons(allShortcuts, new ShortcutCachingLogic(), + mApp.getModel()::onPackageIconsUpdated); // Take a break waitForIdle(); @@ -276,12 +274,10 @@ public class LoaderTask implements Runnable { mResults.bindDeepShortcuts(); logASplit(logger, "bindDeepShortcuts"); - if (FeatureFlags.ENABLE_DEEP_SHORTCUT_ICON_CACHE.get()) { - verifyNotStopped(); - logASplit(logger, "save deep shortcuts in icon cache"); - updateHandler.updateIcons(allDeepShortcuts, - new ShortcutCachingLogic(), (pkgs, user) -> { }); - } + verifyNotStopped(); + logASplit(logger, "save deep shortcuts in icon cache"); + updateHandler.updateIcons(allDeepShortcuts, + new ShortcutCachingLogic(), (pkgs, user) -> { }); // Take a break waitForIdle(); @@ -304,9 +300,7 @@ public class LoaderTask implements Runnable { logASplit(logger, "save widgets in icon cache"); // fifth step - if (FeatureFlags.FOLDER_NAME_SUGGEST.get()) { - loadFolderNames(); - } + loadFolderNames(); verifyNotStopped(); updateHandler.finish(); diff --git a/src/com/android/launcher3/model/data/FolderInfo.java b/src/com/android/launcher3/model/data/FolderInfo.java index efebce342f..8386adbdca 100644 --- a/src/com/android/launcher3/model/data/FolderInfo.java +++ b/src/com/android/launcher3/model/data/FolderInfo.java @@ -30,7 +30,6 @@ import androidx.annotation.Nullable; import com.android.launcher3.LauncherSettings; import com.android.launcher3.Utilities; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.FolderNameInfos; import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.logger.LauncherAtom.Attribute; @@ -321,12 +320,6 @@ public class FolderInfo extends ItemInfo { return LauncherAtom.ToState.TO_STATE_UNSPECIFIED; } - if (!FeatureFlags.FOLDER_NAME_SUGGEST.get()) { - return title.length() > 0 - ? LauncherAtom.ToState.TO_CUSTOM_WITH_SUGGESTIONS_DISABLED - : LauncherAtom.ToState.TO_EMPTY_WITH_SUGGESTIONS_DISABLED; - } - // TODO: if suggestedFolderNames is null then it infrastructure issue, not // ranking issue. We should log these appropriately. if (suggestedFolderNames == null || !suggestedFolderNames.hasSuggestions()) { diff --git a/src/com/android/launcher3/pm/InstallSessionHelper.java b/src/com/android/launcher3/pm/InstallSessionHelper.java index 9da6670a83..b695194aee 100644 --- a/src/com/android/launcher3/pm/InstallSessionHelper.java +++ b/src/com/android/launcher3/pm/InstallSessionHelper.java @@ -225,14 +225,12 @@ public class InstallSessionHelper { void tryQueuePromiseAppIcon(PackageInstaller.SessionInfo sessionInfo) { if (TestProtocol.sDebugTracing) { Log.d(TestProtocol.MISSING_PROMISE_ICON, LOG + " tryQueuePromiseAppIcon" - + ", FeatureFlags=" + FeatureFlags.PROMISE_APPS_NEW_INSTALLS.get() + ", SessionCommitReceiveEnabled" + SessionCommitReceiver.isEnabled(mAppContext) + ", verifySessionInfo(sessionInfo)=" + verifySessionInfo(sessionInfo) + ", !promiseIconAdded=" + (sessionInfo != null && !promiseIconAddedForId(sessionInfo.getSessionId()))); } - if (FeatureFlags.PROMISE_APPS_NEW_INSTALLS.get() - && SessionCommitReceiver.isEnabled(mAppContext) + if (SessionCommitReceiver.isEnabled(mAppContext) && verifySessionInfo(sessionInfo) && !promiseIconAddedForId(sessionInfo.getSessionId())) { FileLog.d(LOG, "Adding package name to install queue: " diff --git a/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java b/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java index c166bfc83a..030673024a 100644 --- a/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java +++ b/src/com/android/launcher3/shortcuts/ShortcutDragPreviewProvider.java @@ -16,7 +16,6 @@ package com.android.launcher3.shortcuts; -import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Point; import android.graphics.Rect; @@ -24,7 +23,6 @@ import android.graphics.drawable.Drawable; import android.view.View; import com.android.launcher3.Utilities; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.DragPreviewProvider; import com.android.launcher3.icons.BitmapRenderer; import com.android.launcher3.icons.FastBitmapDrawable; @@ -44,33 +42,13 @@ public class ShortcutDragPreviewProvider extends DragPreviewProvider { @Override public Drawable createDrawable() { - if (FeatureFlags.ENABLE_DEEP_SHORTCUT_ICON_CACHE.get()) { - int size = ActivityContext.lookupContext(mView.getContext()) - .getDeviceProfile().iconSizePx; - return new FastBitmapDrawable( - BitmapRenderer.createHardwareBitmap( - size + blurSizeOutline, - size + blurSizeOutline, - (c) -> drawDragViewOnBackground(c, size))); - } else { - return new FastBitmapDrawable(createDragBitmapLegacy()); - } - } - - private Bitmap createDragBitmapLegacy() { - Drawable d = mView.getBackground(); - Rect bounds = getDrawableBounds(d); - int size = ActivityContext.lookupContext(mView.getContext()).getDeviceProfile().iconSizePx; - final Bitmap b = Bitmap.createBitmap( - size + blurSizeOutline, - size + blurSizeOutline, - Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(b); - canvas.translate(blurSizeOutline / 2, blurSizeOutline / 2); - canvas.scale(((float) size) / bounds.width(), ((float) size) / bounds.height(), 0, 0); - canvas.translate(bounds.left, bounds.top); - d.draw(canvas); - return b; + int size = ActivityContext.lookupContext(mView.getContext()) + .getDeviceProfile().iconSizePx; + return new FastBitmapDrawable( + BitmapRenderer.createHardwareBitmap( + size + blurSizeOutline, + size + blurSizeOutline, + (c) -> drawDragViewOnBackground(c, size))); } private void drawDragViewOnBackground(Canvas canvas, float size) { diff --git a/src/com/android/launcher3/util/Themes.java b/src/com/android/launcher3/util/Themes.java index 53a584d8de..1728f4d0d2 100644 --- a/src/com/android/launcher3/util/Themes.java +++ b/src/com/android/launcher3/util/Themes.java @@ -32,7 +32,6 @@ import android.util.TypedValue; import com.android.launcher3.R; import com.android.launcher3.Utilities; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.icons.GraphicsUtils; /** @@ -74,8 +73,7 @@ public class Themes { * Returns true if workspace icon theming is enabled */ public static boolean isThemedIconEnabled(Context context) { - return FeatureFlags.ENABLE_THEMED_ICONS.get() - && Utilities.getPrefs(context).getBoolean(KEY_THEMED_ICONS, false); + return Utilities.getPrefs(context).getBoolean(KEY_THEMED_ICONS, false); } public static String getDefaultBodyFont(Context context) {