diff --git a/Android.bp b/Android.bp index 19d2a5893b..e2dd48dc57 100644 --- a/Android.bp +++ b/Android.bp @@ -112,9 +112,6 @@ android_library { resource_dirs: [], manifest: "tests/tapl/AndroidManifest.xml", platform_apis: true, - lint: { - baseline_filename: "lint-baseline.xml", - }, } java_library_static { @@ -132,9 +129,6 @@ java_library_static { ], }, static_libs: ["libprotobuf-java-lite"], - lint: { - baseline_filename: "lint-baseline.xml", - }, } java_library_static { @@ -153,9 +147,6 @@ java_library_static { "libprotobuf-java-lite", "launcher_log_protos_lite", ], - lint: { - baseline_filename: "lint-baseline.xml", - }, } java_library { @@ -167,9 +158,6 @@ java_library { sdk_version: "current", min_sdk_version: min_launcher3_sdk_version, - lint: { - baseline_filename: "lint-baseline.xml", - }, } // Library with all the dependencies for building Launcher3 @@ -196,7 +184,7 @@ android_library { sdk_version: "current", min_sdk_version: min_launcher3_sdk_version, lint: { - baseline_filename: "lint-baseline-res-lib.xml", + baseline_filename: "lint-baseline2.xml", }, } @@ -218,7 +206,7 @@ android_library { min_sdk_version: min_launcher3_sdk_version, manifest: "AndroidManifest-common.xml", lint: { - baseline_filename: "lint-baseline-common-deps-lib.xml", + baseline_filename: "lint-baseline2.xml", }, } @@ -265,7 +253,7 @@ android_app { "AndroidManifest-common.xml", ], lint: { - baseline_filename: "lint-baseline-launcher3.xml", + baseline_filename: "lint-baseline.xml", }, } @@ -289,9 +277,6 @@ android_library { ], manifest: "quickstep/AndroidManifest.xml", min_sdk_version: "current", - lint: { - baseline_filename: "lint-baseline.xml", - }, } // Library with all the dependencies for building Launcher Go @@ -323,9 +308,6 @@ android_library { "AndroidManifest-common.xml", ], min_sdk_version: "current", - lint: { - baseline_filename: "lint-baseline-go-res-lib.xml", - }, } // Build rule for Quickstep library @@ -354,9 +336,6 @@ android_library { manifest: "quickstep/AndroidManifest.xml", platform_apis: true, min_sdk_version: "current", - lint: { - baseline_filename: "lint-baseline-launcher3.xml", - }, } // Build rule for Launcher3 Go app for Android Go devices. @@ -399,9 +378,6 @@ android_app { jacoco: { include_filter: ["com.android.launcher3.*"], }, - lint: { - baseline_filename: "lint-baseline.xml", - }, } @@ -438,9 +414,6 @@ android_app { jacoco: { include_filter: ["com.android.launcher3.*"], }, - lint: { - baseline_filename: "lint-baseline.xml", - }, } @@ -491,8 +464,5 @@ android_app { jacoco: { include_filter: ["com.android.launcher3.*"], }, - lint: { - baseline_filename: "lint-baseline.xml", - }, } diff --git a/aconfig/launcher.aconfig b/aconfig/launcher.aconfig index a62f809805..3166d82d29 100644 --- a/aconfig/launcher.aconfig +++ b/aconfig/launcher.aconfig @@ -70,13 +70,6 @@ flag { bug: "296231746" } -flag { - name: "enable_launcher_br_metrics" - namespace: "launcher" - description: "Enables logging of Launcher restore metrics to the Backup & Restore team" - bug: "307527314" -} - flag { name: "enable_unfolded_two_pane_picker" namespace: "launcher" @@ -97,3 +90,18 @@ flag { description: "Enables support for archived apps in Launcher3, such as empty progress bar etc." bug: "210590852" } + +flag { + name: "enable_private_space_install_shortcut" + namespace: "launcher" + description: "Enables long-press shortcut to install a copy of an app to Private space" + bug: "316118005" +} + +flag { + name: "enable_launcher_br_metrics_fixed" + namespace: "launcher" + description: "Enables logging of Launcher restore metrics to the Backup & Restore team" + bug: "307527314" + is_fixed_read_only: true +} diff --git a/lint-baseline-go-res-lib.xml b/lint-baseline-go-res-lib.xml deleted file mode 100644 index c5669f2a61..0000000000 --- a/lint-baseline-go-res-lib.xml +++ /dev/null @@ -1,576 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lint-baseline-launcher3.xml b/lint-baseline-launcher3.xml deleted file mode 100644 index 107a34694b..0000000000 --- a/lint-baseline-launcher3.xml +++ /dev/null @@ -1,609 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lint-baseline-res-lib.xml b/lint-baseline-res-lib.xml deleted file mode 100644 index e52f8fbc70..0000000000 --- a/lint-baseline-res-lib.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/lint-baseline.xml b/lint-baseline.xml index 23a22be31b..fe005cadf0 100644 --- a/lint-baseline.xml +++ b/lint-baseline.xml @@ -1,148 +1,169 @@ - + - - - - + message="Call requires API level 29 (current min is 26): `android.content.res.Resources#getFloat`" + errorLine1=" return mContext.getResources().getFloat(resId);" + errorLine2=" ~~~~~~~~"> + line="73" + column="40"/> - - - - - - - - - - - - - - - - + message="Call requires API level 31 (current min is 26): `android.appwidget.AppWidgetHostView#resetColorResources`" + errorLine1=" resetColorResources();" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + line="117" + column="13"/> + message="Call requires API level 31 (current min is 30): `android.appwidget.AppWidgetHostView#setColorResources`" + errorLine1=" view.setColorResources(mWallpaperColorResources);" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + line="433" + column="18"/> - - - - - - - - - - - - - - - - - - - - - - - - + message="Call requires API level 28 (current min is 26): `android.app.Person#getKey`" + errorLine1=" return people.stream().filter(person -> person.getKey() != null)" + errorLine2=" ~~~~~~"> + line="72" + column="56"/> + message="Method reference requires API level 28 (current min is 26): `Person::getKey`" + errorLine1=" .map(Person::getKey).sorted().toArray(String[]::new);" + errorLine2=" ~~~~~~~~~~~~~~"> + file="packages/apps/Launcher3/src/com/android/launcher3/notification/NotificationKeyData.java" + line="73" + column="22"/> + message="Field requires API level 29 (current min is 26): `android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_PAGE_LEFT`" + errorLine1=" AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_LEFT" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + file="packages/apps/Launcher3/src/com/android/launcher3/PagedView.java" + line="1814" + column="17"/> + message="Field requires API level 29 (current min is 26): `android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_PAGE_RIGHT`" + errorLine1=" : AccessibilityNodeInfo.AccessibilityAction.ACTION_PAGE_RIGHT);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + file="packages/apps/Launcher3/src/com/android/launcher3/PagedView.java" + line="1815" + column="19"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lint-baseline-common-deps-lib.xml b/lint-baseline2.xml similarity index 54% rename from lint-baseline-common-deps-lib.xml rename to lint-baseline2.xml index e52f8fbc70..84f1b15d54 100644 --- a/lint-baseline-common-deps-lib.xml +++ b/lint-baseline2.xml @@ -1,10 +1,10 @@ - + - - - - - + \ No newline at end of file diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml index 3d4ce43607..12c72e1249 100644 --- a/quickstep/res/values-de/strings.xml +++ b/quickstep/res/values-de/strings.xml @@ -65,7 +65,7 @@ "Den Startbildschirm aufrufen" "Wenn du zum Startbildschirm gehen möchtest, wische einfach vom unteren Displayrand nach oben." "Wische mit zwei Fingern vom unteren Displayrand nach oben. So gelangst du immer zum Startbildschirm." - "Zum StartU+00AD­bildschirm" + "Zum Start­bildschirm" "Wische vom unteren Displayrand nach oben" "Gut gemacht!" "Wische vom unteren Displayrand nach oben" diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 67d3827dfb..5890f14a48 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -1161,6 +1161,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener SystemUiProxy.INSTANCE.get(mLauncher) .registerRemoteTransition(mLauncherOpenTransition, homeCheck); if (mBackAnimationController != null) { + mBackAnimationController.registerComponentCallbacks(); mBackAnimationController.registerBackCallbacks(mHandler); } } @@ -1168,6 +1169,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener public void onActivityDestroyed() { unregisterRemoteAnimations(); unregisterRemoteTransitions(); + mLauncher.removeOnDeviceProfileChangeListener(this); SystemUiProxy.INSTANCE.get(mLauncher).setStartingWindowListener(null); ORDERED_BG_EXECUTOR.execute(() -> mLauncher.getContentResolver() .unregisterContentObserver(mAnimationRemovalObserver)); @@ -1200,6 +1202,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener mWallpaperOpenTransitionRunner = null; if (mBackAnimationController != null) { mBackAnimationController.unregisterBackCallbacks(); + mBackAnimationController.unregisterComponentCallbacks(); mBackAnimationController = null; } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDividerPopupView.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarDividerPopupView.kt index dab9950107..12f1e638c2 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDividerPopupView.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDividerPopupView.kt @@ -181,7 +181,7 @@ constructor( measuredWidth.toFloat(), measuredHeight.toFloat(), (measuredWidth - arrowWidth) / 2, // arrowOffsetX - 0f, // arrowOffsetY + -mArrowOffsetVertical.toFloat(), // arrowOffsetY false, // isPointingUp true, // leftAligned context.getColor(R.color.popup_shade_first), diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java index c8719e7524..33641a4bda 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java @@ -572,6 +572,7 @@ public class TaskbarManager { UI_HELPER_EXECUTOR.execute( () -> mTaskbarBroadcastReceiver.unregisterReceiverSafely(mContext)); destroyExistingTaskbar(); + removeTaskbarRootViewFromWindow(); if (mUserUnlocked) { DisplayController.INSTANCE.get(mContext).removeChangeListener(mRecreationListener); } diff --git a/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java b/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java index 784c560b04..7113e495e0 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java +++ b/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java @@ -129,8 +129,10 @@ public class ApiWrapper { public static Intent getAppMarketActivityIntent(Context context, String packageName, UserHandle user) { LauncherApps launcherApps = context.getSystemService(LauncherApps.class); - if (android.os.Flags.allowPrivateProfile() && Flags.enablePrivateSpace() - && Flags.privateSpaceAppInstallerButton()) { + if (android.os.Flags.allowPrivateProfile() + && Flags.enablePrivateSpace() + && (Flags.privateSpaceAppInstallerButton() + || Flags.enablePrivateSpaceInstallShortcut())) { StartActivityParams params = new StartActivityParams((PendingIntent) null, 0); params.intentSender = launcherApps.getAppMarketActivityIntent(packageName, user); return ProxyActivityStarter.getLaunchIntent(context, params); diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 71f4faf56c..0d4a7f0e50 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -40,6 +40,7 @@ import static com.android.launcher3.model.data.ItemInfo.NO_MATCHING_ID; import static com.android.launcher3.popup.QuickstepSystemShortcut.getSplitSelectShortcutByPosition; import static com.android.launcher3.popup.SystemShortcut.APP_INFO; import static com.android.launcher3.popup.SystemShortcut.INSTALL; +import static com.android.launcher3.popup.SystemShortcut.PRIVATE_PROFILE_INSTALL; import static com.android.launcher3.popup.SystemShortcut.WIDGETS; import static com.android.launcher3.taskbar.LauncherTaskbarUIController.ALL_APPS_PAGE_PROGRESS_INDEX; import static com.android.launcher3.taskbar.LauncherTaskbarUIController.MINUS_ONE_PAGE_PROGRESS_INDEX; @@ -95,6 +96,7 @@ import androidx.annotation.RequiresApi; import com.android.app.viewcapture.SettingsAwareViewCapture; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.DeviceProfile; +import com.android.launcher3.Flags; import com.android.launcher3.HomeTransitionController; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherSettings.Favorites; @@ -415,6 +417,10 @@ public class QuickstepLauncher extends Launcher { shortcuts.addAll(getSplitShortcuts()); shortcuts.add(WIDGETS); shortcuts.add(INSTALL); + + if (Flags.enablePrivateSpaceInstallShortcut()) { + shortcuts.add(PRIVATE_PROFILE_INSTALL); + } return shortcuts.stream(); } diff --git a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java index b9029ea9f8..877bdf83d5 100644 --- a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java +++ b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java @@ -23,13 +23,13 @@ import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE; import static com.android.launcher3.BaseActivity.INVISIBLE_ALL; import static com.android.launcher3.BaseActivity.INVISIBLE_BY_PENDING_FLAGS; import static com.android.launcher3.BaseActivity.PENDING_INVISIBLE_BY_WALLPAPER_ANIMATION; -import static com.android.launcher3.LauncherPrefs.TASKBAR_PINNING; -import static com.android.launcher3.config.FeatureFlags.enableTaskbarPinning; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ValueAnimator; +import android.content.ComponentCallbacks; +import android.content.res.Configuration; import android.graphics.Matrix; import android.graphics.PointF; import android.graphics.Rect; @@ -101,44 +101,45 @@ public class LauncherBackAnimationController { private final RectF mCurrentRect = new RectF(); private final QuickstepLauncher mLauncher; private final int mWindowScaleMarginX; - /** Max window translation in the Y axis. */ - private final int mWindowMaxDeltaY; - private final float mWindowScaleEndCornerRadius; - private final float mWindowScaleStartCornerRadius; + private float mWindowScaleEndCornerRadius; + private float mWindowScaleStartCornerRadius; private final Interpolator mCancelInterpolator; private final Interpolator mProgressInterpolator = new DecelerateInterpolator(); private final PointF mInitialTouchPos = new PointF(); private RemoteAnimationTarget mBackTarget; private View mLauncherTargetView; - private SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction(); + private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction(); private boolean mSpringAnimationInProgress = false; private boolean mAnimatorSetInProgress = false; private float mBackProgress = 0; private boolean mBackInProgress = false; private OnBackInvokedCallbackStub mBackCallback; private IRemoteAnimationFinishedCallback mAnimationFinishedCallback; - private BackProgressAnimator mProgressAnimator = new BackProgressAnimator(); + private final BackProgressAnimator mProgressAnimator = new BackProgressAnimator(); private SurfaceControl mScrimLayer; private ValueAnimator mScrimAlphaAnimator; private float mScrimAlpha; private boolean mOverridingStatusBarFlags; + private final ComponentCallbacks mComponentCallbacks = new ComponentCallbacks() { + @Override + public void onConfigurationChanged(Configuration newConfig) { + loadCornerRadius(); + } + + @Override + public void onLowMemory() {} + }; + public LauncherBackAnimationController( QuickstepLauncher launcher, QuickstepTransitionManager quickstepTransitionManager) { mLauncher = launcher; mQuickstepTransitionManager = quickstepTransitionManager; - mWindowScaleEndCornerRadius = QuickStepContract.supportsRoundedCornersOnWindows( - mLauncher.getResources()) - ? mLauncher.getResources().getDimensionPixelSize( - R.dimen.swipe_back_window_corner_radius) - : 0; - mWindowScaleStartCornerRadius = QuickStepContract.getWindowCornerRadius(mLauncher); + loadCornerRadius(); mWindowScaleMarginX = mLauncher.getResources().getDimensionPixelSize( R.dimen.swipe_back_window_scale_x_margin); - mWindowMaxDeltaY = mLauncher.getResources().getDimensionPixelSize( - R.dimen.swipe_back_window_max_delta_y); mCancelInterpolator = AnimationUtils.loadInterpolator(mLauncher, R.interpolator.standard_interpolator); } @@ -301,11 +302,10 @@ public class LauncherBackAnimationController { mInitialTouchPos.set(backEvent.getTouchX(), backEvent.getTouchY()); mStartRect.set(appTarget.windowConfiguration.getMaxBounds()); - if (mLauncher.getDeviceProfile().isTaskbarPresent && enableTaskbarPinning() - && LauncherPrefs.get(mLauncher).get(TASKBAR_PINNING)) { - int insetBottom = mStartRect.bottom - appTarget.contentInsets.bottom; - mStartRect.set(mStartRect.left, mStartRect.top, mStartRect.right, insetBottom); - } + + // inset bottom in case of pinned taskbar being present + mStartRect.inset(0, 0, 0, appTarget.contentInsets.bottom); + mLauncherTargetView = mQuickstepTransitionManager.findLauncherView( new RemoteAnimationTarget[]{ mBackTarget }); setLauncherTargetViewVisible(false); @@ -551,6 +551,30 @@ public class LauncherBackAnimationController { anim.start(); } + private void loadCornerRadius() { + mWindowScaleEndCornerRadius = QuickStepContract.supportsRoundedCornersOnWindows( + mLauncher.getResources()) + ? mLauncher.getResources().getDimensionPixelSize( + R.dimen.swipe_back_window_corner_radius) + : 0; + mWindowScaleStartCornerRadius = QuickStepContract.getWindowCornerRadius(mLauncher); + } + + /** + * Called when launcher is destroyed. Unregisters component callbacks to avoid memory leaks. + */ + public void unregisterComponentCallbacks() { + mLauncher.unregisterComponentCallbacks(mComponentCallbacks); + } + + /** + * Registers component callbacks with the launcher to receive configuration change events. + */ + public void registerComponentCallbacks() { + mLauncher.registerComponentCallbacks(mComponentCallbacks); + } + + private void resetScrim() { removeScrimLayer(); mScrimAlpha = 0; diff --git a/quickstep/src/com/android/quickstep/LauncherRestoreEventLoggerImpl.kt b/quickstep/src/com/android/quickstep/LauncherRestoreEventLoggerImpl.kt index 0913fcac77..27bd03d4dd 100644 --- a/quickstep/src/com/android/quickstep/LauncherRestoreEventLoggerImpl.kt +++ b/quickstep/src/com/android/quickstep/LauncherRestoreEventLoggerImpl.kt @@ -5,10 +5,9 @@ import android.app.backup.BackupRestoreEventLogger import android.app.backup.BackupRestoreEventLogger.BackupRestoreDataType import android.app.backup.BackupRestoreEventLogger.BackupRestoreError import android.content.Context -import com.android.launcher3.Flags.enableLauncherBrMetrics +import com.android.launcher3.Flags.enableLauncherBrMetricsFixed import com.android.launcher3.LauncherSettings.Favorites import com.android.launcher3.backuprestore.LauncherRestoreEventLogger -import com.android.launcher3.config.FeatureFlags.ENABLE_LAUNCHER_BR_METRICS /** * Concrete implementation for wrapper to log Restore event metrics for both success and failure to @@ -45,7 +44,7 @@ class LauncherRestoreEventLoggerImpl(val context: Context) : LauncherRestoreEven count: Int, @BackupRestoreError error: String? ) { - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { restoreEventLogger.logItemsRestoreFailed(dataType, count, error) } } @@ -57,7 +56,7 @@ class LauncherRestoreEventLoggerImpl(val context: Context) : LauncherRestoreEven * @param count the number of data items restored. */ override fun logLauncherItemsRestored(@BackupRestoreDataType dataType: String, count: Int) { - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { restoreEventLogger.logItemsRestored(dataType, count) } } @@ -68,7 +67,7 @@ class LauncherRestoreEventLoggerImpl(val context: Context) : LauncherRestoreEven * @param favoritesId The id of the item type from [Favorites] that was restored. */ override fun logSingleFavoritesItemRestored(favoritesId: Int) { - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { restoreEventLogger.logItemsRestored(favoritesIdToDataType(favoritesId), 1) } } @@ -80,7 +79,7 @@ class LauncherRestoreEventLoggerImpl(val context: Context) : LauncherRestoreEven * @param count number of items that restored. */ override fun logFavoritesItemsRestored(favoritesId: Int, count: Int) { - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { restoreEventLogger.logItemsRestored(favoritesIdToDataType(favoritesId), count) } } @@ -95,7 +94,7 @@ class LauncherRestoreEventLoggerImpl(val context: Context) : LauncherRestoreEven favoritesId: Int, @BackupRestoreError error: String? ) { - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { restoreEventLogger.logItemsRestoreFailed(favoritesIdToDataType(favoritesId), 1, error) } } @@ -112,7 +111,7 @@ class LauncherRestoreEventLoggerImpl(val context: Context) : LauncherRestoreEven count: Int, @BackupRestoreError error: String? ) { - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { restoreEventLogger.logItemsRestoreFailed( favoritesIdToDataType(favoritesId), count, @@ -126,7 +125,7 @@ class LauncherRestoreEventLoggerImpl(val context: Context) : LauncherRestoreEven * done restoring items for Launcher. */ override fun reportLauncherRestoreResults() { - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { BackupManager(context).reportDelayedRestoreResult(restoreEventLogger) } } diff --git a/quickstep/tests/src/com/android/quickstep/TaplDigitalWellBeingToastTest.java b/quickstep/tests/src/com/android/quickstep/TaplDigitalWellBeingToastTest.java index 728fe6741d..4aa7cb07a5 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplDigitalWellBeingToastTest.java +++ b/quickstep/tests/src/com/android/quickstep/TaplDigitalWellBeingToastTest.java @@ -17,8 +17,6 @@ package com.android.quickstep; import static androidx.test.InstrumentationRegistry.getInstrumentation; -import static com.android.launcher3.LauncherState.OVERVIEW; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -84,8 +82,7 @@ public class TaplDigitalWellBeingToastTest extends AbstractQuickStepTest { } private DigitalWellBeingToast getToast() { - executeOnLauncher(launcher -> launcher.getStateManager().goToState(OVERVIEW)); - waitForState("Launcher internal state didn't switch to Overview", () -> OVERVIEW); + mLauncher.getWorkspace().switchToOverview(); final TaskView task = getOnceNotNull("No latest task", launcher -> getLatestTask(launcher)); return getFromLauncher(launcher -> { diff --git a/res/drawable/ic_install_to_private.xml b/res/drawable/ic_install_to_private.xml new file mode 100644 index 0000000000..7f00f8d6b2 --- /dev/null +++ b/res/drawable/ic_install_to_private.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index ea6e0fa85b..44c29eceb5 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -178,5 +178,9 @@ "Privaat Ruimte-instellings" "Sluit/ontsluit Privaat Ruimte" "Privaat Ruimte-oorgang" + + + + "Oorvloei" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 893f4c40ba..b56c79a76b 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -178,5 +178,9 @@ "የግል ቦታ ቅንብሮች" "የግል ቦታን ቆልፍ/ክፈት" "የግል ቦታ ሽግግር" + + + + "ትርፍ ፍሰት" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index a2a43db2ea..1394661020 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -178,5 +178,9 @@ "إعدادات المساحة الخاصة" "قفل المساحة الخاصة أو فتح قفلها" "النقل إلى المساحة الخاصة" + + + + "القائمة الكاملة" diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 93c5e3a2f9..9deda79d3c 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -178,5 +178,9 @@ "ব্যক্তিগত স্পে’চৰ ছেটিং" "ব্যক্তিগত স্পে’চ লক/আনলক কৰক" "ব্যক্তিগত স্পে’চৰ স্থানান্তৰণ" + + + + "অ’ভাৰফ্ল’" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index 31d485da23..971163ee40 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -178,5 +178,9 @@ "Şəxsi məkan ayarları" "Şəxsi məkanı kilidləyin/kiliddən çıxarın" "Şəxsi məkana keçid" + + + + "Kənara çıxma" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index aa08cc4c04..c13989cb91 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -178,5 +178,9 @@ "Podešavanja privatnog prostora" "Zaključaj/otključaj privatni prostor" "Prenos privatnog prostora" + + + + "Preklopno" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index ae47fa0268..31709c0892 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -178,5 +178,9 @@ "Налады прыватнай вобласці" "Заблакіраваць (разблакіраваць) прыватную вобласць" "Пераход у прыватную вобласць" + + + + "Дадатковае меню" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 2f196cabe1..01ee2df269 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -178,5 +178,9 @@ "Настройки за личното пространство" "Заключване/отключване на личното пространство" "Преминаване към личното пространство" + + + + "Препълване" diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index 8c08794d15..665a95f11e 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -178,5 +178,9 @@ "ব্যক্তিগত স্পেসের সেটিংস" "ব্যক্তিগত স্পেস লক/আনলক করুন" "ব্যক্তিগত স্পেস ট্রানজিট করা" + + + + "ওভারফ্লো" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 96414166da..f0ee1b4123 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -178,5 +178,9 @@ "Postavke privatnog prostora" "Zaključavanje/otključavanje privatnog prostora" "Prelazak u privatan prostor" + + + + "Preklopni meni" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 25a8ce6898..e1c9a2bee8 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -178,5 +178,9 @@ "Configuració d\'Espai privat" "Bloqueja o desbloqueja Espai privat" "Canvia a Espai privat" + + + + "Menú addicional" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 49275084da..7a5e8382b4 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -178,5 +178,9 @@ "Nastavení soukromého prostoru" "Zamknout/odemknout soukromý prostor" "Převádění soukromého prostoru" + + + + "Rozbalovací nabídka" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 415d1f39a2..9c46dd98d4 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -178,5 +178,9 @@ "Indstillinger for privat rum" "Lås/oplås det private område" "Ændringer af tilstanden for det private område" + + + + "Overløb" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 04d96828ad..f27cb90b96 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -178,5 +178,9 @@ "Einstellungen für privaten Bereich" "Privaten Bereich sperren/entsperren" "Sperrzustand des privaten Bereichs wird gerade geändert" + + + + "Weitere Optionen" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index bc8458b6cb..d4740d4678 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -178,5 +178,9 @@ "Ρυθμίσεις Ιδιωτικού χώρου" "Κλείδωμα/Ξεκλείδωμα Ιδιωτικού χώρου" "Μετάβαση στον Ιδιωτικό χώρο" + + + + "Υπερχείλιση" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index c002ef9843..85ab76be1b 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -178,5 +178,9 @@ "Private Space Settings" "Lock/Unlock Private Space" "Private Space transitioning" + + + + "Overflow" diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml index 1ad42f39e8..bb0376972f 100644 --- a/res/values-en-rCA/strings.xml +++ b/res/values-en-rCA/strings.xml @@ -178,5 +178,9 @@ "Private Space Settings" "Lock/Unlock Private Space" "Private Space Transitioning" + + + + "Overflow" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index c002ef9843..85ab76be1b 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -178,5 +178,9 @@ "Private Space Settings" "Lock/Unlock Private Space" "Private Space transitioning" + + + + "Overflow" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index c002ef9843..85ab76be1b 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -178,5 +178,9 @@ "Private Space Settings" "Lock/Unlock Private Space" "Private Space transitioning" + + + + "Overflow" diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml index 81bb47438b..ef85c5c396 100644 --- a/res/values-en-rXC/strings.xml +++ b/res/values-en-rXC/strings.xml @@ -178,5 +178,9 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎Private Space Settings‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‎Lock/Unlock Private Space‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‎Private Space Transitioning‎‏‎‎‏‎" + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎Overflow‎‏‎‎‏‎" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index d37b1e90c4..bce04303d2 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -178,5 +178,9 @@ "Configuración de Espacio privado" "Bloquear o desbloquear Espacio privado" "Pasar a Espacio privado" + + + + "Ampliada" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 7db8239d78..6bb325c5d1 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -178,5 +178,9 @@ "Ajustes del espacio privado" "Bloquear/Desbloquear espacio privado" "Cambiar a espacio privado" + + + + "Desplegable" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 9e4a534069..cabd7ab143 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -178,5 +178,9 @@ "Privaatse ruumi seaded" "Privaatse ruumi lukustamine/avamine" "Privaatse ruumi üleviimine" + + + + "Ületäide" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 4123096a34..ff68d7489b 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -178,5 +178,9 @@ "Eremu pribatuaren ezarpenak" "Blokeatu/Desblokeatu eremu pribatua" "Eremu pribaturako trantsizioa" + + + + "Luzapena" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 161c7c5def..444d55056b 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -178,5 +178,9 @@ "تنظیمات «فضای خصوصی»" "قفل/ باز کردن «فضای خصوصی»" "انتقال «فضای خصوصی»" + + + + "سرریز" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 87e3040f47..d812e99115 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -178,5 +178,9 @@ "Yksityisen tilan asetukset" "Lukitse yksityinen tila / avaa sen lukitus" "Yksityisen tilan siirtäminen" + + + + "Ylivuoto" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 0e8fe9c27f..0fc6129138 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -178,5 +178,9 @@ "Paramètres de l\'Espace privé" "Verrouiller/Déverrouiller l\'Espace privé" "Transition vers l\'Espace privé" + + + + "Menu à développer" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 9aa6ad2b7c..fb658f557d 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -178,5 +178,9 @@ "Paramètres d\'Espace privé" "Verrouiller/Déverrouiller Espace privé" "Transition vers Espace privé" + + + + "Dépassement" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 4eda3cfc99..4a455f5721 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -178,5 +178,9 @@ "Configuración do espazo privado" "Bloquear ou desbloquear o espazo privado" "Transición ao espazo privado" + + + + "Menú adicional" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index deaee86179..be0fdbaac6 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -178,5 +178,9 @@ "ખાનગી સ્પેસના સેટિંગ" "ખાનગી સ્પેસને લૉક/અનલૉક કરો" "ખાનગી સ્પેસ પર સ્થાનાંતરણ" + + + + "ઓવરફ્લો" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 52bc50a995..f7972ebf6f 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -178,5 +178,9 @@ "प्राइवेट स्पेस सेटिंग" "प्राइवेट स्पेस को लॉक करें/अनलॉक करें" "प्राइवेट स्पेस की सेटिंग में बदलाव किया जा रहा है" + + + + "ओवरफ़्लो" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 9694428318..9f6ae3a973 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -178,5 +178,9 @@ "Postavke privatnog prostora" "Zaključavanje/otključavanje privatnog prostora" "Prelazak na privatni prostor" + + + + "Dodatni izbornik" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 7c83ec0253..8e0fa1493c 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -178,5 +178,9 @@ "Privát terület beállításai" "Privát terület zárolása/zárolásának feloldása" "Átállás privát területre…" + + + + "Túlcsordulás" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 7aa432bc81..c909b54d6f 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -178,5 +178,9 @@ "Անձնական տարածքի կարգավորումներ" "Կողպել/ապակողպել անձնական տարածքը" "Անցում անձնական տարածք" + + + + "Լրացուցիչ ընտրացանկ" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index b7ce5e3d73..d7bb8dccf1 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -178,5 +178,9 @@ "Setelan Ruang Pribadi" "Kunci/Buka Kunci Ruang Pribadi" "Ruang Pribadi Bertransisi" + + + + "Menu tambahan" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 4ba06234a0..1c9759fc70 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -178,5 +178,9 @@ "Stillingar einkarýmis" "Læsaeinkarými/taka einkarými úr lás" "Einkarými að breytast" + + + + "Yfirflæði" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 644d680ac5..fd7c4bf47a 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -178,5 +178,9 @@ "Impostazioni dello Spazio privato" "Blocca/sblocca Spazio privato" "Transizione dello Spazio privato in corso…" + + + + "Extra" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index c91e57cf55..79a6e88f25 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -178,5 +178,9 @@ "הגדרות המרחב הפרטי" "נעילה או ביטול הנעילה של המרחב הפרטי" "מעבר למרחב הפרטי" + + + + "אפשרויות נוספות" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 00b061f085..ac63dab159 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -178,5 +178,9 @@ "プライベート スペースの設定" "プライベート スペースをロック / ロック解除する" "プライベート スペース移行中" + + + + "オーバーフロー" diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index d428447330..eeb33fb8aa 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -178,5 +178,9 @@ "პირადი სივრცის პარამეტრები" "პირადი სივრცის ჩაკეტვა/განბლოკვა" "პირად სივრცეზე გადასვლა" + + + + "გადავსება" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 4f6c6fdda2..85e7b6c68d 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -178,5 +178,9 @@ "Жеке бөлме параметрлері" "Жеке бөлмені құлыптау/оның құлпын ашу" "Жеке бөлмеге өту" + + + + "Қосымша мәзір" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 91622f0349..49c2b352a8 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -178,5 +178,9 @@ "ការកំណត់ Private Space" "ចាក់សោ/ដោះសោ Private Space" "ការផ្លាស់ប្ដូរ Private Space" + + + + "ម៉ឺនុយបន្ថែម" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index ad208f2919..21e226c6ec 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -178,5 +178,9 @@ "ಖಾಸಗಿ ಸ್ಪೇಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು" "ಖಾಸಗಿ ಸ್ಪೇಸ್ ಅನ್ನು ಲಾಕ್/ಅನ್‌ಲಾಕ್ ಮಾಡಿ" "ಖಾಸಗಿ ಸ್ಪೇಸ್ ಪರಿವರ್ತನೆಯಾಗುತ್ತಿದೆ" + + + + "ಓವರ್‌ಫ್ಲೋ" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index b2b0c0cec8..643a5137d9 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -178,5 +178,9 @@ "비공개 스페이스 설정" "비공개 스페이스 잠금/잠금 해제" "비공개 스페이스 전환" + + + + "오버플로" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index 78e96a6338..2274389a43 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -178,5 +178,9 @@ "Жеке чөйрөнүн параметрлери" "Жеке чөйрөнү кулпулоо/кулпусун ачуу" "Жеке чөйрөгө өтүү" + + + + "Кошумча меню" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index bb99150c73..175e8f5881 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -178,5 +178,9 @@ "ການຕັ້ງຄ່າພື້ນທີ່ສ່ວນຕົວ" "ລັອກ/ປົດລັອກພື້ນທີ່ສ່ວນຕົວ" "ການປ່ຽນແປງພື້ນທີ່ສ່ວນຕົວ" + + + + "ການດຳເນີນການເພີ່ມເຕີມ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 075bbb2724..ef56c1a2f9 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -178,5 +178,9 @@ "Privačios erdvės nustatymai" "Užrakinti ir (arba) atrakinti privačią erdvę" "Privačios erdvės perkėlimas" + + + + "Perpildymas" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 5edee25017..f2e8a87fc6 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -178,5 +178,9 @@ "Privātās mapes iestatījumi" "Bloķēt/atbloķēt privāto mapi" "Pāriet uz privāto mapi" + + + + "Pārpilde" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index a95b7bf1ef..cfbd3ba9a2 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -178,5 +178,9 @@ "Поставки за „Приватен простор“" "Заклучување/отклучување на „Приватен простор“" "Префрлање на „Приватен простор“" + + + + "Проширено балонче" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index 1cdcb09adf..2ae3c2f788 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -178,5 +178,9 @@ "സ്വകാര്യ സ്‌പേസ് ക്രമീകരണം" "സ്വകാര്യ സ്‌പേസ് ലോക്ക് ചെയ്യുക/അൺലോക്ക് ചെയ്യുക" "പ്രൈവറ്റ് സ്‌പേസ് ട്രാൻസിഷനിംഗ്" + + + + "ഓവർഫ്ലോ" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 2d53dea0f1..31dda29969 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -178,5 +178,9 @@ "Private Space-н тохиргоо" "Private Space-г түгжих/түгжээг тайлах" "Private Space-н шилжилт" + + + + "Урт цэс" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 9e44733dc5..635a42298b 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -178,5 +178,9 @@ "खाजगी स्पेस ची सेटिंग्ज" "खाजगी स्पेस लॉक/अनलॉक करा" "खाजगी स्पेस वर स्विच करणे" + + + + "ओव्हरफ्लो" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index c90082aaac..566ea8581a 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -178,5 +178,9 @@ "Tetapan Ruang Peribadi" "Kunci/Buka kunci Ruang Peribadi" "Peralihan Ruang Peribadi" + + + + "Limpahan" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index d1bef9730d..ced9f61831 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -178,5 +178,9 @@ "သီးသန့်ချတ်ခန်း ဆက်တင်များ" "သီးသန့်ချတ်ခန်း လော့ခ်ချ/ဖွင့်ရန်" "သီးသန့်ချတ်ခန်း အပြောင်းအလဲ" + + + + "မီနူးအပို" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index cd2fb1fe30..cb0fd9531b 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -178,5 +178,9 @@ "Innstillinger for Private Space" "Lås / lås opp Private Space" "Private Space-overgang" + + + + "Overflyt" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index b9397a0704..d8df0603ac 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -178,5 +178,9 @@ "निजी स्पेससम्बन्धी सेटिङ" "निजी स्पेस लक/अनलक गर्नुहोस्" "निजी स्पेस ट्रान्जिसन गरिँदै छ" + + + + "ओभरफ्लो" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 84d5c15f08..86a5f4010e 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -178,5 +178,9 @@ "Instellingen voor privéruimte" "Privéruimte vergrendelen/ontgrendelen" "Overschakelen naar privéruimte" + + + + "Overloop" diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 3fa8754565..c726e504cd 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -178,5 +178,9 @@ "ପ୍ରାଇଭେଟ ସ୍ପେସ ସେଟିଂସ" "ପ୍ରାଇଭେଟ ସ୍ପେସକୁ ଲକ/ଅନଲକ କରନ୍ତୁ" "ପ୍ରାଇଭେଟ ସ୍ପେସ ଟ୍ରାଞ୍ଜିସନିଂ" + + + + "ଓଭରଫ୍ଲୋ" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 98bc36df9f..46e750a970 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -178,5 +178,9 @@ "ਨਿੱਜੀ ਸਪੇਸ ਸੰਬੰਧੀ ਸੈਟਿੰਗਾਂ" "ਨਿੱਜੀ ਸਪੇਸ ਨੂੰ ਲਾਕ/ਅਣਲਾਕ ਕਰੋ" "ਨਿੱਜੀ ਸਪੇਸ ਨੂੰ ਤਬਦੀਲ ਕਰਨਾ" + + + + "ਓਵਰਫ਼ਲੋ" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 30a953c100..4b6a612097 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -178,5 +178,9 @@ "Ustawienia obszaru prywatnego" "Zablokuj/odblokuj obszar prywatny" "Przenoszenie obszaru prywatnego" + + + + "Rozwiń menu" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index af760f870d..4803138b98 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -178,5 +178,9 @@ "Definições do espaço privado" "Bloquear/desbloquear espaço privado" "Transição do espaço privado" + + + + "Menu adicional" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 4359e9abdb..40af95dd90 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -178,5 +178,9 @@ "Configurações do Espaço particular" "Bloquear/desbloquear o Espaço particular" "Espaço particular em transição" + + + + "Balão flutuante" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 836ac995d9..2d66f9bf40 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -178,5 +178,9 @@ "Setări spațiu privat" "Blochează / deblochează spațiul privat" "Tranziție pentru spațiul privat" + + + + "Suplimentar" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index bb7b0a0b7d..063126dd7d 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -178,5 +178,9 @@ "Настройки личного пространства" "Блокировка и разблокировка личного пространства" "Переход к личному пространству" + + + + "Дополнительное меню" diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index 401e0fb0e0..e5660ce96f 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -178,5 +178,9 @@ "පෞද්ගලික අවකාශ සැකසීම්" "පෞද්ගලික අවකාශය අගුළු දමන්න/අගුළු හරින්න" "පෞද්ගලික අවකාශ සංක්‍රමණය" + + + + "පිටාර යාම" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index fbe64a8f50..89c64bf4d7 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -178,5 +178,9 @@ "Nastavenia súkromného priestoru" "Súkromný priestor zamykania a odomykania" "Prechod súkromného priestoru" + + + + "Rozšírená ponuka" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index d91e83fbd6..5f18f263e9 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -178,5 +178,9 @@ "Nastavitve zasebnega prostora" "Zaklepanje/odklepanje zasebnega prostora" "Preklapljanje zasebnega prostora" + + + + "Oblaček z dodatnimi elementi" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index a3bd6731a0..c06fc7e7f0 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -178,5 +178,9 @@ "Cilësimet e \"Hapësirës private\"" "Kyç/Shkyç \"Hapësirën private\"" "Kalimi te \"Hapësira private\"" + + + + "Tejkalimi" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 52428482ec..eb3bc64592 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -178,5 +178,9 @@ "Подешавања приватног простора" "Закључај/откључај приватни простор" "Пренос приватног простора" + + + + "Преклопно" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 1e1436faae..6824cc1b2a 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -178,5 +178,9 @@ "Inställningar för privat rum" "Lås eller lås upp ditt privata rum" "Överföring av privat rum" + + + + "Fler alternativ" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 2486cae4d2..788a06ab08 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -178,5 +178,9 @@ "Mipangilio ya Nafasi ya Faragha" "Funga/Fungua Nafasi ya Faragha" "Mabadiliko ya Nafasi ya Faragha" + + + + "Menyu ya vipengee vya ziada" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index cb0ca679e1..6c89de9821 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -178,5 +178,9 @@ "தனிப்பட்ட சேமிப்பிட அமைப்புகள்" "தனிப்பட்ட சேமிப்பிடத்தை லாக்/அன்லாக் செய்யும்" "தனிப்பட்ட சேமிப்பிடத்திற்கு மாற்றுகிறது" + + + + "கூடுதல் விருப்பங்களைக் காட்டும்" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 27cec72b04..e58039fd86 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -178,5 +178,9 @@ "ప్రైవేట్ స్పేస్ సెట్టింగ్‌లు" "ప్రైవేట్ స్పేస్‌ను లాక్/అన్‌లాక్ చేయండి" "ప్రైవేట్ స్పేస్ కేటాయించడం జరుగుతుంది" + + + + "ఓవర్‌ఫ్లో" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 78cbcfab20..0eff8879b9 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -178,5 +178,9 @@ "การตั้งค่าพื้นที่ส่วนตัว" "ล็อก/ปลดล็อกพื้นที่ส่วนตัว" "การเปลี่ยนไปใช้พื้นที่ส่วนตัว" + + + + "การดำเนินการเพิ่มเติม" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index acf60ffa2f..3db2abadcf 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -178,5 +178,9 @@ "Mga Setting ng Pribadong Space" "I-lock/I-unlock ang Pribadong Space" "Pag-transition ng Pribadong Space" + + + + "Overflow" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 1449202c4a..78fc596f77 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -178,5 +178,9 @@ "Gizli Alan Ayarları" "Gizli Alanı Kilitleyin/Kilidini Açın" "Gizli Alana Geçiş" + + + + "Taşma" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index ad325cc3f5..b69558f84f 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -178,5 +178,9 @@ "Налаштування приватного простору" "Заблокувати/розблокувати приватний простір" "Перехід у приватний простір" + + + + "Додаткове меню" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index 1c0e3ae257..549f2a1225 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -178,5 +178,9 @@ "نجی اسپیس کی ترتیبات" "نجی اسپیس کو مقفل کریں/غیر مقفل کریں" "نجی اسپیس کی منتقلی" + + + + "اوورفلو" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 8e6d3925d7..7cacd96d38 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -178,5 +178,9 @@ "Shaxsiy xona sozlamalari" "Shaxsiy xonani ochish/qulflash" "Maxfiy joyga almashtirish" + + + + "Kengaytirish" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 8ed3089daa..7f4487c833 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -178,5 +178,9 @@ "Cài đặt không gian riêng tư" "Khoá/mở khoá không gian riêng tư" "Chuyển đổi sang không gian riêng tư" + + + + "Bong bóng bổ sung" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 53b85f2651..cfae584e2e 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -178,5 +178,9 @@ "私密空间设置" "锁定/解锁私密空间" "私密空间转换" + + + + "菜单" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index e6aaef5f1e..e94a8080db 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -178,5 +178,9 @@ "「私人空間」設定" "鎖定/解鎖「私人空間」" "轉為「私人空間」" + + + + "顯示更多" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 462b651986..957bf45988 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -178,5 +178,9 @@ "私人空間設定" "鎖定/取消鎖定私人空間" "轉換私人空間狀態" + + + + "溢位" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index efc082401e..3051d097ef 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -178,5 +178,9 @@ "Amasethingi Esikhala Esiyimfihlo" "Khiya/Vula Isikhala Esiyimfihlo" "Ukuguqulwa Kwendawo Yangasese" + + + + "Ukugcwala kakhulu" diff --git a/res/values/config.xml b/res/values/config.xml index 2980635634..33eb4c7203 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -201,7 +201,6 @@ 10dp - 160dp 40dp diff --git a/res/values/strings.xml b/res/values/strings.xml index 956d24daa2..34677f6ae7 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -171,6 +171,8 @@ Uninstall App info + + Install in private Install diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index a57eaa3ca6..5b497f26eb 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -22,6 +22,7 @@ import static com.android.launcher3.Flags.enableCursorHoverStates; import static com.android.launcher3.config.FeatureFlags.ENABLE_ICON_LABEL_AUTO_SCALING; import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon; import static com.android.launcher3.icons.BitmapInfo.FLAG_NO_BADGE; +import static com.android.launcher3.icons.BitmapInfo.FLAG_SKIP_USER_BADGE; import static com.android.launcher3.icons.BitmapInfo.FLAG_THEMED; import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_INCREMENTAL_DOWNLOAD_ACTIVE; @@ -164,6 +165,8 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, @ViewDebug.ExportedProperty(category = "launcher") private boolean mHideBadge = false; @ViewDebug.ExportedProperty(category = "launcher") + private boolean mSkipUserBadge = false; + @ViewDebug.ExportedProperty(category = "launcher") private boolean mIsIconVisible = true; @ViewDebug.ExportedProperty(category = "launcher") private int mTextColor; @@ -268,6 +271,10 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, mHideBadge = hideBadge; } + public void setSkipUserBadge(boolean skipUserBadge) { + mSkipUserBadge = skipUserBadge; + } + /** * Resets the view so it can be recycled. */ @@ -397,6 +404,9 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, if (mHideBadge || mDisplay == DISPLAY_SEARCH_RESULT_SMALL) { flags |= FLAG_NO_BADGE; } + if (mSkipUserBadge) { + flags |= FLAG_SKIP_USER_BADGE; + } FastBitmapDrawable iconDrawable = info.newIcon(getContext(), flags); mDotParams.appColor = iconDrawable.getIconColor(); mDotParams.dotColor = Themes.getAttrColor(getContext(), R.attr.notificationDotColor); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 152ad5f318..b5dd10ec3d 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -515,6 +515,7 @@ public class Launcher extends StatefulActivity mStateManager = new StateManager<>(this, NORMAL); setupViews(); + updateDisallowBack(); mAppWidgetManager = new WidgetManagerHelper(this); mWidgetInflater = new WidgetInflater(this); diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java index 4ad4c71a55..ad764e3867 100644 --- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java @@ -1315,6 +1315,10 @@ public class ActivityAllAppsContainerView : mViewPager == null ? AdapterHolder.MAIN : mViewPager.getNextPage(); } + public PrivateProfileManager getPrivateProfileManager() { + return mPrivateProfileManager; + } + /** * Adds an update listener to animator that adds springs to the animation. */ diff --git a/src/com/android/launcher3/allapps/UserProfileManager.java b/src/com/android/launcher3/allapps/UserProfileManager.java index 0261010d8b..6bef7256ff 100644 --- a/src/com/android/launcher3/allapps/UserProfileManager.java +++ b/src/com/android/launcher3/allapps/UserProfileManager.java @@ -94,6 +94,19 @@ public abstract class UserProfileManager { return mCurrentState; } + /** Returns if user profile is enabled. */ + public boolean isEnabled() { + return mCurrentState == STATE_ENABLED; + } + + /** Returns the UserHandle corresponding to the profile type, null in case no matches found. */ + public UserHandle getProfileUser() { + return mUserCache.getUserProfiles().stream() + .filter(getUserMatcher()) + .findAny() + .orElse(null); + } + /** Logs Event to StatsLogManager. */ protected void logEvents(StatsLogManager.EventEnum event) { mStatsLogManager.logger().log(event); diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 61e853e8b3..2fe3a4002d 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -167,8 +167,6 @@ public final class FeatureFlags { "Enable the ability to generate monochromatic icons, if it is not provided by the app"); // TODO(Block 8): Clean up flags - public static final BooleanFlag ENABLE_LAUNCHER_BR_METRICS = getDebugFlag(305984208, - "ENABLE_LAUNCHER_BR_METRICS", TEAMFOOD, "Enable metrics for Launcher restore"); // TODO(Block 9): Clean up flags public static final BooleanFlag MULTI_SELECT_EDIT_MODE = getDebugFlag(270709220, diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java index 6651fa030e..0dc0d0239a 100644 --- a/src/com/android/launcher3/logging/StatsLogManager.java +++ b/src/com/android/launcher3/logging/StatsLogManager.java @@ -701,6 +701,9 @@ public class StatsLogManager implements ResourceBasedOverride { @UiEvent(doc = "User tapped private space settings button") LAUNCHER_PRIVATE_SPACE_SETTINGS_TAP(1550), + @UiEvent(doc = "User tapped on install to private space system shortcut.") + LAUNCHER_PRIVATE_SPACE_INSTALL_SYSTEM_SHORTCUT_TAP(1565), + // ADD MORE ; diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 7b9f6fa241..92bb7a0933 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -18,7 +18,7 @@ package com.android.launcher3.model; import static com.android.launcher3.BuildConfig.WIDGET_ON_FIRST_SCREEN; import static com.android.launcher3.Flags.enableSupportForArchiving; -import static com.android.launcher3.Flags.enableLauncherBrMetrics; +import static com.android.launcher3.Flags.enableLauncherBrMetricsFixed; import static com.android.launcher3.LauncherPrefs.IS_FIRST_LOAD_AFTER_RESTORE; import static com.android.launcher3.LauncherPrefs.SHOULD_SHOW_SMARTSPACE; import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APP_PAIR; @@ -234,7 +234,7 @@ public class LoaderTask implements Runnable { mIsRestoreFromBackup = (Boolean) LauncherPrefs.get(mApp.getContext()).get(IS_FIRST_LOAD_AFTER_RESTORE); LauncherRestoreEventLogger restoreEventLogger = null; - if (enableLauncherBrMetrics()) { + if (enableLauncherBrMetricsFixed()) { restoreEventLogger = LauncherRestoreEventLogger.Companion .newInstance(mApp.getContext()); } diff --git a/src/com/android/launcher3/pm/UserCache.java b/src/com/android/launcher3/pm/UserCache.java index 4661fd4498..8708d5ac2e 100644 --- a/src/com/android/launcher3/pm/UserCache.java +++ b/src/com/android/launcher3/pm/UserCache.java @@ -28,6 +28,7 @@ import android.os.UserManager; import androidx.annotation.AnyThread; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import androidx.annotation.WorkerThread; import com.android.launcher3.util.MainThreadInitializedObject; @@ -154,6 +155,11 @@ public class UserCache implements SafeCloseable { .orElse(Process.myUserHandle()); } + @VisibleForTesting + public void putToCache(UserHandle userHandle, UserIconInfo info) { + mUserToSerialMap.put(userHandle, info); + } + /** * @see UserManager#getUserProfiles() */ diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java index f39f8060ba..8463361eef 100644 --- a/src/com/android/launcher3/popup/SystemShortcut.java +++ b/src/com/android/launcher3/popup/SystemShortcut.java @@ -1,5 +1,6 @@ package com.android.launcher3.popup; +import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_PRIVATE_SPACE_INSTALL_SYSTEM_SHORTCUT_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_APP_INFO_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_WIDGETS_TAP; @@ -8,6 +9,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Rect; import android.os.Process; +import android.os.UserHandle; import android.view.View; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ImageView; @@ -20,10 +22,12 @@ import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; +import com.android.launcher3.allapps.PrivateProfileManager; import com.android.launcher3.model.WidgetItem; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.uioverrides.ApiWrapper; +import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.InstantAppResolver; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.PackageUserKey; @@ -212,6 +216,69 @@ public abstract class SystemShortcut extend } } + public static final Factory PRIVATE_PROFILE_INSTALL = + (launcher, itemInfo, originalView) -> { + if (itemInfo.getTargetComponent() == null + || !(itemInfo instanceof com.android.launcher3.model.data.AppInfo) + || !itemInfo.getContainerInfo().hasAllAppsContainer() + || !Process.myUserHandle().equals(itemInfo.user)) { + return null; + } + + PrivateProfileManager privateProfileManager = + launcher.getAppsView().getPrivateProfileManager(); + if (privateProfileManager == null || !privateProfileManager.isEnabled()) { + return null; + } + + UserHandle privateProfileUser = privateProfileManager.getProfileUser(); + if (privateProfileUser == null) { + return null; + } + // Do not show shortcut if an app is already installed to the space + ComponentKey targetKey = + new ComponentKey(itemInfo.getTargetComponent(), privateProfileUser); + if (launcher.getAppsView().getAppsStore().getApp(targetKey) != null) { + return null; + } + + // TODO(b/302666597): do not install app if it's in deny list (e.g. settings) + + return new InstallToPrivateProfile( + launcher, itemInfo, originalView, privateProfileUser); + }; + + static class InstallToPrivateProfile extends SystemShortcut { + UserHandle mSpaceUser; + + InstallToPrivateProfile( + Launcher target, ItemInfo itemInfo, View originalView, UserHandle spaceUser) { + // TODO(b/302666597): update icon once available + super( + R.drawable.ic_install_to_private, + R.string.install_private_system_shortcut_label, + target, + itemInfo, + originalView); + mSpaceUser = spaceUser; + } + + @Override + public void onClick(View view) { + Intent intent = + ApiWrapper.getAppMarketActivityIntent( + view.getContext(), + mItemInfo.getTargetComponent().getPackageName(), + mSpaceUser); + mTarget.startActivitySafely(view, intent, mItemInfo); + AbstractFloatingView.closeAllOpenViews(mTarget); + mTarget.getStatsLogManager() + .logger() + .withItemInfo(mItemInfo) + .log(LAUNCHER_PRIVATE_SPACE_INSTALL_SYSTEM_SHORTCUT_TAP); + } + } + public static final Factory INSTALL = (activity, itemInfo, originalView) -> { boolean supportsWebUI = (itemInfo instanceof WorkspaceItemInfo) diff --git a/src/com/android/launcher3/provider/RestoreDbTask.java b/src/com/android/launcher3/provider/RestoreDbTask.java index a969c8f1f9..9750d251ab 100644 --- a/src/com/android/launcher3/provider/RestoreDbTask.java +++ b/src/com/android/launcher3/provider/RestoreDbTask.java @@ -18,7 +18,7 @@ package com.android.launcher3.provider; import static android.os.Process.myUserHandle; -import static com.android.launcher3.Flags.enableLauncherBrMetrics; +import static com.android.launcher3.Flags.enableLauncherBrMetricsFixed; import static com.android.launcher3.InvariantDeviceProfile.TYPE_MULTI_DISPLAY; import static com.android.launcher3.LauncherPrefs.APP_WIDGET_IDS; import static com.android.launcher3.LauncherPrefs.IS_FIRST_LOAD_AFTER_RESTORE; @@ -30,7 +30,6 @@ import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPWIDG import static com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RESTORE_ERROR_PROFILE_NOT_RESTORED; import static com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RESTORE_ERROR_WIDGETS_DISABLED; import static com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RESTORE_ERROR_WIDGET_REMOVED; -import static com.android.launcher3.config.FeatureFlags.ENABLE_LAUNCHER_BR_METRICS; import static com.android.launcher3.provider.LauncherDbUtils.dropTable; import static com.android.launcher3.widget.LauncherWidgetHolder.APPWIDGET_HOST_ID; @@ -199,7 +198,7 @@ public class RestoreDbTask { Arrays.fill(args, "?"); final String where = "profileId NOT IN (" + TextUtils.join(", ", Arrays.asList(args)) + ")"; logFavoritesTable(db, "items to delete from unrestored profiles:", where, profileIds); - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { reportUnrestoredProfiles(db, where, profileIds, restoreEventLogger); } int itemsDeletedCount = db.delete(Favorites.TABLE_NAME, where, profileIds); @@ -361,7 +360,7 @@ public class RestoreDbTask { DeviceGridState deviceGridState = new DeviceGridState(context); FileLog.d(TAG, "restore initiated from backup: DeviceGridState=" + deviceGridState); LauncherPrefs.get(context).putSync(RESTORE_DEVICE.to(deviceGridState.getDeviceType())); - if (enableLauncherBrMetrics() || ENABLE_LAUNCHER_BR_METRICS.get()) { + if (enableLauncherBrMetricsFixed()) { LauncherPrefs.get(context).putSync(IS_FIRST_LOAD_AFTER_RESTORE.to(true)); } }