Merge "AllAppsSearch interface change Version 3" into ub-launcher3-rvc-dev
diff --git a/quickstep/recents_ui_overrides/res/drawable/all_apps_edu_circle.xml b/quickstep/recents_ui_overrides/res/drawable/all_apps_edu_circle.xml
new file mode 100644
index 0000000..df7cd8e
--- /dev/null
+++ b/quickstep/recents_ui_overrides/res/drawable/all_apps_edu_circle.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="?android:colorAccent"/>
+ <size android:height="@dimen/swipe_edu_circle_size"
+ android:width="@dimen/swipe_edu_circle_size" />
+</shape>
\ No newline at end of file
diff --git a/quickstep/recents_ui_overrides/res/layout/all_apps_edu_view.xml b/quickstep/recents_ui_overrides/res/layout/all_apps_edu_view.xml
new file mode 100644
index 0000000..e7ef6e6
--- /dev/null
+++ b/quickstep/recents_ui_overrides/res/layout/all_apps_edu_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.android.quickstep.views.AllAppsEduView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="@dimen/swipe_edu_width"
+ android:layout_height="@dimen/swipe_edu_max_height"/>
diff --git a/quickstep/recents_ui_overrides/res/layout/fallback_recents_activity.xml b/quickstep/recents_ui_overrides/res/layout/fallback_recents_activity.xml
index ffe906c..7b3e378 100644
--- a/quickstep/recents_ui_overrides/res/layout/fallback_recents_activity.xml
+++ b/quickstep/recents_ui_overrides/res/layout/fallback_recents_activity.xml
@@ -18,6 +18,7 @@
android:id="@+id/drag_layer"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:clipChildren="false"
android:fitsSystemWindows="true">
<com.android.quickstep.fallback.FallbackRecentsView
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
index c037e44..38adf39 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
@@ -19,8 +19,8 @@
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE;
import static com.android.launcher3.anim.Interpolators.LINEAR;
+import static com.android.quickstep.TaskViewUtils.createRecentsWindowAnimator;
import static com.android.quickstep.TaskViewUtils.findTaskViewToLaunch;
-import static com.android.quickstep.TaskViewUtils.getRecentsWindowAnimator;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -34,6 +34,7 @@
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.Interpolators;
+import com.android.launcher3.anim.PendingAnimation;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
@@ -63,9 +64,10 @@
boolean skipLauncherChanges = !launcherClosing;
TaskView taskView = findTaskViewToLaunch(mLauncher, v, appTargets);
- Animator recentsAnimator = getRecentsWindowAnimator(taskView, skipLauncherChanges,
- appTargets, wallpaperTargets, mLauncher.getDepthController());
- anim.play(recentsAnimator.setDuration(RECENTS_LAUNCH_DURATION));
+ PendingAnimation pa = new PendingAnimation(RECENTS_LAUNCH_DURATION);
+ createRecentsWindowAnimator(taskView, skipLauncherChanges, appTargets, wallpaperTargets,
+ mLauncher.getDepthController(), pa);
+ anim.play(pa.buildAnim());
Animator childStateAnimation = null;
// Found a visible recents task that matches the opening app, lets launch the app from there
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
index 1fe3643..e2acf93 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/hybridhotseat/HotseatPredictionController.java
@@ -15,6 +15,7 @@
*/
package com.android.launcher3.hybridhotseat;
+import static com.android.launcher3.InvariantDeviceProfile.CHANGE_FLAG_GRID;
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
import android.animation.Animator;
@@ -571,8 +572,10 @@
@Override
public void onIdpChanged(int changeFlags, InvariantDeviceProfile profile) {
- this.mHotSeatItemsCount = profile.numHotseatIcons;
- createPredictor();
+ if ((changeFlags & CHANGE_FLAG_GRID) != 0) {
+ this.mHotSeatItemsCount = profile.numHotseatIcons;
+ createPredictor();
+ }
}
@Override
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 95087ba..9ae6080 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -94,6 +94,7 @@
super.onCreate(savedInstanceState);
if (FeatureFlags.ENABLE_HYBRID_HOTSEAT.get()) {
mHotseatPredictionController = new HotseatPredictionController(this);
+ mHotseatPredictionController.createPredictor();
}
}
@@ -177,14 +178,6 @@
}
@Override
- public void finishBindingItems(int pageBoundFirst) {
- super.finishBindingItems(pageBoundFirst);
- if (mHotseatPredictionController != null) {
- mHotseatPredictionController.createPredictor();
- }
- }
-
- @Override
public void bindPredictedItems(List<AppInfo> appInfos, IntArray ranks) {
super.bindPredictedItems(appInfos, ranks);
if (mHotseatPredictionController != null) {
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java
index 11593a1..94c7771 100644
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java
@@ -49,64 +49,62 @@
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_TRANSLATE;
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
import static com.android.quickstep.SysUINavigationMode.removeShelfFromOverview;
-import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_OFFSET;
import android.animation.Animator;
import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.view.View;
import android.view.animation.Interpolator;
import com.android.launcher3.CellLayout;
import com.android.launcher3.Hotseat;
+import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.LauncherState.ScaleAndTranslation;
import com.android.launcher3.Workspace;
import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.allapps.AllAppsTransitionController;
-import com.android.launcher3.anim.SpringAnimationBuilder;
import com.android.launcher3.statemanager.StateManager;
-import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory;
import com.android.launcher3.states.StateAnimationConfig;
import com.android.launcher3.uioverrides.QuickstepLauncher;
import com.android.quickstep.SysUINavigationMode;
+import com.android.quickstep.util.RecentsAtomicAnimationFactory;
import com.android.quickstep.views.RecentsView;
/**
* Animation factory for quickstep specific transitions
*/
-public class QuickstepAtomicAnimationFactory extends AtomicAnimationFactory<LauncherState> {
+public class QuickstepAtomicAnimationFactory extends
+ RecentsAtomicAnimationFactory<Launcher, LauncherState> {
// Scale recents takes before animating in
private static final float RECENTS_PREPARE_SCALE = 1.33f;
- public static final int INDEX_SHELF_ANIM = 0;
- public static final int INDEX_RECENTS_FADE_ANIM = 1;
- public static final int INDEX_RECENTS_TRANSLATE_X_ANIM = 2;
- public static final int INDEX_PAUSE_TO_OVERVIEW_ANIM = 3;
- private static final int ANIM_COUNT = 4;
+ public static final int INDEX_SHELF_ANIM = RecentsAtomicAnimationFactory.NEXT_INDEX + 0;
+ public static final int INDEX_PAUSE_TO_OVERVIEW_ANIM =
+ RecentsAtomicAnimationFactory.NEXT_INDEX + 1;
+
+ private static final int MY_ANIM_COUNT = 2;
+ protected static final int NEXT_INDEX = RecentsAtomicAnimationFactory.NEXT_INDEX
+ + MY_ANIM_COUNT;
public static final long ATOMIC_DURATION_FROM_PAUSED_TO_OVERVIEW = 300;
- private final QuickstepLauncher mLauncher;
-
- public QuickstepAtomicAnimationFactory(QuickstepLauncher launcher) {
- super(ANIM_COUNT);
- mLauncher = launcher;
+ public QuickstepAtomicAnimationFactory(QuickstepLauncher activity) {
+ super(activity, MY_ANIM_COUNT);
}
@Override
public Animator createStateElementAnimation(int index, float... values) {
switch (index) {
case INDEX_SHELF_ANIM: {
- AllAppsTransitionController aatc = mLauncher.getAllAppsController();
+ AllAppsTransitionController aatc = mActivity.getAllAppsController();
Animator springAnim = aatc.createSpringAnimation(values);
- if ((OVERVIEW.getVisibleElements(mLauncher) & HOTSEAT_ICONS) != 0) {
+ if ((OVERVIEW.getVisibleElements(mActivity) & HOTSEAT_ICONS) != 0) {
// Translate hotseat with the shelf until reaching overview.
- float overviewProgress = OVERVIEW.getVerticalProgress(mLauncher);
- ScaleAndTranslation sat = OVERVIEW.getHotseatScaleAndTranslation(mLauncher);
+ float overviewProgress = OVERVIEW.getVerticalProgress(mActivity);
+ ScaleAndTranslation sat = OVERVIEW.getHotseatScaleAndTranslation(mActivity);
float shiftRange = aatc.getShiftRange();
if (values.length == 1) {
values = new float[] {aatc.getProgress(), values[0]};
@@ -114,9 +112,9 @@
ValueAnimator hotseatAnim = ValueAnimator.ofFloat(values);
hotseatAnim.addUpdateListener(anim -> {
float progress = (Float) anim.getAnimatedValue();
- if (progress >= overviewProgress || mLauncher.isInState(BACKGROUND_APP)) {
+ if (progress >= overviewProgress || mActivity.isInState(BACKGROUND_APP)) {
float hotseatShift = (progress - overviewProgress) * shiftRange;
- mLauncher.getHotseat().setTranslationY(hotseatShift + sat.translationY);
+ mActivity.getHotseat().setTranslationY(hotseatShift + sat.translationY);
}
});
hotseatAnim.setInterpolator(LINEAR);
@@ -130,34 +128,21 @@
return springAnim;
}
- case INDEX_RECENTS_FADE_ANIM:
- return ObjectAnimator.ofFloat(mLauncher.getOverviewPanel(),
- RecentsView.CONTENT_ALPHA, values);
- case INDEX_RECENTS_TRANSLATE_X_ANIM: {
- RecentsView rv = mLauncher.getOverviewPanel();
- return new SpringAnimationBuilder(mLauncher)
- .setMinimumVisibleChange(1f / rv.getPageOffsetScale())
- .setDampingRatio(0.8f)
- .setStiffness(250)
- .setValues(values)
- .build(rv, ADJACENT_PAGE_OFFSET);
- }
case INDEX_PAUSE_TO_OVERVIEW_ANIM: {
StateAnimationConfig config = new StateAnimationConfig();
config.duration = ATOMIC_DURATION_FROM_PAUSED_TO_OVERVIEW;
config.setInterpolator(ANIM_VERTICAL_PROGRESS, OVERSHOOT_1_2);
config.setInterpolator(ANIM_ALL_APPS_FADE, DEACCEL_3);
- if ((OVERVIEW.getVisibleElements(mLauncher) & HOTSEAT_ICONS) != 0) {
+ if ((OVERVIEW.getVisibleElements(mActivity) & HOTSEAT_ICONS) != 0) {
config.setInterpolator(ANIM_HOTSEAT_SCALE, OVERSHOOT_1_2);
config.setInterpolator(ANIM_HOTSEAT_TRANSLATE, OVERSHOOT_1_2);
}
- StateManager<LauncherState> stateManager = mLauncher.getStateManager();
+ StateManager<LauncherState> stateManager = mActivity.getStateManager();
return stateManager.createAtomicAnimation(
stateManager.getCurrentStableState(), OVERVIEW, config);
}
-
default:
return super.createStateElementAnimation(index, values);
}
@@ -172,7 +157,7 @@
config.setInterpolator(ANIM_OVERVIEW_SCALE, clampToProgress(ACCEL, 0, 0.9f));
config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, ACCEL);
config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL_1_7);
- Workspace workspace = mLauncher.getWorkspace();
+ Workspace workspace = mActivity.getWorkspace();
// Start from a higher workspace scale, but only if we're invisible so we don't jump.
boolean isWorkspaceVisible = workspace.getVisibility() == VISIBLE;
@@ -186,13 +171,13 @@
workspace.setScaleX(0.92f);
workspace.setScaleY(0.92f);
}
- Hotseat hotseat = mLauncher.getHotseat();
+ Hotseat hotseat = mActivity.getHotseat();
boolean isHotseatVisible = hotseat.getVisibility() == VISIBLE && hotseat.getAlpha() > 0;
if (!isHotseatVisible) {
hotseat.setScaleX(0.92f);
hotseat.setScaleY(0.92f);
if (ENABLE_OVERVIEW_ACTIONS.get()) {
- AllAppsContainerView qsbContainer = mLauncher.getAppsView();
+ AllAppsContainerView qsbContainer = mActivity.getAppsView();
View qsb = qsbContainer.getSearchView();
boolean qsbVisible = qsb.getVisibility() == VISIBLE && qsb.getAlpha() > 0;
if (!qsbVisible) {
@@ -209,7 +194,7 @@
config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, OVERSHOOT_1_7);
config.setInterpolator(ANIM_OVERVIEW_SCRIM_FADE, FAST_OUT_SLOW_IN);
} else if ((fromState == NORMAL || fromState == HINT_STATE) && toState == OVERVIEW) {
- if (SysUINavigationMode.getMode(mLauncher) == NO_BUTTON) {
+ if (SysUINavigationMode.getMode(mActivity) == NO_BUTTON) {
config.setInterpolator(ANIM_WORKSPACE_SCALE,
fromState == NORMAL ? ACCEL : OVERSHOOT_1_2);
config.setInterpolator(ANIM_WORKSPACE_TRANSLATE, ACCEL);
@@ -217,7 +202,7 @@
config.setInterpolator(ANIM_WORKSPACE_SCALE, OVERSHOOT_1_2);
// Scale up the recents, if it is not coming from the side
- RecentsView overview = mLauncher.getOverviewPanel();
+ RecentsView overview = mActivity.getOverviewPanel();
if (overview.getVisibility() != VISIBLE || overview.getContentAlpha() == 0) {
SCALE_PROPERTY.set(overview, RECENTS_PREPARE_SCALE);
}
@@ -225,7 +210,7 @@
config.setInterpolator(ANIM_WORKSPACE_FADE, OVERSHOOT_1_2);
config.setInterpolator(ANIM_OVERVIEW_SCALE, OVERSHOOT_1_2);
Interpolator translationInterpolator = ENABLE_OVERVIEW_ACTIONS.get()
- && removeShelfFromOverview(mLauncher)
+ && removeShelfFromOverview(mActivity)
? OVERSHOOT_1_2
: OVERSHOOT_1_7;
config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, translationInterpolator);
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java
index dc8fb9e..c18a0fd 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java
@@ -77,7 +77,6 @@
controller.dispatchOnStart();
controller.getAnimationPlayer().end();
});
- factory.onRemoteAnimationReceived(null);
factory.createActivityInterface(RECENTS_LAUNCH_DURATION);
factory.setRecentsAttachedToAppWindow(true, false);
mActivity = activity;
@@ -137,10 +136,13 @@
new SyncRtSurfaceTransactionApplierCompat(mActivity.getRootView()));
AnimatedFloat recentsAlpha = new AnimatedFloat(() -> { });
- params.setBaseAlphaCallback((t, a) -> recentsAlpha.value);
+ params.setBaseBuilderProxy((builder, app, p)
+ -> builder.withAlpha(recentsAlpha.value));
Interpolator taskInterpolator;
if (targets.isAnimatingHome()) {
+ params.setHomeBuilderProxy((builder, app, p) -> builder.withAlpha(1 - p.getProgress()));
+
taskInterpolator = TOUCH_RESPONSE_INTERPOLATOR;
pa.addFloat(recentsAlpha, AnimatedFloat.VALUE, 0, 1, TOUCH_RESPONSE_INTERPOLATOR);
} else {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java
index 66fefbe..5b396dd 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandler.java
@@ -55,7 +55,6 @@
import com.android.quickstep.RecentsAnimationCallbacks.RecentsAnimationListener;
import com.android.quickstep.util.ActiveGestureLog;
import com.android.quickstep.util.ActivityInitListener;
-import com.android.quickstep.util.AppWindowAnimationHelper;
import com.android.quickstep.util.RectFSpringAnim;
import com.android.quickstep.util.TaskViewSimulator;
import com.android.quickstep.util.TransformParams;
@@ -234,7 +233,6 @@
}
mCanceled = false;
}
- ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation", true);
}
/**
@@ -247,7 +245,9 @@
protected void onRestartLastAppearedTask() {
// Finish the controller here, since we won't get onTaskAppeared() for a task that already
// appeared.
- mRecentsAnimationController.finish(false, null);
+ if (mRecentsAnimationController != null) {
+ mRecentsAnimationController.finish(false, null);
+ }
}
/**
@@ -329,6 +329,7 @@
mRecentsAnimationController.finish(false /* toRecents */,
null /* onFinishComplete */);
mActivityInterface.onLaunchTaskSuccess();
+ ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation", false);
}
}
}
@@ -511,8 +512,8 @@
public interface Factory {
- BaseSwipeUpHandler newHandler(GestureState gestureState, long touchTimeMs,
- boolean continuingLastGesture, boolean isLikelyToStartNewTask);
+ BaseSwipeUpHandler newHandler(
+ GestureState gestureState, long touchTimeMs, boolean continuingLastGesture);
}
protected interface RunningWindowAnim {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java
similarity index 90%
rename from quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java
rename to quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java
index a8fa630..46799ff 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java
@@ -17,7 +17,6 @@
import static com.android.launcher3.BaseActivity.INVISIBLE_BY_STATE_HANDLER;
import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS;
-import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.anim.Interpolators.DEACCEL;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.anim.Interpolators.OVERSHOOT_1_2;
@@ -38,29 +37,24 @@
import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD;
import android.animation.Animator;
-import android.animation.AnimatorSet;
import android.animation.TimeInterpolator;
import android.animation.ValueAnimator;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.graphics.PointF;
-import android.graphics.RectF;
import android.os.Build;
import android.os.SystemClock;
-import android.os.UserHandle;
import android.view.View;
import android.view.View.OnApplyWindowInsetsListener;
import android.view.ViewTreeObserver.OnDrawListener;
import android.view.WindowInsets;
import android.view.animation.Interpolator;
-import androidx.annotation.NonNull;
import androidx.annotation.UiThread;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.DeviceProfile;
-import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimationSuccessListener;
@@ -72,7 +66,6 @@
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
import com.android.launcher3.util.TraceHelper;
-import com.android.launcher3.views.FloatingIconView;
import com.android.quickstep.BaseActivityInterface.AnimationFactory;
import com.android.quickstep.GestureState.GestureEndTarget;
import com.android.quickstep.inputconsumers.OverviewInputConsumer;
@@ -80,8 +73,6 @@
import com.android.quickstep.util.RectFSpringAnim;
import com.android.quickstep.util.ShelfPeekAnim;
import com.android.quickstep.util.ShelfPeekAnim.ShelfAnimState;
-import com.android.quickstep.util.StaggeredWorkspaceAnim;
-import com.android.quickstep.util.TransformParams.TargetAlphaProvider;
import com.android.quickstep.views.LiveTileOverlay;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
@@ -92,11 +83,12 @@
/**
* Handles the navigation gestures when Launcher is the default home activity.
+ * TODO: Merge this with BaseSwipeUpHandler
*/
@TargetApi(Build.VERSION_CODES.O)
-public class LauncherSwipeHandler extends BaseSwipeUpHandler<Launcher, RecentsView>
- implements OnApplyWindowInsetsListener {
- private static final String TAG = LauncherSwipeHandler.class.getSimpleName();
+public abstract class BaseSwipeUpHandlerV2<T extends StatefulActivity<?>, Q extends RecentsView>
+ extends BaseSwipeUpHandler<T, Q> implements OnApplyWindowInsetsListener {
+ private static final String TAG = BaseSwipeUpHandlerV2.class.getSimpleName();
private static final String[] STATE_NAMES = DEBUG_STATES ? new String[16] : null;
@@ -108,9 +100,11 @@
}
// Launcher UI related states
- private static final int STATE_LAUNCHER_PRESENT = getFlagForIndex(0, "STATE_LAUNCHER_PRESENT");
- private static final int STATE_LAUNCHER_STARTED = getFlagForIndex(1, "STATE_LAUNCHER_STARTED");
- private static final int STATE_LAUNCHER_DRAWN = getFlagForIndex(2, "STATE_LAUNCHER_DRAWN");
+ protected static final int STATE_LAUNCHER_PRESENT =
+ getFlagForIndex(0, "STATE_LAUNCHER_PRESENT");
+ protected static final int STATE_LAUNCHER_STARTED =
+ getFlagForIndex(1, "STATE_LAUNCHER_STARTED");
+ protected static final int STATE_LAUNCHER_DRAWN = getFlagForIndex(2, "STATE_LAUNCHER_DRAWN");
// Internal initialization states
private static final int STATE_APP_CONTROLLER_RECEIVED =
@@ -122,7 +116,7 @@
private static final int STATE_SCALED_CONTROLLER_RECENTS =
getFlagForIndex(5, "STATE_SCALED_CONTROLLER_RECENTS");
- private static final int STATE_HANDLER_INVALIDATED =
+ protected static final int STATE_HANDLER_INVALIDATED =
getFlagForIndex(6, "STATE_HANDLER_INVALIDATED");
private static final int STATE_GESTURE_STARTED =
getFlagForIndex(7, "STATE_GESTURE_STARTED");
@@ -163,7 +157,7 @@
*/
private static final int LOG_NO_OP_PAGE_INDEX = -1;
- private final TaskAnimationManager mTaskAnimationManager;
+ protected final TaskAnimationManager mTaskAnimationManager;
// Either RectFSpringAnim (if animating home) or ObjectAnimator (from mCurrentShift) otherwise
private RunningWindowAnim mRunningWindowAnim;
@@ -193,7 +187,7 @@
private final Runnable mOnDeferredActivityLaunch = this::onDeferredActivityLaunch;
- public LauncherSwipeHandler(Context context, RecentsAnimationDeviceState deviceState,
+ public BaseSwipeUpHandlerV2(Context context, RecentsAnimationDeviceState deviceState,
TaskAnimationManager taskAnimationManager, GestureState gestureState,
long touchTimeMs, boolean continuingLastGesture,
InputConsumerController inputConsumer) {
@@ -222,9 +216,6 @@
| STATE_GESTURE_CANCELLED,
this::resetStateForAnimationCancel);
- mStateCallback.runOnceAtState(STATE_LAUNCHER_STARTED | STATE_APP_CONTROLLER_RECEIVED,
- this::sendRemoteAnimationsToAnimationFactory);
-
mStateCallback.runOnceAtState(STATE_RESUME_LAST_TASK | STATE_APP_CONTROLLER_RECEIVED,
this::resumeLastTask);
mStateCallback.runOnceAtState(STATE_START_NEW_TASK | STATE_SCREENSHOT_CAPTURED,
@@ -272,7 +263,7 @@
@Override
protected boolean onActivityInit(Boolean alreadyOnHome) {
super.onActivityInit(alreadyOnHome);
- final Launcher activity = mActivityInterface.getCreatedActivity();
+ final T activity = mActivityInterface.getCreatedActivity();
if (mActivity == activity) {
return true;
}
@@ -323,7 +314,7 @@
}
private void onLauncherStart() {
- final Launcher activity = mActivityInterface.getCreatedActivity();
+ final T activity = mActivityInterface.getCreatedActivity();
if (mActivity != activity) {
return;
}
@@ -411,6 +402,10 @@
updateSysUiFlags(mCurrentShift.value);
return;
}
+ notifyGestureAnimationStartToRecents();
+ }
+
+ protected void notifyGestureAnimationStartToRecents() {
mRecentsView.onGestureAnimationStart(mGestureState.getRunningTaskId());
}
@@ -418,10 +413,6 @@
mLauncherFrameDrawnTime = SystemClock.uptimeMillis();
}
- private void sendRemoteAnimationsToAnimationFactory() {
- mAnimationFactory.onRemoteAnimationReceived(mRecentsAnimationTargets);
- }
-
private void initializeLauncherAnimationController() {
buildAnimationController();
@@ -633,7 +624,7 @@
*/
@UiThread
private void notifyGestureStartedAsync() {
- final Launcher curActivity = mActivity;
+ final T curActivity = mActivity;
if (curActivity != null) {
// Once the gesture starts, we can no longer transition home through the button, so
// reset the force override of the activity visibility
@@ -679,10 +670,6 @@
protected InputConsumer createNewInputProxyHandler() {
endRunningWindowAnim(mGestureState.getEndTarget() == HOME /* cancel */);
endLauncherTransitionController();
- if (!ENABLE_QUICKSTEP_LIVE_TILE.get()) {
- // Hide the task view, if not already hidden
- setTargetAlphaProvider(LauncherSwipeHandler::getHiddenTargetAlpha);
- }
StatefulActivity activity = mActivityInterface.getCreatedActivity();
return activity == null ? InputConsumer.NO_OP
@@ -717,6 +704,7 @@
mStateCallback.setState(STATE_RESUME_LAST_TASK);
break;
}
+ ActiveGestureLog.INSTANCE.addLog("onSettledOnEndTarget " + mGestureState.getEndTarget());
}
@Override
@@ -787,12 +775,6 @@
}
}
- if (endTarget == RECENTS || endTarget == HOME) {
- // Since we're now done quickStepping, we want to only listen for touch events
- // for the main orientation's nav bar, instead of multiple
- mDeviceState.enableMultipleRegions(false);
- }
-
if (mDeviceState.isOverviewDisabled() && (endTarget == RECENTS || endTarget == LAST_TASK)) {
return LAST_TASK;
}
@@ -911,6 +893,8 @@
interpolator, target, velocityPxPerMs));
}
+ protected abstract HomeAnimationFactory createHomeAnimationFactory(long duration);
+
@UiThread
private void animateToProgressInternal(float start, float end, long duration,
Interpolator interpolator, GestureEndTarget target, PointF velocityPxPerMs) {
@@ -919,67 +903,7 @@
maybeUpdateRecentsAttachedState();
if (mGestureState.getEndTarget() == HOME) {
- HomeAnimationFactory homeAnimFactory;
- if (mActivity != null) {
- final TaskView runningTaskView = mRecentsView.getRunningTaskView();
- final View workspaceView;
- if (runningTaskView != null
- && runningTaskView.getTask().key.getComponent() != null) {
- workspaceView = mActivity.getWorkspace().getFirstMatchForAppClose(
- runningTaskView.getTask().key.getComponent().getPackageName(),
- UserHandle.of(runningTaskView.getTask().key.userId));
- } else {
- workspaceView = null;
- }
- final RectF iconLocation = new RectF();
- boolean canUseWorkspaceView =
- workspaceView != null && workspaceView.isAttachedToWindow();
- FloatingIconView floatingIconView = canUseWorkspaceView
- ? FloatingIconView.getFloatingIconView(mActivity, workspaceView,
- true /* hideOriginal */, iconLocation, false /* isOpening */)
- : null;
-
- mActivity.getRootView().setForceHideBackArrow(true);
- mActivityInterface.setHintUserWillBeActive();
-
- homeAnimFactory = new HomeAnimationFactory(floatingIconView) {
-
- @Override
- public RectF getWindowTargetRect() {
- if (canUseWorkspaceView) {
- return iconLocation;
- } else {
- return super.getWindowTargetRect();
- }
- }
-
- @NonNull
- @Override
- public AnimatorPlaybackController createActivityAnimationToHome() {
- // Return an empty APC here since we have an non-user controlled animation
- // to home.
- long accuracy = 2 * Math.max(mDp.widthPx, mDp.heightPx);
- return mActivity.getStateManager().createAnimationToNewWorkspace(
- NORMAL, accuracy, 0 /* animComponents */);
- }
-
- @Override
- public void playAtomicAnimation(float velocity) {
- new StaggeredWorkspaceAnim(mActivity, velocity,
- true /* animateOverviewScrim */).start();
- }
- };
-
- } else {
- homeAnimFactory = new HomeAnimationFactory(null) {
- @Override
- public AnimatorPlaybackController createActivityAnimationToHome() {
- return AnimatorPlaybackController.wrap(new AnimatorSet(), duration);
- }
- };
- mStateCallback.addChangeListener(STATE_LAUNCHER_PRESENT | STATE_HANDLER_INVALIDATED,
- isPresent -> mRecentsView.startHome());
- }
+ HomeAnimationFactory homeAnimFactory = createHomeAnimationFactory(duration);
RectFSpringAnim windowAnim = createWindowAnimationToHome(start, homeAnimFactory);
windowAnim.addAnimatorListener(new AnimationSuccessListener() {
@Override
@@ -1303,14 +1227,16 @@
// If there are no targets or the animation not started, then there is nothing to finish
mStateCallback.setStateOnUiThread(STATE_CURRENT_TASK_FINISHED);
} else {
- mRecentsAnimationController.finish(true /* toRecents */,
- () -> mStateCallback.setStateOnUiThread(STATE_CURRENT_TASK_FINISHED),
- true /* sendUserLeaveHint */);
+ finishRecentsControllerToHome(
+ () -> mStateCallback.setStateOnUiThread(STATE_CURRENT_TASK_FINISHED));
}
ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation", true);
doLogGesture(HOME);
+ mDeviceState.enableMultipleRegions(false);
}
+ protected abstract void finishRecentsControllerToHome(Runnable callback);
+
private void setupLauncherUiAfterSwipeUpToRecentsAnimation() {
endLauncherTransitionController();
mActivityInterface.onSwipeUpToRecentsComplete();
@@ -1322,14 +1248,10 @@
SystemUiProxy.INSTANCE.get(mContext).onOverviewShown(false, TAG);
doLogGesture(RECENTS);
+ mDeviceState.onSwipeUpToOverview(mActivityInterface);
reset();
}
- private void setTargetAlphaProvider(TargetAlphaProvider provider) {
- mTransformParams.setTaskAlphaCallback(provider);
- updateFinalShift();
- }
-
private void addLiveTileOverlay() {
if (LiveTileOverlay.INSTANCE.attach(mActivity.getRootView().getOverlay())) {
mRecentsView.setLiveTileOverlayAttached(true);
@@ -1341,13 +1263,6 @@
mRecentsView.setLiveTileOverlayAttached(false);
}
- public static float getHiddenTargetAlpha(RemoteAnimationTargetCompat app, float expectedAlpha) {
- if (!isNotInRecents(app)) {
- return 0;
- }
- return expectedAlpha;
- }
-
private static boolean isNotInRecents(RemoteAnimationTargetCompat app) {
return app.isNotInRecents
|| app.activityType == RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME;
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java
index 8dfe75e..c9ff884 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java
@@ -15,27 +15,21 @@
*/
package com.android.quickstep;
-import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
-import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
import static com.android.quickstep.fallback.RecentsState.BACKGROUND_APP;
import static com.android.quickstep.fallback.RecentsState.DEFAULT;
-import static com.android.quickstep.views.RecentsView.CONTENT_ALPHA;
-import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
import android.content.Context;
-import android.graphics.PointF;
import android.graphics.Rect;
+import android.view.MotionEvent;
import androidx.annotation.Nullable;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
import com.android.launcher3.anim.AnimatorPlaybackController;
-import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.userevent.nano.LauncherLogProto;
-import com.android.quickstep.fallback.FallbackRecentsView;
import com.android.quickstep.fallback.RecentsState;
import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.views.RecentsView;
@@ -55,9 +49,10 @@
public static final FallbackActivityInterface INSTANCE = new FallbackActivityInterface();
private FallbackActivityInterface() {
- super(false);
+ super(false, DEFAULT, BACKGROUND_APP);
}
+ /** 2 */
@Override
public int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context, Rect outRect,
PagedOrientationHandler orientationHandler) {
@@ -72,6 +67,13 @@
}
}
+ /** 4 */
+ @Override
+ public void onSwipeUpToHomeComplete() {
+ onSwipeUpToRecentsComplete();
+ }
+
+ /** 5 */
@Override
public void onAssistantVisibilityChanged(float visibility) {
// This class becomes active when the screen is locked.
@@ -79,51 +81,13 @@
// set to zero prior to this class becoming active.
}
+ /** 6 */
@Override
public AnimationFactory prepareRecentsUI(
boolean activityVisible, Consumer<AnimatorPlaybackController> callback) {
- RecentsActivity activity = getCreatedActivity();
- if (activity == null) {
- return (transitionLength) -> { };
- }
-
- activity.getStateManager().goToState(BACKGROUND_APP);
- FallbackRecentsView rv = activity.getOverviewPanel();
- rv.setContentAlpha(0);
-
- return new AnimationFactory() {
-
- boolean isAnimatingToRecents = false;
-
- @Override
- public void onRemoteAnimationReceived(RemoteAnimationTargets targets) {
- isAnimatingToRecents = targets != null && targets.isAnimatingHome();
- if (!isAnimatingToRecents) {
- rv.setContentAlpha(1);
- }
- createActivityInterface(getSwipeUpDestinationAndLength(
- activity.getDeviceProfile(), activity, new Rect(),
- rv.getPagedOrientationHandler()));
- }
-
- @Override
- public void createActivityInterface(long transitionLength) {
- PendingAnimation pa = new PendingAnimation(transitionLength * 2);
-
- if (isAnimatingToRecents) {
- pa.addFloat(rv, CONTENT_ALPHA, 0, 1, LINEAR);
- }
-
- pa.addFloat(rv, SCALE_PROPERTY, rv.getMaxScaleForFullScreen(), 1, LINEAR);
- pa.addFloat(rv, FULLSCREEN_PROGRESS, 1, 0, LINEAR);
- AnimatorPlaybackController controller = pa.createPlaybackController();
-
- // Since we are changing the start position of the UI, reapply the state, at the end
- controller.setEndAction(() -> activity.getStateManager().goToState(
- controller.getInterpolatedProgress() > 0.5 ? DEFAULT : BACKGROUND_APP));
- callback.accept(controller);
- }
- };
+ DefaultAnimationFactory factory = new DefaultAnimationFactory(callback);
+ factory.initUI();
+ return factory;
}
@Override
@@ -167,6 +131,20 @@
}
@Override
+ public boolean deferStartingActivity(RecentsAnimationDeviceState deviceState, MotionEvent ev) {
+ // In non-gesture mode, user might be clicking on the home button which would directly
+ // start the home activity instead of going through recents. In that case, defer starting
+ // recents until we are sure it is a gesture.
+ return !deviceState.isFullyGesturalNavMode()
+ || super.deferStartingActivity(deviceState, ev);
+ }
+
+ @Override
+ public void onExitOverview(RecentsAnimationDeviceState deviceState, Runnable exitRunnable) {
+ // no-op, fake landscape not supported for 3P
+ }
+
+ @Override
public int getContainerType() {
RecentsActivity activity = getCreatedActivity();
boolean visible = activity != null && activity.isStarted() && activity.hasWindowFocus();
@@ -191,11 +169,6 @@
}
@Override
- public void getMultiWindowSize(Context context, DeviceProfile dp, PointF out) {
- out.set(dp.widthPx, dp.heightPx);
- }
-
- @Override
protected float getExtraSpace(Context context, DeviceProfile dp,
PagedOrientationHandler orientationHandler) {
return showOverviewActions(context)
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java
index db41bd6..96913c6 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java
@@ -15,537 +15,198 @@
*/
package com.android.quickstep;
-import static com.android.launcher3.anim.Interpolators.ACCEL_1_5;
-import static com.android.launcher3.anim.Interpolators.ACCEL_2;
-import static com.android.quickstep.GestureState.GestureEndTarget.HOME;
-import static com.android.quickstep.GestureState.GestureEndTarget.LAST_TASK;
-import static com.android.quickstep.GestureState.GestureEndTarget.NEW_TASK;
-import static com.android.quickstep.GestureState.GestureEndTarget.RECENTS;
-import static com.android.quickstep.MultiStateCallback.DEBUG_STATES;
-import static com.android.quickstep.RecentsActivity.EXTRA_TASK_ID;
-import static com.android.quickstep.RecentsActivity.EXTRA_THUMBNAIL;
-import static com.android.quickstep.views.RecentsView.UPDATE_SYSUI_FLAGS_THRESHOLD;
+import static com.android.launcher3.anim.Interpolators.ACCEL;
+import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME;
-import android.animation.Animator;
-import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
import android.app.ActivityOptions;
import android.content.Context;
import android.content.Intent;
-import android.graphics.PointF;
-import android.os.Bundle;
-import android.util.ArrayMap;
-import android.view.MotionEvent;
+import android.graphics.Matrix;
+
+import androidx.annotation.NonNull;
import com.android.launcher3.DeviceProfile;
-import com.android.launcher3.R;
-import com.android.launcher3.anim.AnimationSuccessListener;
+import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimatorPlaybackController;
-import com.android.launcher3.util.ObjectWrapper;
-import com.android.quickstep.BaseActivityInterface.AnimationFactory;
-import com.android.quickstep.GestureState.GestureEndTarget;
+import com.android.launcher3.anim.PendingAnimation;
+import com.android.launcher3.anim.SpringAnimationBuilder;
import com.android.quickstep.fallback.FallbackRecentsView;
-import com.android.quickstep.util.RectFSpringAnim;
-import com.android.systemui.shared.recents.model.ThumbnailData;
+import com.android.quickstep.util.TransformParams;
+import com.android.quickstep.util.TransformParams.BuilderProxy;
import com.android.systemui.shared.system.ActivityManagerWrapper;
-import com.android.systemui.shared.system.ActivityOptionsCompat;
import com.android.systemui.shared.system.InputConsumerController;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
+import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams;
/**
* Handles the navigation gestures when a 3rd party launcher is the default home activity.
*/
-public class FallbackSwipeHandler extends BaseSwipeUpHandler<RecentsActivity, FallbackRecentsView> {
+public class FallbackSwipeHandler extends
+ BaseSwipeUpHandlerV2<RecentsActivity, FallbackRecentsView> {
- private static final String[] STATE_NAMES = DEBUG_STATES ? new String[5] : null;
-
- private static int getFlagForIndex(int index, String name) {
- if (DEBUG_STATES) {
- STATE_NAMES[index] = name;
- }
- return 1 << index;
- }
-
- private static final int STATE_RECENTS_PRESENT =
- getFlagForIndex(0, "STATE_RECENTS_PRESENT");
- private static final int STATE_HANDLER_INVALIDATED =
- getFlagForIndex(1, "STATE_HANDLER_INVALIDATED");
-
- private static final int STATE_GESTURE_CANCELLED =
- getFlagForIndex(2, "STATE_GESTURE_CANCELLED");
- private static final int STATE_GESTURE_COMPLETED =
- getFlagForIndex(3, "STATE_GESTURE_COMPLETED");
- private static final int STATE_APP_CONTROLLER_RECEIVED =
- getFlagForIndex(4, "STATE_APP_CONTROLLER_RECEIVED");
-
- public static class EndTargetAnimationParams {
- private final float mEndProgress;
- private final long mDurationMultiplier;
- private final float mLauncherAlpha;
-
- EndTargetAnimationParams(float endProgress, long durationMultiplier, float launcherAlpha) {
- mEndProgress = endProgress;
- mDurationMultiplier = durationMultiplier;
- mLauncherAlpha = launcherAlpha;
- }
- }
- private final ArrayMap<GestureEndTarget, EndTargetAnimationParams>
- mEndTargetAnimationParams = new ArrayMap();
-
- private final AnimatedFloat mLauncherAlpha = new AnimatedFloat(this::onLauncherAlphaChanged);
-
- private boolean mOverviewThresholdPassed = false;
-
- private final boolean mInQuickSwitchMode;
- private final boolean mContinuingLastGesture;
+ private FallbackHomeAnimationFactory mActiveAnimationFactory;
private final boolean mRunningOverHome;
- private final boolean mSwipeUpOverHome;
- private boolean mTouchedHomeDuringTransition;
- private final PointF mEndVelocityPxPerMs = new PointF(0, 0.5f);
- private RunningWindowAnim mFinishAnimation;
-
- // Used to control Recents components throughout the swipe gesture.
- private AnimatorPlaybackController mLauncherTransitionController;
- private boolean mHasLauncherTransitionControllerStarted;
-
- private AnimationFactory mAnimationFactory = (t) -> { };
+ private final Matrix mTmpMatrix = new Matrix();
+ private float mMaxLauncherScale = 1;
public FallbackSwipeHandler(Context context, RecentsAnimationDeviceState deviceState,
- GestureState gestureState, InputConsumerController inputConsumer,
- boolean isLikelyToStartNewTask, boolean continuingLastGesture) {
- super(context, deviceState, gestureState, inputConsumer);
+ TaskAnimationManager taskAnimationManager, GestureState gestureState, long touchTimeMs,
+ boolean continuingLastGesture, InputConsumerController inputConsumer) {
+ super(context, deviceState, taskAnimationManager, gestureState, touchTimeMs,
+ continuingLastGesture, inputConsumer);
- mInQuickSwitchMode = isLikelyToStartNewTask || continuingLastGesture;
- mContinuingLastGesture = continuingLastGesture;
mRunningOverHome = ActivityManagerWrapper.isHomeTask(mGestureState.getRunningTask());
- mSwipeUpOverHome = mRunningOverHome && !mInQuickSwitchMode;
-
- // Keep the home launcher invisible until we decide to land there.
- mLauncherAlpha.value = mRunningOverHome ? 1 : 0;
- if (mSwipeUpOverHome) {
- mTransformParams.setBaseAlphaCallback((t, a) -> 1 - mLauncherAlpha.value);
- } else {
- mTransformParams.setBaseAlphaCallback((t, a) -> mLauncherAlpha.value);
+ if (mRunningOverHome) {
+ mTransformParams.setHomeBuilderProxy(this::updateHomeActivityTransformDuringSwipeUp);
}
-
- // Going home has an extra long progress to ensure that it animates into the screen
- mEndTargetAnimationParams.put(HOME, new EndTargetAnimationParams(3, 100, 1));
- mEndTargetAnimationParams.put(RECENTS, new EndTargetAnimationParams(1, 300, 0));
- mEndTargetAnimationParams.put(LAST_TASK, new EndTargetAnimationParams(0, 150, 1));
- mEndTargetAnimationParams.put(NEW_TASK, new EndTargetAnimationParams(0, 150, 1));
-
- initAfterSubclassConstructor();
- initStateCallbacks();
- }
-
- private void initStateCallbacks() {
- mStateCallback = new MultiStateCallback(STATE_NAMES);
-
- mStateCallback.runOnceAtState(STATE_HANDLER_INVALIDATED,
- this::onHandlerInvalidated);
- mStateCallback.runOnceAtState(STATE_RECENTS_PRESENT | STATE_HANDLER_INVALIDATED,
- this::onHandlerInvalidatedWithRecents);
-
- mStateCallback.runOnceAtState(STATE_GESTURE_CANCELLED | STATE_APP_CONTROLLER_RECEIVED,
- this::finishAnimationTargetSetAnimationComplete);
-
- if (mInQuickSwitchMode) {
- mStateCallback.runOnceAtState(STATE_GESTURE_COMPLETED | STATE_APP_CONTROLLER_RECEIVED
- | STATE_RECENTS_PRESENT,
- this::finishAnimationTargetSet);
- } else {
- mStateCallback.runOnceAtState(STATE_GESTURE_COMPLETED | STATE_APP_CONTROLLER_RECEIVED,
- this::finishAnimationTargetSet);
- }
- }
-
- private void onLauncherAlphaChanged() {
- if (mRecentsAnimationTargets != null && mGestureState.getEndTarget() == null) {
- applyWindowTransform();
- }
- }
-
- @Override
- protected boolean onActivityInit(Boolean alreadyOnHome) {
- super.onActivityInit(alreadyOnHome);
- mActivity = mActivityInterface.getCreatedActivity();
- mRecentsView = mActivity.getOverviewPanel();
- mRecentsView.setOnPageTransitionEndCallback(null);
- linkRecentsViewScroll();
- if (!mContinuingLastGesture) {
- if (mRunningOverHome) {
- mRecentsView.onGestureAnimationStart(mGestureState.getRunningTask());
- } else {
- mRecentsView.onGestureAnimationStart(mGestureState.getRunningTaskId());
- }
- }
- mStateCallback.setStateOnUiThread(STATE_RECENTS_PRESENT);
- mDeviceState.enableMultipleRegions(false);
-
- mAnimationFactory = mActivityInterface.prepareRecentsUI(alreadyOnHome,
- this::onAnimatorPlaybackControllerCreated);
- mAnimationFactory.createActivityInterface(mTransitionDragLength);
- return true;
}
@Override
protected void initTransitionEndpoints(DeviceProfile dp) {
super.initTransitionEndpoints(dp);
- if (canCreateNewOrUpdateExistingLauncherTransitionController()) {
- mAnimationFactory.createActivityInterface(mTransitionDragLength);
+ if (mRunningOverHome) {
+ mMaxLauncherScale = 1 / mTaskViewSimulator.getFullScreenScale();
}
}
- private void onAnimatorPlaybackControllerCreated(AnimatorPlaybackController anim) {
- mLauncherTransitionController = anim;
- mLauncherTransitionController.dispatchSetInterpolator(t -> t * mDragLengthFactor);
- mLauncherTransitionController.dispatchOnStart();
- updateLauncherTransitionProgress();
+ private void updateHomeActivityTransformDuringSwipeUp(SurfaceParams.Builder builder,
+ RemoteAnimationTargetCompat app, TransformParams params) {
+ setHomeScaleAndAlpha(builder, app, mCurrentShift.value,
+ Utilities.boundToRange(1 - mCurrentShift.value, 0, 1));
}
- private void updateLauncherTransitionProgress() {
- if (mLauncherTransitionController == null
- || !canCreateNewOrUpdateExistingLauncherTransitionController()) {
- return;
- }
- // Normalize the progress to 0 to 1, as the animation controller will clamp it to that
- // anyway. The controller mimics the drag length factor by applying it to its interpolators.
- float progress = mCurrentShift.value / mDragLengthFactor;
- mLauncherTransitionController.setPlayFraction(progress);
- }
-
- /**
- * We don't want to change mLauncherTransitionController if mGestureState.getEndTarget() == HOME
- * (it has its own animation) or if we're already animating the current controller.
- * @return Whether we can create the launcher controller or update its progress.
- */
- private boolean canCreateNewOrUpdateExistingLauncherTransitionController() {
- return mGestureState.getEndTarget() != HOME && !mHasLauncherTransitionControllerStarted;
+ private void setHomeScaleAndAlpha(SurfaceParams.Builder builder,
+ RemoteAnimationTargetCompat app, float verticalShift, float alpha) {
+ float scale = Utilities.mapRange(verticalShift, 1, mMaxLauncherScale);
+ mTmpMatrix.setScale(scale, scale,
+ app.localBounds.exactCenterX(), app.localBounds.exactCenterY());
+ builder.withMatrix(mTmpMatrix).withAlpha(alpha);
}
@Override
- protected boolean moveWindowWithRecentsScroll() {
- return mInQuickSwitchMode;
- }
-
- @Override
- public void initWhenReady(Intent intent) {
- if (mInQuickSwitchMode) {
- // Only init if we are in quickswitch mode
- super.initWhenReady(intent);
- }
- }
-
- @Override
- public void updateDisplacement(float displacement) {
- if (!mInQuickSwitchMode) {
- super.updateDisplacement(displacement);
- }
- }
-
- @Override
- protected InputConsumer createNewInputProxyHandler() {
- // Just consume all input on the active task
- return new InputConsumer() {
- @Override
- public int getType() {
- return InputConsumer.TYPE_NO_OP;
- }
-
- @Override
- public void onMotionEvent(MotionEvent ev) {
- mTouchedHomeDuringTransition = true;
- }
- };
- }
-
- @Override
- public void onMotionPauseChanged(boolean isPaused) {
- if (!mInQuickSwitchMode && mDeviceState.isFullyGesturalNavMode()) {
- updateOverviewThresholdPassed(isPaused);
- }
- }
-
- private void updateOverviewThresholdPassed(boolean passed) {
- if (passed != mOverviewThresholdPassed) {
- mOverviewThresholdPassed = passed;
- if (mSwipeUpOverHome) {
- mLauncherAlpha.animateToValue(mLauncherAlpha.value, passed ? 0 : 1)
- .setDuration(150).start();
- }
- performHapticFeedback();
- }
- }
-
- @Override
- public Intent getLaunchIntent() {
- if (mInQuickSwitchMode || mSwipeUpOverHome || !mDeviceState.isFullyGesturalNavMode()) {
- return mGestureState.getOverviewIntent();
- } else {
- return mGestureState.getHomeIntent();
- }
- }
-
- @Override
- public void updateFinalShift() {
- mTransformParams.setProgress(mCurrentShift.value);
- if (mRecentsAnimationController != null) {
- boolean swipeUpThresholdPassed = mCurrentShift.value > 1 - UPDATE_SYSUI_FLAGS_THRESHOLD;
- mRecentsAnimationController.setUseLauncherSystemBarFlags(mInQuickSwitchMode
- || swipeUpThresholdPassed);
- mRecentsAnimationController.setSplitScreenMinimized(!mInQuickSwitchMode
- && swipeUpThresholdPassed);
- }
-
- if (!mInQuickSwitchMode && !mDeviceState.isFullyGesturalNavMode()) {
- updateOverviewThresholdPassed(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW);
- }
-
- applyWindowTransform();
- updateLauncherTransitionProgress();
- }
-
- @Override
- public void onGestureCancelled() {
- updateDisplacement(0);
- mGestureState.setEndTarget(LAST_TASK);
- mStateCallback.setStateOnUiThread(STATE_GESTURE_CANCELLED);
- }
-
- @Override
- public void onGestureEnded(float endVelocity, PointF velocity, PointF downPos) {
- mEndVelocityPxPerMs.set(0, velocity.y / 1000);
- if (mInQuickSwitchMode) {
- // For now set it to non-null, it will be reset before starting the animation
- mGestureState.setEndTarget(LAST_TASK);
- } else {
- float flingThreshold = mContext.getResources()
- .getDimension(R.dimen.quickstep_fling_threshold_velocity);
- boolean isFling = Math.abs(endVelocity) > flingThreshold;
-
- if (mDeviceState.isFullyGesturalNavMode()) {
- if (isFling) {
- mGestureState.setEndTarget(endVelocity < 0 ? HOME : LAST_TASK);
- } else if (mOverviewThresholdPassed) {
- mGestureState.setEndTarget(RECENTS);
- } else {
- mGestureState.setEndTarget(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW
- ? HOME
- : LAST_TASK);
- }
- } else {
- GestureEndTarget startState = mSwipeUpOverHome ? HOME : LAST_TASK;
- if (isFling) {
- mGestureState.setEndTarget(endVelocity < 0 ? RECENTS : startState);
- } else {
- mGestureState.setEndTarget(mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW
- ? RECENTS
- : startState);
- }
- }
- }
- mStateCallback.setStateOnUiThread(STATE_GESTURE_COMPLETED);
- }
-
- @Override
- public void onConsumerAboutToBeSwitched() {
- if (mInQuickSwitchMode && mGestureState.getEndTarget() != null) {
- mGestureState.setEndTarget(NEW_TASK);
-
- mCanceled = true;
- mCurrentShift.cancelAnimation();
- if (mFinishAnimation != null) {
- mFinishAnimation.cancel();
- }
-
- if (mRecentsView != null) {
- mRecentsView.setOnScrollChangeListener(null);
- }
- } else {
- mStateCallback.setStateOnUiThread(STATE_HANDLER_INVALIDATED);
- }
- }
-
- private void onHandlerInvalidated() {
- mActivityInitListener.unregister();
- if (mGestureEndCallback != null) {
- mGestureEndCallback.run();
- }
- if (mFinishAnimation != null) {
- mFinishAnimation.end();
- }
- }
-
- private void onHandlerInvalidatedWithRecents() {
- mRecentsView.onGestureAnimationEnd();
- mRecentsView.setDisallowScrollToClearAll(false);
- mRecentsView.getClearAllButton().setVisibilityAlpha(1);
- }
-
- private void finishAnimationTargetSetAnimationComplete() {
- switch (mGestureState.getEndTarget()) {
- case HOME: {
- if (mSwipeUpOverHome) {
- mRecentsAnimationController.finish(false, null, false);
- // Send a home intent to clear the task stack
- mContext.startActivity(mGestureState.getHomeIntent());
- } else {
- // Notify swipe-to-home (recents animation) is finished
- SystemUiProxy.INSTANCE.get(mContext).notifySwipeToHomeFinished();
- mRecentsAnimationController.finish(true, () -> {
- if (!mTouchedHomeDuringTransition) {
- // If the user hasn't interacted with the screen during the transition,
- // send a home intent so launcher can go to the default home screen.
- // (If they are trying to touch something, we don't want to interfere.)
- mContext.startActivity(mGestureState.getHomeIntent());
- }
- }, true);
- }
- break;
- }
- case LAST_TASK:
- mRecentsAnimationController.finish(false, null, false);
- break;
- case RECENTS: {
- if (mSwipeUpOverHome || !mDeviceState.isFullyGesturalNavMode()) {
- mRecentsAnimationController.finish(true, null, true);
- break;
- }
-
- final int runningTaskId = mGestureState.getRunningTaskId();
- ThumbnailData thumbnail = mRecentsAnimationController.screenshotTask(runningTaskId);
- mRecentsAnimationController.setDeferCancelUntilNextTransition(true /* defer */,
- false /* screenshot */);
-
- ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
- ActivityOptionsCompat.setFreezeRecentTasksList(options);
-
- Bundle extras = new Bundle();
- extras.putBinder(EXTRA_THUMBNAIL, new ObjectWrapper<>(thumbnail));
- extras.putInt(EXTRA_TASK_ID, runningTaskId);
-
- Intent intent = new Intent(mGestureState.getOverviewIntent())
- .putExtras(extras);
- mContext.startActivity(intent, options.toBundle());
- mRecentsAnimationController.cleanupScreenshot();
- break;
- }
- case NEW_TASK: {
- startNewTask(success -> { });
- break;
- }
- }
-
- mStateCallback.setStateOnUiThread(STATE_HANDLER_INVALIDATED);
- }
-
- private void finishAnimationTargetSet() {
- if (mInQuickSwitchMode) {
- // Recalculate the end target, some views might have been initialized after
- // gesture has ended.
- if (mRecentsView == null || !hasTargets()) {
- mGestureState.setEndTarget(LAST_TASK);
- } else {
- final int runningTaskIndex = getLastAppearedTaskIndex();
- final int taskToLaunch = mRecentsView.getNextPage();
- mGestureState.setEndTarget(
- (runningTaskIndex >= 0 && taskToLaunch != runningTaskIndex)
- ? NEW_TASK
- : LAST_TASK);
- }
- }
-
- EndTargetAnimationParams params = mEndTargetAnimationParams.get(mGestureState.getEndTarget());
- float endProgress = params.mEndProgress;
- long duration = (long) (params.mDurationMultiplier *
- Math.abs(endProgress - mCurrentShift.value));
- if (mRecentsView != null) {
- duration = Math.max(duration, mRecentsView.getScroller().getDuration());
- }
- if (mCurrentShift.value != endProgress || mInQuickSwitchMode) {
- AnimationSuccessListener endListener = new AnimationSuccessListener() {
-
- @Override
- public void onAnimationSuccess(Animator animator) {
- if (mRecentsView != null) {
- mRecentsView.setOnPageTransitionEndCallback(FallbackSwipeHandler.this
- ::finishAnimationTargetSetAnimationComplete);
- } else {
- finishAnimationTargetSetAnimationComplete();
- }
- mFinishAnimation = null;
- }
- };
-
- if (mGestureState.getEndTarget() == HOME && !mRunningOverHome) {
- mRecentsAnimationController.enableInputProxy(mInputConsumer,
- this::createNewInputProxyHandler);
- RectFSpringAnim anim = createWindowAnimationToHome(mCurrentShift.value, duration);
- anim.addAnimatorListener(endListener);
- anim.start(mContext, mEndVelocityPxPerMs);
- mFinishAnimation = RunningWindowAnim.wrap(anim);
- } else {
-
- AnimatorSet anim = new AnimatorSet();
- anim.play(mLauncherAlpha.animateToValue(
- mLauncherAlpha.value, params.mLauncherAlpha));
- anim.play(mCurrentShift.animateToValue(mCurrentShift.value, endProgress));
-
- anim.setDuration(duration);
- anim.addListener(endListener);
- anim.start();
- mFinishAnimation = RunningWindowAnim.wrap(anim);
- }
-
- } else {
- finishAnimationTargetSetAnimationComplete();
- }
- }
-
- @Override
- public void onRecentsAnimationStart(RecentsAnimationController controller,
- RecentsAnimationTargets targets) {
- super.onRecentsAnimationStart(controller, targets);
- mRecentsAnimationController.enableInputConsumer();
- applyWindowTransform();
-
- mStateCallback.setStateOnUiThread(STATE_APP_CONTROLLER_RECEIVED);
- }
-
- @Override
- public void onRecentsAnimationCanceled(ThumbnailData thumbnailData) {
- mStateCallback.setStateOnUiThread(STATE_HANDLER_INVALIDATED);
-
- // Defer clearing the controller and the targets until after we've updated the state
- super.onRecentsAnimationCanceled(thumbnailData);
+ protected HomeAnimationFactory createHomeAnimationFactory(long duration) {
+ mActiveAnimationFactory = new FallbackHomeAnimationFactory(duration);
+ ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
+ mContext.startActivity(new Intent(mGestureState.getHomeIntent()), options.toBundle());
+ return mActiveAnimationFactory;
}
@Override
protected boolean handleTaskAppeared(RemoteAnimationTargetCompat appearedTaskTarget) {
- return true;
- }
+ if (mActiveAnimationFactory != null
+ && mActiveAnimationFactory.handleHomeTaskAppeared(appearedTaskTarget)) {
+ mActiveAnimationFactory = null;
+ return false;
+ }
- /**
- * Creates an animation that transforms the current app window into the home app.
- * @param startProgress The progress of {@link #mCurrentShift} to start the window from.
- */
- private RectFSpringAnim createWindowAnimationToHome(float startProgress, long duration) {
- HomeAnimationFactory factory = new HomeAnimationFactory(null) {
- @Override
- public AnimatorPlaybackController createActivityAnimationToHome() {
- AnimatorSet anim = new AnimatorSet();
- Animator fadeInLauncher = mLauncherAlpha.animateToValue(mLauncherAlpha.value, 1);
- fadeInLauncher.setInterpolator(ACCEL_2);
- anim.play(fadeInLauncher);
- anim.setDuration(duration);
- return AnimatorPlaybackController.wrap(anim, duration);
- }
- };
- return createWindowAnimationToHome(startProgress, factory);
+ return super.handleTaskAppeared(appearedTaskTarget);
}
@Override
- protected float getWindowAlpha(float progress) {
- return 1 - ACCEL_1_5.getInterpolation(progress);
+ protected void finishRecentsControllerToHome(Runnable callback) {
+ mRecentsAnimationController.finish(
+ false /* toRecents */, callback, true /* sendUserLeaveHint */);
+ }
+
+ @Override
+ protected void notifyGestureAnimationStartToRecents() {
+ if (mRunningOverHome) {
+ mRecentsView.onGestureAnimationStartOnHome(mGestureState.getRunningTask());
+ } else {
+ super.notifyGestureAnimationStartToRecents();
+ }
+ }
+
+ private class FallbackHomeAnimationFactory extends HomeAnimationFactory {
+
+ private final TransformParams mHomeAlphaParams = new TransformParams();
+ private final AnimatedFloat mHomeAlpha;
+
+ private final AnimatedFloat mVerticalShiftForScale = new AnimatedFloat();
+
+ private final AnimatedFloat mRecentsAlpha = new AnimatedFloat();
+
+ private final long mDuration;
+ FallbackHomeAnimationFactory(long duration) {
+ super(null);
+ mDuration = duration;
+
+ if (mRunningOverHome) {
+ mHomeAlpha = new AnimatedFloat();
+ mHomeAlpha.value = Utilities.boundToRange(1 - mCurrentShift.value, 0, 1);
+ mVerticalShiftForScale.value = mCurrentShift.value;
+ mTransformParams.setHomeBuilderProxy(
+ this::updateHomeActivityTransformDuringHomeAnim);
+ } else {
+ mHomeAlpha = new AnimatedFloat(this::updateHomeAlpha);
+ mHomeAlpha.value = 0;
+
+ mHomeAlphaParams.setHomeBuilderProxy(
+ this::updateHomeActivityTransformDuringHomeAnim);
+ }
+
+ mRecentsAlpha.value = 1;
+ mTransformParams.setBaseBuilderProxy(
+ this::updateRecentsActivityTransformDuringHomeAnim);
+ }
+
+ private void updateRecentsActivityTransformDuringHomeAnim(SurfaceParams.Builder builder,
+ RemoteAnimationTargetCompat app, TransformParams params) {
+ builder.withAlpha(mRecentsAlpha.value);
+ }
+
+ private void updateHomeActivityTransformDuringHomeAnim(SurfaceParams.Builder builder,
+ RemoteAnimationTargetCompat app, TransformParams params) {
+ setHomeScaleAndAlpha(builder, app, mVerticalShiftForScale.value, mHomeAlpha.value);
+ }
+
+ @NonNull
+ @Override
+ public AnimatorPlaybackController createActivityAnimationToHome() {
+ PendingAnimation pa = new PendingAnimation(mDuration);
+ pa.setFloat(mRecentsAlpha, AnimatedFloat.VALUE, 0, ACCEL);
+ return pa.createPlaybackController();
+ }
+
+ private void updateHomeAlpha() {
+ if (mHomeAlphaParams.getTargetSet() != null) {
+ mHomeAlphaParams.applySurfaceParams(
+ mHomeAlphaParams.createSurfaceParams(BuilderProxy.NO_OP));
+ }
+ }
+
+ public boolean handleHomeTaskAppeared(RemoteAnimationTargetCompat appearedTaskTarget) {
+ if (appearedTaskTarget.activityType == ACTIVITY_TYPE_HOME) {
+ RemoteAnimationTargets targets = new RemoteAnimationTargets(
+ new RemoteAnimationTargetCompat[] {appearedTaskTarget},
+ new RemoteAnimationTargetCompat[0], appearedTaskTarget.mode);
+ mHomeAlphaParams.setTargetSet(targets);
+ updateHomeAlpha();
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void playAtomicAnimation(float velocity) {
+ ObjectAnimator alphaAnim = mHomeAlpha.animateToValue(mHomeAlpha.value, 1);
+ alphaAnim.setDuration(mDuration).setInterpolator(ACCEL);
+ alphaAnim.start();
+
+ if (mRunningOverHome) {
+ // Spring back launcher scale
+ new SpringAnimationBuilder(mContext)
+ .setStartValue(mVerticalShiftForScale.value)
+ .setEndValue(0)
+ .setStartVelocity(-velocity / mTransitionDragLength)
+ .setMinimumVisibleChange(1f / mDp.heightPx)
+ .setDampingRatio(0.6f)
+ .setStiffness(800)
+ .build(mVerticalShiftForScale, AnimatedFloat.VALUE)
+ .start();
+ }
+ }
}
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java
index 317d4da..13b84e0 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java
@@ -15,29 +15,18 @@
*/
package com.android.quickstep;
-import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.LauncherState.OVERVIEW;
-import static com.android.launcher3.anim.Interpolators.ACCEL_2;
-import static com.android.launcher3.anim.Interpolators.INSTANT;
import static com.android.launcher3.anim.Interpolators.LINEAR;
-import static com.android.launcher3.uioverrides.states.QuickstepAtomicAnimationFactory.INDEX_RECENTS_FADE_ANIM;
-import static com.android.launcher3.uioverrides.states.QuickstepAtomicAnimationFactory.INDEX_RECENTS_TRANSLATE_X_ANIM;
import static com.android.launcher3.uioverrides.states.QuickstepAtomicAnimationFactory.INDEX_SHELF_ANIM;
-import static com.android.quickstep.LauncherSwipeHandler.RECENTS_ATTACH_DURATION;
import static com.android.quickstep.SysUINavigationMode.getMode;
import static com.android.quickstep.SysUINavigationMode.hideShelfInTwoButtonLandscape;
import static com.android.quickstep.util.LayoutUtils.getDefaultSwipeHeight;
-import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_OFFSET;
-import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
-import android.animation.Animator;
import android.content.Context;
import android.content.res.Resources;
-import android.graphics.PointF;
import android.graphics.Rect;
import android.util.Log;
-import android.view.MotionEvent;
import android.view.animation.Interpolator;
import androidx.annotation.Nullable;
@@ -55,15 +44,14 @@
import com.android.launcher3.appprediction.PredictionUiStateManager;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.statehandlers.DepthController.ClampedDepthProperty;
+import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.quickstep.SysUINavigationMode.Mode;
import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.LayoutUtils;
-import com.android.quickstep.util.ShelfPeekAnim;
import com.android.quickstep.util.ShelfPeekAnim.ShelfAnimState;
-import com.android.quickstep.views.LauncherRecentsView;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.plugins.shared.LauncherOverlayManager;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
@@ -75,12 +63,12 @@
* {@link BaseActivityInterface} for the in-launcher recents.
*/
public final class LauncherActivityInterface extends
- BaseActivityInterface<LauncherState, Launcher> {
+ BaseActivityInterface<LauncherState, BaseQuickstepLauncher> {
public static final LauncherActivityInterface INSTANCE = new LauncherActivityInterface();
private LauncherActivityInterface() {
- super(true);
+ super(true, OVERVIEW, BACKGROUND_APP);
}
@Override
@@ -131,119 +119,43 @@
@Override
public AnimationFactory prepareRecentsUI(
boolean activityVisible, Consumer<AnimatorPlaybackController> callback) {
- BaseQuickstepLauncher launcher = getCreatedActivity();
- final LauncherState startState = launcher.getStateManager().getState();
-
- LauncherState resetState = startState;
- if (startState.shouldDisableRestore()) {
- resetState = launcher.getStateManager().getRestState();
- }
- launcher.getStateManager().setRestState(resetState);
-
- launcher.getStateManager().goToState(BACKGROUND_APP, false);
- // Since all apps is not visible, we can safely reset the scroll position.
- // This ensures then the next swipe up to all-apps starts from scroll 0.
- launcher.getAppsView().reset(false /* animate */);
-
- return new AnimationFactory() {
- private final ShelfPeekAnim mShelfAnim = launcher.getShelfPeekAnim();
- private boolean mIsAttachedToWindow;
-
- @Override
- public void createActivityInterface(long transitionLength) {
- callback.accept(createBackgroundToOverviewAnim(launcher, transitionLength));
- // Creating the activity controller animation sometimes reapplies the launcher state
- // (because we set the animation as the current state animation), so we reapply the
- // attached state here as well to ensure recents is shown/hidden appropriately.
- if (SysUINavigationMode.getMode(launcher) == Mode.NO_BUTTON) {
- setRecentsAttachedToAppWindow(mIsAttachedToWindow, false);
- }
- }
-
- @Override
- public void onTransitionCancelled() {
- launcher.getStateManager().goToState(startState, false /* animate */);
- }
-
+ DefaultAnimationFactory factory = new DefaultAnimationFactory(callback) {
@Override
public void setShelfState(ShelfAnimState shelfState, Interpolator interpolator,
long duration) {
- mShelfAnim.setShelfState(shelfState, interpolator, duration);
+ mActivity.getShelfPeekAnim().setShelfState(shelfState, interpolator, duration);
}
@Override
- public void setRecentsAttachedToAppWindow(boolean attached, boolean animate) {
- if (mIsAttachedToWindow == attached && animate) {
- return;
- }
- mIsAttachedToWindow = attached;
- LauncherRecentsView recentsView = launcher.getOverviewPanel();
- Animator fadeAnim = launcher.getStateManager()
- .createStateElementAnimation(
- INDEX_RECENTS_FADE_ANIM, attached ? 1 : 0);
+ protected void createBackgroundToOverviewAnim(BaseQuickstepLauncher activity,
+ PendingAnimation pa) {
+ super.createBackgroundToOverviewAnim(activity, pa);
- float fromTranslation = attached ? 1 : 0;
- float toTranslation = attached ? 0 : 1;
- launcher.getStateManager()
- .cancelStateElementAnimation(INDEX_RECENTS_TRANSLATE_X_ANIM);
- if (!recentsView.isShown() && animate) {
- ADJACENT_PAGE_OFFSET.set(recentsView, fromTranslation);
- } else {
- fromTranslation = ADJACENT_PAGE_OFFSET.get(recentsView);
- }
- if (!animate) {
- ADJACENT_PAGE_OFFSET.set(recentsView, toTranslation);
- } else {
- launcher.getStateManager().createStateElementAnimation(
- INDEX_RECENTS_TRANSLATE_X_ANIM,
- fromTranslation, toTranslation).start();
+ if (!activity.getDeviceProfile().isVerticalBarLayout()
+ && SysUINavigationMode.getMode(activity) != Mode.NO_BUTTON) {
+ // Don't animate the shelf when the mode is NO_BUTTON, because we
+ // update it atomically.
+ pa.add(activity.getStateManager().createStateElementAnimation(
+ INDEX_SHELF_ANIM,
+ BACKGROUND_APP.getVerticalProgress(activity),
+ OVERVIEW.getVerticalProgress(activity)));
}
- fadeAnim.setInterpolator(attached ? INSTANT : ACCEL_2);
- fadeAnim.setDuration(animate ? RECENTS_ATTACH_DURATION : 0).start();
+ // Animate the blur and wallpaper zoom
+ float fromDepthRatio = BACKGROUND_APP.getDepth(activity);
+ float toDepthRatio = OVERVIEW.getDepth(activity);
+ pa.addFloat(getDepthController(),
+ new ClampedDepthProperty(fromDepthRatio, toDepthRatio),
+ fromDepthRatio, toDepthRatio, LINEAR);
+
}
};
- }
- private AnimatorPlaybackController createBackgroundToOverviewAnim(
- Launcher activity, long transitionLength) {
-
- PendingAnimation pa = new PendingAnimation(transitionLength * 2);
-
- if (!activity.getDeviceProfile().isVerticalBarLayout()
- && SysUINavigationMode.getMode(activity) != Mode.NO_BUTTON) {
- // Don't animate the shelf when the mode is NO_BUTTON, because we update it atomically.
- pa.add(activity.getStateManager().createStateElementAnimation(
- INDEX_SHELF_ANIM,
- BACKGROUND_APP.getVerticalProgress(activity),
- OVERVIEW.getVerticalProgress(activity)));
- }
-
- // Animate the blur and wallpaper zoom
- float fromDepthRatio = BACKGROUND_APP.getDepth(activity);
- float toDepthRatio = OVERVIEW.getDepth(activity);
- pa.addFloat(getDepthController(), new ClampedDepthProperty(fromDepthRatio, toDepthRatio),
- fromDepthRatio, toDepthRatio, LINEAR);
-
-
- // Scale down recents from being full screen to being in overview.
- RecentsView recentsView = activity.getOverviewPanel();
- pa.addFloat(recentsView, SCALE_PROPERTY,
- BACKGROUND_APP.getOverviewScaleAndOffset(activity)[0],
- OVERVIEW.getOverviewScaleAndOffset(activity)[0],
- LINEAR);
- pa.addFloat(recentsView, FULLSCREEN_PROGRESS,
- BACKGROUND_APP.getOverviewFullscreenProgress(),
- OVERVIEW.getOverviewFullscreenProgress(),
- LINEAR);
-
- AnimatorPlaybackController controller = pa.createPlaybackController();
- activity.getStateManager().setCurrentUserControlledAnimation(controller);
-
- // Since we are changing the start position of the UI, reapply the state, at the end
- controller.setEndAction(() -> activity.getStateManager().goToState(
- controller.getInterpolatedProgress() > 0.5 ? OVERVIEW : BACKGROUND_APP, false));
- return controller;
+ BaseQuickstepLauncher launcher = factory.initUI();
+ // Since all apps is not visible, we can safely reset the scroll position.
+ // This ensures then the next swipe up to all-apps starts from scroll 0.
+ launcher.getAppsView().reset(false /* animate */);
+ return factory;
}
@Override
@@ -252,6 +164,15 @@
onInitListener.test(alreadyOnHome));
}
+ @Override
+ public void setOnDeferredActivityLaunchCallback(Runnable r) {
+ Launcher launcher = getCreatedActivity();
+ if (launcher == null) {
+ return;
+ }
+ launcher.setOnDeferredActivityLaunchCallback(r);
+ }
+
@Nullable
@Override
public BaseQuickstepLauncher getCreatedActivity() {
@@ -259,11 +180,13 @@
}
@Nullable
- @UiThread
- private Launcher getVisibleLauncher() {
- Launcher launcher = getCreatedActivity();
- return (launcher != null) && launcher.isStarted() && launcher.hasWindowFocus() ?
- launcher : null;
+ @Override
+ public DepthController getDepthController() {
+ BaseQuickstepLauncher launcher = getCreatedActivity();
+ if (launcher == null) {
+ return null;
+ }
+ return launcher.getDepthController();
}
@Nullable
@@ -274,6 +197,14 @@
? launcher.getOverviewPanel() : null;
}
+ @Nullable
+ @UiThread
+ private Launcher getVisibleLauncher() {
+ Launcher launcher = getCreatedActivity();
+ return (launcher != null) && launcher.isStarted() && launcher.hasWindowFocus()
+ ? launcher : null;
+ }
+
@Override
public boolean switchToRecentsIfVisible(Runnable onCompleteCallback) {
if (TestProtocol.sDebugTracing) {
@@ -293,14 +224,26 @@
return true;
}
- @Override
- public void setHintUserWillBeActive() {
- getCreatedActivity().setHintUserWillBeActive();
- }
@Override
- public boolean deferStartingActivity(RecentsAnimationDeviceState deviceState, MotionEvent ev) {
- return deviceState.isInDeferredGestureRegion(ev);
+ public void onExitOverview(RecentsAnimationDeviceState deviceState, Runnable exitRunnable) {
+ final StateManager<LauncherState> stateManager = getCreatedActivity().getStateManager();
+ stateManager.addStateListener(
+ new StateManager.StateListener<LauncherState>() {
+ @Override
+ public void onStateTransitionComplete(LauncherState toState) {
+ // Are we going from Recents to Workspace?
+ if (toState == LauncherState.NORMAL) {
+ exitRunnable.run();
+
+ // reset layout on swipe to home
+ RecentsView recentsView = getCreatedActivity().getOverviewPanel();
+ recentsView.setLayoutRotation(deviceState.getCurrentActiveRotation(),
+ deviceState.getDisplayRotation());
+ stateManager.removeStateListener(this);
+ }
+ }
+ });
}
@Override
@@ -314,6 +257,16 @@
}
@Override
+ public void updateOverviewPredictionState() {
+ Launcher launcher = getCreatedActivity();
+ if (launcher == null) {
+ return;
+ }
+ PredictionUiStateManager.INSTANCE.get(launcher).switchClient(
+ PredictionUiStateManager.Client.OVERVIEW);
+ }
+
+ @Override
public int getContainerType() {
final Launcher launcher = getVisibleLauncher();
return launcher != null ? launcher.getStateManager().getState().containerType
@@ -351,51 +304,6 @@
}
@Override
- public void setOnDeferredActivityLaunchCallback(Runnable r) {
- Launcher launcher = getCreatedActivity();
- if (launcher == null) {
- return;
- }
- launcher.setOnDeferredActivityLaunchCallback(r);
- }
-
- @Override
- public void updateOverviewPredictionState() {
- Launcher launcher = getCreatedActivity();
- if (launcher == null) {
- return;
- }
- PredictionUiStateManager.INSTANCE.get(launcher).switchClient(
- PredictionUiStateManager.Client.OVERVIEW);
- }
-
- @Nullable
- @Override
- public DepthController getDepthController() {
- BaseQuickstepLauncher launcher = getCreatedActivity();
- if (launcher == null) {
- return null;
- }
- return launcher.getDepthController();
- }
-
- @Override
- public void getMultiWindowSize(Context context, DeviceProfile dp, PointF out) {
- DeviceProfile fullDp = dp.getFullScreenProfile();
- // Use availableWidthPx and availableHeightPx instead of widthPx and heightPx to
- // account for system insets
- out.set(fullDp.availableWidthPx, fullDp.availableHeightPx);
- float halfDividerSize = context.getResources()
- .getDimension(R.dimen.multi_window_task_divider_size) / 2;
-
- if (fullDp.isLandscape) {
- out.x = out.x / 2 - halfDividerSize;
- } else {
- out.y = out.y / 2 - halfDividerSize;
- }
- }
-
- @Override
protected float getExtraSpace(Context context, DeviceProfile dp,
PagedOrientationHandler orientationHandler) {
if (dp.isVerticalBarLayout() ||
@@ -426,4 +334,5 @@
}
}
}
+
}
\ No newline at end of file
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandlerV2.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandlerV2.java
new file mode 100644
index 0000000..fa7d268
--- /dev/null
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandlerV2.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.quickstep;
+
+import static com.android.launcher3.LauncherState.NORMAL;
+
+import android.animation.AnimatorSet;
+import android.content.Context;
+import android.graphics.RectF;
+import android.os.UserHandle;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+
+import com.android.launcher3.BaseQuickstepLauncher;
+import com.android.launcher3.anim.AnimatorPlaybackController;
+import com.android.launcher3.views.FloatingIconView;
+import com.android.quickstep.util.StaggeredWorkspaceAnim;
+import com.android.quickstep.views.RecentsView;
+import com.android.quickstep.views.TaskView;
+import com.android.systemui.shared.system.InputConsumerController;
+
+/**
+ * Temporary class to allow easier refactoring
+ */
+public class LauncherSwipeHandlerV2 extends
+ BaseSwipeUpHandlerV2<BaseQuickstepLauncher, RecentsView> {
+
+ public LauncherSwipeHandlerV2(Context context, RecentsAnimationDeviceState deviceState,
+ TaskAnimationManager taskAnimationManager, GestureState gestureState, long touchTimeMs,
+ boolean continuingLastGesture, InputConsumerController inputConsumer) {
+ super(context, deviceState, taskAnimationManager, gestureState, touchTimeMs,
+ continuingLastGesture, inputConsumer);
+ }
+
+
+ @Override
+ protected HomeAnimationFactory createHomeAnimationFactory(long duration) {
+ HomeAnimationFactory homeAnimFactory;
+ if (mActivity != null) {
+ final TaskView runningTaskView = mRecentsView.getRunningTaskView();
+ final View workspaceView;
+ if (runningTaskView != null
+ && runningTaskView.getTask().key.getComponent() != null) {
+ workspaceView = mActivity.getWorkspace().getFirstMatchForAppClose(
+ runningTaskView.getTask().key.getComponent().getPackageName(),
+ UserHandle.of(runningTaskView.getTask().key.userId));
+ } else {
+ workspaceView = null;
+ }
+ final RectF iconLocation = new RectF();
+ boolean canUseWorkspaceView =
+ workspaceView != null && workspaceView.isAttachedToWindow();
+ FloatingIconView floatingIconView = canUseWorkspaceView
+ ? FloatingIconView.getFloatingIconView(mActivity, workspaceView,
+ true /* hideOriginal */, iconLocation, false /* isOpening */)
+ : null;
+
+ mActivity.getRootView().setForceHideBackArrow(true);
+ mActivity.setHintUserWillBeActive();
+
+ homeAnimFactory = new HomeAnimationFactory(floatingIconView) {
+
+ @Override
+ public RectF getWindowTargetRect() {
+ if (canUseWorkspaceView) {
+ return iconLocation;
+ } else {
+ return super.getWindowTargetRect();
+ }
+ }
+
+ @NonNull
+ @Override
+ public AnimatorPlaybackController createActivityAnimationToHome() {
+ // Return an empty APC here since we have an non-user controlled animation
+ // to home.
+ long accuracy = 2 * Math.max(mDp.widthPx, mDp.heightPx);
+ return mActivity.getStateManager().createAnimationToNewWorkspace(
+ NORMAL, accuracy, 0 /* animComponents */);
+ }
+
+ @Override
+ public void playAtomicAnimation(float velocity) {
+ new StaggeredWorkspaceAnim(mActivity, velocity,
+ true /* animateOverviewScrim */).start();
+ }
+ };
+
+ } else {
+ homeAnimFactory = new HomeAnimationFactory(null) {
+ @Override
+ public AnimatorPlaybackController createActivityAnimationToHome() {
+ return AnimatorPlaybackController.wrap(new AnimatorSet(), duration);
+ }
+ };
+ mStateCallback.addChangeListener(STATE_LAUNCHER_PRESENT | STATE_HANDLER_INVALIDATED,
+ isPresent -> mRecentsView.startHome());
+ }
+ return homeAnimFactory;
+ }
+
+ @Override
+ protected void finishRecentsControllerToHome(Runnable callback) {
+ mRecentsAnimationController.finish(
+ true /* toRecents */, callback, true /* sendUserLeaveHint */);
+ }
+}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java
index a4670fd..852a51a 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java
@@ -23,7 +23,7 @@
import static com.android.launcher3.QuickstepAppTransitionManagerImpl.STATUS_BAR_TRANSITION_PRE_DELAY;
import static com.android.launcher3.testing.TestProtocol.OVERVIEW_STATE_ORDINAL;
import static com.android.quickstep.TaskUtils.taskIsATargetWithMode;
-import static com.android.quickstep.TaskViewUtils.getRecentsWindowAnimator;
+import static com.android.quickstep.TaskViewUtils.createRecentsWindowAnimator;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
import android.animation.Animator;
@@ -34,7 +34,6 @@
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
-import android.os.IBinder;
import android.os.Looper;
import android.view.View;
@@ -44,12 +43,13 @@
import com.android.launcher3.LauncherAnimationRunner;
import com.android.launcher3.R;
import com.android.launcher3.anim.Interpolators;
+import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.compat.AccessibilityManagerCompat;
import com.android.launcher3.statemanager.StateManager;
+import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory;
import com.android.launcher3.statemanager.StateManager.StateHandler;
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.util.ActivityTracker;
-import com.android.launcher3.util.ObjectWrapper;
import com.android.launcher3.util.SystemUiController;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.BaseDragLayer;
@@ -57,9 +57,9 @@
import com.android.quickstep.fallback.FallbackRecentsView;
import com.android.quickstep.fallback.RecentsRootView;
import com.android.quickstep.fallback.RecentsState;
+import com.android.quickstep.util.RecentsAtomicAnimationFactory;
import com.android.quickstep.views.OverviewActionsView;
import com.android.quickstep.views.TaskView;
-import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.ActivityOptionsCompat;
import com.android.systemui.shared.system.RemoteAnimationAdapterCompat;
import com.android.systemui.shared.system.RemoteAnimationRunnerCompat;
@@ -74,8 +74,6 @@
*/
public final class RecentsActivity extends StatefulActivity<RecentsState> {
- public static final String EXTRA_THUMBNAIL = "thumbnailData";
- public static final String EXTRA_TASK_ID = "taskID";
public static final ActivityTracker<RecentsActivity> ACTIVITY_TRACKER =
new ActivityTracker<>();
@@ -115,21 +113,6 @@
@Override
protected void onNewIntent(Intent intent) {
- if (intent.getExtras() != null) {
- int taskID = intent.getIntExtra(EXTRA_TASK_ID, 0);
- IBinder thumbnail = intent.getExtras().getBinder(EXTRA_THUMBNAIL);
- if (taskID != 0 && thumbnail instanceof ObjectWrapper) {
- ObjectWrapper<ThumbnailData> obj = (ObjectWrapper<ThumbnailData>) thumbnail;
- ThumbnailData thumbnailData = obj.get();
- mFallbackRecentsView.showCurrentTask(taskID);
- mFallbackRecentsView.updateThumbnail(taskID, thumbnailData);
- // Clear the ref since any reference to the extras on the system side will still
- // hold a reference to the wrapper
- obj.clear();
- }
- }
- intent.removeExtra(EXTRA_TASK_ID);
- intent.removeExtra(EXTRA_THUMBNAIL);
super.onNewIntent(intent);
ACTIVITY_TRACKER.handleNewIntent(this, intent);
}
@@ -223,9 +206,10 @@
RemoteAnimationTargetCompat[] wallpaperTargets) {
AnimatorSet target = new AnimatorSet();
boolean activityClosing = taskIsATargetWithMode(appTargets, getTaskId(), MODE_CLOSING);
- Animator recentsAnimator = getRecentsWindowAnimator(taskView, !activityClosing, appTargets,
- wallpaperTargets, null /* depthController */);
- target.play(recentsAnimator.setDuration(RECENTS_LAUNCH_DURATION));
+ PendingAnimation pa = new PendingAnimation(RECENTS_LAUNCH_DURATION);
+ createRecentsWindowAnimator(taskView, !activityClosing, appTargets,
+ wallpaperTargets, null /* depthController */, pa);
+ target.play(pa.buildAnim());
// Found a visible recents task that matches the opening app, lets launch the app from there
if (activityClosing) {
@@ -345,6 +329,11 @@
dumpMisc(prefix + "\t", writer);
}
+ @Override
+ public AtomicAnimationFactory<RecentsState> createAtomicAnimationFactory() {
+ return new RecentsAtomicAnimationFactory<>(this, 0);
+ }
+
private AnimatorListenerAdapter resetStateListener() {
return new AnimatorListenerAdapter() {
@Override
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java
index 9a7a491..c68d6e2 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java
@@ -15,44 +15,46 @@
*/
package com.android.quickstep;
+import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
+import static com.android.launcher3.Utilities.getDescendantCoordRelativeToAncestor;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR;
-import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
+import static com.android.launcher3.anim.Interpolators.clampToProgress;
import static com.android.launcher3.statehandlers.DepthController.DEPTH;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
+import android.annotation.TargetApi;
import android.content.ComponentName;
+import android.content.Context;
+import android.graphics.Matrix;
+import android.graphics.Matrix.ScaleToFit;
import android.graphics.RectF;
+import android.os.Build;
import android.view.View;
import com.android.launcher3.BaseActivity;
import com.android.launcher3.BaseDraggingActivity;
-import com.android.launcher3.Utilities;
+import com.android.launcher3.DeviceProfile;
+import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.statehandlers.DepthController;
-import com.android.quickstep.util.AppWindowAnimationHelper;
-import com.android.quickstep.util.MultiValueUpdateListener;
+import com.android.launcher3.util.DefaultDisplay;
+import com.android.quickstep.util.TaskViewSimulator;
import com.android.quickstep.util.TransformParams;
import com.android.quickstep.views.RecentsView;
+import com.android.quickstep.views.TaskThumbnailView;
import com.android.quickstep.views.TaskView;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat;
-import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
/**
* Utility class for helpful methods related to {@link TaskView} objects and their tasks.
*/
+@TargetApi(Build.VERSION_CODES.R)
public final class TaskViewUtils {
private TaskViewUtils() {}
@@ -118,97 +120,111 @@
}
/**
- * @return Animator that controls the window of the opening targets for the recents launch
+ * Creates an animation that controls the window of the opening targets for the recents launch
* animation.
*/
- public static Animator getRecentsWindowAnimator(TaskView v, boolean skipViewChanges,
+ public static void createRecentsWindowAnimator(TaskView v, boolean skipViewChanges,
RemoteAnimationTargetCompat[] appTargets,
- RemoteAnimationTargetCompat[] wallpaperTargets,
- DepthController depthController) {
- AppWindowAnimationHelper inOutHelper = new AppWindowAnimationHelper(
- v.getRecentsView().getPagedViewOrientedState(), v.getContext());
+ RemoteAnimationTargetCompat[] wallpaperTargets, DepthController depthController,
+ PendingAnimation out) {
SyncRtSurfaceTransactionApplierCompat applier =
new SyncRtSurfaceTransactionApplierCompat(v);
final RemoteAnimationTargets targets =
new RemoteAnimationTargets(appTargets, wallpaperTargets, MODE_OPENING);
targets.addDependentTransactionApplier(applier);
- TransformParams params =
- new TransformParams()
+
+ TransformParams params = new TransformParams()
.setSyncTransactionApplier(applier)
.setTargetSet(targets);
- AnimatorSet animatorSet = new AnimatorSet();
final RecentsView recentsView = v.getRecentsView();
- final ValueAnimator appAnimator = ValueAnimator.ofFloat(0, 1);
- appAnimator.setInterpolator(TOUCH_RESPONSE_INTERPOLATOR);
- appAnimator.addUpdateListener(new MultiValueUpdateListener() {
+ int taskIndex = recentsView.indexOfChild(v);
+ boolean parallaxCenterAndAdjacentTask = taskIndex != recentsView.getCurrentPage();
+ int startScroll = recentsView.getScrollOffset(taskIndex);
- // Defer fading out the view until after the app window gets faded in
- final FloatProp mViewAlpha = new FloatProp(1f, 0f, 75, 75, LINEAR);
- final FloatProp mTaskAlpha = new FloatProp(0f, 1f, 0, 75, LINEAR);
- final RectF mThumbnailRect;
+ Context context = v.getContext();
+ DeviceProfile dp = BaseActivity.fromContext(context).getDeviceProfile();
+ // RecentsView never updates the display rotation until swipe-up so the value may be stale.
+ // Use the display value instead.
+ int displayRotation = DefaultDisplay.INSTANCE.get(context).getInfo().rotation;
- {
- params.setTaskAlphaCallback((t, alpha) -> mTaskAlpha.value);
- inOutHelper.prepareAnimation(
- BaseActivity.fromContext(v.getContext()).getDeviceProfile());
- inOutHelper.fromTaskThumbnailView(v.getThumbnail(), (RecentsView) v.getParent(),
- targets.apps.length == 0 ? null : targets.apps[0]);
+ TaskViewSimulator topMostSimulator = null;
+ if (targets.apps.length > 0) {
+ TaskViewSimulator tsv = new TaskViewSimulator(context, recentsView.getSizeStrategy());
+ tsv.setDp(dp);
+ tsv.setLayoutRotation(displayRotation, displayRotation);
+ tsv.setPreview(targets.apps[targets.apps.length - 1]);
+ tsv.fullScreenProgress.value = 0;
+ tsv.recentsViewScale.value = 1;
+ tsv.setScroll(startScroll);
- mThumbnailRect = new RectF(inOutHelper.getTargetRect());
- mThumbnailRect.offset(-v.getTranslationX(), -v.getTranslationY());
- Utilities.scaleRectFAboutCenter(mThumbnailRect, 1 / v.getScaleX());
- }
+ out.setFloat(tsv.fullScreenProgress,
+ AnimatedFloat.VALUE, 1, TOUCH_RESPONSE_INTERPOLATOR);
+ out.setFloat(tsv.recentsViewScale,
+ AnimatedFloat.VALUE, tsv.getFullScreenScale(), TOUCH_RESPONSE_INTERPOLATOR);
+ out.setInt(tsv, TaskViewSimulator.SCROLL, 0, TOUCH_RESPONSE_INTERPOLATOR);
- @Override
- public void onUpdate(float percent) {
- // TODO: Take into account the current fullscreen progress for animating the insets
- params.setProgress(1 - percent);
- RectF taskBounds;
- if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
- List<SurfaceParams> surfaceParamsList = new ArrayList<>();
- // Append the surface transform params for the app that's being opened.
- Collections.addAll(surfaceParamsList, inOutHelper.computeSurfaceParams(params));
+ out.addOnFrameCallback(() -> tsv.apply(params));
+ topMostSimulator = tsv;
+ }
- AppWindowAnimationHelper liveTileAnimationHelper =
- v.getRecentsView().getClipAnimationHelper();
- if (liveTileAnimationHelper != null) {
- // Append the surface transform params for the live tile app.
- TransformParams liveTileParams =
- v.getRecentsView().getLiveTileParams(true /* mightNeedToRefill */);
- if (liveTileParams != null) {
- SurfaceParams[] liveTileSurfaceParams =
- liveTileAnimationHelper.computeSurfaceParams(liveTileParams);
- if (liveTileSurfaceParams != null) {
- Collections.addAll(surfaceParamsList, liveTileSurfaceParams);
- }
- }
- }
- // Apply surface transform using the surface params list.
- params.applySurfaceParams(
- surfaceParamsList.toArray(new SurfaceParams[surfaceParamsList.size()]));
- // Get the task bounds for the app that's being opened after surface transform
- // update.
- taskBounds = inOutHelper.updateCurrentRect(params);
- } else {
- taskBounds = inOutHelper.applyTransform(params);
+ // Fade in the task during the initial 20% of the animation
+ out.addFloat(params, TransformParams.TARGET_ALPHA, 0, 1, clampToProgress(LINEAR, 0, 0.2f));
+
+ if (!skipViewChanges && parallaxCenterAndAdjacentTask && topMostSimulator != null) {
+ out.addFloat(v, VIEW_ALPHA, 1, 0, clampToProgress(LINEAR, 0.2f, 0.4f));
+
+ TaskViewSimulator simulatorToCopy = topMostSimulator;
+ simulatorToCopy.apply(params);
+
+ // Mt represents the overall transformation on the thumbnailView relative to the
+ // Launcher's rootView
+ // K(t) represents transformation on the running window by the taskViewSimulator at
+ // any time t.
+ // at t = 0, we know that the simulator matches the thumbnailView. So if we apply K(0)`
+ // on the Launcher's rootView, the thumbnailView would match the full running task
+ // window. If we apply "K(0)` K(t)" thumbnailView will match the final transformed
+ // window at any time t. This gives the overall matrix on thumbnailView to be:
+ // Mt K(0)` K(t)
+ // During animation we apply transformation on the thumbnailView (and not the rootView)
+ // to follow the TaskViewSimulator. So the final matrix applied on the thumbnailView is:
+ // Mt K(0)` K(t) Mt`
+ TaskThumbnailView ttv = v.getThumbnail();
+ RectF tvBounds = new RectF(0, 0, ttv.getWidth(), ttv.getHeight());
+ float[] tvBoundsMapped = new float[]{0, 0, ttv.getWidth(), ttv.getHeight()};
+ getDescendantCoordRelativeToAncestor(ttv, ttv.getRootView(), tvBoundsMapped, false);
+ RectF tvBoundsInRoot = new RectF(
+ tvBoundsMapped[0], tvBoundsMapped[1],
+ tvBoundsMapped[2], tvBoundsMapped[3]);
+
+ Matrix mt = new Matrix();
+ mt.setRectToRect(tvBounds, tvBoundsInRoot, ScaleToFit.FILL);
+
+ Matrix mti = new Matrix();
+ mt.invert(mti);
+
+ Matrix k0i = new Matrix();
+ simulatorToCopy.getCurrentMatrix().invert(k0i);
+
+ Matrix animationMatrix = new Matrix();
+ out.addOnFrameCallback(() -> {
+ animationMatrix.set(mt);
+ animationMatrix.postConcat(k0i);
+ animationMatrix.postConcat(simulatorToCopy.getCurrentMatrix());
+ animationMatrix.postConcat(mti);
+ ttv.setAnimationMatrix(animationMatrix);
+ });
+
+ out.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ ttv.setAnimationMatrix(null);
}
+ });
+ }
- int taskIndex = recentsView.indexOfChild(v);
- int centerTaskIndex = recentsView.getCurrentPage();
- boolean parallaxCenterAndAdjacentTask = taskIndex != centerTaskIndex;
- if (!skipViewChanges && parallaxCenterAndAdjacentTask) {
- float scale = taskBounds.width() / mThumbnailRect.width();
- v.setScaleX(scale);
- v.setScaleY(scale);
- v.setTranslationX(taskBounds.centerX() - mThumbnailRect.centerX());
- v.setTranslationY(taskBounds.centerY() - mThumbnailRect.centerY());
- v.setAlpha(mViewAlpha.value);
- }
- }
- });
- appAnimator.addListener(new AnimatorListenerAdapter() {
+ out.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
targets.release();
@@ -216,12 +232,8 @@
});
if (depthController != null) {
- ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofFloat(depthController,
- DEPTH, BACKGROUND_APP.getDepth(v.getContext()));
- animatorSet.playTogether(appAnimator, backgroundRadiusAnim);
- } else {
- animatorSet.play(appAnimator);
+ out.setFloat(depthController, DEPTH, BACKGROUND_APP.getDepth(context),
+ TOUCH_RESPONSE_INTERPOLATOR);
}
- return animatorSet;
}
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
index 8bffc78..ef3d174 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
@@ -85,7 +85,6 @@
import com.android.quickstep.util.AssistantUtilities;
import com.android.quickstep.util.ProtoTracer;
import com.android.quickstep.util.SplitScreenBounds;
-import com.android.quickstep.views.RecentsView;
import com.android.systemui.plugins.OverscrollPlugin;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.shared.recents.IOverviewProxy;
@@ -555,7 +554,6 @@
|| previousGestureState.isRecentsAnimationRunning()
? newBaseConsumer(previousGestureState, newGestureState, event)
: mResetGestureInputConsumer;
- // TODO(b/149880412): 2 button landscape mode is wrecked. Fixit!
if (mDeviceState.isGesturalNavMode()) {
handleOrientationSetup(base);
}
@@ -833,16 +831,16 @@
}
}
- private BaseSwipeUpHandler createLauncherSwipeHandler(GestureState gestureState,
- long touchTimeMs, boolean continuingLastGesture, boolean isLikelyToStartNewTask) {
- return new LauncherSwipeHandler(this, mDeviceState, mTaskAnimationManager,
+ private BaseSwipeUpHandler createLauncherSwipeHandler(
+ GestureState gestureState, long touchTimeMs, boolean continuingLastGesture) {
+ return new LauncherSwipeHandlerV2(this, mDeviceState, mTaskAnimationManager,
gestureState, touchTimeMs, continuingLastGesture, mInputConsumer);
}
- private BaseSwipeUpHandler createFallbackSwipeHandler(GestureState gestureState,
- long touchTimeMs, boolean continuingLastGesture, boolean isLikelyToStartNewTask) {
- return new FallbackSwipeHandler(this, mDeviceState, gestureState,
- mInputConsumer, isLikelyToStartNewTask, continuingLastGesture);
+ private BaseSwipeUpHandler createFallbackSwipeHandler(
+ GestureState gestureState, long touchTimeMs, boolean continuingLastGesture) {
+ return new FallbackSwipeHandler(this, mDeviceState, mTaskAnimationManager,
+ gestureState, touchTimeMs, continuingLastGesture, mInputConsumer);
}
protected boolean shouldNotifyBackGesture() {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/fallback/FallbackRecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/fallback/FallbackRecentsView.java
index f958e6d..9242771 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/fallback/FallbackRecentsView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/fallback/FallbackRecentsView.java
@@ -24,11 +24,13 @@
import android.os.Build;
import android.util.AttributeSet;
+import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.statemanager.StateManager.StateListener;
import com.android.quickstep.FallbackActivityInterface;
import com.android.quickstep.RecentsActivity;
import com.android.quickstep.views.OverviewActionsView;
import com.android.quickstep.views.RecentsView;
+import com.android.quickstep.views.TaskView;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.Task.TaskKey;
@@ -38,7 +40,7 @@
public class FallbackRecentsView extends RecentsView<RecentsActivity>
implements StateListener<RecentsState> {
- private RunningTaskInfo mRunningTaskInfo;
+ private RunningTaskInfo mHomeTaskInfo;
public FallbackRecentsView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
@@ -67,16 +69,40 @@
return false;
}
- public void onGestureAnimationStart(RunningTaskInfo runningTaskInfo) {
- mRunningTaskInfo = runningTaskInfo;
- onGestureAnimationStart(runningTaskInfo == null ? -1 : runningTaskInfo.taskId);
+ /**
+ * When starting gesture interaction from home, we add a temporary invisible tile corresponding
+ * to the home task. This allows us to handle quick-switch similarly to a quick-switching
+ * from a foreground task.
+ */
+ public void onGestureAnimationStartOnHome(RunningTaskInfo homeTaskInfo) {
+ mHomeTaskInfo = homeTaskInfo;
+ onGestureAnimationStart(homeTaskInfo == null ? -1 : homeTaskInfo.taskId);
+ }
+
+ /**
+ * When the gesture ends and recents view become interactive, we also remove the temporary
+ * invisible tile added for the home task. This also pushes the remaining tiles back
+ * to the center.
+ */
+ @Override
+ public void onGestureAnimationEnd() {
+ super.onGestureAnimationEnd();
+ if (mHomeTaskInfo != null) {
+ TaskView tv = getTaskView(mHomeTaskInfo.taskId);
+ if (tv != null) {
+ PendingAnimation pa = createTaskDismissAnimation(tv, true, false, 150);
+ pa.addEndListener(e -> setCurrentTask(-1));
+ runDismissAnimation(pa);
+ }
+ }
}
@Override
public void setCurrentTask(int runningTaskId) {
super.setCurrentTask(runningTaskId);
- if (mRunningTaskInfo != null && mRunningTaskInfo.taskId != runningTaskId) {
- mRunningTaskInfo = null;
+ if (mHomeTaskInfo != null && mHomeTaskInfo.taskId != runningTaskId) {
+ mHomeTaskInfo = null;
+ setRunningTaskHidden(false);
}
}
@@ -85,7 +111,7 @@
// When quick-switching on 3p-launcher, we add a "dummy" tile corresponding to Launcher
// as well. This tile is never shown as we have setCurrentTaskHidden, but allows use to
// track the index of the next task appropriately, as if we are switching on any other app.
- if (mRunningTaskInfo != null && mRunningTaskInfo.taskId == mRunningTaskId) {
+ if (mHomeTaskInfo != null && mHomeTaskInfo.taskId == mRunningTaskId) {
// Check if the task list has running task
boolean found = false;
for (Task t : tasks) {
@@ -97,7 +123,7 @@
if (!found) {
ArrayList<Task> newList = new ArrayList<>(tasks.size() + 1);
newList.addAll(tasks);
- newList.add(Task.from(new TaskKey(mRunningTaskInfo), mRunningTaskInfo, false));
+ newList.add(Task.from(new TaskKey(mHomeTaskInfo), mHomeTaskInfo, false));
tasks = newList;
}
}
@@ -105,6 +131,15 @@
}
@Override
+ public void setRunningTaskHidden(boolean isHidden) {
+ if (mHomeTaskInfo != null) {
+ // Always keep the home task hidden
+ isHidden = true;
+ }
+ super.setRunningTaskHidden(isHidden);
+ }
+
+ @Override
public void setModalStateEnabled(boolean isModalState) {
super.setModalStateEnabled(isModalState);
if (isModalState) {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/DeviceLockedInputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/DeviceLockedInputConsumer.java
index abe4af4..3a97216 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/DeviceLockedInputConsumer.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/DeviceLockedInputConsumer.java
@@ -21,7 +21,7 @@
import static com.android.launcher3.Utilities.squaredHypot;
import static com.android.launcher3.Utilities.squaredTouchSlop;
-import static com.android.quickstep.LauncherSwipeHandler.MIN_PROGRESS_FOR_OVERVIEW;
+import static com.android.quickstep.BaseSwipeUpHandlerV2.MIN_PROGRESS_FOR_OVERVIEW;
import static com.android.quickstep.MultiStateCallback.DEBUG_STATES;
import static com.android.quickstep.util.ActiveGestureLog.INTENT_EXTRA_LOG_TRACE_ID;
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
index 6b0d7a3..8b08ea7 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
@@ -112,6 +112,9 @@
private boolean mPassedWindowMoveSlop;
// Slop used to determine when we say that the gesture has started.
private boolean mPassedPilferInputSlop;
+ // Same as mPassedPilferInputSlop, except when continuing a gesture mPassedPilferInputSlop is
+ // initially true while this one is false.
+ private boolean mPassedSlopOnThisGesture;
// Might be displacement in X or Y, depending on the direction we are swiping from the nav bar.
private float mStartDisplacement;
@@ -207,7 +210,7 @@
// Start the window animation on down to give more time for launcher to draw if the
// user didn't start the gesture over the back button
if (!mIsDeferredDownTarget) {
- startTouchTrackingForWindowAnimation(ev.getEventTime(), false);
+ startTouchTrackingForWindowAnimation(ev.getEventTime());
}
TraceHelper.INSTANCE.endSection(traceToken);
@@ -244,6 +247,7 @@
mLastPos.set(ev.getX(pointerIndex), ev.getY(pointerIndex));
float displacement = getDisplacement(ev);
float displacementX = mLastPos.x - mDownPos.x;
+ float displacementY = mLastPos.y - mDownPos.y;
if (!mPassedWindowMoveSlop) {
if (!mIsDeferredDownTarget) {
@@ -258,11 +262,18 @@
float horizontalDist = Math.abs(displacementX);
float upDist = -displacement;
- boolean isLikelyToStartNewTask = horizontalDist > upDist;
+ boolean passedSlop = squaredHypot(displacementX, displacementY)
+ >= mSquaredTouchSlop;
+ if (!mPassedSlopOnThisGesture && passedSlop) {
+ mPassedSlopOnThisGesture = true;
+ }
+ // Until passing slop, we don't know what direction we're going, so assume we might
+ // be quick switching to avoid translating recents away when continuing the gesture.
+ boolean isLikelyToStartNewTask = !mPassedSlopOnThisGesture
+ || horizontalDist > upDist;
if (!mPassedPilferInputSlop) {
- float displacementY = mLastPos.y - mDownPos.y;
- if (squaredHypot(displacementX, displacementY) >= mSquaredTouchSlop) {
+ if (passedSlop) {
if (mDisableHorizontalSwipe
&& Math.abs(displacementX) > Math.abs(displacementY)) {
// Horizontal gesture is not allowed in this region
@@ -275,8 +286,7 @@
if (mIsDeferredDownTarget) {
// Deferred gesture, start the animation and gesture tracking once
// we pass the actual touch slop
- startTouchTrackingForWindowAnimation(
- ev.getEventTime(), isLikelyToStartNewTask);
+ startTouchTrackingForWindowAnimation(ev.getEventTime());
}
if (!mPassedWindowMoveSlop) {
mPassedWindowMoveSlop = true;
@@ -326,12 +336,11 @@
mInteractionHandler.onGestureStarted();
}
- private void startTouchTrackingForWindowAnimation(
- long touchTimeMs, boolean isLikelyToStartNewTask) {
+ private void startTouchTrackingForWindowAnimation(long touchTimeMs) {
ActiveGestureLog.INSTANCE.addLog("startRecentsAnimation");
mInteractionHandler = mHandlerFactory.newHandler(mGestureState, touchTimeMs,
- mTaskAnimationManager.isRecentsAnimationRunning(), isLikelyToStartNewTask);
+ mTaskAnimationManager.isRecentsAnimationRunning());
mInteractionHandler.setGestureEndCallback(this::onInteractionGestureFinished);
mMotionPauseDetector.setOnMotionPauseListener(mInteractionHandler::onMotionPauseChanged);
Intent intent = new Intent(mInteractionHandler.getLaunchIntent());
@@ -341,6 +350,7 @@
mActiveCallbacks = mTaskAnimationManager.continueRecentsAnimation(mGestureState);
mActiveCallbacks.addListener(mInteractionHandler);
mTaskAnimationManager.notifyRecentsAnimationState(mInteractionHandler);
+ mInteractionHandler.setIsLikelyToStartNewTask(true);
notifyGestureStarted();
} else {
intent.putExtra(INTENT_EXTRA_LOG_TRACE_ID, mGestureState.getGestureId());
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java
deleted file mode 100644
index b743d3f..0000000
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/AppWindowAnimationHelper.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.quickstep.util;
-
-import static com.android.launcher3.Utilities.boundToRange;
-import static com.android.launcher3.Utilities.mapRange;
-import static com.android.systemui.shared.system.QuickStepContract.getWindowCornerRadius;
-import static com.android.systemui.shared.system.QuickStepContract.supportsRoundedCornersOnWindows;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Matrix;
-import android.graphics.Matrix.ScaleToFit;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.os.Build;
-
-import androidx.annotation.Nullable;
-
-import com.android.launcher3.BaseDraggingActivity;
-import com.android.launcher3.DeviceProfile;
-import com.android.launcher3.R;
-import com.android.launcher3.Utilities;
-import com.android.launcher3.views.BaseDragLayer;
-import com.android.quickstep.SystemUiProxy;
-import com.android.quickstep.views.RecentsView;
-import com.android.quickstep.views.TaskThumbnailView;
-import com.android.systemui.shared.recents.utilities.RectFEvaluator;
-import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
-import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat;
-import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams;
-import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams.Builder;
-import com.android.systemui.shared.system.WindowManagerWrapper;
-
-/**
- * Utility class to handle window clip animation
- */
-@TargetApi(Build.VERSION_CODES.P)
-public class AppWindowAnimationHelper implements TransformParams.BuilderProxy {
-
- // The bounds of the source app in device coordinates
- private final RectF mSourceStackBounds = new RectF();
- // The insets of the source app
- private final Rect mSourceInsets = new Rect();
- // The source app bounds with the source insets applied, in the device coordinates
- private final RectF mSourceRect = new RectF();
- // The bounds of the task view in device coordinates
- private final RectF mTargetRect = new RectF();
- // The bounds of the app window (between mSourceRect and mTargetRect) in device coordinates
- private final RectF mCurrentRect = new RectF();
- // The insets to be used for clipping the app window, which can be larger than mSourceInsets
- // if the aspect ratio of the target is smaller than the aspect ratio of the source rect. In
- // app window coordinates.
- private final RectF mSourceWindowClipInsets = new RectF();
- // The clip rect in source app window coordinates. The app window surface will only be drawn
- // within these bounds. This clip rect starts at the full mSourceStackBounds, and insets by
- // mSourceWindowClipInsets as the transform progress goes to 1.
- private final RectF mCurrentClipRectF = new RectF();
-
- // The bounds of launcher (not including insets) in device coordinates
- public final Rect mHomeStackBounds = new Rect();
- private final RectFEvaluator mRectFEvaluator = new RectFEvaluator();
- private final Matrix mTmpMatrix = new Matrix();
- private final Rect mTmpRect = new Rect();
- private final RectF mTmpRectF = new RectF();
- private RecentsOrientedState mOrientedState;
- // Corner radius of windows, in pixels
- private final float mWindowCornerRadius;
- // Corner radius of windows when they're in overview mode.
- private final float mTaskCornerRadius;
- // If windows can have real time rounded corners.
- private final boolean mSupportsRoundedCornersOnWindows;
- // Whether or not to actually use the rounded cornders on windows
- private boolean mUseRoundedCornersOnWindows;
-
- public AppWindowAnimationHelper(RecentsOrientedState orientedState, Context context) {
- Resources res = context.getResources();
- mOrientedState = orientedState;
- mWindowCornerRadius = getWindowCornerRadius(res);
- mSupportsRoundedCornersOnWindows = supportsRoundedCornersOnWindows(res);
- mTaskCornerRadius = TaskCornerRadius.get(context);
- mUseRoundedCornersOnWindows = mSupportsRoundedCornersOnWindows;
- }
-
- private void updateSourceStack(RemoteAnimationTargetCompat target) {
- mSourceInsets.set(target.contentInsets);
- mSourceStackBounds.set(target.screenSpaceBounds);
- }
-
- public void updateTargetRect(Rect targetRect) {
- mSourceRect.set(mSourceInsets.left, mSourceInsets.top,
- mSourceStackBounds.width() - mSourceInsets.right,
- mSourceStackBounds.height() - mSourceInsets.bottom);
- mTargetRect.set(targetRect);
- mTargetRect.offset(mHomeStackBounds.left - mSourceStackBounds.left,
- mHomeStackBounds.top - mSourceStackBounds.top);
-
- // Calculate the clip based on the target rect (since the content insets and the
- // launcher insets may differ, so the aspect ratio of the target rect can differ
- // from the source rect. The difference between the target rect (scaled to the
- // source rect) is the amount to clip on each edge.
- RectF scaledTargetRect = new RectF(mTargetRect);
- float scale = getSrcToTargetScale();
- Utilities.scaleRectFAboutCenter(scaledTargetRect, scale);
-
- scaledTargetRect.offsetTo(mSourceRect.left, mSourceRect.top);
- mSourceWindowClipInsets.set(
- Math.max(scaledTargetRect.left, 0),
- Math.max(scaledTargetRect.top, 0),
- Math.max(mSourceStackBounds.width() - scaledTargetRect.right, 0),
- Math.max(mSourceStackBounds.height() - scaledTargetRect.bottom, 0));
- mSourceRect.set(scaledTargetRect);
- }
-
- public float getSrcToTargetScale() {
- return LayoutUtils.getTaskScale(mOrientedState,
- mSourceRect.width(), mSourceRect.height(),
- mTargetRect.width(), mTargetRect.height());
- }
-
- public void prepareAnimation(DeviceProfile dp) {
- mUseRoundedCornersOnWindows = mSupportsRoundedCornersOnWindows && !dp.isMultiWindowMode;
- }
-
- public RectF applyTransform(TransformParams params) {
- SurfaceParams[] surfaceParams = computeSurfaceParams(params);
- if (surfaceParams == null) {
- return null;
- }
- params.applySurfaceParams(surfaceParams);
- return mCurrentRect;
- }
-
- /**
- * Updates this AppWindowAnimationHelper's state based on the given TransformParams, and returns
- * the SurfaceParams to apply via {@link SyncRtSurfaceTransactionApplierCompat#applyParams}.
- */
- public SurfaceParams[] computeSurfaceParams(TransformParams params) {
- if (params.getTargetSet() == null) {
- return null;
- }
-
- updateCurrentRect(params);
- return params.createSurfaceParams(this);
- }
-
- @Override
- public void onBuildParams(Builder builder, RemoteAnimationTargetCompat app,
- int targetMode, TransformParams params) {
- Rect crop = mTmpRect;
- crop.set(app.screenSpaceBounds);
- crop.offsetTo(0, 0);
- float cornerRadius = 0f;
- float scale = Math.max(mCurrentRect.width(), mTargetRect.width()) / crop.width();
- mTmpMatrix.setTranslate(0, 0);
- if (app.activityType == RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
- mTmpMatrix.setTranslate(app.localBounds.left, app.localBounds.top);
- }
- if (app.mode == targetMode
- && app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
- mTmpMatrix.setRectToRect(mSourceRect, mCurrentRect, ScaleToFit.FILL);
- mTmpMatrix.postTranslate(app.localBounds.left, app.localBounds.top);
- mCurrentClipRectF.roundOut(crop);
- if (mSupportsRoundedCornersOnWindows) {
- if (params.getCornerRadius() > -1) {
- cornerRadius = params.getCornerRadius();
- scale = mCurrentRect.width() / crop.width();
- } else {
- float windowCornerRadius = mUseRoundedCornersOnWindows
- ? mWindowCornerRadius : 0;
- cornerRadius = mapRange(boundToRange(params.getProgress(), 0, 1),
- windowCornerRadius, mTaskCornerRadius);
- }
- }
-
- builder.withMatrix(mTmpMatrix)
- .withWindowCrop(crop)
- // Since radius is in Surface space, but we draw the rounded corners in screen
- // space, we have to undo the scale
- .withCornerRadius(cornerRadius / scale);
-
- }
- }
-
- public RectF updateCurrentRect(TransformParams params) {
- if (params.getCurrentRect() != null) {
- mCurrentRect.set(params.getCurrentRect());
- } else {
- mTmpRectF.set(mTargetRect);
- mCurrentRect.set(mRectFEvaluator.evaluate(
- params.getProgress(), mSourceRect, mTmpRectF));
- }
-
- updateClipRect(params);
- return mCurrentRect;
- }
-
- private void updateClipRect(TransformParams params) {
- // Don't clip past progress > 1.
- float progress = Math.min(1, params.getProgress());
- mCurrentClipRectF.left = mSourceWindowClipInsets.left * progress;
- mCurrentClipRectF.top = mSourceWindowClipInsets.top * progress;
- mCurrentClipRectF.right =
- mSourceStackBounds.width() - (mSourceWindowClipInsets.right * progress);
- mCurrentClipRectF.bottom =
- mSourceStackBounds.height() - (mSourceWindowClipInsets.bottom * progress);
- }
-
- public void fromTaskThumbnailView(TaskThumbnailView ttv, RecentsView rv,
- @Nullable RemoteAnimationTargetCompat target) {
- BaseDraggingActivity activity = BaseDraggingActivity.fromContext(ttv.getContext());
- BaseDragLayer dl = activity.getDragLayer();
-
- int[] pos = new int[2];
- dl.getLocationOnScreen(pos);
- mHomeStackBounds.set(0, 0, dl.getWidth(), dl.getHeight());
- mHomeStackBounds.offset(pos[0], pos[1]);
-
- if (target != null) {
- updateSourceStack(target);
- } else if (rv.shouldUseMultiWindowTaskSizeStrategy()) {
- updateStackBoundsToMultiWindowTaskSize(activity);
- } else {
- mSourceStackBounds.set(mHomeStackBounds);
- Rect fallback = dl.getInsets();
- mSourceInsets.set(ttv.getInsets(fallback));
- }
-
- Rect targetRect = new Rect();
- dl.getDescendantRectRelativeToSelf(ttv, targetRect);
- updateTargetRect(targetRect);
-
- if (target == null) {
- // Transform the clip relative to the target rect. Only do this in the case where we
- // aren't applying the insets to the app windows (where the clip should be in target app
- // space)
- float scale = mTargetRect.width() / mSourceRect.width();
- mSourceWindowClipInsets.left = mSourceWindowClipInsets.left * scale;
- mSourceWindowClipInsets.top = mSourceWindowClipInsets.top * scale;
- mSourceWindowClipInsets.right = mSourceWindowClipInsets.right * scale;
- mSourceWindowClipInsets.bottom = mSourceWindowClipInsets.bottom * scale;
- }
- }
-
- private void updateStackBoundsToMultiWindowTaskSize(BaseDraggingActivity activity) {
- SystemUiProxy proxy = SystemUiProxy.INSTANCE.get(activity);
- if (proxy.isActive()) {
- mSourceStackBounds.set(proxy.getNonMinimizedSplitScreenSecondaryBounds());
- return;
- }
-
- // Assume that the task size is half screen size (minus the insets and the divider size)
- DeviceProfile fullDp = activity.getDeviceProfile().getFullScreenProfile();
- // Use availableWidthPx and availableHeightPx instead of widthPx and heightPx to
- // account for system insets
- int taskWidth = fullDp.availableWidthPx;
- int taskHeight = fullDp.availableHeightPx;
- int halfDividerSize = activity.getResources()
- .getDimensionPixelSize(R.dimen.multi_window_task_divider_size) / 2;
-
- Rect insets = new Rect();
- WindowManagerWrapper.getInstance().getStableInsets(insets);
- if (fullDp.isLandscape) {
- taskWidth = taskWidth / 2 - halfDividerSize;
- } else {
- taskHeight = taskHeight / 2 - halfDividerSize;
- }
-
- // Align the task to bottom left/right edge (closer to nav bar).
- int left = activity.getDeviceProfile().isSeascape() ? insets.left
- : (insets.left + fullDp.availableWidthPx - taskWidth);
- mSourceStackBounds.set(0, 0, taskWidth, taskHeight);
- mSourceStackBounds.offset(left, insets.top + fullDp.availableHeightPx - taskHeight);
- }
-
- public RectF getTargetRect() {
- return mTargetRect;
- }
-
-}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/RecentsAtomicAnimationFactory.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/RecentsAtomicAnimationFactory.java
new file mode 100644
index 0000000..5b0d503
--- /dev/null
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/RecentsAtomicAnimationFactory.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.quickstep.util;
+
+import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_OFFSET;
+
+import android.animation.Animator;
+import android.animation.ObjectAnimator;
+
+import com.android.launcher3.anim.SpringAnimationBuilder;
+import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory;
+import com.android.launcher3.statemanager.StatefulActivity;
+import com.android.quickstep.views.RecentsView;
+
+public class RecentsAtomicAnimationFactory<ACTIVITY_TYPE extends StatefulActivity, STATE_TYPE>
+ extends AtomicAnimationFactory<STATE_TYPE> {
+
+ public static final int INDEX_RECENTS_FADE_ANIM = AtomicAnimationFactory.NEXT_INDEX + 0;
+ public static final int INDEX_RECENTS_TRANSLATE_X_ANIM = AtomicAnimationFactory.NEXT_INDEX + 1;
+
+ private static final int MY_ANIM_COUNT = 2;
+ protected static final int NEXT_INDEX = AtomicAnimationFactory.NEXT_INDEX + MY_ANIM_COUNT;
+
+ protected final ACTIVITY_TYPE mActivity;
+
+ /**
+ * @param extraAnims number of animations supported by the subclass. This should not include
+ * the 2 animations supported by this class.
+ */
+ public RecentsAtomicAnimationFactory(ACTIVITY_TYPE activity, int extraAnims) {
+ super(MY_ANIM_COUNT + extraAnims);
+ mActivity = activity;
+ }
+
+ @Override
+ public Animator createStateElementAnimation(int index, float... values) {
+ switch (index) {
+ case INDEX_RECENTS_FADE_ANIM:
+ return ObjectAnimator.ofFloat(mActivity.getOverviewPanel(),
+ RecentsView.CONTENT_ALPHA, values);
+ case INDEX_RECENTS_TRANSLATE_X_ANIM: {
+ RecentsView rv = mActivity.getOverviewPanel();
+ return new SpringAnimationBuilder(mActivity)
+ .setMinimumVisibleChange(1f / rv.getPageOffsetScale())
+ .setDampingRatio(0.8f)
+ .setStiffness(250)
+ .setValues(values)
+ .build(rv, ADJACENT_PAGE_OFFSET);
+ }
+ default:
+ return super.createStateElementAnimation(index, values);
+ }
+ }
+}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskViewSimulator.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskViewSimulator.java
index 348c22d..3b08675 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskViewSimulator.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskViewSimulator.java
@@ -26,6 +26,7 @@
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
+import android.util.IntProperty;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
@@ -47,6 +48,19 @@
*/
public class TaskViewSimulator implements TransformParams.BuilderProxy {
+ public static final IntProperty<TaskViewSimulator> SCROLL =
+ new IntProperty<TaskViewSimulator>("scroll") {
+ @Override
+ public void setValue(TaskViewSimulator simulator, int i) {
+ simulator.setScroll(i);
+ }
+
+ @Override
+ public Integer get(TaskViewSimulator simulator) {
+ return simulator.mScrollState.scroll;
+ }
+ };
+
private final Rect mTmpCropRect = new Rect();
private final RectF mTempRectF = new RectF();
private final float[] mTempPoint = new float[2];
@@ -73,8 +87,8 @@
private float mCurveScale = 1;
// RecentsView properties
- public final AnimatedFloat recentsViewScale = new AnimatedFloat(() -> { });
- public final AnimatedFloat fullScreenProgress = new AnimatedFloat(() -> { });
+ public final AnimatedFloat recentsViewScale = new AnimatedFloat();
+ public final AnimatedFloat fullScreenProgress = new AnimatedFloat();
private final ScrollState mScrollState = new ScrollState();
private final int mPageSpacing;
@@ -279,4 +293,5 @@
// Ideally we should use square-root. This is an optimization as one of the dimension is 0.
return Math.max(Math.abs(mTempPoint[0]), Math.abs(mTempPoint[1]));
}
+
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TransformParams.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TransformParams.java
index d837e54..9bb508e 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TransformParams.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TransformParams.java
@@ -15,11 +15,8 @@
*/
package com.android.quickstep.util;
-import android.graphics.RectF;
import android.util.FloatProperty;
-import androidx.annotation.Nullable;
-
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.Interpolators;
import com.android.quickstep.RemoteAnimationTargets;
@@ -43,19 +40,30 @@
}
};
+ public static FloatProperty<TransformParams> TARGET_ALPHA =
+ new FloatProperty<TransformParams>("targetAlpha") {
+ @Override
+ public void setValue(TransformParams params, float v) {
+ params.setTargetAlpha(v);
+ }
+
+ @Override
+ public Float get(TransformParams params) {
+ return params.getTargetAlpha();
+ }
+ };
+
private float mProgress;
- private @Nullable RectF mCurrentRect;
private float mTargetAlpha;
private float mCornerRadius;
private RemoteAnimationTargets mTargetSet;
private SyncRtSurfaceTransactionApplierCompat mSyncTransactionApplier;
- private TargetAlphaProvider mTaskAlphaCallback = (t, a) -> a;
- private TargetAlphaProvider mBaseAlphaCallback = (t, a) -> 1;
+ private BuilderProxy mHomeBuilderProxy = BuilderProxy.ALWAYS_VISIBLE;
+ private BuilderProxy mBaseBuilderProxy = BuilderProxy.ALWAYS_VISIBLE;
public TransformParams() {
mProgress = 0;
- mCurrentRect = null;
mTargetAlpha = 1;
mCornerRadius = -1;
}
@@ -81,17 +89,6 @@
}
/**
- * Sets the current rect to show the transformed window, in device coordinates. This gives
- * the caller manual control of where to show the window. If unspecified (null), we
- * interpolate between {@link AppWindowAnimationHelper#mSourceRect} and
- * {@link AppWindowAnimationHelper#mTargetRect}, based on {@link #mProgress}.
- */
- public TransformParams setCurrentRect(RectF currentRect) {
- mCurrentRect = currentRect;
- return this;
- }
-
- /**
* Specifies the alpha of the transformed window. Default is 1.
*/
public TransformParams setTargetAlpha(float targetAlpha) {
@@ -121,18 +118,20 @@
}
/**
- * Sets an alternate function which can be used to control the alpha of target app
+ * Sets an alternate function to control transform for non-target apps. The default
+ * implementation keeps the targets visible with alpha=1
*/
- public TransformParams setTaskAlphaCallback(TargetAlphaProvider callback) {
- mTaskAlphaCallback = callback;
+ public TransformParams setBaseBuilderProxy(BuilderProxy proxy) {
+ mBaseBuilderProxy = proxy;
return this;
}
/**
- * Sets an alternate function which can be used to control the alpha of non-target app
+ * Sets an alternate function to control transform for home target. The default
+ * implementation keeps the targets visible with alpha=1
*/
- public TransformParams setBaseAlphaCallback(TargetAlphaProvider callback) {
- mBaseAlphaCallback = callback;
+ public TransformParams setHomeBuilderProxy(BuilderProxy proxy) {
+ mHomeBuilderProxy = proxy;
return this;
}
@@ -143,25 +142,24 @@
RemoteAnimationTargetCompat app = targets.unfilteredApps[i];
SurfaceParams.Builder builder = new SurfaceParams.Builder(app.leash);
- float progress = Utilities.boundToRange(getProgress(), 0, 1);
- float alpha;
if (app.mode == targets.targetMode) {
- alpha = mTaskAlphaCallback.getAlpha(app, getTargetAlpha());
- if (app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
+ if (app.activityType == RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
+ mHomeBuilderProxy.onBuildTargetParams(builder, app, this);
+ } else {
// Fade out Assistant overlay.
if (app.activityType == RemoteAnimationTargetCompat.ACTIVITY_TYPE_ASSISTANT
&& app.isNotInRecents) {
- alpha = 1 - Interpolators.DEACCEL_2_5.getInterpolation(progress);
+ float progress = Utilities.boundToRange(getProgress(), 0, 1);
+ builder.withAlpha(1 - Interpolators.DEACCEL_2_5.getInterpolation(progress));
+ } else {
+ builder.withAlpha(getTargetAlpha());
}
- } else if (targets.hasRecents) {
- // If home has a different target then recents, reverse anim the
- // home target.
- alpha = 1 - (progress * getTargetAlpha());
+
+ proxy.onBuildTargetParams(builder, app, this);
}
} else {
- alpha = mBaseAlphaCallback.getAlpha(app, progress);
+ mBaseBuilderProxy.onBuildTargetParams(builder, app, this);
}
- proxy.onBuildParams(builder.withAlpha(alpha), app, targets.targetMode, this);
surfaceParams[i] = builder.build();
}
return surfaceParams;
@@ -173,11 +171,6 @@
return mProgress;
}
- @Nullable
- public RectF getCurrentRect() {
- return mCurrentRect;
- }
-
public float getTargetAlpha() {
return mTargetAlpha;
}
@@ -203,21 +196,13 @@
}
}
- public interface TargetAlphaProvider {
- float getAlpha(RemoteAnimationTargetCompat target, float expectedAlpha);
- }
-
+ @FunctionalInterface
public interface BuilderProxy {
- default void onBuildParams(SurfaceParams.Builder builder,
- RemoteAnimationTargetCompat app, int targetMode, TransformParams params) {
- if (app.mode == targetMode
- && app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
- onBuildTargetParams(builder, app, params);
- }
- }
+ BuilderProxy NO_OP = (builder, app, params) -> { };
+ BuilderProxy ALWAYS_VISIBLE = (builder, app, params) ->builder.withAlpha(1);
- default void onBuildTargetParams(SurfaceParams.Builder builder,
- RemoteAnimationTargetCompat app, TransformParams params) { }
+ void onBuildTargetParams(SurfaceParams.Builder builder,
+ RemoteAnimationTargetCompat app, TransformParams params);
}
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/AllAppsEduView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/AllAppsEduView.java
new file mode 100644
index 0000000..df89f74
--- /dev/null
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/AllAppsEduView.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.quickstep.views;
+
+import static com.android.launcher3.LauncherState.ALL_APPS;
+import static com.android.launcher3.anim.Interpolators.ACCEL;
+import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
+import static com.android.launcher3.anim.Interpolators.LINEAR;
+import static com.android.launcher3.anim.Interpolators.OVERSHOOT_1_7;
+import static com.android.launcher3.states.StateAnimationConfig.ANIM_ALL_APPS_FADE;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.GradientDrawable;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.ViewGroup;
+
+import androidx.core.graphics.ColorUtils;
+
+import com.android.launcher3.AbstractFloatingView;
+import com.android.launcher3.DeviceProfile;
+import com.android.launcher3.Launcher;
+import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
+import com.android.launcher3.anim.AnimatorPlaybackController;
+import com.android.launcher3.anim.Interpolators;
+import com.android.launcher3.dragndrop.DragLayer;
+import com.android.launcher3.states.StateAnimationConfig;
+import com.android.launcher3.util.Themes;
+import com.android.quickstep.util.MultiValueUpdateListener;
+
+/**
+ * View used to educate the user on how to access All Apps when in No Nav Button navigation mode.
+ */
+public class AllAppsEduView extends AbstractFloatingView {
+
+ private Launcher mLauncher;
+
+ private AnimatorSet mAnimation;
+
+ private GradientDrawable mCircle;
+ private GradientDrawable mGradient;
+
+ private int mCircleSizePx;
+ private int mPaddingPx;
+ private int mWidthPx;
+ private int mMaxHeightPx;
+
+ public AllAppsEduView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mCircle = (GradientDrawable) context.getDrawable(R.drawable.all_apps_edu_circle);
+ mCircleSizePx = getResources().getDimensionPixelSize(R.dimen.swipe_edu_circle_size);
+ mPaddingPx = getResources().getDimensionPixelSize(R.dimen.swipe_edu_padding);
+ mWidthPx = getResources().getDimensionPixelSize(R.dimen.swipe_edu_width);
+ mMaxHeightPx = getResources().getDimensionPixelSize(R.dimen.swipe_edu_max_height);
+ setWillNotDraw(false);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ mGradient.draw(canvas);
+ mCircle.draw(canvas);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ mIsOpen = true;
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ mIsOpen = false;
+ }
+
+ @Override
+ protected void handleClose(boolean animate) {
+ mLauncher.getDragLayer().removeView(this);
+ }
+
+ @Override
+ public void logActionCommand(int command) {
+ // TODO
+ }
+
+ @Override
+ protected boolean isOfType(int type) {
+ return (type & TYPE_ALL_APPS_EDU) != 0;
+ }
+
+ @Override
+ public boolean onControllerInterceptTouchEvent(MotionEvent ev) {
+ return mAnimation != null && mAnimation.isRunning();
+ }
+
+ private void playAnimation() {
+ if (mAnimation != null) {
+ return;
+ }
+ mAnimation = new AnimatorSet();
+
+ final Rect circleBoundsOg = new Rect(mCircle.getBounds());
+ final Rect gradientBoundsOg = new Rect(mGradient.getBounds());
+ final Rect temp = new Rect();
+ final float transY = mMaxHeightPx - mCircleSizePx - mPaddingPx;
+
+ // 1st: Circle alpha/scale
+ int firstPart = 600;
+ // 2nd: Circle animates upwards, Gradient alpha fades in, Gradient grows, All Apps hint
+ int secondPart = 1200;
+ int introDuration = firstPart + secondPart;
+
+ StateAnimationConfig config = new StateAnimationConfig();
+ config.setInterpolator(ANIM_ALL_APPS_FADE, Interpolators.clampToProgress(ACCEL,
+ 0, 0.08f));
+ config.duration = secondPart;
+ config.userControlled = false;
+ AnimatorPlaybackController stateAnimationController =
+ mLauncher.getStateManager().createAnimationToNewWorkspace(ALL_APPS, config);
+ float maxAllAppsProgress = 0.15f;
+
+ ValueAnimator intro = ValueAnimator.ofFloat(0, 1f);
+ intro.setInterpolator(LINEAR);
+ intro.setDuration(introDuration);
+ intro.addUpdateListener((new MultiValueUpdateListener() {
+ FloatProp mCircleAlpha = new FloatProp(0, 255, 0, firstPart, LINEAR);
+ FloatProp mCircleScale = new FloatProp(2f, 1f, 0, firstPart, OVERSHOOT_1_7);
+ FloatProp mDeltaY = new FloatProp(0, transY, firstPart, secondPart, FAST_OUT_SLOW_IN);
+ FloatProp mGradientAlpha = new FloatProp(0, 255, firstPart, secondPart * 0.3f, LINEAR);
+
+ @Override
+ public void onUpdate(float progress) {
+ temp.set(circleBoundsOg);
+ temp.offset(0, (int) -mDeltaY.value);
+ Utilities.scaleRectAboutCenter(temp, mCircleScale.value);
+ mCircle.setBounds(temp);
+ mCircle.setAlpha((int) mCircleAlpha.value);
+ mGradient.setAlpha((int) mGradientAlpha.value);
+
+ temp.set(gradientBoundsOg);
+ temp.top -= mDeltaY.value;
+ mGradient.setBounds(temp);
+ invalidate();
+
+ float stateProgress = Utilities.mapToRange(mDeltaY.value, 0, transY, 0,
+ maxAllAppsProgress, LINEAR);
+ stateAnimationController.setPlayFraction(stateProgress);
+ }
+ }));
+ intro.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mCircle.setAlpha(0);
+ mGradient.setAlpha(0);
+ }
+ });
+ mAnimation.play(intro);
+
+ ValueAnimator closeAllApps = ValueAnimator.ofFloat(maxAllAppsProgress, 0f);
+ closeAllApps.addUpdateListener(valueAnimator -> {
+ stateAnimationController.setPlayFraction((float) valueAnimator.getAnimatedValue());
+ });
+ closeAllApps.setInterpolator(FAST_OUT_SLOW_IN);
+ closeAllApps.setStartDelay(introDuration);
+ closeAllApps.setDuration(250);
+ mAnimation.play(closeAllApps);
+
+ mAnimation.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mAnimation = null;
+ stateAnimationController.dispatchOnCancel();
+ handleClose(false);
+ }
+ });
+ mAnimation.start();
+ }
+
+ private void init(Launcher launcher) {
+ mLauncher = launcher;
+
+ int accentColor = Themes.getColorAccent(launcher);
+ mGradient = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM,
+ Themes.getAttrBoolean(launcher, R.attr.isMainColorDark)
+ ? new int[] {0xB3FFFFFF, 0x00FFFFFF}
+ : new int[] {ColorUtils.setAlphaComponent(accentColor, 127),
+ ColorUtils.setAlphaComponent(accentColor, 0)});
+ float r = mWidthPx / 2f;
+ mGradient.setCornerRadii(new float[] {r, r, r, r, 0, 0, 0, 0});
+
+ int top = mMaxHeightPx - mCircleSizePx + mPaddingPx;
+ mCircle.setBounds(mPaddingPx, top, mPaddingPx + mCircleSizePx, top + mCircleSizePx);
+ mGradient.setBounds(0, mMaxHeightPx - mCircleSizePx, mWidthPx, mMaxHeightPx);
+
+ DeviceProfile grid = launcher.getDeviceProfile();
+ DragLayer.LayoutParams lp = new DragLayer.LayoutParams(mWidthPx, mMaxHeightPx);
+ lp.ignoreInsets = true;
+ lp.leftMargin = (grid.widthPx - mWidthPx) / 2;
+ lp.topMargin = grid.heightPx - grid.hotseatBarSizePx - mMaxHeightPx;
+ setLayoutParams(lp);
+ }
+
+ /**
+ * Shows the All Apps education view and plays the animation.
+ */
+ public static void show(Launcher launcher) {
+ final DragLayer dragLayer = launcher.getDragLayer();
+ ViewGroup parent = (ViewGroup) dragLayer.getParent();
+ AllAppsEduView view = launcher.getViewCache().getView(R.layout.all_apps_edu_view,
+ launcher, parent);
+ view.init(launcher);
+ launcher.getDragLayer().addView(view);
+ view.requestLayout();
+ view.playAnimation();
+ }
+}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
index 2c85618..fd74357 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
@@ -47,24 +47,21 @@
private boolean mIsRtl;
private int mScrollOffset;
- private RecentsView mParent;
public ClearAllButton(Context context, AttributeSet attrs) {
super(context, attrs);
+ mIsRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
- PagedOrientationHandler orientationHandler = mParent.getPagedOrientationHandler();
- mScrollOffset = orientationHandler.getClearAllScrollOffset(mParent, mIsRtl);
+ PagedOrientationHandler orientationHandler = getRecentsView().getPagedOrientationHandler();
+ mScrollOffset = orientationHandler.getClearAllScrollOffset(getRecentsView(), mIsRtl);
}
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- mParent = (RecentsView) getParent();
- mIsRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
+ private RecentsView getRecentsView() {
+ return (RecentsView) getParent();
}
@Override
@@ -94,7 +91,7 @@
@Override
public void onPageScroll(ScrollState scrollState) {
- PagedOrientationHandler orientationHandler = mParent.getPagedOrientationHandler();
+ PagedOrientationHandler orientationHandler = getRecentsView().getPagedOrientationHandler();
float orientationSize = orientationHandler.getPrimaryValue(getWidth(), getHeight());
if (orientationSize == 0) {
return;
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java
index 3d89403..68cc481 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java
@@ -157,9 +157,8 @@
if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
if (tv.isRunningTask()) {
mTransformParams.setProgress(1 - progress)
- .setCurrentRect(null)
.setSyncTransactionApplier(mSyncTransactionApplier);
- mAppWindowAnimationHelper.applyTransform(mTransformParams);
+ // TODO: Revisit live tiles
} else {
redrawLiveTile(true);
}
@@ -191,18 +190,10 @@
}
@Override
- public void redrawLiveTile(boolean mightNeedToRefill) {
- TransformParams transformParams = getLiveTileParams(mightNeedToRefill);
- if (transformParams != null) {
- mAppWindowAnimationHelper.applyTransform(transformParams);
- }
- }
-
- @Override
public TransformParams getLiveTileParams(
boolean mightNeedToRefill) {
if (!mEnableDrawingLiveTile || mRecentsAnimationController == null
- || mRecentsAnimationTargets == null || mAppWindowAnimationHelper == null) {
+ || mRecentsAnimationTargets == null) {
return null;
}
TaskView taskView = getRunningTaskView();
@@ -222,9 +213,7 @@
if (mightNeedToRefill && offsetY > 0) {
mTempRect.top -= offsetY;
}
- mTempRectF.set(mTempRect);
mTransformParams.setProgress(1f)
- .setCurrentRect(mTempRectF)
.setTargetAlpha(taskView.getAlpha())
.setSyncTransactionApplier(mSyncTransactionApplier)
.setTargetSet(mRecentsAnimationTargets);
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
index aee86db..2097b1d 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
@@ -17,6 +17,8 @@
package com.android.quickstep.views;
import static android.view.Surface.ROTATION_0;
+import static android.view.View.MeasureSpec.EXACTLY;
+import static android.view.View.MeasureSpec.makeMeasureSpec;
import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS;
import static com.android.launcher3.InvariantDeviceProfile.CHANGE_FLAG_ICON_PARAMS;
@@ -61,7 +63,6 @@
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
-import android.graphics.RectF;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
@@ -124,7 +125,6 @@
import com.android.quickstep.TaskThumbnailCache;
import com.android.quickstep.TaskUtils;
import com.android.quickstep.ViewUtils;
-import com.android.quickstep.util.AppWindowAnimationHelper;
import com.android.quickstep.util.LayoutUtils;
import com.android.quickstep.util.RecentsOrientedState;
import com.android.quickstep.util.SplitScreenBounds;
@@ -212,15 +212,12 @@
protected final BaseActivityInterface mSizeStrategy;
protected RecentsAnimationController mRecentsAnimationController;
protected RecentsAnimationTargets mRecentsAnimationTargets;
- protected AppWindowAnimationHelper mAppWindowAnimationHelper;
protected SyncRtSurfaceTransactionApplierCompat mSyncTransactionApplier;
protected int mTaskWidth;
protected int mTaskHeight;
protected boolean mEnableDrawingLiveTile = false;
protected final Rect mTempRect = new Rect();
- protected final RectF mTempRectF = new RectF();
private final PointF mTempPointF = new PointF();
- private final float[] mTempFloatPoint = new float[2];
private static final int DISMISS_TASK_DURATION = 300;
private static final int ADDITION_TASK_DURATION = 200;
@@ -978,7 +975,6 @@
mRecentsAnimationController = null;
mRecentsAnimationTargets = null;
- mAppWindowAnimationHelper = null;
unloadVisibleTaskData();
setCurrentPage(0);
@@ -1080,9 +1076,9 @@
* Called when a gesture from an app has finished.
*/
public void onGestureAnimationEnd() {
+ setOnScrollChangeListener(null);
setEnableFreeScroll(true);
setEnableDrawingLiveTile(true);
- setOnScrollChangeListener(null);
if (!ENABLE_QUICKSTEP_LIVE_TILE.get()) {
setRunningTaskViewShowScreenshot(true);
}
@@ -1113,6 +1109,12 @@
false, true, false, false, new ActivityManager.TaskDescription(), 0,
new ComponentName("", ""), false);
taskView.bind(mTmpRunningTask, mOrientationState);
+
+ // Measure and layout immediately so that the scroll values is updated instantly
+ // as the user might be quick-switching
+ measure(makeMeasureSpec(getMeasuredWidth(), EXACTLY),
+ makeMeasureSpec(getMeasuredHeight(), EXACTLY));
+ layout(getLeft(), getTop(), getRight(), getBottom());
}
boolean runningTaskTileHidden = mRunningTaskTileHidden;
@@ -1489,7 +1491,7 @@
return true;
}
- private void runDismissAnimation(PendingAnimation pendingAnim) {
+ protected void runDismissAnimation(PendingAnimation pendingAnim) {
AnimatorPlaybackController controller = pendingAnim.createPlaybackController();
controller.dispatchOnStart();
controller.setEndAction(() -> pendingAnim.finish(true, Touch.SWIPE));
@@ -2001,11 +2003,6 @@
mRecentsAnimationTargets = recentsAnimationTargets;
}
- // TODO: To be removed in a follow up CL
- public void setAppWindowAnimationHelper(AppWindowAnimationHelper appWindowAnimationHelper) {
- mAppWindowAnimationHelper = appWindowAnimationHelper;
- }
-
public void setLiveTileOverlayAttached(boolean liveTileOverlayAttached) {
mLiveTileOverlayAttached = liveTileOverlayAttached;
}
@@ -2088,13 +2085,20 @@
/**
- * @return How many pixels the running task is offset on the x-axis due to the current scrollX.
+ * @return How many pixels the running task is offset on the currently laid out dominant axis.
*/
public int getScrollOffset() {
- if (getRunningTaskIndex() == -1) {
+ return getScrollOffset(getRunningTaskIndex());
+ }
+
+ /**
+ * @return How many pixels the page is offset on the currently laid out dominant axis.
+ */
+ public int getScrollOffset(int pageIndex) {
+ if (pageIndex == -1) {
return 0;
}
- return getScrollForPage(getRunningTaskIndex()) - mOrientationHandler.getPrimaryScroll(this);
+ return getScrollForPage(pageIndex) - mOrientationHandler.getPrimaryScroll(this);
}
public Consumer<MotionEvent> getEventDispatcher(float navbarRotation) {
@@ -2126,10 +2130,6 @@
};
}
- public AppWindowAnimationHelper getClipAnimationHelper() {
- return mAppWindowAnimationHelper;
- }
-
public TransformParams getLiveTileParams(
boolean mightNeedToRefill) {
return null;
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskThumbnailView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskThumbnailView.java
index e3c1b42..78ac1cc 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskThumbnailView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskThumbnailView.java
@@ -444,7 +444,6 @@
int thumbnailRotation = thumbnailData.rotation;
int deltaRotate = getRotationDelta(currentRotation, thumbnailRotation);
- Rect deviceInsets = dp.getInsets();
// Landscape vs portrait change
boolean windowingModeSupportsRotation = !dp.isMultiWindowMode
&& thumbnailData.windowingMode == WINDOWING_MODE_FULLSCREEN;
@@ -463,9 +462,16 @@
: canvasWidth / thumbnailWidth;
}
+ Rect splitScreenInsets = dp.getInsets();
if (!isRotated) {
// No Rotation
- mClippedInsets.offsetTo(deviceInsets.left * scale, deviceInsets.top * scale);
+ if (dp.isMultiWindowMode) {
+ mClippedInsets.offsetTo(splitScreenInsets.left * scale,
+ splitScreenInsets.top * scale);
+ } else {
+ mClippedInsets.offsetTo(thumbnailInsets.left * scale,
+ thumbnailInsets.top * scale);
+ }
mMatrix.setTranslate(
-thumbnailInsets.left * scale,
-thumbnailInsets.top * scale);
@@ -486,8 +492,8 @@
mClippedInsets.top *= thumbnailScale;
if (dp.isMultiWindowMode) {
- mClippedInsets.right = deviceInsets.right * scale * thumbnailScale;
- mClippedInsets.bottom = deviceInsets.bottom * scale * thumbnailScale;
+ mClippedInsets.right = splitScreenInsets.right * scale * thumbnailScale;
+ mClippedInsets.bottom = splitScreenInsets.bottom * scale * thumbnailScale;
} else {
mClippedInsets.right = Math.max(0,
widthWithInsets - mClippedInsets.left - canvasWidth);
diff --git a/quickstep/res/values-af/strings.xml b/quickstep/res/values-af/strings.xml
index e24da07..d1bf9f6 100644
--- a/quickstep/res/values-af/strings.xml
+++ b/quickstep/res/values-af/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Voorspelde program: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Deel"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skermkiekie"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Jou organisasie laat nie hierdie program toe nie"</string>
</resources>
diff --git a/quickstep/res/values-am/strings.xml b/quickstep/res/values-am/strings.xml
index a9de58a..6d81b8e 100644
--- a/quickstep/res/values-am/strings.xml
+++ b/quickstep/res/values-am/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"የተገመተው መተግበሪያ፦ <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"አጋራ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ቅጽበታዊ ገጽ እይታ"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ይህ ድርጊት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም"</string>
</resources>
diff --git a/quickstep/res/values-ar/strings.xml b/quickstep/res/values-ar/strings.xml
index 99b829f..f369f81 100644
--- a/quickstep/res/values-ar/strings.xml
+++ b/quickstep/res/values-ar/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"التطبيق المتوقع: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"مشاركة"</string>
<string name="action_screenshot" msgid="8171125848358142917">"لقطة شاشة"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"لا يسمح التطبيق أو لا تسمح مؤسستك بهذا الإجراء."</string>
</resources>
diff --git a/quickstep/res/values-as/strings.xml b/quickstep/res/values-as/strings.xml
index 58a04a9..e3df95b 100644
--- a/quickstep/res/values-as/strings.xml
+++ b/quickstep/res/values-as/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"পূৰ্বানুমান কৰা এপ্: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"শ্বেয়াৰ কৰক"</string>
<string name="action_screenshot" msgid="8171125848358142917">"স্ক্ৰীনশ্বট"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"এপ্টোৱে অথবা আপোনাৰ প্ৰতিষ্ঠানে এই কাৰ্যটোৰ অনুমতি নিদিয়ে"</string>
</resources>
diff --git a/quickstep/res/values-az/strings.xml b/quickstep/res/values-az/strings.xml
index 1b1a4e8..60a9439 100644
--- a/quickstep/res/values-az/strings.xml
+++ b/quickstep/res/values-az/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Proqnozlaşdırılan tətbiq: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Paylaşın"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Ekran şəkli"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Bu əməliyyata tətbiq və ya təşkilatınız tərəfindən icazə verilmir"</string>
</resources>
diff --git a/quickstep/res/values-b+sr+Latn/strings.xml b/quickstep/res/values-b+sr+Latn/strings.xml
index 7d222e5..393e072 100644
--- a/quickstep/res/values-b+sr+Latn/strings.xml
+++ b/quickstep/res/values-b+sr+Latn/strings.xml
@@ -45,5 +45,6 @@
<string name="hotseat_tip_gaps_filled" msgid="3035673010274223538">"Predlozi aplikacija se dodaju na prazno mesto"</string>
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predviđamo aplikaciju: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Deli"</string>
- <string name="action_screenshot" msgid="8171125848358142917">"Napravi snimak ekrana"</string>
+ <string name="action_screenshot" msgid="8171125848358142917">"Snimak ekrana"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Aplikacija ili organizacija ne dozvoljavaju ovu radnju"</string>
</resources>
diff --git a/quickstep/res/values-be/strings.xml b/quickstep/res/values-be/strings.xml
index cc1c594..c397a36 100644
--- a/quickstep/res/values-be/strings.xml
+++ b/quickstep/res/values-be/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Праграма з падказкі: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Абагуліць"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Здымак экрана"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Гэта дзеянне не дазволена праграмай ці вашай арганізацыяй"</string>
</resources>
diff --git a/quickstep/res/values-bg/strings.xml b/quickstep/res/values-bg/strings.xml
index 0b629e0..31ff0ae 100644
--- a/quickstep/res/values-bg/strings.xml
+++ b/quickstep/res/values-bg/strings.xml
@@ -32,7 +32,7 @@
<string name="title_app_suggestions" msgid="4185902664111965088">"Предложения за приложения"</string>
<string name="all_apps_label" msgid="8542784161730910663">"Всички приложения"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Предвидени приложения"</string>
- <string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Лесен достъп до най-използваните от вас приложения"</string>
+ <string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Лесен достъп до най-използваните прилож."</string>
<string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel предвижда кои приложения ще са ви нужни в следващия момент и ви ги показва директно на началния екран. Докоснете, за да настроите."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Получавайте предложения за приложения на най-долния ред на началния си екран"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Осъществявайте лесен достъп до най-използваните от вас приложения директно от началния екран. Предложенията ще се променят въз основа на поредиците ви. Приложенията на най-долния ред ще се преместят на началния ви екран."</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Предвидено приложение: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Споделяне"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Екранна снимка"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Това действие не е разрешено от приложението или организацията ви"</string>
</resources>
diff --git a/quickstep/res/values-bn/strings.xml b/quickstep/res/values-bn/strings.xml
index 298070c..531d553 100644
--- a/quickstep/res/values-bn/strings.xml
+++ b/quickstep/res/values-bn/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"আপনার প্রয়োজন হতে পারে এমন অ্যাপ: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"শেয়ার করুন"</string>
<string name="action_screenshot" msgid="8171125848358142917">"স্ক্রিনশট"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"এই অ্যাপ বা আপনার প্রতিষ্ঠান এই অ্যাকশনটি পারফর্ম করার অনুমতি দেয়নি"</string>
</resources>
diff --git a/quickstep/res/values-bs/strings.xml b/quickstep/res/values-bs/strings.xml
index bfc5e5c..7e2d38a 100644
--- a/quickstep/res/values-bs/strings.xml
+++ b/quickstep/res/values-bs/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predviđena aplikacija: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Dijeli"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snimak ekrana"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Ovu radnju ne dozvoljava aplikacija ili vaša organizacija"</string>
</resources>
diff --git a/quickstep/res/values-ca/strings.xml b/quickstep/res/values-ca/strings.xml
index 2a186a5..ca229d2 100644
--- a/quickstep/res/values-ca/strings.xml
+++ b/quickstep/res/values-ca/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predicció d\'aplicació: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Comparteix"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Captura de pantalla"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"L\'aplicació o la teva organització no permeten aquesta acció"</string>
</resources>
diff --git a/quickstep/res/values-cs/strings.xml b/quickstep/res/values-cs/strings.xml
index f80807e..2486f27 100644
--- a/quickstep/res/values-cs/strings.xml
+++ b/quickstep/res/values-cs/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Předpokládaná aplikace: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Sdílet"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snímek obrazovky"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Aplikace nebo organizace zakazuje tuto akci"</string>
</resources>
diff --git a/quickstep/res/values-da/strings.xml b/quickstep/res/values-da/strings.xml
index 117a14c..3499663 100644
--- a/quickstep/res/values-da/strings.xml
+++ b/quickstep/res/values-da/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"App, du forventes at skulle bruge: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Del"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Appen eller din organisation tillader ikke denne handling"</string>
</resources>
diff --git a/quickstep/res/values-de/strings.xml b/quickstep/res/values-de/strings.xml
index c1cf68e..6f07cec 100644
--- a/quickstep/res/values-de/strings.xml
+++ b/quickstep/res/values-de/strings.xml
@@ -33,7 +33,7 @@
<string name="all_apps_label" msgid="8542784161730910663">"Alle Apps"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"App-Vorschläge für dich"</string>
<string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Einfacher Zugriff auf deine meistverwendeten Apps"</string>
- <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Das Pixel prognostiziert, welche Apps du als nächste brauchst, und setzt diese direkt auf den Startbildschirm. Zum Einrichten tippen."</string>
+ <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel prognostiziert, welche Apps du als nächste brauchst, und setzt diese direkt auf den Startbildschirm. Zum Einrichten tippen."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Lass dir in der unteren Reihe auf deinem Startbildschirm Vorschläge für Apps anzeigen"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Schneller Zugriff auf deine meistverwendeten Apps direkt über den Startbildschirm. Die Vorschläge richten sich nach deiner gewöhnlichen Nutzung. Apps in der unteren Reihe werden nach oben auf den Startbildschirm verschoben."</string>
<string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Schneller Zugriff auf deine meistverwendeten Apps direkt über den Startbildschirm. Die Vorschläge richten sich nach deiner gewöhnlichen Nutzung. Apps in der unteren Reihe werden in einen neuen Ordner verschoben."</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"App-Vorhersage: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Teilen"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Die App oder deine Organisation lässt diese Aktion nicht zu"</string>
</resources>
diff --git a/quickstep/res/values-el/strings.xml b/quickstep/res/values-el/strings.xml
index f02007a..688426c 100644
--- a/quickstep/res/values-el/strings.xml
+++ b/quickstep/res/values-el/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Εφαρμογή από πρόβλεψη: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Κοινοποίηση"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Στιγμιότυπο οθόνης"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Αυτή η ενέργεια δεν επιτρέπεται από την εφαρμογή ή τον οργανισμό σας."</string>
</resources>
diff --git a/quickstep/res/values-en-rAU/strings.xml b/quickstep/res/values-en-rAU/strings.xml
index e396e54..739037b 100644
--- a/quickstep/res/values-en-rAU/strings.xml
+++ b/quickstep/res/values-en-rAU/strings.xml
@@ -33,7 +33,7 @@
<string name="all_apps_label" msgid="8542784161730910663">"All apps"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Your predicted apps"</string>
<string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Easily access your most-used apps"</string>
- <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel predicts apps that you\'ll need next directly from your home screen. Tap to set up."</string>
+ <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel predicts apps you\'ll need next, right on your Home screen. Tap to set up."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Get app suggestions on the bottom row of your home screen"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Easily access your most-used apps directly from the home screen. Suggestions will change based on your routines. Apps on the bottom row will move up to your home screen."</string>
<string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Easily access your most-used apps directly from the home screen. Suggestions will change based on your routines. Apps on the bottom row will be moved to a new folder."</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predicted app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organisation"</string>
</resources>
diff --git a/quickstep/res/values-en-rCA/strings.xml b/quickstep/res/values-en-rCA/strings.xml
index e396e54..739037b 100644
--- a/quickstep/res/values-en-rCA/strings.xml
+++ b/quickstep/res/values-en-rCA/strings.xml
@@ -33,7 +33,7 @@
<string name="all_apps_label" msgid="8542784161730910663">"All apps"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Your predicted apps"</string>
<string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Easily access your most-used apps"</string>
- <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel predicts apps that you\'ll need next directly from your home screen. Tap to set up."</string>
+ <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel predicts apps you\'ll need next, right on your Home screen. Tap to set up."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Get app suggestions on the bottom row of your home screen"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Easily access your most-used apps directly from the home screen. Suggestions will change based on your routines. Apps on the bottom row will move up to your home screen."</string>
<string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Easily access your most-used apps directly from the home screen. Suggestions will change based on your routines. Apps on the bottom row will be moved to a new folder."</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predicted app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organisation"</string>
</resources>
diff --git a/quickstep/res/values-en-rGB/strings.xml b/quickstep/res/values-en-rGB/strings.xml
index e396e54..739037b 100644
--- a/quickstep/res/values-en-rGB/strings.xml
+++ b/quickstep/res/values-en-rGB/strings.xml
@@ -33,7 +33,7 @@
<string name="all_apps_label" msgid="8542784161730910663">"All apps"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Your predicted apps"</string>
<string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Easily access your most-used apps"</string>
- <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel predicts apps that you\'ll need next directly from your home screen. Tap to set up."</string>
+ <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel predicts apps you\'ll need next, right on your Home screen. Tap to set up."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Get app suggestions on the bottom row of your home screen"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Easily access your most-used apps directly from the home screen. Suggestions will change based on your routines. Apps on the bottom row will move up to your home screen."</string>
<string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Easily access your most-used apps directly from the home screen. Suggestions will change based on your routines. Apps on the bottom row will be moved to a new folder."</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predicted app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organisation"</string>
</resources>
diff --git a/quickstep/res/values-en-rIN/strings.xml b/quickstep/res/values-en-rIN/strings.xml
index e396e54..739037b 100644
--- a/quickstep/res/values-en-rIN/strings.xml
+++ b/quickstep/res/values-en-rIN/strings.xml
@@ -33,7 +33,7 @@
<string name="all_apps_label" msgid="8542784161730910663">"All apps"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Your predicted apps"</string>
<string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Easily access your most-used apps"</string>
- <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel predicts apps that you\'ll need next directly from your home screen. Tap to set up."</string>
+ <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel predicts apps you\'ll need next, right on your Home screen. Tap to set up."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Get app suggestions on the bottom row of your home screen"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Easily access your most-used apps directly from the home screen. Suggestions will change based on your routines. Apps on the bottom row will move up to your home screen."</string>
<string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Easily access your most-used apps directly from the home screen. Suggestions will change based on your routines. Apps on the bottom row will be moved to a new folder."</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predicted app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organisation"</string>
</resources>
diff --git a/quickstep/res/values-en-rXC/strings.xml b/quickstep/res/values-en-rXC/strings.xml
index be42e71..70753e2 100644
--- a/quickstep/res/values-en-rXC/strings.xml
+++ b/quickstep/res/values-en-rXC/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predicted app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Share"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"This action isn\'t allowed by the app or your organization"</string>
</resources>
diff --git a/quickstep/res/values-es-rUS/strings.xml b/quickstep/res/values-es-rUS/strings.xml
index f4330ea..0ada754 100644
--- a/quickstep/res/values-es-rUS/strings.xml
+++ b/quickstep/res/values-es-rUS/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predicción de app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Compartir"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Captura de pantalla"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"La app o tu organización no permiten realizar esta acción"</string>
</resources>
diff --git a/quickstep/res/values-es/strings.xml b/quickstep/res/values-es/strings.xml
index 39ba152..b2258de 100644
--- a/quickstep/res/values-es/strings.xml
+++ b/quickstep/res/values-es/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Aplicación sugerida: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Compartir"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Hacer captura"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"No puedes hacerlo porque la aplicación o tu organización no lo permiten"</string>
</resources>
diff --git a/quickstep/res/values-et/strings.xml b/quickstep/res/values-et/strings.xml
index 1e3fa4e..be5a7b3 100644
--- a/quickstep/res/values-et/strings.xml
+++ b/quickstep/res/values-et/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Ennustatud rakendus: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Jaga"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Ekraanipilt"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Rakendus või teie organisatsioon on selle toimingu keelanud"</string>
</resources>
diff --git a/quickstep/res/values-eu/strings.xml b/quickstep/res/values-eu/strings.xml
index 0bb5cab..6caf8ac 100644
--- a/quickstep/res/values-eu/strings.xml
+++ b/quickstep/res/values-eu/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Iragarritako aplikazioa: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Partekatu"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Atera pantaila-argazki bat"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Aplikazioak edo erakundeak ez du eman ekintza hori gauzatzeko baimena"</string>
</resources>
diff --git a/quickstep/res/values-fa/strings.xml b/quickstep/res/values-fa/strings.xml
index 6f29409..56a77fa 100644
--- a/quickstep/res/values-fa/strings.xml
+++ b/quickstep/res/values-fa/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"برنامه پیشبینیشده: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"همرسانی"</string>
<string name="action_screenshot" msgid="8171125848358142917">"نماگرفت"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"برنامه یا سازمان شما اجازه نمیدهد این کنش انجام شود."</string>
</resources>
diff --git a/quickstep/res/values-fi/strings.xml b/quickstep/res/values-fi/strings.xml
index d49eb99..4f485a3 100644
--- a/quickstep/res/values-fi/strings.xml
+++ b/quickstep/res/values-fi/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Ennakoitu sovellus: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Jaa"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Kuvakaappaus"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Sovellus tai organisaatio ei salli tätä toimintoa"</string>
</resources>
diff --git a/quickstep/res/values-fr-rCA/strings.xml b/quickstep/res/values-fr-rCA/strings.xml
index 0370fa5..db3e2d5 100644
--- a/quickstep/res/values-fr-rCA/strings.xml
+++ b/quickstep/res/values-fr-rCA/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Application prédite : <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Partager"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Capture d\'écran"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"L\'application ou votre organisation n\'autorise pas cette action"</string>
</resources>
diff --git a/quickstep/res/values-fr/strings.xml b/quickstep/res/values-fr/strings.xml
index b0ea6bf..aa31197 100644
--- a/quickstep/res/values-fr/strings.xml
+++ b/quickstep/res/values-fr/strings.xml
@@ -34,16 +34,17 @@
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Applications prévues pour vous"</string>
<string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Accédez facilement à vos applications les plus utilisées"</string>
<string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel prédit les applications dont vous pourriez avoir besoin par la suite et les affiche sur votre écran d\'accueil. Appuyez ici pour configurer ce paramètre."</string>
- <string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Retrouvez vos applications suggérées dans la rangée du bas de votre écran d\'accueil"</string>
- <string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Accédez facilement aux applications dont vous vous servez le plus, directement depuis l\'écran d\'accueil. Ces suggestions peuvent varier en fonction de vos habitudes d\'utilisation. Les applications de la rangée du bas seront transférées sur votre écran d\'accueil."</string>
- <string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Accédez facilement aux applications dont vous vous servez le plus, directement depuis l\'écran d\'accueil. Ces suggestions peuvent varier en fonction de vos habitudes d\'utilisation. Les applications de la rangée du bas seront transférées dans un nouveau dossier."</string>
- <string name="hotseat_edu_accept" msgid="1611544083278999837">"Activer les applications suggérées"</string>
+ <string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Retrouvez vos applications favorites au bas de votre écran d\'accueil"</string>
+ <string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Les suggestions d\'applications permettent d\'afficher vos applications favorites au bas de votre écran d\'accueil. Elles s\'adaptent à vos habitudes d\'utilisation. Les icônes auparavant affichées au bas de l\'écran seront déplacées vers le haut."</string>
+ <string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Les suggestions d\'applications permettent d\'afficher vos applications favorites au bas de votre écran d\'accueil. Elles s\'adaptent à vos habitudes d\'utilisation. Les icônes auparavant affichées au bas de l\'écran seront placées dans un nouveau dossier."</string>
+ <string name="hotseat_edu_accept" msgid="1611544083278999837">"Activer les suggestions"</string>
<string name="hotseat_edu_dismiss" msgid="2781161822780201689">"Non, merci"</string>
<string name="hotseat_turn_off" msgid="7808360330229368470">"Paramètres"</string>
<string name="hotseat_auto_enrolled" msgid="522100018967146807">"Les applications dont vous vous servez le plus s\'affichent ici (ces suggestions peuvent varier en fonction de vos habitudes d\'utilisation)"</string>
- <string name="hotseat_tip_no_empty_slots" msgid="1325212677738179185">"Faites glisser des applications hors de la rangée du bas pour obtenir des applications suggérées"</string>
- <string name="hotseat_tip_gaps_filled" msgid="3035673010274223538">"Vos applications suggérées ont été ajoutées là où il y avait de la place"</string>
+ <string name="hotseat_tip_no_empty_slots" msgid="1325212677738179185">"Faites glisser des applications hors de la rangée du bas pour obtenir des suggestions d\'applications"</string>
+ <string name="hotseat_tip_gaps_filled" msgid="3035673010274223538">"Des suggestions d\'applications ont été ajoutées à un emplacement vide"</string>
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Application prédite : <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Partager"</string>
- <string name="action_screenshot" msgid="8171125848358142917">"Faire une capture d\'écran"</string>
+ <string name="action_screenshot" msgid="8171125848358142917">"Capture d\'écran"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Cette action n\'est pas autorisée par l\'application ou par votre organisation"</string>
</resources>
diff --git a/quickstep/res/values-gl/strings.xml b/quickstep/res/values-gl/strings.xml
index 488362f..00f2d52 100644
--- a/quickstep/res/values-gl/strings.xml
+++ b/quickstep/res/values-gl/strings.xml
@@ -45,5 +45,6 @@
<string name="hotseat_tip_gaps_filled" msgid="3035673010274223538">"Engadíronse suxestións de aplicacións ao espazo baleiro"</string>
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Aplicación predita: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Compartir"</string>
- <string name="action_screenshot" msgid="8171125848358142917">"Crear captura"</string>
+ <string name="action_screenshot" msgid="8171125848358142917">"Facer captura"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"A aplicación ou a túa organización non permite realizar esta acción"</string>
</resources>
diff --git a/quickstep/res/values-gu/strings.xml b/quickstep/res/values-gu/strings.xml
index 8a2f4da..3ea20a5 100644
--- a/quickstep/res/values-gu/strings.xml
+++ b/quickstep/res/values-gu/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"પૂર્વાનુમાનિત ઍપ: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"શેર કરો"</string>
<string name="action_screenshot" msgid="8171125848358142917">"સ્ક્રીનશૉટ"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ઍપ કે તમારી સંસ્થા દ્વારા આ ક્રિયા કરવાની મંજૂરી નથી"</string>
</resources>
diff --git a/quickstep/res/values-hi/strings.xml b/quickstep/res/values-hi/strings.xml
index 0f5a528..f695bf2 100644
--- a/quickstep/res/values-hi/strings.xml
+++ b/quickstep/res/values-hi/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"सुझाया गया ऐप्लिकेशन: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"शेयर करें"</string>
<string name="action_screenshot" msgid="8171125848358142917">"स्क्रीनशॉट"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ऐप्लिकेशन या आपका संगठन इस कार्रवाई की अनुमति नहीं देता"</string>
</resources>
diff --git a/quickstep/res/values-hr/strings.xml b/quickstep/res/values-hr/strings.xml
index fba88fb..dacb429 100644
--- a/quickstep/res/values-hr/strings.xml
+++ b/quickstep/res/values-hr/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predviđena aplikacija: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Udio"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snimka zaslona"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Aplikacija ili vaša organizacija ne dopuštaju ovu radnju"</string>
</resources>
diff --git a/quickstep/res/values-hu/strings.xml b/quickstep/res/values-hu/strings.xml
index 214c09b..50e0459 100644
--- a/quickstep/res/values-hu/strings.xml
+++ b/quickstep/res/values-hu/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Várható alkalmazás: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Megosztás"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Képernyőkép"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Az alkalmazás vagy az Ön szervezete nem engedélyezi ezt a műveletet"</string>
</resources>
diff --git a/quickstep/res/values-hy/strings.xml b/quickstep/res/values-hy/strings.xml
index 6ee036a..4105e67 100644
--- a/quickstep/res/values-hy/strings.xml
+++ b/quickstep/res/values-hy/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Առաջարկվող հավելված՝ <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Կիսվել"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Սքրինշոթ անել"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Այս գործողությունն արգելված է հավելվածի կամ ձեր կազմակերպության կողմից"</string>
</resources>
diff --git a/quickstep/res/values-in/strings.xml b/quickstep/res/values-in/strings.xml
index 621dc7d..7b6fcc9 100644
--- a/quickstep/res/values-in/strings.xml
+++ b/quickstep/res/values-in/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Aplikasi yang diprediksi: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Bagikan"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Tindakan ini tidak diizinkan oleh aplikasi atau organisasi Anda"</string>
</resources>
diff --git a/quickstep/res/values-is/strings.xml b/quickstep/res/values-is/strings.xml
index ebac2f9..01f6ecb 100644
--- a/quickstep/res/values-is/strings.xml
+++ b/quickstep/res/values-is/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Tillaga að forriti: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Deila"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skjámynd"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Forritið eða fyrirtækið leyfir ekki þessa aðgerð"</string>
</resources>
diff --git a/quickstep/res/values-it/strings.xml b/quickstep/res/values-it/strings.xml
index 9cb5d24..5609775 100644
--- a/quickstep/res/values-it/strings.xml
+++ b/quickstep/res/values-it/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"App prevista: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Condividi"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Questa azione non è consentita dall\'app o dall\'organizzazione"</string>
</resources>
diff --git a/quickstep/res/values-iw/strings.xml b/quickstep/res/values-iw/strings.xml
index 18de9bd..4196714 100644
--- a/quickstep/res/values-iw/strings.xml
+++ b/quickstep/res/values-iw/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"האפליקציות החזויות: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"שיתוף"</string>
<string name="action_screenshot" msgid="8171125848358142917">"צילום מסך"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"האפליקציה או הארגון שלך אינם מתירים את הפעולה הזאת"</string>
</resources>
diff --git a/quickstep/res/values-ja/strings.xml b/quickstep/res/values-ja/strings.xml
index 47001bf..af0173d 100644
--- a/quickstep/res/values-ja/strings.xml
+++ b/quickstep/res/values-ja/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"予測されたアプリ: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"共有"</string>
<string name="action_screenshot" msgid="8171125848358142917">"スクリーンショット"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"この操作はアプリまたは組織で許可されていません"</string>
</resources>
diff --git a/quickstep/res/values-ka/strings.xml b/quickstep/res/values-ka/strings.xml
index 37081db..74afc6d 100644
--- a/quickstep/res/values-ka/strings.xml
+++ b/quickstep/res/values-ka/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"ნაწინასწარმეტყველები აპი: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"გაზიარება"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ეკრანის ანაბეჭდი"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ეს მოქმედება არ არის დაშვებული აპის ან თქვენი ორგანიზაციის მიერ"</string>
</resources>
diff --git a/quickstep/res/values-kk/strings.xml b/quickstep/res/values-kk/strings.xml
index 7cd99df..61371fb 100644
--- a/quickstep/res/values-kk/strings.xml
+++ b/quickstep/res/values-kk/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Болжалды қолданба: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Бөлісу"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Скриншот"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Бұл әрекетке қолданба не ұйым рұқсат етпейді."</string>
</resources>
diff --git a/quickstep/res/values-km/strings.xml b/quickstep/res/values-km/strings.xml
index ff44986..11597b2 100644
--- a/quickstep/res/values-km/strings.xml
+++ b/quickstep/res/values-km/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"កម្មវិធីដែលបានព្យាករ៖ <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"ចែករំលែក"</string>
<string name="action_screenshot" msgid="8171125848358142917">"រូបថតអេក្រង់"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"សកម្មភាពនេះមិនត្រូវបានអនុញ្ញាតដោយកម្មវិធី ឬស្ថាប័នរបស់អ្នកទេ"</string>
</resources>
diff --git a/quickstep/res/values-kn/strings.xml b/quickstep/res/values-kn/strings.xml
index c00fd9a..997b8fd 100644
--- a/quickstep/res/values-kn/strings.xml
+++ b/quickstep/res/values-kn/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"ಶಿಫಾರಸು ಮಾಡಿದ ಆ್ಯಪ್: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ಸ್ಕ್ರೀನ್ಶಾಟ್"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ಆ್ಯಪ್ ಅಥವಾ ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಈ ಕ್ರಿಯೆಯನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
</resources>
diff --git a/quickstep/res/values-ko/strings.xml b/quickstep/res/values-ko/strings.xml
index 26510e9..ecc195f 100644
--- a/quickstep/res/values-ko/strings.xml
+++ b/quickstep/res/values-ko/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"예상 앱: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"공유"</string>
<string name="action_screenshot" msgid="8171125848358142917">"스크린샷"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"이 작업은 앱 또는 조직에서 허용되지 않습니다."</string>
</resources>
diff --git a/quickstep/res/values-ky/strings.xml b/quickstep/res/values-ky/strings.xml
index 953ac42..456abf6 100644
--- a/quickstep/res/values-ky/strings.xml
+++ b/quickstep/res/values-ky/strings.xml
@@ -32,11 +32,11 @@
<string name="title_app_suggestions" msgid="4185902664111965088">"Сунушталган колдонмолор"</string>
<string name="all_apps_label" msgid="8542784161730910663">"Бардык колдонмолор"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Божомолдонгон колдонмолоруңуз"</string>
- <string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Көп иштетилген колдонмолорго оңой кириңиз"</string>
- <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel кийинки керектелүүчү колдонмолорду Башкы экраныңызда божомолдоп, сунуштап турат. Жөндөө үчүн таптап коюңуз."</string>
+ <string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Көп колдонулган колдонмолорго оңой кириңиз"</string>
+ <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel жакын арада кайсы колдонмолорду колдоно турганыңызды божомолдоп, Башкы экраныңызда сунуштап турат. Жөндөө үчүн, таптап коюңуз."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Сунушталган колдонмолорду Башкы экрандын ылдый жагында жайгашкан тилкесинде көрүңүз"</string>
- <string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Көп иштетилген колдонмолорго Башкы экрандан оңой кириңиз. Сунуштар тартиптин негизинде өзгөрөт. Төмөндө жайгашкан тилкедеги колдонмолор Башкы экраныңызга көтөрүлөт."</string>
- <string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Көп иштетилген колдонмолорго Башкы экрандан оңой кириңиз. Сунуштар тартиптин негизинде өзгөрөт. Ылдый жакта жайгашкан тилкедеги колдонмолор жаңы папкага жылдырылат."</string>
+ <string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Көп колдонулган колдонмолорго Башкы экрандан оңой кириңиз. Сунуштар тартиптин негизинде өзгөрөт. Төмөндө жайгашкан тилкедеги колдонмолор Башкы экраныңызга көтөрүлөт."</string>
+ <string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"Көп колдонулган колдонмолорго Башкы экрандан оңой кириңиз. Сунуштар тартиптин негизинде өзгөрөт. Ылдый жакта жайгашкан тилкедеги колдонмолор жаңы папкага жылдырылат."</string>
<string name="hotseat_edu_accept" msgid="1611544083278999837">"Сунушталган колдонолорду алуу"</string>
<string name="hotseat_edu_dismiss" msgid="2781161822780201689">"Жок, рахмат"</string>
<string name="hotseat_turn_off" msgid="7808360330229368470">"Жөндөөлөр"</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Божомолдонгон колдонмо: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Бөлүшүү"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Скриншот"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Бул аракетти аткарууга колдонмо же ишканаңыз тыюу салган"</string>
</resources>
diff --git a/quickstep/res/values-lo/strings.xml b/quickstep/res/values-lo/strings.xml
index 7ebba4e..c041479 100644
--- a/quickstep/res/values-lo/strings.xml
+++ b/quickstep/res/values-lo/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"ແອັບທີ່ຄາດເດົາໄວ້: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"ແບ່ງປັນ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ຮູບໜ້າຈໍ"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ແອັບ ຫຼື ອົງການຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຄຳສັ່ງນີ້"</string>
</resources>
diff --git a/quickstep/res/values-lt/strings.xml b/quickstep/res/values-lt/strings.xml
index a5d4997..3ef6454 100644
--- a/quickstep/res/values-lt/strings.xml
+++ b/quickstep/res/values-lt/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Numatoma programa: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Bendrinti"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Ekrano kopija"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Jūsų organizacijoje arba naudojant šią programą neleidžiama atlikti šio veiksmo"</string>
</resources>
diff --git a/quickstep/res/values-lv/strings.xml b/quickstep/res/values-lv/strings.xml
index 8f747ab..65d7a67 100644
--- a/quickstep/res/values-lv/strings.xml
+++ b/quickstep/res/values-lv/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Prognozētā lietotne: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Kopīgot"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Izveidot ekrānuzņēmumu"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Lietotne vai jūsu organizācija neatļauj veikt šo darbību."</string>
</resources>
diff --git a/quickstep/res/values-mk/strings.xml b/quickstep/res/values-mk/strings.xml
index c085f9e..70fd5ea 100644
--- a/quickstep/res/values-mk/strings.xml
+++ b/quickstep/res/values-mk/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Предвидена апликација: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Сподели"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Слика од екранот"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Апликацијата или вашата организација не го дозволува дејствово"</string>
</resources>
diff --git a/quickstep/res/values-ml/strings.xml b/quickstep/res/values-ml/strings.xml
index 98bdaa2..c6f70ff 100644
--- a/quickstep/res/values-ml/strings.xml
+++ b/quickstep/res/values-ml/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"പ്രവചിച്ച ആപ്പ്: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"പങ്കിടുക"</string>
<string name="action_screenshot" msgid="8171125848358142917">"സ്ക്രീൻഷോട്ട്"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ഈ നടപടി എടുക്കുന്നത് ആപ്പോ നിങ്ങളുടെ സ്ഥാപനമോ അനുവദിക്കുന്നില്ല"</string>
</resources>
diff --git a/quickstep/res/values-mn/strings.xml b/quickstep/res/values-mn/strings.xml
index d3de66c..66402f2 100644
--- a/quickstep/res/values-mn/strings.xml
+++ b/quickstep/res/values-mn/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Таамаглаж буй апп: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Хуваалцах"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Дэлгэцийн агшин дарах"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Энэ үйлдлийг апп эсвэл танай байгууллага зөвшөөрдөггүй"</string>
</resources>
diff --git a/quickstep/res/values-mr/strings.xml b/quickstep/res/values-mr/strings.xml
index dbc5058..48fc4ee 100644
--- a/quickstep/res/values-mr/strings.xml
+++ b/quickstep/res/values-mr/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"पूर्वानुमान केलेले अॅप: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"शेअर करा"</string>
<string name="action_screenshot" msgid="8171125848358142917">"स्क्रीनशॉट"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"अॅप किंवा तुमच्या संस्थेद्वारे ही क्रिया करण्याची अनुमती नाही"</string>
</resources>
diff --git a/quickstep/res/values-ms/strings.xml b/quickstep/res/values-ms/strings.xml
index 68ad9b4..3fc66e0 100644
--- a/quickstep/res/values-ms/strings.xml
+++ b/quickstep/res/values-ms/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Apl yang diramalkan: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Kongsi"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Tangkapan skrin"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Tindakan ini tidak dibenarkan oleh apl atau organisasi anda"</string>
</resources>
diff --git a/quickstep/res/values-my/strings.xml b/quickstep/res/values-my/strings.xml
index 8c7a317..1922526 100644
--- a/quickstep/res/values-my/strings.xml
+++ b/quickstep/res/values-my/strings.xml
@@ -33,7 +33,7 @@
<string name="all_apps_label" msgid="8542784161730910663">"အက်ပ်အားလုံး"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"သင်၏ ခန့်မှန်းအက်ပ်များ"</string>
<string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"အသုံးအများဆုံးအက်ပ်များကို အလွယ်တကူ သုံးခြင်း"</string>
- <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel က သင်၏ \'ပင်မစာမျက်နှာ\' တွင် နောင်တွင်သင်လိုအပ်မည့် အက်ပ်များကို ကြိုတင်မှန်းဆပါသည်။ စနစ်ထည့်သွင်းရန် တို့ပါ။"</string>
+ <string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel က သင်၏ \'ပင်မစာမျက်နှာ\' တွင် သင်လိုအပ်မည့် အက်ပ်များကို ကြိုတင်မှန်းဆပါသည်။ စနစ်ထည့်သွင်းရန် တို့ပါ။"</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"သင်၏ \'ပင်မစာမျက်နှာ\' အောက်ခြေအတန်းတွင် အက်ပ်အကြံပြုချက်များ ရယူခြင်း"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"အသုံးအများဆုံးအက်ပ်များကို \'ပင်မစာမျက်နှာ\' တွင် အလွယ်တကူ သုံးနိုင်သည်။ သင်၏ ပုံမှန်အစီအစဉ်များပေါ် အခြေခံ၍ အကြံပြုချက်များ ပြောင်းလဲပါမည်။ အောက်ခြေအတန်းရှိ အက်ပ်များကို သင်၏ \'ပင်မစာမျက်နှာ\' သို့ရွှေ့လိုက်မည်။"</string>
<string name="hotseat_edu_message_migrate_alt" msgid="3042360119039646356">"အသုံးအများဆုံးအက်ပ်များကို \'ပင်မစာမျက်နှာ\' တွင် အလွယ်တကူ သုံးနိုင်သည်။ သင်၏ ပုံမှန်အစီအစဉ်များပေါ် အခြေခံ၍ အကြံပြုချက်များ ပြောင်းလဲပါမည်။ အောက်ခြေအတန်းရှိ အက်ပ်များကို ဖိုင်တွဲအသစ်သို့ ရွှေ့လိုက်မည်။"</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"ကြိုတင်မှန်းဆထားသော အက်ပ်− <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"မျှဝေရန်"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ဖန်သားပြင်ဓာတ်ပုံ"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ဤလုပ်ဆောင်ချက်ကို အက်ပ် သို့မဟုတ် သင်၏အဖွဲ့အစည်းက ခွင့်မပြုပါ"</string>
</resources>
diff --git a/quickstep/res/values-nb/strings.xml b/quickstep/res/values-nb/strings.xml
index 5eafdf5..68e5f2b 100644
--- a/quickstep/res/values-nb/strings.xml
+++ b/quickstep/res/values-nb/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Foreslått app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Del"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skjermdump"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Appen eller organisasjonen din tillater ikke denne handlingen"</string>
</resources>
diff --git a/quickstep/res/values-ne/strings.xml b/quickstep/res/values-ne/strings.xml
index ea387c9..4c6339e 100644
--- a/quickstep/res/values-ne/strings.xml
+++ b/quickstep/res/values-ne/strings.xml
@@ -23,7 +23,7 @@
<string name="recent_task_option_pin" msgid="7929860679018978258">"पिन गर्नुहोस्"</string>
<string name="recent_task_option_freeform" msgid="48863056265284071">"फ्रिफर्म"</string>
<string name="recents_empty_message" msgid="7040467240571714191">"हालसालैको कुनै पनि वस्तु छैन"</string>
- <string name="accessibility_app_usage_settings" msgid="6312864233673544149">"अनुप्रयोगको उपयोगका सेटिङहरू"</string>
+ <string name="accessibility_app_usage_settings" msgid="6312864233673544149">"एपको उपयोगका सेटिङहरू"</string>
<string name="recents_clear_all" msgid="5328176793634888831">"सबै खाली गर्नुहोस्"</string>
<string name="accessibility_recent_apps" msgid="4058661986695117371">"हालसालैका एपहरू"</string>
<string name="task_contents_description_with_remaining_time" msgid="4479688746574672685">"<xliff:g id="TASK_DESCRIPTION">%1$s</xliff:g>, <xliff:g id="REMAINING_TIME">%2$s</xliff:g>"</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"पूर्वानुमान गरिएको एप: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"सेयर गर्नुहोस्"</string>
<string name="action_screenshot" msgid="8171125848358142917">"स्क्रिनसट"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"यो एप वा तपाईंको सङ्गठनले यो कारबाही गर्ने अनुमति दिँदैन"</string>
</resources>
diff --git a/quickstep/res/values-nl/strings.xml b/quickstep/res/values-nl/strings.xml
index 3e2b937..9e079df 100644
--- a/quickstep/res/values-nl/strings.xml
+++ b/quickstep/res/values-nl/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Voorspelde app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Delen"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Deze actie wordt niet toegestaan door de app of je organisatie"</string>
</resources>
diff --git a/quickstep/res/values-or/strings.xml b/quickstep/res/values-or/strings.xml
index 4e565cf..f3637a1 100644
--- a/quickstep/res/values-or/strings.xml
+++ b/quickstep/res/values-or/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"ପୂର୍ବାନୁମାନ କରାଯାଇଥିବା ଆପ୍: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"ସେୟାର୍ କରନ୍ତୁ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ସ୍କ୍ରିନସଟ୍"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ଆପ୍ କିମ୍ବା ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ଏହି କାର୍ଯ୍ୟକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ"</string>
</resources>
diff --git a/quickstep/res/values-pa/strings.xml b/quickstep/res/values-pa/strings.xml
index c4d6fcc..20a2aa5 100644
--- a/quickstep/res/values-pa/strings.xml
+++ b/quickstep/res/values-pa/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"ਪੂਰਵ ਅਨੁਮਾਨਿਤ ਐਪ: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"ਸਾਂਝਾ ਕਰੋ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ਐਪ ਜਾਂ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਇਸ ਕਾਰਵਾਈ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"</string>
</resources>
diff --git a/quickstep/res/values-pl/strings.xml b/quickstep/res/values-pl/strings.xml
index dc2c618..bc87f6f 100644
--- a/quickstep/res/values-pl/strings.xml
+++ b/quickstep/res/values-pl/strings.xml
@@ -32,7 +32,7 @@
<string name="title_app_suggestions" msgid="4185902664111965088">"Sugestie aplikacji"</string>
<string name="all_apps_label" msgid="8542784161730910663">"Wszystkie aplikacje"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Przewidywane aplikacje"</string>
- <string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Korzystaj z najczęściej używanych przez siebie aplikacji w łatwy sposób"</string>
+ <string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Łatwy dostęp do najczęstszych aplikacji"</string>
<string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel przewiduje, których aplikacji będziesz potrzebować w następnej kolejności, bezpośrednio na ekranie głównym. Kliknij, by skonfigurować."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Otrzymuj sugestie aplikacji w dolnym wierszu ekranu głównego"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Korzystaj z najczęściej używanych aplikacji na ekranie głównym w łatwy sposób. Sugestie będą się zmieniać na podstawie Twojej rutyny. Aplikacje z dolnych wierszy będą się przenosić w górę do ekranu głównego."</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Przewidywana aplikacja: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Udostępnij"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Zrzut ekranu"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Nie możesz wykonać tego działania, bo nie zezwala na to aplikacja lub Twoja organizacja"</string>
</resources>
diff --git a/quickstep/res/values-pt-rPT/strings.xml b/quickstep/res/values-pt-rPT/strings.xml
index 36212d3..d5f298e 100644
--- a/quickstep/res/values-pt-rPT/strings.xml
+++ b/quickstep/res/values-pt-rPT/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"App prevista: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Partilhar"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Tirar captura de ecrã"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Esta ação não é permitida pela app ou a sua entidade."</string>
</resources>
diff --git a/quickstep/res/values-pt/strings.xml b/quickstep/res/values-pt/strings.xml
index 46c2b43..d1dacf2 100644
--- a/quickstep/res/values-pt/strings.xml
+++ b/quickstep/res/values-pt/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"App previsto: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Compartilhar"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Capturar tela"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Essa ação não é permitida pelo app ou pela organização"</string>
</resources>
diff --git a/quickstep/res/values-ro/strings.xml b/quickstep/res/values-ro/strings.xml
index 73d4dfb..58c2082 100644
--- a/quickstep/res/values-ro/strings.xml
+++ b/quickstep/res/values-ro/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Aplicația estimată: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Distribuiți"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Captură de ecran"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Această acțiune nu este permisă de aplicație sau de organizația dvs."</string>
</resources>
diff --git a/quickstep/res/values-ru/strings.xml b/quickstep/res/values-ru/strings.xml
index 072b929..35ce0fa 100644
--- a/quickstep/res/values-ru/strings.xml
+++ b/quickstep/res/values-ru/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Рекомендуемое приложение: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Поделиться"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Скриншот"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Это действие заблокировано приложением или организацией."</string>
</resources>
diff --git a/quickstep/res/values-si/strings.xml b/quickstep/res/values-si/strings.xml
index 7233f65..f6d1dea 100644
--- a/quickstep/res/values-si/strings.xml
+++ b/quickstep/res/values-si/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"පුරෝකථනය කළ යෙදුම: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"බෙදා ගන්න"</string>
<string name="action_screenshot" msgid="8171125848358142917">"තිර රුව"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"මෙම ක්රියාව යෙදුම හෝ ඔබේ සංවිධානය මගින් ඉඩ නොදේ"</string>
</resources>
diff --git a/quickstep/res/values-sk/strings.xml b/quickstep/res/values-sk/strings.xml
index add3b18..285d4d2 100644
--- a/quickstep/res/values-sk/strings.xml
+++ b/quickstep/res/values-sk/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predpovedaná aplikácia: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Zdieľať"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Snímka obrazovky"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Aplikácia alebo vaša organizácia túto akciu nepovoľuje"</string>
</resources>
diff --git a/quickstep/res/values-sl/strings.xml b/quickstep/res/values-sl/strings.xml
index dbeffd8..54c8c14 100644
--- a/quickstep/res/values-sl/strings.xml
+++ b/quickstep/res/values-sl/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Predvidena aplikacija: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Deli"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Posnetek zaslona"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Aplikacija ali vaša organizacija ne dovoljuje tega dejanja"</string>
</resources>
diff --git a/quickstep/res/values-sq/strings.xml b/quickstep/res/values-sq/strings.xml
index 5af4109..eaf2feb 100644
--- a/quickstep/res/values-sq/strings.xml
+++ b/quickstep/res/values-sq/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Aplikacioni i parashikuar: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Ndaj"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Pamja e ekranit"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Ky veprim nuk lejohet nga aplikacioni ose organizata jote"</string>
</resources>
diff --git a/quickstep/res/values-sr/strings.xml b/quickstep/res/values-sr/strings.xml
index 4babe3b..b031983 100644
--- a/quickstep/res/values-sr/strings.xml
+++ b/quickstep/res/values-sr/strings.xml
@@ -45,5 +45,6 @@
<string name="hotseat_tip_gaps_filled" msgid="3035673010274223538">"Предлози апликација се додају на празно место"</string>
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Предвиђамо апликацију: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Дели"</string>
- <string name="action_screenshot" msgid="8171125848358142917">"Направи снимак екрана"</string>
+ <string name="action_screenshot" msgid="8171125848358142917">"Снимак екрана"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Апликација или организација не дозвољавају ову радњу"</string>
</resources>
diff --git a/quickstep/res/values-sv/strings.xml b/quickstep/res/values-sv/strings.xml
index 2fde4c0..e1b9650 100644
--- a/quickstep/res/values-sv/strings.xml
+++ b/quickstep/res/values-sv/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Appförslag: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Dela"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skärmdump"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Appen eller organisationen tillåter inte den här åtgärden"</string>
</resources>
diff --git a/quickstep/res/values-sw/strings.xml b/quickstep/res/values-sw/strings.xml
index 7002e4f..1e1df6a 100644
--- a/quickstep/res/values-sw/strings.xml
+++ b/quickstep/res/values-sw/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Programu iliyotabiriwa: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Shiriki"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Picha ya skrini"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Kitendo hiki hakiruhusiwi na programu au shirika lako"</string>
</resources>
diff --git a/quickstep/res/values-ta/strings.xml b/quickstep/res/values-ta/strings.xml
index 21b65d3..aa3fbc5 100644
--- a/quickstep/res/values-ta/strings.xml
+++ b/quickstep/res/values-ta/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"கணித்த ஆப்ஸ்: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"பகிர்"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ஸ்கிரீன்ஷாட்"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ஆப்ஸோ உங்கள் நிறுவனமோ இந்த செயலை அனுமதிப்பதில்லை"</string>
</resources>
diff --git a/quickstep/res/values-te/strings.xml b/quickstep/res/values-te/strings.xml
index fe601ff..4af9937 100644
--- a/quickstep/res/values-te/strings.xml
+++ b/quickstep/res/values-te/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"సూచించబడిన యాప్: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"షేర్ చేయండి"</string>
<string name="action_screenshot" msgid="8171125848358142917">"స్క్రీన్షాట్"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ఈ చర్యను యాప్ గానీ, మీ సంస్థ గానీ అనుమతించవు"</string>
</resources>
diff --git a/quickstep/res/values-th/strings.xml b/quickstep/res/values-th/strings.xml
index 4fbb0bb..0c9c830 100644
--- a/quickstep/res/values-th/strings.xml
+++ b/quickstep/res/values-th/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"แอปที่คาดว่าจะใช้: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"แชร์"</string>
<string name="action_screenshot" msgid="8171125848358142917">"ภาพหน้าจอ"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"แอปหรือองค์กรของคุณไม่อนุญาตการดำเนินการนี้"</string>
</resources>
diff --git a/quickstep/res/values-tl/strings.xml b/quickstep/res/values-tl/strings.xml
index 4da6db1..89d8422 100644
--- a/quickstep/res/values-tl/strings.xml
+++ b/quickstep/res/values-tl/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Hinulaang app: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Ibahagi"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Screenshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Hindi pinapayagan ng app o ng iyong organisasyon ang pagkilos na ito"</string>
</resources>
diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml
index 7925097..35ffbfe 100644
--- a/quickstep/res/values-tr/strings.xml
+++ b/quickstep/res/values-tr/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Tahmin edilen uygulama: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Paylaş"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Ekran görüntüsü"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Uygulamanız veya kuruluşunuz bu işleme izin vermiyor"</string>
</resources>
diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml
index 5f32704..43b97f7 100644
--- a/quickstep/res/values-uk/strings.xml
+++ b/quickstep/res/values-uk/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Передбачений додаток: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Поділитися"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Знімок екрана"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Ця дія заборонена додатком або адміністратором організації"</string>
</resources>
diff --git a/quickstep/res/values-ur/strings.xml b/quickstep/res/values-ur/strings.xml
index 8d7c31b..7694212 100644
--- a/quickstep/res/values-ur/strings.xml
+++ b/quickstep/res/values-ur/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"پیشن گوئی کردہ ایپ: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"اشتراک کریں"</string>
<string name="action_screenshot" msgid="8171125848358142917">"اسکرین شاٹ"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"ایپ یا آپ کی تنظیم کی جانب سے اس کارروائی کی اجازت نہیں ہے"</string>
</resources>
diff --git a/quickstep/res/values-uz/strings.xml b/quickstep/res/values-uz/strings.xml
index 8b58836..b653399 100644
--- a/quickstep/res/values-uz/strings.xml
+++ b/quickstep/res/values-uz/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Taklif etilgan ilova: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Ulashish"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Skrinshot"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Bu amal ilova yoki tashkilotingiz tomonidan taqiqlangan"</string>
</resources>
diff --git a/quickstep/res/values-vi/strings.xml b/quickstep/res/values-vi/strings.xml
index 666c5d2..7f337ea 100644
--- a/quickstep/res/values-vi/strings.xml
+++ b/quickstep/res/values-vi/strings.xml
@@ -32,7 +32,7 @@
<string name="title_app_suggestions" msgid="4185902664111965088">"Các ứng dụng đề xuất"</string>
<string name="all_apps_label" msgid="8542784161730910663">"Tất cả ứng dụng"</string>
<string name="all_apps_prediction_tip" msgid="2672336544844936186">"Các ứng dụng gợi ý của bạn"</string>
- <string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Dễ dàng truy cập vào các ứng dụng bạn dùng thường xuyên nhất"</string>
+ <string name="hotseat_edu_prompt_title" msgid="5595771595144175752">"Dễ dàng truy cập các ứng dụng bạn hay dùng nhất"</string>
<string name="hotseat_edu_prompt_content" msgid="5709176001504149521">"Pixel dự đoán các ứng dụng bạn cần dùng tiếp theo ngay trên Màn hình chính. Hãy nhấn để thiết lập."</string>
<string name="hotseat_edu_title_migrate" msgid="306578144424489980">"Xem các ứng dụng đề xuất ở hàng dưới cùng trên Màn hình chính"</string>
<string name="hotseat_edu_message_migrate" msgid="8927179260533775320">"Ngay từ Màn hình chính, bạn có thể dễ dàng truy cập vào những ứng dụng mà mình dùng thường xuyên nhất. Các ứng dụng đề xuất sẽ thay đổi dựa trên thói quen của bạn. Các ứng dụng ở hàng dưới cùng sẽ chuyển lên phía trên của Màn hình chính."</string>
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Ứng dụng dự đoán: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Chia sẻ"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Chụp ảnh màn hình"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Ứng dụng hoặc tổ chức của bạn không cho phép thực hiện hành động này"</string>
</resources>
diff --git a/quickstep/res/values-zh-rCN/strings.xml b/quickstep/res/values-zh-rCN/strings.xml
index eedcacc..56f2f9e 100644
--- a/quickstep/res/values-zh-rCN/strings.xml
+++ b/quickstep/res/values-zh-rCN/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"预测的应用:<xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"分享"</string>
<string name="action_screenshot" msgid="8171125848358142917">"屏幕截图"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"该应用或您所在的单位不允许执行此操作"</string>
</resources>
diff --git a/quickstep/res/values-zh-rHK/strings.xml b/quickstep/res/values-zh-rHK/strings.xml
index 96736b9..ce0f6e2 100644
--- a/quickstep/res/values-zh-rHK/strings.xml
+++ b/quickstep/res/values-zh-rHK/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"預測應用程式:<xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"分享"</string>
<string name="action_screenshot" msgid="8171125848358142917">"螢幕截圖"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"應用程式或您的機構不允許此操作"</string>
</resources>
diff --git a/quickstep/res/values-zh-rTW/strings.xml b/quickstep/res/values-zh-rTW/strings.xml
index a7f564d..c93d913 100644
--- a/quickstep/res/values-zh-rTW/strings.xml
+++ b/quickstep/res/values-zh-rTW/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"預測的應用程式:<xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"分享"</string>
<string name="action_screenshot" msgid="8171125848358142917">"擷取螢幕畫面"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"這個應用程式或貴機構不允許執行這個動作"</string>
</resources>
diff --git a/quickstep/res/values-zu/strings.xml b/quickstep/res/values-zu/strings.xml
index e7cff60..637d02c 100644
--- a/quickstep/res/values-zu/strings.xml
+++ b/quickstep/res/values-zu/strings.xml
@@ -46,4 +46,5 @@
<string name="hotseat_prediction_content_description" msgid="4582028296938078419">"Uhlelo lokusebenza olubikezelwe: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="action_share" msgid="2648470652637092375">"Yabelana"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Isithombe-skrini"</string>
+ <string name="blocked_by_policy" msgid="2071401072261365546">"Lesi senzo asivunyelwanga uhlelo lokusebenza noma inhlangano yakho"</string>
</resources>
diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml
index f1ea6bb..9d70316 100644
--- a/quickstep/res/values/dimens.xml
+++ b/quickstep/res/values/dimens.xml
@@ -92,4 +92,10 @@
<dimen name="gesture_tutorial_subtitle_margin_start_end">16dp</dimen>
<dimen name="gesture_tutorial_feedback_margin_start_end">24dp</dimen>
<dimen name="gesture_tutorial_button_margin_start_end">18dp</dimen>
+
+ <!-- All Apps Education tutorial -->
+ <dimen name="swipe_edu_padding">8dp</dimen>
+ <dimen name="swipe_edu_circle_size">64dp</dimen>
+ <dimen name="swipe_edu_width">80dp</dimen>
+ <dimen name="swipe_edu_max_height">184dp</dimen>
</resources>
diff --git a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
index e718598..25c07f1 100644
--- a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
+++ b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
@@ -32,6 +32,7 @@
import static com.android.launcher3.anim.Interpolators.EXAGGERATED_EASE;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.config.FeatureFlags.KEYGUARD_ANIMATION;
+import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY;
import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS;
import static com.android.launcher3.statehandlers.DepthController.DEPTH;
import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION;
@@ -647,6 +648,9 @@
*/
@Override
public void registerRemoteAnimations() {
+ if (SEPARATE_RECENTS_ACTIVITY.get()) {
+ return;
+ }
if (hasControlRemoteAppTransitionPermission()) {
mWallpaperOpenRunner = createWallpaperOpenRunner(false /* fromUnlock */);
@@ -677,6 +681,9 @@
*/
@Override
public void unregisterRemoteAnimations() {
+ if (SEPARATE_RECENTS_ACTIVITY.get()) {
+ return;
+ }
if (hasControlRemoteAppTransitionPermission()) {
new ActivityCompat(mLauncher).unregisterRemoteAnimations();
diff --git a/quickstep/src/com/android/quickstep/AnimatedFloat.java b/quickstep/src/com/android/quickstep/AnimatedFloat.java
index c3b90e3..f7e8781 100644
--- a/quickstep/src/com/android/quickstep/AnimatedFloat.java
+++ b/quickstep/src/com/android/quickstep/AnimatedFloat.java
@@ -38,11 +38,17 @@
}
};
+ private static final Runnable NO_OP = () -> { };
+
private final Runnable mUpdateCallback;
private ObjectAnimator mValueAnimator;
public float value;
+ public AnimatedFloat() {
+ this(NO_OP);
+ }
+
public AnimatedFloat(Runnable updateCallback) {
mUpdateCallback = updateCallback;
}
diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
index 19932cb..9124925 100644
--- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
@@ -15,15 +15,24 @@
*/
package com.android.quickstep;
+import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
+import static com.android.launcher3.anim.Interpolators.ACCEL_2;
+import static com.android.launcher3.anim.Interpolators.INSTANT;
+import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS;
+import static com.android.quickstep.BaseSwipeUpHandlerV2.RECENTS_ATTACH_DURATION;
import static com.android.quickstep.SysUINavigationMode.getMode;
import static com.android.quickstep.SysUINavigationMode.hideShelfInTwoButtonLandscape;
import static com.android.quickstep.SysUINavigationMode.removeShelfFromOverview;
+import static com.android.quickstep.util.RecentsAtomicAnimationFactory.INDEX_RECENTS_FADE_ANIM;
+import static com.android.quickstep.util.RecentsAtomicAnimationFactory.INDEX_RECENTS_TRANSLATE_X_ANIM;
+import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_OFFSET;
+import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
+import android.animation.Animator;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.Resources;
-import android.graphics.PointF;
import android.graphics.Rect;
import android.os.Build;
import android.view.MotionEvent;
@@ -35,6 +44,7 @@
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
import com.android.launcher3.anim.AnimatorPlaybackController;
+import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.statemanager.BaseState;
import com.android.launcher3.statemanager.StatefulActivity;
@@ -58,11 +68,15 @@
public abstract class BaseActivityInterface<STATE_TYPE extends BaseState<STATE_TYPE>,
ACTIVITY_TYPE extends StatefulActivity<STATE_TYPE>> {
- private final PointF mTempPoint = new PointF();
public final boolean rotationSupportedByActivity;
- protected BaseActivityInterface(boolean rotationSupportedByActivity) {
+ private final STATE_TYPE mOverviewState, mBackgroundState;
+
+ protected BaseActivityInterface(boolean rotationSupportedByActivity,
+ STATE_TYPE overviewState, STATE_TYPE backgroundState) {
this.rotationSupportedByActivity = rotationSupportedByActivity;
+ mOverviewState = overviewState;
+ mBackgroundState = backgroundState;
}
public void onTransitionCancelled(boolean activityVisible) {
@@ -87,7 +101,7 @@
activity.getStateManager().reapplyState();
}
- public void onSwipeUpToHomeComplete() { }
+ public abstract void onSwipeUpToHomeComplete();
public abstract void onAssistantVisibilityChanged(float visibility);
@@ -133,9 +147,12 @@
public abstract boolean allowMinimizeSplitScreen();
public boolean deferStartingActivity(RecentsAnimationDeviceState deviceState, MotionEvent ev) {
- return true;
+ return deviceState.isInDeferredGestureRegion(ev);
}
+ public abstract void onExitOverview(RecentsAnimationDeviceState deviceState,
+ Runnable exitRunnable);
+
/**
* Updates the prediction state to the overview state.
*/
@@ -177,13 +194,6 @@
recentsView.switchToScreenshot(thumbnailData, runnable);
}
- public void setHintUserWillBeActive() {}
-
- /**
- * Sets the expected window size in multi-window mode
- */
- public abstract void getMultiWindowSize(Context context, DeviceProfile dp, PointF out);
-
/**
* Calculates the taskView size for the provided device configuration
*/
@@ -259,7 +269,7 @@
/**
* Calculates the modal taskView size for the provided device configuration
*/
- public void calculateModalTaskSize(Context context, DeviceProfile dp, Rect outRect) {
+ public final void calculateModalTaskSize(Context context, DeviceProfile dp, Rect outRect) {
float paddingHorz = context.getResources().getDimension(dp.isMultiWindowMode
? R.dimen.multi_window_task_card_horz_space
: dp.isVerticalBarLayout()
@@ -273,7 +283,7 @@
}
/** Gets the space that the overview actions will take, including margins. */
- public float getOverviewActionsHeight(Context context) {
+ public final float getOverviewActionsHeight(Context context) {
Resources res = context.getResources();
float actionsBottomMargin = 0;
if (getMode(context) == Mode.THREE_BUTTONS) {
@@ -290,8 +300,6 @@
public interface AnimationFactory {
- default void onRemoteAnimationReceived(RemoteAnimationTargets targets) { }
-
void createActivityInterface(long transitionLength);
default void onTransitionCancelled() { }
@@ -307,6 +315,97 @@
default void setRecentsAttachedToAppWindow(boolean attached, boolean animate) { }
}
+ class DefaultAnimationFactory implements AnimationFactory {
+
+ protected final ACTIVITY_TYPE mActivity;
+ private final STATE_TYPE mStartState;
+ private final Consumer<AnimatorPlaybackController> mCallback;
+
+ private boolean mIsAttachedToWindow;
+
+ DefaultAnimationFactory(Consumer<AnimatorPlaybackController> callback) {
+ mCallback = callback;
+
+ mActivity = getCreatedActivity();
+ mStartState = mActivity.getStateManager().getState();
+ }
+
+ protected ACTIVITY_TYPE initUI() {
+ STATE_TYPE resetState = mStartState;
+ if (mStartState.shouldDisableRestore()) {
+ resetState = mActivity.getStateManager().getRestState();
+ }
+ mActivity.getStateManager().setRestState(resetState);
+ mActivity.getStateManager().goToState(mBackgroundState, false);
+ return mActivity;
+ }
+
+ @Override
+ public void createActivityInterface(long transitionLength) {
+ PendingAnimation pa = new PendingAnimation(transitionLength * 2);
+ createBackgroundToOverviewAnim(mActivity, pa);
+ AnimatorPlaybackController controller = pa.createPlaybackController();
+ mActivity.getStateManager().setCurrentUserControlledAnimation(controller);
+
+ // Since we are changing the start position of the UI, reapply the state, at the end
+ controller.setEndAction(() -> mActivity.getStateManager().goToState(
+ controller.getInterpolatedProgress() > 0.5 ? mOverviewState : mBackgroundState,
+ false));
+ mCallback.accept(controller);
+
+ // Creating the activity controller animation sometimes reapplies the launcher state
+ // (because we set the animation as the current state animation), so we reapply the
+ // attached state here as well to ensure recents is shown/hidden appropriately.
+ if (SysUINavigationMode.getMode(mActivity) == Mode.NO_BUTTON) {
+ setRecentsAttachedToAppWindow(mIsAttachedToWindow, false);
+ }
+ }
+
+ @Override
+ public void onTransitionCancelled() {
+ mActivity.getStateManager().goToState(mStartState, false /* animate */);
+ }
+
+ @Override
+ public void setRecentsAttachedToAppWindow(boolean attached, boolean animate) {
+ if (mIsAttachedToWindow == attached && animate) {
+ return;
+ }
+ mIsAttachedToWindow = attached;
+ RecentsView recentsView = mActivity.getOverviewPanel();
+ Animator fadeAnim = mActivity.getStateManager()
+ .createStateElementAnimation(INDEX_RECENTS_FADE_ANIM, attached ? 1 : 0);
+
+ float fromTranslation = attached ? 1 : 0;
+ float toTranslation = attached ? 0 : 1;
+ mActivity.getStateManager()
+ .cancelStateElementAnimation(INDEX_RECENTS_TRANSLATE_X_ANIM);
+ if (!recentsView.isShown() && animate) {
+ ADJACENT_PAGE_OFFSET.set(recentsView, fromTranslation);
+ } else {
+ fromTranslation = ADJACENT_PAGE_OFFSET.get(recentsView);
+ }
+ if (!animate) {
+ ADJACENT_PAGE_OFFSET.set(recentsView, toTranslation);
+ } else {
+ mActivity.getStateManager().createStateElementAnimation(
+ INDEX_RECENTS_TRANSLATE_X_ANIM,
+ fromTranslation, toTranslation).start();
+ }
+
+ fadeAnim.setInterpolator(attached ? INSTANT : ACCEL_2);
+ fadeAnim.setDuration(animate ? RECENTS_ATTACH_DURATION : 0).start();
+ }
+
+ protected void createBackgroundToOverviewAnim(ACTIVITY_TYPE activity, PendingAnimation pa) {
+ // Scale down recents from being full screen to being in overview.
+ RecentsView recentsView = activity.getOverviewPanel();
+ pa.addFloat(recentsView, SCALE_PROPERTY,
+ recentsView.getMaxScaleForFullScreen(), 1, LINEAR);
+ pa.addFloat(recentsView, FULLSCREEN_PROGRESS, 1, 0, LINEAR);
+ }
+ }
+
protected static boolean showOverviewActions(Context context) {
return ENABLE_OVERVIEW_ACTIONS.get() && removeShelfFromOverview(context);
}
diff --git a/quickstep/src/com/android/quickstep/GestureState.java b/quickstep/src/com/android/quickstep/GestureState.java
index 016ffea..188072a 100644
--- a/quickstep/src/com/android/quickstep/GestureState.java
+++ b/quickstep/src/com/android/quickstep/GestureState.java
@@ -24,6 +24,7 @@
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
+import com.android.quickstep.util.ActiveGestureLog;
import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
@@ -47,7 +48,7 @@
NEW_TASK(false, ContainerType.APP, true),
- LAST_TASK(false, ContainerType.APP, false);
+ LAST_TASK(false, ContainerType.APP, true);
GestureEndTarget(boolean isLauncher, int containerType,
boolean recentsAttachedToAppWindow) {
@@ -278,6 +279,7 @@
public void setEndTarget(GestureEndTarget target, boolean isAtomic) {
mEndTarget = target;
mStateCallback.setState(STATE_END_TARGET_SET);
+ ActiveGestureLog.INSTANCE.addLog("setEndTarget " + mEndTarget);
if (isAtomic) {
mStateCallback.setState(STATE_END_TARGET_ANIMATION_FINISHED);
}
diff --git a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
index 0449d0c..07f838b 100644
--- a/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
+++ b/quickstep/src/com/android/quickstep/OverviewComponentObserver.java
@@ -20,6 +20,7 @@
import static android.content.Intent.ACTION_PACKAGE_CHANGED;
import static android.content.Intent.ACTION_PACKAGE_REMOVED;
+import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY;
import static com.android.launcher3.util.PackageManagerHelper.getPackageFilter;
import static com.android.systemui.shared.system.PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ASSIST_GESTURE_CONSTRAINED;
@@ -138,6 +139,13 @@
mActivityInterface.onAssistantVisibilityChanged(0.f);
}
+ if (SEPARATE_RECENTS_ACTIVITY.get()) {
+ mIsDefaultHome = false;
+ if (defaultHome == null) {
+ defaultHome = mMyHomeIntent.getComponent();
+ }
+ }
+
if (!mDeviceState.isHomeDisabled() && (defaultHome == null || mIsDefaultHome)) {
// User default home is same as out home app. Use Overview integrated in Launcher.
mActivityInterface = LauncherActivityInterface.INSTANCE;
diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
index a892ddc..1da7ccf 100644
--- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
+++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
@@ -45,7 +45,6 @@
import android.os.Process;
import android.os.UserManager;
import android.text.TextUtils;
-import android.util.Log;
import android.view.MotionEvent;
import androidx.annotation.BinderThread;
@@ -107,7 +106,7 @@
if (frozen) {
return;
}
- mOrientationTouchTransformer.enableMultipleRegions(false, mDefaultDisplay.getInfo());
+ enableMultipleRegions(false);
}
};
@@ -118,6 +117,13 @@
private final List<ComponentName> mGestureBlockedActivities;
private Runnable mOnDestroyFrozenTaskRunnable;
+ /**
+ * Set to true when user swipes to recents. In recents, we ignore the state of the recents
+ * task list being frozen or not to allow the user to keep interacting with nav bar rotation
+ * they went into recents with as opposed to defaulting to the default display rotation.
+ * TODO: (b/156984037) For when user rotates after entering overview
+ */
+ private boolean mInOverview;
public RecentsAnimationDeviceState(Context context) {
mContext = context;
@@ -508,7 +514,18 @@
mOrientationTouchTransformer.transform(event);
}
+ void onSwipeUpToOverview(BaseActivityInterface activityInterface) {
+ mInOverview = true;
+ activityInterface.onExitOverview(this, () -> {
+ mInOverview = false;
+ enableMultipleRegions(false);
+ });
+ }
+
void enableMultipleRegions(boolean enable) {
+ if (mInOverview) {
+ return;
+ }
mOrientationTouchTransformer.enableMultipleRegions(enable, mDefaultDisplay.getInfo());
UI_HELPER_EXECUTOR.execute(() -> {
int quickStepStartingRotation =
diff --git a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
index 8889560..69812b6 100644
--- a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
+++ b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
@@ -17,11 +17,14 @@
package com.android.quickstep.logging;
import static com.android.launcher3.logger.LauncherAtom.ContainerInfo.ContainerCase.FOLDER;
-import static com.android.launcher3.logger.LauncherAtom.ItemInfo.ItemCase.WIDGET;
+import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__BACKGROUND;
+import static com.android.systemui.shared.system.SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__HOME;
import android.content.Context;
import android.util.Log;
+import androidx.annotation.Nullable;
+
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.Utilities;
import com.android.launcher3.logger.LauncherAtom;
@@ -43,9 +46,9 @@
* This class calls StatsLog compile time generated methods.
*
* To see if the logs are properly sent to statsd, execute following command.
- * $ adb root && adb shell statsd
- * $ adb shell cmd stats print-logs
- * $ adb logcat | grep statsd OR $ adb logcat -b stats
+ * $ wwdebug (to turn on the logcat printout)
+ * $ wwlogcat (see logcat with grep filter on)
+ * $ statsd_testdrive (see how ww is writing the proto to statsd buffer)
*/
public class StatsLogCompatManager extends StatsLogManager {
@@ -54,10 +57,8 @@
private static Context sContext;
- private static final int DEFAULT_WIDGET_SPAN_XY = 1;
- private static final int DEFAULT_WORKSPACE_GRID_XY = -1;
- private static final int DEFAULT_PAGE_INDEX = -2;
private static final InstanceId DEFAULT_INSTANCE_ID = InstanceId.fakeInstanceId(0);
+ private static final int FOLDER_HIERARCHY_OFFSET = 100;
public StatsLogCompatManager(Context context) {
sContext = context;
@@ -83,19 +84,32 @@
* Logs an event and accompanying {@link ItemInfo}.
*/
@Override
- public void log(LauncherEvent event, LauncherAtom.ItemInfo itemInfo) {
- log(event, DEFAULT_INSTANCE_ID, itemInfo);
+ public void log(LauncherEvent event, @Nullable LauncherAtom.ItemInfo info) {
+ log(event, DEFAULT_INSTANCE_ID, info);
}
/**
* Logs an event and accompanying {@link InstanceId} and {@link LauncherAtom.ItemInfo}.
*/
@Override
- public void log(LauncherEvent event, InstanceId instanceId, LauncherAtom.ItemInfo itemInfo) {
+ public void log(LauncherEvent event, InstanceId instanceId,
+ @Nullable LauncherAtom.ItemInfo info) {
+ logInternal(event, instanceId, info,
+ LAUNCHER_UICHANGED__DST_STATE__HOME,
+ LAUNCHER_UICHANGED__DST_STATE__BACKGROUND);
+ }
+
+ /**
+ * Logs an event and accompanying {@link InstanceId} and {@link LauncherAtom.ItemInfo}.
+ */
+ private void logInternal(LauncherEvent event, InstanceId instanceId,
+ @Nullable LauncherAtom.ItemInfo info, int startState, int endState) {
+ info = info == null ? LauncherAtom.ItemInfo.getDefaultInstance() : info;
+
if (IS_VERBOSE) {
Log.d(TAG, instanceId == DEFAULT_INSTANCE_ID
- ? String.format("\n%s\n%s", event.name(), itemInfo)
- : String.format("%s(InstanceId:%s)\n%s", event.name(), instanceId, itemInfo));
+ ? String.format("\n%s\n%s", event.name(), info)
+ : String.format("%s(InstanceId:%s)\n%s", event.name(), instanceId, info));
}
if (!Utilities.ATLEAST_R) {
@@ -105,25 +119,25 @@
SysUiStatsLog.write(
SysUiStatsLog.LAUNCHER_EVENT,
SysUiStatsLog.LAUNCHER_UICHANGED__ACTION__DEFAULT_ACTION /* deprecated */,
- SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__HOME /* TODO */,
- SysUiStatsLog.LAUNCHER_UICHANGED__DST_STATE__BACKGROUND /* TODO */,
+ startState,
+ endState,
null /* launcher extensions, deprecated */,
false /* quickstep_enabled, deprecated */,
event.getId() /* event_id */,
- itemInfo.getItemCase().getNumber() /* target_id */,
+ info.getItemCase().getNumber() /* target_id */,
instanceId.getId() /* instance_id TODO */,
0 /* uid TODO */,
- getPackageName(itemInfo) /* package_name */,
- getComponentName(itemInfo) /* component_name */,
- getGridX(itemInfo, false) /* grid_x */,
- getGridY(itemInfo, false) /* grid_y */,
- getPageId(itemInfo, false) /* page_id */,
- getGridX(itemInfo, true) /* grid_x_parent */,
- getGridY(itemInfo, true) /* grid_y_parent */,
- getPageId(itemInfo, true) /* page_id_parent */,
- getHierarchy(itemInfo) /* hierarchy */,
- itemInfo.getIsWork() /* is_work_profile */,
- itemInfo.getRank() /* rank */,
+ getPackageName(info) /* package_name */,
+ getComponentName(info) /* component_name */,
+ getGridX(info, false) /* grid_x */,
+ getGridY(info, false) /* grid_y */,
+ getPageId(info, false) /* page_id */,
+ getGridX(info, true) /* grid_x_parent */,
+ getGridY(info, true) /* grid_y_parent */,
+ getPageId(info, true) /* page_id_parent */,
+ getHierarchy(info) /* hierarchy */,
+ info.getIsWork() /* is_work_profile */,
+ info.getRank() /* rank */,
0 /* fromState */,
0 /* toState */,
null /* edittext */,
@@ -164,144 +178,104 @@
}
}
- private static void writeSnapshot(LauncherAtom.ItemInfo itemInfo) {
+ private static void writeSnapshot(LauncherAtom.ItemInfo info) {
if (IS_VERBOSE) {
- Log.d(TAG, "\nwriteSnapshot:" + itemInfo);
+ Log.d(TAG, "\nwriteSnapshot:" + info);
}
if (!Utilities.ATLEAST_R) {
return;
}
SysUiStatsLog.write(SysUiStatsLog.LAUNCHER_SNAPSHOT,
0 /* event_id */,
- itemInfo.getItemCase().getNumber() /* target_id */,
+ info.getItemCase().getNumber() /* target_id */,
0 /* instance_id */,
0 /* uid */,
- getPackageName(itemInfo) /* package_name */,
- getComponentName(itemInfo) /* component_name */,
- getGridX(itemInfo, false) /* grid_x */,
- getGridY(itemInfo, false) /* grid_y */,
- getPageId(itemInfo, false) /* page_id */,
- getGridX(itemInfo, true) /* grid_x_parent */,
- getGridY(itemInfo, true) /* grid_y_parent */,
- getPageId(itemInfo, true) /* page_id_parent */,
- getHierarchy(itemInfo) /* hierarchy */,
- itemInfo.getIsWork() /* is_work_profile */,
+ getPackageName(info) /* package_name */,
+ getComponentName(info) /* component_name */,
+ getGridX(info, false) /* grid_x */,
+ getGridY(info, false) /* grid_y */,
+ getPageId(info, false) /* page_id */,
+ getGridX(info, true) /* grid_x_parent */,
+ getGridY(info, true) /* grid_y_parent */,
+ getPageId(info, true) /* page_id_parent */,
+ getHierarchy(info) /* hierarchy */,
+ info.getIsWork() /* is_work_profile */,
0 /* origin TODO */,
0 /* cardinality */,
- getSpanX(itemInfo),
- getSpanY(itemInfo));
+ info.getWidget().getSpanX(),
+ info.getWidget().getSpanY());
}
- private static int getSpanX(LauncherAtom.ItemInfo atomInfo) {
- if (atomInfo.getItemCase() != WIDGET) {
- return DEFAULT_WIDGET_SPAN_XY;
- }
- return atomInfo.getWidget().getSpanX();
- }
-
- private static int getSpanY(LauncherAtom.ItemInfo atomInfo) {
- if (atomInfo.getItemCase() != WIDGET) {
- return DEFAULT_WIDGET_SPAN_XY;
- }
- return atomInfo.getWidget().getSpanY();
- }
-
- private static String getPackageName(LauncherAtom.ItemInfo atomInfo) {
- switch (atomInfo.getItemCase()) {
+ private static String getPackageName(LauncherAtom.ItemInfo info) {
+ switch (info.getItemCase()) {
case APPLICATION:
- return atomInfo.getApplication().getPackageName();
+ return info.getApplication().getPackageName();
case SHORTCUT:
- return atomInfo.getShortcut().getShortcutName();
+ return info.getShortcut().getShortcutName();
case WIDGET:
- return atomInfo.getWidget().getPackageName();
+ return info.getWidget().getPackageName();
case TASK:
- return atomInfo.getTask().getPackageName();
+ return info.getTask().getPackageName();
default:
return null;
}
}
- private static String getComponentName(LauncherAtom.ItemInfo atomInfo) {
- switch (atomInfo.getItemCase()) {
+ private static String getComponentName(LauncherAtom.ItemInfo info) {
+ switch (info.getItemCase()) {
case APPLICATION:
- return atomInfo.getApplication().getComponentName();
+ return info.getApplication().getComponentName();
case SHORTCUT:
- return atomInfo.getShortcut().getShortcutName();
+ return info.getShortcut().getShortcutName();
case WIDGET:
- return atomInfo.getWidget().getComponentName();
+ return info.getWidget().getComponentName();
case TASK:
- return atomInfo.getTask().getComponentName();
+ return info.getTask().getComponentName();
default:
return null;
}
}
private static int getGridX(LauncherAtom.ItemInfo info, boolean parent) {
- switch (info.getContainerInfo().getContainerCase()) {
- case WORKSPACE:
- if (parent) {
- return DEFAULT_WORKSPACE_GRID_XY;
- } else {
- return info.getContainerInfo().getWorkspace().getGridX();
- }
- case FOLDER:
- if (parent) {
- switch (info.getContainerInfo().getFolder().getParentContainerCase()) {
- case WORKSPACE:
- return info.getContainerInfo().getFolder().getWorkspace().getGridX();
- default:
- return DEFAULT_WORKSPACE_GRID_XY;
- }
- } else {
- return info.getContainerInfo().getFolder().getGridX();
- }
- default:
- return DEFAULT_WORKSPACE_GRID_XY;
+ if (info.getContainerInfo().getContainerCase() == FOLDER) {
+ if (parent) {
+ return info.getContainerInfo().getFolder().getWorkspace().getGridX();
+ } else {
+ return info.getContainerInfo().getFolder().getGridX();
+ }
+ } else {
+ return info.getContainerInfo().getWorkspace().getGridX();
}
}
private static int getGridY(LauncherAtom.ItemInfo info, boolean parent) {
- switch (info.getContainerInfo().getContainerCase()) {
- case WORKSPACE:
- if (parent) {
- return DEFAULT_WORKSPACE_GRID_XY;
- } else {
- return info.getContainerInfo().getWorkspace().getGridY();
- }
- case FOLDER:
- if (parent) {
- switch (info.getContainerInfo().getFolder().getParentContainerCase()) {
- case WORKSPACE:
- return info.getContainerInfo().getFolder().getWorkspace().getGridY();
- default:
- return DEFAULT_WORKSPACE_GRID_XY;
- }
- } else {
- return info.getContainerInfo().getFolder().getGridY();
- }
- default:
- return DEFAULT_WORKSPACE_GRID_XY;
+ if (info.getContainerInfo().getContainerCase() == FOLDER) {
+ if (parent) {
+ return info.getContainerInfo().getFolder().getWorkspace().getGridY();
+ } else {
+ return info.getContainerInfo().getFolder().getGridY();
+ }
+ } else {
+ return info.getContainerInfo().getWorkspace().getGridY();
}
}
private static int getPageId(LauncherAtom.ItemInfo info, boolean parent) {
- switch (info.getContainerInfo().getContainerCase()) {
- case HOTSEAT:
- return info.getContainerInfo().getHotseat().getIndex();
- case WORKSPACE:
- return info.getContainerInfo().getWorkspace().getPageIndex();
- default:
- return DEFAULT_PAGE_INDEX;
+ if (info.getContainerInfo().getContainerCase() == FOLDER) {
+ if (parent) {
+ return info.getContainerInfo().getFolder().getWorkspace().getPageIndex();
+ } else {
+ return info.getContainerInfo().getFolder().getPageIndex();
+ }
+ } else {
+ return info.getContainerInfo().getWorkspace().getPageIndex();
}
}
- /**
- *
- */
private static int getHierarchy(LauncherAtom.ItemInfo info) {
- // TODO
if (info.getContainerInfo().getContainerCase() == FOLDER) {
- return info.getContainerInfo().getFolder().getParentContainerCase().getNumber() + 100;
+ return info.getContainerInfo().getFolder().getParentContainerCase().getNumber()
+ + FOLDER_HIERARCHY_OFFSET;
} else {
return info.getContainerInfo().getContainerCase().getNumber();
}
diff --git a/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java b/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java
index 2d8bba2..7e8222c 100644
--- a/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java
+++ b/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java
@@ -15,20 +15,27 @@
*/
package com.android.quickstep.util;
+import static com.android.launcher3.AbstractFloatingView.TYPE_ALL_APPS_EDU;
+import static com.android.launcher3.AbstractFloatingView.getOpenView;
import static com.android.launcher3.LauncherState.ALL_APPS;
+import static com.android.launcher3.LauncherState.HINT_STATE;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS;
+import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
import static com.android.quickstep.SysUINavigationMode.removeShelfFromOverview;
import android.content.SharedPreferences;
import com.android.launcher3.BaseQuickstepLauncher;
import com.android.launcher3.LauncherState;
+import com.android.launcher3.Workspace;
+import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.statemanager.StateManager.StateListener;
import com.android.launcher3.util.OnboardingPrefs;
import com.android.quickstep.SysUINavigationMode;
+import com.android.quickstep.views.AllAppsEduView;
/**
* Extends {@link OnboardingPrefs} for quickstep-specific onboarding data.
@@ -92,5 +99,51 @@
}
});
}
+
+ if (SysUINavigationMode.getMode(launcher) == NO_BUTTON
+ && FeatureFlags.ENABLE_ALL_APPS_EDU.get()) {
+ stateManager.addStateListener(new StateListener<LauncherState>() {
+ private static final int MAX_NUM_SWIPES_TO_TRIGGER_EDU = 3;
+
+ // Counts the number of consecutive swipes on nav bar without moving screens.
+ private int mCount = 0;
+ private boolean mShouldIncreaseCount;
+
+ @Override
+ public void onStateTransitionStart(LauncherState toState) {
+ if (toState == NORMAL) {
+ return;
+ }
+ mShouldIncreaseCount = toState == HINT_STATE
+ && launcher.getWorkspace().getNextPage() == Workspace.DEFAULT_PAGE;
+ }
+
+ @Override
+ public void onStateTransitionComplete(LauncherState finalState) {
+ if (finalState == NORMAL) {
+ if (mCount == MAX_NUM_SWIPES_TO_TRIGGER_EDU) {
+ if (getOpenView(mLauncher, TYPE_ALL_APPS_EDU) == null) {
+ AllAppsEduView.show(launcher);
+ }
+ mCount = 0;
+ }
+ return;
+ }
+
+ if (mShouldIncreaseCount && finalState == HINT_STATE) {
+ mCount++;
+ } else {
+ mCount = 0;
+ }
+
+ if (finalState == ALL_APPS) {
+ AllAppsEduView view = getOpenView(mLauncher, TYPE_ALL_APPS_EDU);
+ if (view != null) {
+ view.close(false);
+ }
+ }
+ }
+ });
+ }
}
}
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 2b743b2..4d508c6 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Deïnstalleer"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Programinligting"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installeer"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Moenie program voorstel nie"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"PIN-voorspelling"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installeer kortpaaie"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Laat \'n program toe om kortpaaie by te voeg sonder gebruikerinmenging."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lees Tuis-instellings en -kortpaaie"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Volgende"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Het dit"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Werkprofiel is onderbreek"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Werkprogramme kan nie vir jou kennisgewings stuur, jou battery gebruik of toegang tot jou ligging kry nie"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Werkprogramme kan nie vir jou kennisgewings stuur, jou battery gebruik of toegang tot jou ligging kry nie"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Werkprofiel is onderbreek. Werkprogramme kan nie vir jou kennisgewings stuur, jou battery gebruik of toegang tot jou ligging kry nie"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Onderbreek werkprogramme en kennisgewings"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Misluk: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 584d2d5..e68c70a 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"አራግፍ"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"የመተግበሪያ መረጃ"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ጫን"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"መተግበሪያውን አይጠቁሙ"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"የፒን ግምት"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"አቋራጮችን ይጭናል"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"መተግበሪያው ያለተጠቃሚ ጣልቃ ገብነት አቋራጭ እንዲያክል ያስችለዋል።"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"የመነሻ ቅንብሮች እና አቋራጮችን ያነባል"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"ቀጣይ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"ገባኝ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"የሥራ መገለጫ ባለበት ቆሟል"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"የስራ መተግበሪያዎች ማሳወቂያዎችን ወደ እርስዎ መላክ፣ ባትሪዎን መጠቀም ወይም አካባቢዎን መድረስ አይችሉም"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"የስራ መተግበሪያዎች ማሳወቂያዎችን ወደ እርስዎ መላክ፣ ባትሪዎን መጠቀም ወይም አካባቢዎን መድረስ አይችሉም"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"የሥራ መገለጫ ባለበት ቆሟል። የሥራ መተግበሪያዎች ማሳወቂያዎችን ወደ እርስዎ መላክ፣ ባትሪዎን መጠቀም ወይም አካባቢዎን መድረስ አይችሉም"</string>
<string name="work_switch_tip" msgid="808075064383839144">"የስራ መተግበሪያዎችን እና ማሳወቂያዎችን ባሉበት ያቁሙ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"አልተሳካም፦ <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 9821e68..fb1246e 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"إلغاء التثبيت"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"معلومات عن التطبيق"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"تثبيت"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"عدم اقتراح التطبيق"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"تثبيت التطبيق المتوقّع"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"تثبيت اختصارات"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"للسماح لتطبيق ما بإضافة اختصارات بدون تدخل المستخدم."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"قراءة إعدادات واختصارات الشاشة الرئيسية"</string>
@@ -142,7 +144,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"التالي"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"حسنًا"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"تم إيقاف الملف الشخصي للعمل مؤقتًا"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"لا يمكن لتطبيقات العمل إرسال إشعارات أو استخدام بطاريتك أو الوصول إلى موقعك الجغرافي."</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"لا يمكن لتطبيقات العمل إرسال إشعارات إليك أو استخدام بطاريتك أو الوصول إلى موقعك الجغرافي."</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"تم إيقاف الملف الشخصي للعمل مؤقتًا. لا يمكن لتطبيقات العمل إرسال إشعارات إليك أو استخدام بطاريتك أو الوصول إلى موقعك الجغرافي."</string>
<string name="work_switch_tip" msgid="808075064383839144">"إيقاف تطبيقات العمل وإشعاراتها مؤقتًا"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"تعذَّر <xliff:g id="WHAT">%1$s</xliff:g>."</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index b2fdc97..90898b0 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"আনইনষ্টল কৰক"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"এপ সম্পৰ্কীয় তথ্য"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ইনষ্টল কৰক"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"এপৰ পৰামৰ্শ নিদিব"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"পূৰ্বানুমান কৰা এপ্টো পিন কৰক"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"শ্বৰ্টকাট ইনষ্টল কৰিব পাৰে"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"ব্য়ৱহাৰকাৰীৰ হস্তক্ষেপ অবিহনেই কোনো এপক শ্বৰ্টকাটবোৰ যোগ কৰাৰ অনুমতি দিয়ে।"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"গৃহ ছেটিং আৰু শ্বৰ্টকাটবোৰ পঢ়িব পাৰে"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"পৰৱৰ্তী"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"বুজি পালোঁ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"কৰ্মস্থানৰ প্ৰ\'ফাইলটো পজ কৰা আছে"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"কৰ্মস্থানৰ এপ্সমূহে আপোনালৈ জাননীসমূহ পঠিয়াব, আপোনাৰ বেটাৰী ব্যৱহাৰ কৰিব অথবা আপোনাৰ অৱস্থান এক্সেছ কৰিব নোৱাৰে"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"কৰ্মস্থানৰ এপ্সমূহে আপোনালৈ জাননীসমূহ পঠিয়াব, আপোনাৰ বেটাৰী ব্যৱহাৰ কৰিব অথবা আপোনাৰ অৱস্থান এক্সেছ কৰিব নোৱাৰে"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"কৰ্মস্থানৰ প্ৰ\'ফাইলটো পজ কৰা আছে। কৰ্মস্থানৰ এপ্সমূহে আপোনালৈ জাননীসমূহ পঠিয়াব, আপোনাৰ বেটাৰী ব্যৱহাৰ কৰিব অথবা আপোনাৰ অৱস্থান এক্সেছ কৰিব নোৱাৰে"</string>
<string name="work_switch_tip" msgid="808075064383839144">"কর্মস্থানৰ এপ্সমূহ আৰু জাননীসমূহ পজ কৰক"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"বিফল: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 46e5e24..f14255f 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Sistemdən sil"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Tətbiq infosu"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Quraşdırın"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Tətbiq təklif etməyin"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Proqnozlaşdırılan tətbiqi bərkidin"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"qısayolları quraşdır"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Tətbiqə istifadəçi müdaxiləsi olmadan qısayolları əlavə etməyə icazə verir."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Əsas Səhifə ayarlarını və qısayolları oxuyun"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Növbəti"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Anladım"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"İş profilinə fasilə verilib"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"İş tətbiqləri sizə bildirişlər göndərə, batareyanızdan istifadə edə və ya məkanınıza daxil ola bilməz"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"İş tətbiqləri sizə bildirişlər göndərə, batareyanızdan istifadə edə və ya məkanınıza daxil ola bilməz"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"İş profilinə fasilə verilib. İş tətbiqləri sizə bildirişlər göndərə, batareyanızdan istifadə edə və ya məkanınıza daxil ola bilməz"</string>
<string name="work_switch_tip" msgid="808075064383839144">"İş tətbiqlərinə və bildirişlərə fasilə verin"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Alınmadı: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index b8a8818..7509b1f 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Deinstaliraj"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Inform. o aplikaciji"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instaliraj"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ne predlaži aplikaciju"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Zakači predviđanje"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instaliranje prečica"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Dozvoljava aplikaciji da dodaje prečice bez intervencije korisnika."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"čitanje podešavanja i prečica na početnom ekranu"</string>
@@ -139,7 +141,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Dalje"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Važi"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Poslovni profil je pauziran"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Poslovne aplikacije ne mogu da vam šalju obaveštenja, koriste bateriju ni pristupaju lokaciji"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Poslovne aplikacije ne mogu da vam šalju obaveštenja, koriste bateriju niti pristupaju lokaciji"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Poslovni profil je pauziran. Poslovne aplikacije ne mogu da vam šalju obaveštenja, koriste bateriju niti pristupaju lokaciji"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pauzirajte poslovne aplikacije i obaveštenja"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nije uspelo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 32e979c..1937642 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Дэінсталяваць"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Звесткі пра праграмы"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Усталяваць"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Не прапаноўваць праграму"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Замацаваць прапанаваную праграму"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"усталёўваць ярлыкі"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Дазваляе праграмам дадаваць ярлыкі без умяшання карыстальніка."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"счытваць налады і ярлыкі на Галоўнай старонцы"</string>
@@ -133,14 +135,14 @@
<string name="accessibility_close" msgid="2277148124685870734">"Закрыць"</string>
<string name="notification_dismissed" msgid="6002233469409822874">"Апавяшчэнне адхілена"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Асабістыя"</string>
- <string name="all_apps_work_tab" msgid="4884822796154055118">"Праца"</string>
+ <string name="all_apps_work_tab" msgid="4884822796154055118">"Працоўныя"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Працоўны профіль"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Асабістыя праграмы схаваны і паказваюцца адасоблена ад працоўных праграм"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Асабістыя даныя схаваны і паказваюцца адасоблена ад працоўных праграм"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Ваш IТ-адміністратар мае доступ да працоўных праграм і іх даных"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Далей"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Зразумела"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Працоўны профіль прыпынены"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Працоўныя праграмы не могуць адпраўляць вам апавяшчэнні, выкарыстоўваць акумулятар або атрымліваць доступ да вашага месцазнаходжання."</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Працоўныя праграмы не могуць адпраўляць вам апавяшчэнні, выкарыстоўваць акумулятар або атрымліваць доступ да вашага месцазнаходжання"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Працоўны профіль прыпынены. Працоўныя праграмы не могуць адпраўляць вам апавяшчэнні, выкарыстоўваць акумулятар або атрымліваць доступ да вашага месцазнаходжання"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Прыпыніць працоўныя праграмы і апавяшчэнні"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не ўдалося: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 0ee96c8..0edd78e 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Деинсталиране"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Инфо за прилож."</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Инсталиране"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Без предлагане на приложение"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Фиксиране на предвиждането"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"инсталиране на преки пътища"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Разрешава на приложението да добавя преки пътища без намеса на потребителя."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"четене на настройките и преките пътища в Начало"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Напред"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Разбрах"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Служебният потребителски профил е поставен на пауза"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Служебните приложения не могат да ви изпращат известия, да използват батерията или да осъществяват достъп до местоположението ви"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Служебните приложения не могат да ви изпращат известия, да използват батерията или да осъществяват достъп до местоположението ви"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Служебният потребителски профил е поставен на пауза. Служебните приложения не могат да ви изпращат известия, да използват батерията или да осъществяват достъп до местоположението ви"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Поставете на пауза служебните приложения и известия"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Неуспешно: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 1a118ad..00555ad 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"আনইনস্টল করুন"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"অ্যাপের তথ্য"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ইনস্টল করুন"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"অ্যাপ সাজেস্ট করবেন না"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"আপনার প্রয়োজন হতে পারে এমন অ্যাপ পিন করুন"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"শর্টকাটগুলি ইনস্টল করে"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"একটি অ্যাপ্লিকেশানকে ব্যবহারকারীর হস্তক্ষেপ ছাড়াই শর্টকাটগুলি যোগ করার অনুমতি দেয়৷"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"হোম সেটিংস এবং শর্টকাটগুলি পড়ে"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"পরের"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"বুঝেছি"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"অফিস প্রোফাইল বন্ধ করা আছে"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"অফিস অ্যাপ আপনাকে বিজ্ঞপ্তি পাঠাতে, আপনার ব্যাটারি ব্যবহার করতে বা লোকেশন অ্যাক্সেস করতে পারে না"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"অফিসের অ্যাপ আপনাকে বিজ্ঞপ্তি পাঠাতে, ব্যাটারি ব্যবহার করতে বা লোকেশন অ্যাক্সেস করতে পারবে না"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"অফিসের প্রোফাইল পজ করা আছে। অফিসের অ্যাপ আপনাকে বিজ্ঞপ্তি পাঠাতে, ব্যাটারি ব্যবহার করতে বা লোকেশন অ্যাক্সেস করতে পারবে না"</string>
<string name="work_switch_tip" msgid="808075064383839144">"অফিস অ্যাপ এবং বিজ্ঞপ্তি বন্ধ করুন"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"কাজটি করা যায়নি: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 43e7d03..4b83e7d 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Deinstaliraj"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Informacije o aplikaciji"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instaliraj"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Nemojte preporučiti aplikaciju"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Predviđanje PIN-a"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instaliraj prečice"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Dopušta aplikaciji dodavanje prečica bez posredovanja korisnika."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"čitaj postavke na početnom ekranu i prečice"</string>
@@ -139,7 +141,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Sljedeće"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Razumijem"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Radni profil je pauziran"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Poslovne aplikacije vam ne mogu slati obavještenja, koristiti bateriju ili pristupiti vašoj lokaciji"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Poslovne aplikacije vam ne mogu slati obavještenja, koristiti bateriju ili pristupiti vašoj lokaciji"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Radni profil je pauziran. Poslovne aplikacije vam ne mogu slati obavještenja, koristiti bateriju ili pristupiti vašoj lokaciji"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pauzirajte poslovne aplikacije i obavještenja"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nije uspjelo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index e63ffa4..fb9a226 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstal·la"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Informació de l\'aplicació"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instal·la"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"No suggereixis l\'aplicació"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fixa la predicció"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instal·la dreceres"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permet que una aplicació afegeixi dreceres sense la intervenció de l\'usuari."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"llegeix la configuració i les dreceres de la pantalla d\'inici"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Següent"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Entesos"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"El perfil de treball està en pausa"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Les aplicacions de treball no poden enviar-te notificacions, consumir bateria ni accedir a la teva ubicació"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Les aplicacions de treball no poden enviar-te notificacions, consumir bateria ni accedir a la teva ubicació"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"El perfil de treball està en pausa. Les aplicacions de treball no poden enviar-te notificacions, consumir bateria ni accedir a la teva ubicació"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Posa en pausa les notificacions i les aplicacions de treball"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Error: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index c5839da..e90299e 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Odinstalovat"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"O aplikaci"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Nainstalovat"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Aplikaci nenavrhovat"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Připnout předpověď"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalace zástupce"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Umožňuje aplikaci přidat zástupce bez zásahu uživatele."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"čtení nastavení a odkazů plochy"</string>
@@ -140,7 +142,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Další"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Rozumím"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Pracovní profil je pozastaven"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Pracovní aplikace vám nemohou zasílat oznámení, používat vaši baterii ani získat přístup k vaší poloze"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Pracovní aplikace vám nemohou zasílat oznámení, používat vaši baterii ani získat přístup k vaší poloze"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Pracovní profil je pozastaven. Pracovní aplikace vám nemohou zasílat oznámení, používat vaši baterii ani získat přístup k vaší poloze"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pozastavit pracovní aplikace a oznámení"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Selhalo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index d21a9c5..70f9cd6 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Afinstaller"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Appinfo"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installer"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Foreslå ikke en app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fastgør forslaget"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installere genveje"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Tillader, at en app tilføjer genveje uden brugerens indgriben."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"læs indstillinger og genveje for startskærmen"</string>
@@ -133,12 +135,12 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personlige"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Arbejde"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Arbejdsprofil"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Personoplysninger er adskilt og skjult fra arbejdsapps"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Personlige data er adskilt og skjult fra arbejdsapps"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Arbejdsapps og -data er synlige for din it-administrator"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Næste"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Arbejdsprofilen er sat på pause"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Arbejdsapps kan ikke sende dig notifikationer, bruge dit batteri eller få adgang til din placering"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Arbejdsapps kan ikke sende dig notifikationer, bruge dit batteri eller få adgang til din placering"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Arbejdsprofilen er sat på pause. Arbejdsapps kan ikke sende dig notifikationer, bruge dit batteri eller få adgang til din placering"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Sæt arbejdsapps og notifikationer på pause"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Mislykket: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index be5945f..f1f5f38 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Deinstallieren"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"App-Info"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installieren"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"App nicht empfehlen"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Vorgeschlagene App anpinnen"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"Verknüpfungen installieren"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Ermöglicht einer App das Hinzufügen von Verknüpfungen ohne Eingreifen des Nutzers"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Einstellungen und Verknüpfungen auf dem Startbildschirm lesen"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Weiter"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Arbeitsprofil pausiert"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Geschäftliche Apps können dir keine Benachrichtigungen senden, deinen Akku nicht nutzen und nicht auf deinen Standort zugreifen"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Geschäftliche Apps können dir keine Benachrichtigungen senden, deinen Akku nicht nutzen und nicht auf deinen Standort zugreifen"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Das Arbeitsprofil ist pausiert. Geschäftliche Apps können dir keine Benachrichtigungen senden, deinen Akku nicht beanspruchen und nicht auf deinen Standort zugreifen."</string>
<string name="work_switch_tip" msgid="808075064383839144">"Geschäftliche Apps und Benachrichtigungen pausieren"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Fehler: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index e3dc671..511558d 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Απεγκατάσταση"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Πληροφορίες εφαρμογής"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Εγκατάσταση"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Να μην προτείνεται η εφαρμογή"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Καρφίτσωμα πρόβλεψης"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"εγκατάσταση συντομεύσεων"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Επιτρέπει σε μια εφαρμογή την προσθήκη συντομεύσεων χωρίς την παρέμβαση του χρήστη."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ανάγνωση ρυθμίσεων και συντομεύσεων αρχικής οθόνης"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Επόμενο"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Το κατάλαβα"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Το προφίλ εργασίας έχει τεθεί σε παύση"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Οι εφαρμογές εργασίας δεν μπορούν να σας στέλνουν ειδοποιήσεις, να χρησιμοποιούν την μπαταρία ή να έχουν πρόσβαση στην τοποθεσία σας"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Οι εφαρμογές εργασίας δεν μπορούν να σας στέλνουν ειδοποιήσεις, να χρησιμοποιούν την μπαταρία ή να έχουν πρόσβαση στην τοποθεσία σας."</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Το προφίλ εργασίας έχει τεθεί σε παύση. Οι εφαρμογές εργασιών δεν μπορούν να σας στέλνουν ειδοποιήσεις, να χρησιμοποιούν την μπαταρία ή να έχουν πρόσβαση στην τοποθεσία σας."</string>
<string name="work_switch_tip" msgid="808075064383839144">"Παύση εφαρμογών εργασίας και ειδοποιήσεων"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Αποτυχία: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 6a2d292..794ed04 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Uninstall"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"App info"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Install"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Don\'t suggest app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Pin prediction"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"install shortcuts"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Allows an app to add shortcuts without user intervention."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"read Home settings and shortcuts"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Next"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Work profile is paused"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Work apps can\'t send you notifications, use your battery or access your location"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Work apps can\'t send you notifications, use your battery or access your location"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Work profile is paused. Work apps can\'t send you notifications, use your battery or access your location"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pause work apps and notifications"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 6a2d292..794ed04 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Uninstall"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"App info"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Install"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Don\'t suggest app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Pin prediction"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"install shortcuts"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Allows an app to add shortcuts without user intervention."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"read Home settings and shortcuts"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Next"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Work profile is paused"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Work apps can\'t send you notifications, use your battery or access your location"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Work apps can\'t send you notifications, use your battery or access your location"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Work profile is paused. Work apps can\'t send you notifications, use your battery or access your location"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pause work apps and notifications"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 6a2d292..794ed04 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Uninstall"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"App info"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Install"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Don\'t suggest app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Pin prediction"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"install shortcuts"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Allows an app to add shortcuts without user intervention."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"read Home settings and shortcuts"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Next"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Work profile is paused"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Work apps can\'t send you notifications, use your battery or access your location"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Work apps can\'t send you notifications, use your battery or access your location"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Work profile is paused. Work apps can\'t send you notifications, use your battery or access your location"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pause work apps and notifications"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 6a2d292..794ed04 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Uninstall"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"App info"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Install"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Don\'t suggest app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Pin prediction"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"install shortcuts"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Allows an app to add shortcuts without user intervention."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"read Home settings and shortcuts"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Next"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Work profile is paused"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Work apps can\'t send you notifications, use your battery or access your location"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Work apps can\'t send you notifications, use your battery or access your location"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Work profile is paused. Work apps can\'t send you notifications, use your battery or access your location"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pause work apps and notifications"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 45f6a54..0e2c6e4 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Uninstall"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"App info"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Install"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Don\'t suggest app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Pin Prediction"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"install shortcuts"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Allows an app to add shortcuts without user intervention."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"read Home settings and shortcuts"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Next"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Got it"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Work profile is paused"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Work apps cant send you notifications, use your battery, or access your location"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Work apps can\'t send you notifications, use your battery, or access your location"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Work profile is paused. Work apps cant send you notifications, use your battery, or access your location"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pause work apps and notifications"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 8583810..de3bea2 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstalar"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Información de app"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalar"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"No sugerir app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fijar predicción"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalar accesos directos"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permite que una aplicación agregue accesos directos sin que el usuario intervenga."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"leer configuración y accesos directos de la pantalla principal"</string>
@@ -131,14 +133,14 @@
<string name="accessibility_close" msgid="2277148124685870734">"Cerrar"</string>
<string name="notification_dismissed" msgid="6002233469409822874">"Se descartó la notificación"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personales"</string>
- <string name="all_apps_work_tab" msgid="4884822796154055118">"Laborales"</string>
+ <string name="all_apps_work_tab" msgid="4884822796154055118">"De trabajo"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Perfil de trabajo"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Los datos personales están separados y ocultos de las apps de trabajo"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"El administrador de TI puede ver las apps de trabajo y los datos"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Siguiente"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Entendido"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"El perfil de trabajo está en pausa"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Las apps de trabajo no pueden enviarte notificaciones, usar la batería ni acceder a tu ubicación"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Las apps de trabajo no pueden enviarte notificaciones, usar la batería ni acceder a tu ubicación"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"El perfil de trabajo está en pausa. Las apps de trabajo no pueden enviarte notificaciones, usar la batería ni acceder a tu ubicación"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pon en pausa las apps de trabajo y las notificaciones"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Error: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 56ae3bd..13df8b5 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstalar"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Información de la aplicación"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalar"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"No sugerir aplicación"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fijar predicción"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalar accesos directos"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permite que una aplicación añada accesos directos sin intervención del usuario."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"leer información de accesos directos y de ajustes de la pantalla de inicio"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Siguiente"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Listo"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"El perfil de trabajo está en pausa"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Las aplicaciones de trabajo no pueden enviarte notificaciones, gastar batería ni acceder a tu ubicación"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Las aplicaciones de trabajo no pueden enviarte notificaciones, gastar batería ni acceder a tu ubicación"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"El perfil de trabajo está en pausa. Las aplicaciones de trabajo no pueden enviarte notificaciones, consumir tu batería ni acceder a tu ubicación"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pausa apps y notificaciones de trabajo"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Se ha producido un error: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index cee265d..2deae35 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstalli"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Rakenduste teave"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installimine"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ära soovita rakendust"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Kinnita ennustus"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installi otseteed"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Võimaldab rakendusel lisada otseteid kasutaja sekkumiseta."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"avakuva seadete ja otseteede lugemine"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Järgmine"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Selge"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Tööprofiil on peatatud"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Töörakendused ei saa teile märguandeid saata, akut kasutada ega teie asukohale juurde pääseda"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Töörakendused ei saa teile märguandeid saata, akut kasutada ega teie asukohale juurde pääseda"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Tööprofiil on peatatud. Töörakendused ei saa teile märguandeid saata, akut kasutada ega teie asukohale juurde pääseda"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Peatage töörakendused ja märguanded"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nurjus: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index b530568..444e46a 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstalatu"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Aplikazioaren datuak"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalatu"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ez iradoki aplikazioa"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Ainguratu iragarpena"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"Instalatu lasterbideak"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Erabiltzaileak ezer egin gabe lasterbideak gehitzeko baimena ematen die aplikazioei."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Irakurri hasierako ezarpenak eta lasterbideak"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Hurrengoa"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Ados"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Laneko profila pausatuta dago"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Laneko aplikazioek ezin dute jakinarazpenik bidali, bateria erabili edo kokapena atzitu"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Laneko aplikazioek ezin dute jakinarazpenik bidali, bateria erabili edo kokapena atzitu"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Laneko profila pausatuta dago. Laneko aplikazioek ezin dute jakinarazpenik bidali, bateria erabili edo kokapena atzitu."</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pausatu laneko aplikazioak eta jakinarazpenak"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Huts egin du: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index af40f5c..e799262 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"حذف نصب"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"اطلاعات برنامه"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"نصب"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"برنامه پیشنهاد داده نشود"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"پین کردن پیشبینی"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"نصب میانبرها"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"به برنامه اجازه میدهد میانبرها را بدون دخالت کاربر اضافه کند."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"خواندن تنظیمات و میانبرهای صفحه اصلی"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"بعدی"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"متوجهام"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"نمایه کاری موقتاً متوقف شده است"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"برنامههای کاری نمیتوانند اعلان ارسال کنند، از باتری استفاده کنند، یا به مکانتان دسترسی داشته باشند"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"برنامههای کاری نمیتوانند اعلان ارسال کنند، از باتری استفاده کنند، یا به مکانتان دسترسی داشته باشند"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"نمایه کاری موقتاً متوقف شده است. برنامههای کاری نمیتوانند به شما اعلان ارسال کنند، از باتری استفاده کنند، یا به مکانتان دسترسی داشته باشند"</string>
<string name="work_switch_tip" msgid="808075064383839144">"توقف موقت برنامههای کاری و اعلانها"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ناموفق بود: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 83006a3..77c2837 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Poista asennus"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Sovelluksen tiedot"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Asenna"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Älä ehdota sovellusta"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Kiinnitä ennakoitu sovellus"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"asenna pikakuvakkeita"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Antaa sovelluksen lisätä pikakuvakkeita itsenäisesti ilman käyttäjän valintaa."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lue aloitusruudun asetuksia ja pikakuvakkeita"</string>
@@ -86,7 +88,7 @@
<string name="allow_rotation_desc" msgid="8662546029078692509">"Kun puhelinta kierretään"</string>
<string name="notification_dots_title" msgid="9062440428204120317">"Pistemerkit"</string>
<string name="notification_dots_desc_on" msgid="1679848116452218908">"Käytössä"</string>
- <string name="notification_dots_desc_off" msgid="1760796511504341095">"Ei käytössä"</string>
+ <string name="notification_dots_desc_off" msgid="1760796511504341095">"Ei päällä"</string>
<string name="title_missing_notification_access" msgid="7503287056163941064">"Ilmoituksien käyttöoikeus tarvitaan"</string>
<string name="msg_missing_notification_access" msgid="281113995110910548">"<xliff:g id="NAME">%1$s</xliff:g> tarvitsee ilmoitusten käyttöoikeuden, jotta pistemerkkejä voidaan näyttää."</string>
<string name="title_change_settings" msgid="1376365968844349552">"Muuta asetuksia"</string>
@@ -133,13 +135,13 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Henkilökohtaiset"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Työsovellukset"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Työprofiili"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Henkilökohtaiset tiedot ovat erillisiä ja piilotettu työsovelluksilta"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Henkilökohtainen data pidetään erillään, piilotettuna työsovelluksilta"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Työsovellukset ja ‑data näkyvät IT-järjestelmänvalvojalle"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Seuraava"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Selvä"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Työprofiilin käyttö on keskeytetty"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Työsovellukset eivät voi lähettää sinulle ilmoituksia tai käyttää akkuasi tai sijaintiasi"</string>
- <string name="work_apps_paused_content_description" msgid="7553586952985486433">"Työprofiilin käyttö on keskeytetty. Työsovellukset eivät voi lähettää sinulle ilmoituksia eivätkä käyttää akkuasi tai sijaintiasi"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Työsovellukset eivät voi lähettää sinulle ilmoituksia eivätkä käyttää akkuasi tai sijaintiasi"</string>
+ <string name="work_apps_paused_content_description" msgid="7553586952985486433">"Työprofiilin käyttö on keskeytetty. Työsovellukset eivät voi lähettää sinulle ilmoituksia eivätkä käyttää akkuasi tai paikantaa sijaintiasi"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Keskeytä työsovellukset ja ‑ilmoitukset"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Epäonnistui: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index e70bff5..4e9e838 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Désinstaller"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Détails de l\'application"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installer"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ne pas suggérer d\'application"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Prédiction d\'épinglage"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installer des raccourcis"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permet à une application d\'ajouter des raccourcis sans l\'intervention de l\'utilisateur."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lire les paramètres et les raccourcis de la page d\'accueil"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Suivant"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Le profil professionnel est interrompu"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Les applications professionnelles ne peuvent pas vous envoyer de notifications, utiliser la pile ni accéder à votre position"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Les applications professionnelles ne peuvent pas vous envoyer de notifications, utiliser la pile ni accéder à votre position"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Le profil professionnel est interrompu. Les applications professionnelles ne peuvent pas vous envoyer de notifications, utiliser la pile ni accéder à votre position"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Interrompre les applications et les notifications professionnelles"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Échec : <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index c8b2876..d1f94cf 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Désinstaller"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Infos sur l\'appli"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installer"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ne pas suggérer d\'application"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Épingler la prédiction"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installer des raccourcis"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permettre à une application d\'ajouter des raccourcis sans l\'intervention de l\'utilisateur"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lire les paramètres et les raccourcis de l\'écran d\'accueil"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Suivant"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Profil professionnel en pause"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Les applications professionnelles ne peuvent pas vous envoyer de notifications, utiliser votre batterie ni accéder à votre localisation"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Les applications professionnelles ne peuvent pas vous envoyer de notifications, utiliser votre batterie ni accéder à votre position"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Profil professionnel en pause. Les applications professionnelles ne peuvent pas vous envoyer de notifications, utiliser votre batterie ni accéder à votre localisation"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Mettre en pause vos applications et notifications professionnelles"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Échec : <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 867d93d..9920a00 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstalar"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Info. da aplicación"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalar"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Non suxerir aplicación"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fixar predición"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalar atallos"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permite a unha aplicación engadir atallos sen intervención do usuario."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ler a configuración e os atallos da pantalla de inicio"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Seguinte"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"De acordo"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"O perfil de traballo está en pausa"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"As aplicacións do traballo non poden enviarche notificacións, utilizar a batería nin acceder á túa localización"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"As aplicacións do traballo non poden enviarche notificacións, utilizar a batería nin acceder á túa localización"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"O perfil de traballo está en pausa. As aplicacións do traballo non poden enviarche notificacións, utilizar a batería nin acceder á túa localización"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pon en pausa as aplicacións e as notificacións do traballo"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Erro: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 0aa2f1b..4ed21bf 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"અનઇન્સ્ટોલ કરો"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ઍપ્લિકેશન માહિતી"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ઇન્સ્ટૉલ કરો"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ઍપ સૂચવશો નહીં"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"પૂર્વાનુમાનને પિન કરો"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"શોર્ટકટ્સ ઇન્સ્ટોલ કરો"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"એપ્લિકેશનને વપરાશકર્તા હસ્તક્ષેપ વગર શોર્ટકટ્સ ઉમેરવાની મંજૂરી આપે છે."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"હોમ સેટિંગ્સ અને શોર્ટકટ્સ વાંચો"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"આગળ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"સમજાઈ ગયું"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"ઑફિસની પ્રોફાઇલ થોભાવી છે"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"ઑફિસ માટેની ઍપ તમને નોટિફિકેશન મોકલી શકતી નથી, તમારી બૅટરી વાપરી શકતી નથી કે તમારું સ્થાન ઍક્સેસ કરી શકતી નથી"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"ઑફિસ માટેની ઍપ તમને નોટિફિકેશન મોકલી શકતી નથી, તમારી બૅટરી વાપરી શકતી નથી કે તમારું સ્થાન ઍક્સેસ કરી શકતી નથી"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"કાર્યાલયની પ્રોફાઇલ થોભાવી છે. ઑફિસ માટેની ઍપ તમને નોટિફિકેશન મોકલી શકતી નથી, તમારી બૅટરી વાપરી શકતી નથી કે તમારું સ્થાન ઍક્સેસ કરી શકતી નથી"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ઑફિસ માટેની ઍપ અને નોટિફિકેશન થોભાવો"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"નિષ્ફળ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 246f236..662fb82 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"अनइंस्टॉल करें"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ऐप्लिकेशन की जानकारी"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"इंस्टॉल करें"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ऐप्लिकेशन का सुझाव न दें"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"सुझाए गए ऐप्लिकेशन को पिन करें"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"शॉर्टकट इंस्टॉल करें"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"ऐप को उपयोगकर्ता के हस्तक्षेप के बिना शॉर्टकट जोड़ने देती है."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"होम पेज की सेटिंग और शॉर्टकट पढ़ें"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"आगे बढ़ें"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"ठीक है"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"वर्क प्रोफ़ाइल रोक दी गई है"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"ऑफ़िस के काम से जुड़े ऐप्लिकेशन आपको सूचनाएं नहीं भेज सकते. साथ ही, आपकी बैटरी का इस्तेमाल या आपकी जगह की जानकारी को ऐक्सेस नहीं कर सकते"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"ऑफ़िस के काम से जुड़े ऐप्लिकेशन आपको सूचनाएं नहीं भेज सकते. साथ ही, आपकी बैटरी का इस्तेमाल या आपकी जगह की जानकारी को ऐक्सेस नहीं कर सकते"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"वर्क प्रोफ़ाइल रोक दी गई है. ऑफ़िस के काम से जुड़े ऐप्लिकेशन आपको सूचनाएं नहीं भेज सकते. साथ ही, आपके डिवाइस की बैटरी का इस्तेमाल या आपकी जगह की जानकारी को ऐक्सेस नहीं कर सकते"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ऑफ़िस के काम से जुड़े ऐप्लिकेशन और सूचनाएं रोकें"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"पूरा नहीं हुआ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 3e5f102..cab649c 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Deinstaliraj"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Info o aplikaciji"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instaliraj"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ne predlaži aplikaciju"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Prikvači predviđenu aplikaciju"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instaliranje prečaca"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Aplikaciji omogućuje dodavanje prečaca bez intervencije korisnika."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"čitanje postavki početnog zaslona i prečaca"</string>
@@ -139,7 +141,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Dalje"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Shvaćam"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Poslovni profil je pauziran"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Poslovne aplikacije ne mogu vam slati obavijesti, upotrebljavati bateriju ili pristupiti vašoj lokaciji"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Poslovne aplikacije ne mogu vam slati obavijesti, trošiti bateriju ili pristupiti vašoj lokaciji"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Poslovni profil je pauziran. Poslovne aplikacije ne mogu vam slati obavijesti, trošiti bateriju ili pristupiti vašoj lokaciji"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pauzirajte poslovne aplikacije i obavijesti"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nije uspjelo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 46e9cba..b17c650 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Eltávolítás"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Alkalmazásinformáció"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Telepítés"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ne javasoljon alkalmazást"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Várható kitűzés"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"parancsikonok telepítése"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Lehetővé teszi egy alkalmazás számára, hogy felhasználói beavatkozás nélkül adjon hozzá parancsikonokat."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Főoldal beállításainak és parancsikonjainak beolvasása"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Tovább"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Értem"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"A munkaprofil használata szünetel"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"A munkahelyi alkalmazások nem küldhetnek értesítéseket, nem használhatják az akkumulátort, és nem férhetnek hozzá az Ön tartózkodási helyéhez"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"A munkahelyi alkalmazások nem küldhetnek értesítéseket, nem használhatják az akkumulátort, és nem férhetnek hozzá az Ön tartózkodási helyéhez"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"A munkaprofil használata szünetel. A munkahelyi alkalmazások nem küldhetnek értesítéseket, nem használhatják az akkumulátort, és nem férhetnek hozzá az Ön tartózkodási helyéhez"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Munkahelyi alkalmazások és értesítések szüneteltetése"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Sikertelen: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 923f504..dc7fbe3 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Հեռացնել"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Հավելվածի մասին"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Տեղադրել"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Չառաջարկել հավելված"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Ամրացնել առաջարկվող հավելվածը"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"տեղադրել դյուրանցումներ"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Ծրագրին թույլ է տալիս ավելացնել դյուրանցումներ՝ առանց օգտագործողի միջամտության:"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"կարդալ հիմնաէջի կարգավորումներն ու դյուրանցումները"</string>
@@ -133,12 +135,12 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Անձնական"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Աշխատանքային"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Աշխատանքային պրոֆիլ"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Անձնական հավելվածները թաքցված են և առանձնացված աշխատանքային հավելվածներից։"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Անձնական տվյալները թաքցված են և առանձնացված աշխատանքային հավելվածներից"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Աշխատանքային հավելվածներն ու դրանց տվյալները տեսանելի են ձեր ադմինիստրատորին"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Առաջ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Եղավ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Աշխատանքային պրոֆիլը դադարեցված է"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Աշխատանքային հավելվածները չեն կարող ձեզ ծանուցումներ ուղարկել և օգտագործել ձեր մարտկոցն ու տեղադրության տվյալները։"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Աշխատանքային հավելվածները չեն կարող ձեզ ծանուցումներ ուղարկել, օգտագործել ձեր մարտկոցը և ձեր տեղադրության մասին տվյալներ ստանալ։"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Աշխատանքային պրոֆիլը դադարեցված է։ Աշխատանքային հավելվածները չեն կարող ձեզ ծանուցումներ ուղարկել և օգտագործել ձեր մարտկոցն ու տեղադրության տվյալները։"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Դադարեցնել աշխատանքային հավելվածներն ու ծանուցումները"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Չհաջողվեց կատարել գործողությունը (<xliff:g id="WHAT">%1$s</xliff:g>)"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 2c0c889..81ea1c2 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Uninstal"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Info aplikasi"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instal"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Jangan sarankan aplikasi"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Pasang Pin pada Prediksi"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"memasang pintasan"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Mengizinkan aplikasi menambahkan pintasan tanpa campur tangan pengguna."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"membaca setelan dan pintasan layar Utama"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Berikutnya"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Oke"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Profil kerja dijeda"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Aplikasi kerja tidak dapat mengirimi Anda notifikasi, menggunakan baterai, atau mengakses lokasi Anda"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Aplikasi kerja tidak dapat mengirimi Anda notifikasi, menggunakan baterai, atau mengakses lokasi Anda"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Profil kerja dijeda. Aplikasi kerja tidak dapat mengirimi Anda notifikasi, menggunakan baterai, atau mengakses lokasi Anda"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Jeda notifikasi dan aplikasi kerja"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Gagal: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 8430ec2..4abdd88 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Fjarlægja"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Forritsupplýsingar"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Setja upp"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ekki stinga upp á forriti"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Festa tillögu"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"setja upp flýtileiðir"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Leyfir forriti að bæta við flýtileiðum án íhlutunar notanda."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lesa stillingar og flýtileiðir heimaskjás"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Áfram"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Ég skil"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Hlé gert á vinnusniði"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Vinnuforrit geta ekki sent þér tilkynningar, notað rafhlöðuorku eða fengið aðgang að staðsetningu þinni"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Vinnuforrit geta ekki sent þér tilkynningar, notað rafhlöðuorku eða fengið aðgang að staðsetningu þinni"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Hlé gert á vinnusniði. Vinnuforrit geta ekki sent þér tilkynningar, notað rafhlöðuorku eða fengið aðgang að staðsetningu þinni"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Gera hlé á vinnuforritum og tilkynningum"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Mistókst: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 8999506..9cc2f75 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Disinstalla"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Informazioni app"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installa"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Non suggerire app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Blocca previsione"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"aggiunta di scorciatoie"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Consente a un\'app di aggiungere scorciatoie automaticamente."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lettura di impostazioni e scorciatoie in Home"</string>
@@ -86,7 +88,7 @@
<string name="allow_rotation_desc" msgid="8662546029078692509">"Con il telefono ruotato"</string>
<string name="notification_dots_title" msgid="9062440428204120317">"Indicatori di notifica"</string>
<string name="notification_dots_desc_on" msgid="1679848116452218908">"On"</string>
- <string name="notification_dots_desc_off" msgid="1760796511504341095">"OFF"</string>
+ <string name="notification_dots_desc_off" msgid="1760796511504341095">"Off"</string>
<string name="title_missing_notification_access" msgid="7503287056163941064">"Accesso alle notifiche necessario"</string>
<string name="msg_missing_notification_access" msgid="281113995110910548">"Per mostrare gli indicatori di notifica, attiva le notifiche per l\'app <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="title_change_settings" msgid="1376365968844349552">"Modifica impostazioni"</string>
@@ -137,8 +139,8 @@
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"I dati e le app di lavoro sono visibili all\'amministratore IT"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Avanti"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
- <string name="work_apps_paused_title" msgid="2389865654362803723">"Profilo di lavoro sospeso"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Le app di lavoro non possono inviare notifiche, utilizzare la batteria o accedere alla tua posizione"</string>
+ <string name="work_apps_paused_title" msgid="2389865654362803723">"Profilo di lavoro in pausa"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Le app di lavoro non possono inviarti notifiche, usare la tua batteria o accedere alla tua posizione"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Profilo di lavoro in pausa. Le app di lavoro non possono inviarti notifiche, usare la tua batteria o accedere alla tua posizione"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Metti in pausa le app di lavoro e le relative notifiche"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Operazione non riuscita: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 788d382..fa6d7b7 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"להסרת התקנה"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"פרטי אפליקציה"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"התקנה"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"לא להציע את האפליקציה"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"הצמדת החיזוי"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"התקן קיצורי דרך"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"מאפשר לאפליקציה להוסיף קיצורי דרך ללא התערבות המשתמש."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"קרא הגדרות וקיצורי דרך של דף הבית"</string>
@@ -140,7 +142,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"הבא"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"הבנתי"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"פרופיל העבודה מושהה"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"אפליקציות לעבודה לא יכולות לשלוח לך התראות, להשתמש בסוללה או לגשת למיקום שלך"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"אפליקציות לעבודה לא יכולות לשלוח לך התראות, להשתמש בסוללה או לגשת למיקום שלך"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"פרופיל העבודה מושהה. אפליקציות לעבודה לא יכולות לשלוח לך התראות, להשתמש בסוללה או לגשת למיקום שלך"</string>
<string name="work_switch_tip" msgid="808075064383839144">"השהיה של התראות ואפליקציות לעבודה"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"הפעולה נכשלה: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 87bafc8..29056d6 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"アンインストール"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"アプリ情報"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"インストール"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"候補のアプリを表示しない"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"予測を固定"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"ショートカットのインストール"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"ユーザー操作なしでショートカットを追加することをアプリに許可します。"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ホームの設定とショートカットの読み取り"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"次へ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"仕事用プロファイルが一時停止しています"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"仕事用アプリは、通知の送信、電池の使用、位置情報へのアクセスを行えません"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"仕事用アプリは、通知の送信、電池の使用、位置情報へのアクセスを行えません"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"仕事用プロファイルが一時停止しています。仕事用アプリから通知の送信、電池の使用、位置情報へのアクセスを行えません"</string>
<string name="work_switch_tip" msgid="808075064383839144">"仕事用のアプリと通知を一時停止します"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"失敗: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index a0f8395..b1ede68 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"დეინსტალაცია"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"აპის შესახებ"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ინსტალაცია"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"არ შემომთავაზო აპი"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"ჩამაგრების პროგნოზირება"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"მალსახმობების დაყენება"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"აპისთვის მალსახმობების დამოუკიდებლად დამატების უფლების მიცემა."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"მთავარი ეკრანის პარამეტრებისა და მალსახმობების წაკითხვა"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"შემდეგ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"გასაგებია"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"სამსახურის პროფილი დაპაუზებულია"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"სამსახურის აპებს არ შეუძლია თქვენთვის შეტყობინებების გამოგზავნა, თქვენი ბატარეის გამოყენება, ან თქვენს მდებარეობაზე წვდომა"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"სამსახურის აპებს არ შეუძლია თქვენთვის შეტყობინებების გამოგზავნა, თქვენი ბატარეის გამოყენება, ან თქვენს მდებარეობაზე წვდომა"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"სამსახურის პროფილი დაპაუზებულია. სამსახურის აპებს არ შეუძლია თქვენთვის შეტყობინებების გამოგზავნა, თქვენი ბატარეის გამოყენება, ან თქვენს მდებარეობაზე წვდომა"</string>
<string name="work_switch_tip" msgid="808075064383839144">"სამსახურის აპებისა და შეტყობინებების დაპაუზება"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ვერ მოხერხდა: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 0b37ad9..0c0f3a6 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Жою"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Қолданба ақпараты"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Орнату"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Қолданбаны ұсынбау"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Болжанған қолданбаны бекіту"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"төте пернелерді орнату"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Қолданбаға пайдаланушының қатысуынсыз төте пернелерді қосу мүмкіндігін береді."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Негізгі экрандағы параметрлер мен төте пернелерді оқу"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Келесі"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Түсінікті"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Жұмыс профилі кідіртілді"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Жұмыс қолданбалары сізге хабарландырулар жібермейді, батареяңызды немесе геодерегіңізді пайдаланбайды."</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Жұмыс қолданбалары сізге хабарландырулар жібермейді, батареяңызды немесе геодерегіңізді пайдаланбайды."</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Жұмыс профилі уақытша тоқтатылды. Жұмыс қолданбалары сізге хабарландырулар жібермейді, батареяңызды немесе геодерегіңізді пайдаланбайды."</string>
<string name="work_switch_tip" msgid="808075064383839144">"Жұмыс қолданбалары мен хабарландыруларды кідірту"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Қате шықты: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 3b0bdce..7ddc233 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"លុបការដំឡើង"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ព័ត៌មានកម្មវិធី"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ដំឡើង"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"កុំណែនាំកម្មវិធី"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"ខ្ទាស់ការព្យាករ"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"ដំឡើងផ្លូវកាត់"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"អនុញ្ញាតឲ្យកម្មវិធីបន្ថែមផ្លូវកាត់ ដោយមិនចាំបាច់អំពើពីអ្នកប្រើ។"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"អានការកំណត់ និងផ្លូវកាត់អេក្រង់ដើម"</string>
@@ -127,7 +129,7 @@
<string name="widget_resized" msgid="9130327887929620">"ធាតុក្រាហ្វិកដែលបានប្តូរទំហំទៅទទឹងប្រវែង <xliff:g id="NUMBER_0">%1$s</xliff:g> កម្ពស់ប្រវែង <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
<string name="action_deep_shortcut" msgid="2864038805849372848">"ផ្លូវកាត់"</string>
<string name="shortcuts_menu_with_notifications_description" msgid="2676582286544232849">"ផ្លូវកាត់ និងការជូនដំណឹង"</string>
- <string name="action_dismiss_notification" msgid="5909461085055959187">"បដិសេធ"</string>
+ <string name="action_dismiss_notification" msgid="5909461085055959187">"ច្រានចោល"</string>
<string name="accessibility_close" msgid="2277148124685870734">"បិទ"</string>
<string name="notification_dismissed" msgid="6002233469409822874">"បានបដិសេធការជូនដំណឹង"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ផ្ទាល់ខ្លួន"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"បន្ទាប់"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"យល់ហើយ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"កម្រងព័ត៌មានការងារត្រូវបានផ្អាក"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"កម្មវិធីការងារមិនអាចផ្ញើការជូនដំណឹងទៅអ្នក ប្រើប្រាស់ថ្មរបស់អ្នក ឬចូលប្រើទីតាំងរបស់អ្នកបានទេ"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"កម្មវិធីការងារមិនអាចផ្ញើការជូនដំណឹងទៅអ្នក ប្រើប្រាស់ថ្មរបស់អ្នក ឬចូលប្រើទីតាំងរបស់អ្នកបានទេ"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"កម្រងព័ត៌មានការងារត្រូវបានផ្អាក។ កម្មវិធីការងារមិនអាចផ្ញើការជូនដំណឹងទៅអ្នក ប្រើប្រាស់ថ្មរបស់អ្នក ឬចូលប្រើទីតាំងរបស់អ្នកបានទេ"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ផ្អាកការជូនដំណឹង និងកម្មវិធីការងារ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"បានបរាជ័យ៖ <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 32c4b13..310e3a6 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"ಅನ್ಇನ್ಸ್ಟಾಲ್"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ಸ್ಥಾಪಿಸಿ"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ಆ್ಯಪ್ ಅನ್ನು ಸೂಚಿಸಬೇಡಿ"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"ಮುನ್ನೋಟ ಪಿನ್ ಮಾಡಿ"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"ಶಾರ್ಟ್ಕಟ್ಗಳನ್ನು ಸ್ಥಾಪಿಸಿ"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"ಬಳಕೆದಾರರ ಹಸ್ತಕ್ಷೇಪವಿಲ್ಲದೆ ಶಾರ್ಟ್ಕಟ್ಗಳನ್ನು ಸೇರಿಸಲು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ಮುಖಪುಟದ ಸೆಟ್ಟಿಂಗ್ಗಳು ಮತ್ತು ಶಾರ್ಟ್ಕಟ್ಗಳನ್ನು ಓದಿ"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"ಮುಂದೆ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"ಸರಿ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"ನಿಮಗೆ ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಲು, ನಿಮ್ಮ ಬ್ಯಾಟರಿ ಬಳಸಲು ಅಥವಾ ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಲು ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳಿಗೆ ಸಾಧ್ಯವಿಲ್ಲ"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳಿಗೆ ನಿಮಗೆ ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಲು, ನಿಮ್ಮ ಬ್ಯಾಟರಿಯನ್ನು ಬಳಸಲು ಅಥವಾ ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ. ನಿಮಗೆ ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಲು, ನಿಮ್ಮ ಬ್ಯಾಟರಿ ಬಳಸಲು ಅಥವಾ ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಲು ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳಿಗೆ ಸಾಧ್ಯವಿಲ್ಲ"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳನ್ನು ವಿರಾಮಗೊಳಿಸಿ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ವಿಫಲವಾಗಿದೆ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 0472e1c..0c09aa0 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"제거"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"앱 정보"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"설치"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"앱 추천 안함"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"예상 앱 고정"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"바로가기 설치"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"앱이 사용자의 작업 없이 바로가기를 추가할 수 있도록 합니다."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"홈 설정 및 바로가기 읽기"</string>
@@ -138,8 +140,8 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"다음"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"확인"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"직장 프로필이 일시중지됨"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"직장 앱에서 알림을 보내거나, 배터리를 사용하거나, 위치 정보에 액세스할 수 없습니다."</string>
- <string name="work_apps_paused_content_description" msgid="7553586952985486433">"직장 프로필이 일시중지되었습니다. 직장 앱에서 알림을 보내거나, 배터리를 사용하거나, 위치 정보에 액세스할 수 없습니다."</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"직장 앱에서 알림을 보내거나 배터리를 사용하거나 위치 정보에 액세스할 수 없습니다."</string>
+ <string name="work_apps_paused_content_description" msgid="7553586952985486433">"직장 프로필이 일시중지되었습니다. 직장 앱에서 알림을 보내거나 배터리를 사용하거나 위치 정보에 액세스할 수 없습니다."</string>
<string name="work_switch_tip" msgid="808075064383839144">"직장 앱 및 알림 일시중지"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"실패: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 47ef01d..e7998b9 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Чыгарып салуу"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Колдонмо тууралуу"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Орнотуу"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Колдонмо сунушталбасын"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Божомолдонгон колдонмону кадап коюу"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"тез чакырмаларды орнотуу"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Колдонмого колдонуучуга кайрылбастан тез чакырма кошууга уруксат берет."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Үйдүн тууралоолорун жана тез чакырмаларын окуу"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Кийинки"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Түшүндүм"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Жумуш профили тындырылган"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Жумуш колдонмолору билдирмелерди жөнөтүп, түзмөгүңүздүн батареясын керектеп же кайда жүргөнүңүздү көрө албайт"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Жумуш колдонмолору билдирмелерди жөнөтүп, түзмөгүңүздүн батареясын керектеп же кайда жүргөнүңүздү көрө албайт"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Жумуш профили тындырылган. Жумуш колдонмолору билдирмелерди жөнөтүп, түзмөгүңүздүн батареясын керектеп же кайда жүргөнүңүздү көрө албайт"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Жумуш колдонмолорун жана билдирмелерди тындыруу"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Аткарылган жок: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 9813c28..7c5d422 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"ຖອນການຕິດຕັ້ງ"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ຂໍ້ມູນແອັບ"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ຕິດຕັ້ງ"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ຢ່າແນະນຳແອັບ"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"ປັກໝຸດການຄາດເດົາ"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"ຕິດຕັ້ງທາງລັດ"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"ອະນຸຍາດໃຫ້ແອັບຯ ເພີ່ມທາງລັດໂດຍບໍ່ຕ້ອງຮັບການຢືນຢັນຈາກຜູ່ໃຊ້."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ອ່ານການຕັ້ງຄ່າໜ້າຫຼັກ ແລະທາງລັດ"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"ຕໍ່ໄປ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"ເຂົ້າໃຈແລ້ວ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"ຢຸດໂປຣໄຟລ໌ວຽກໄວ້ຊົ່ວຄາວແລ້ວ"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"ແອັບວຽກບໍ່ສາມາດສົ່ງການແຈ້ງເຕືອນໃຫ້ທ່ານ, ໃຊ້ແບັດເຕີຣີຂອງທ່ານ ຫຼື ເຂົ້າເຖິງສະຖານທີ່ຂອງທ່ານໄດ້"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"ແອັບວຽກບໍ່ສາມາດສົ່ງການແຈ້ງເຕືອນໃຫ້ທ່ານ, ໃຊ້ແບັດເຕີຣີຂອງທ່ານ ຫຼື ເຂົ້າເຖິງສະຖານທີ່ຂອງທ່ານໄດ້"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"ຢຸດໂປຣໄຟລ໌ບ່ອນເຮັດວຽກໄວ້ຊົ່ວຄາວແລ້ວ. ແອັບວຽກຈະບໍ່ສາມາດສົ່ງການແຈ້ງເຕືອນໃຫ້ທ່ານ, ໃຊ້ແບັດເຕີຣີຂອງທ່ານ ຫຼື ເຂົ້າເຖິງສະຖານທີ່ຂອງທ່ານໄດ້"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ຢຸດແອັບວຽກ ແລະ ການແຈ້ງເຕືອນໄວ້ຊົ່ວຄາວ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ບໍ່ສຳເລັດ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index a3344c0..63aa23b 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Pašalinti"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Programos inform."</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Įdiegti"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Nesiūlyti programos"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Prisegti numatymą"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"įdiegti sparčiuosius klavišus"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Programai leidžiama pridėti sparčiuosius klavišus be naudotojo įsikišimo."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"skaityti pagrindinio puslapio nustatymus ir sparčiuosius klavišus"</string>
@@ -140,7 +142,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Kitas"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Supratau"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Darbo profilis pristabdytas"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Darbo programos negali siųsti jums pranešimų, naudoti jūsų akumuliatoriaus ar pasiekti jūsų vietovės"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Darbo programos negali siųsti jums pranešimų, naudoti jūsų akumuliatoriaus ar pasiekti jūsų vietovės"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Darbo profilis pristabdytas. Darbo programos negali siųsti jums pranešimų, naudoti jūsų akumuliatoriaus ar pasiekti jūsų vietovės"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pristabdykite darbo programas ir pranešimus"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nepavyko: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index fa4f3bd..723c509 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Atinstalēt"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Par lietotni"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalēt"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Neieteikt lietotni"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Piespraust prognozēto lietotni"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalēt saīsnes"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Ļauj lietotnei pievienot saīsnes, nejautājot lietotājam."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lasīt sākuma ekrāna iestatījumus un saīsnes"</string>
@@ -139,7 +141,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Tālāk"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Labi"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Darba profila darbība ir pārtraukta"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Darba lietotnes nevar sūtīt jums paziņojumus, izmantot akumulatoru un piekļūt jūsu atrašanās vietai"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Darba lietotnes nevar nosūtīt jums paziņojumus, izmantot akumulatoru un piekļūt jūsu atrašanās vietai."</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Darba profila darbība ir pārtraukta. Darba lietotnes nevar sūtīt jums paziņojumus, izmantot akumulatoru un piekļūt jūsu atrašanās vietai."</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pārtraukt darba lietotņu darbību un paziņojumu sūtīšanu"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Neizdevās: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 6fe6970..792b213 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Деинсталирај"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Инф. за апликација"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Инсталирај"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Не предлагај апликација"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Закачи го предвидувањето"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"инсталирај кратенки"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Овозможува апликацијата да додава кратенки без интервенција на корисникот."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"чита поставки и кратенки на почетна страница"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Следно"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Сфатив"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Работниот профил е паузиран"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Работните апликации не можат да ви испраќаат известувања, да ја користат батеријата или да пристапуваат до вашата локација"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Работните апликации не можат да ви испраќаат известувања, да ја користат батеријата или да пристапуваат до вашата локација"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Работниот профил е паузиран. Работните апликации не можат да ви испраќаат известувања, да ја користат батеријата или да пристапуваат до вашата локација"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Паузирајте работни апликации и известувања"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не успеа: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index ef1a244..f7a67a4 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"അൺഇൻസ്റ്റാളുചെയ്യുക"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ആപ്പ് വിവരം"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ആപ്പ് നിർദ്ദേശിക്കരുത്"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"പിൻ പ്രവചനം"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"കുറുക്കുവഴികൾ ഇൻസ്റ്റാളുചെയ്യുക"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"ഉപയോക്തൃ ഇടപെടൽ ഇല്ലാതെ കുറുക്കുവഴികൾ ചേർക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ഹോം ക്രമീകരണങ്ങളും കുറുക്കുവഴികളും റീഡുചെയ്യുക"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"അടുത്തത്"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"മനസ്സിലായി"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"ഔദ്യോഗിക പ്രൊഫൈൽ തൽക്കാലം നിർത്തിയിരിക്കുന്നു"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"ഔദ്യോഗിക ആപ്പുകൾക്ക്, നിങ്ങൾക്ക് അറിയിപ്പുകൾ അയയ്ക്കാനോ നിങ്ങളുടെ ബാറ്ററി ഉപയോഗിക്കാനോ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാനോ കഴിയില്ല"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"നിങ്ങൾക്ക് അറിയിപ്പുകൾ അയയ്ക്കാനോ നിങ്ങളുടെ ബാറ്ററി ഉപയോഗിക്കാനോ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാനോ ഔദ്യോഗിക ആപ്പുകൾക്ക് കഴിയില്ല"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"ഔദ്യോഗിക പ്രൊഫൈൽ തൽക്കാലം നിർത്തിയിരിക്കുന്നു. നിങ്ങൾക്ക് അറിയിപ്പുകൾ അയയ്ക്കാനോ നിങ്ങളുടെ ബാറ്ററി ഉപയോഗിക്കാനോ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാനോ ഔദ്യോഗിക ആപ്പുകൾക്ക് കഴിയില്ല"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ഔദ്യോഗിക ആപ്പുകളും അറിയിപ്പുകളും താൽക്കാലികമായി നിർത്തുക"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"പരാജയപ്പെട്ടു: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 0dcd681..1e4e189 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Устгах"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Аппын мэдээлэл"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Суулгах"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Апп бүү санал болго"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Таамаглалыг бэхлэх"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"товчлол суулгах"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Апп нь хэрэглэгчийн оролцоогүйгээр товчлолыг нэмэж чадна"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Нүүрний тохиргоо болон товчлолыг унших"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Дараах"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Ойлголоо"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Ажлын профайлыг түр зогсоосон"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Ажлын апп танд мэдэгдэл илгээх боломжгүй тул батарейгаа ашиглах эсвэл байршилдаа хандана уу"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Ажлын аппууд танд мэдэгдэл илгээх, таны батарейг ашиглах эсвэл байршилд тань хандах боломжгүй"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Ажлын профайлыг түр зогсоосон. Ажлын апп танд мэдэгдэл илгээх боломжгүй тул батарейгаа ашиглах эсвэл байршилдаа хандана уу"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Ажлын апп болон мэдэгдлийг түр зогсоох"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Амжилтгүй болсон: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index f5b2862..7c8365a 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"अनइंस्टॉल करा"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"अॅप माहिती"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"इंस्टॉल करा"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ॲप सुचवू नका"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"पूर्वानुमान पिन करा"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"शॉर्टकट स्थापित करा"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"वापरकर्ता हस्तक्षेपाशिवाय शॉर्टकट जोडण्यास अॅप ला अनुमती देते."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"होम सेटिंग्ज आणि शॉर्टकट वाचा"</string>
@@ -88,7 +90,7 @@
<string name="notification_dots_desc_on" msgid="1679848116452218908">"सुरू"</string>
<string name="notification_dots_desc_off" msgid="1760796511504341095">"बंद"</string>
<string name="title_missing_notification_access" msgid="7503287056163941064">"सूचनांच्या अॅक्सेसची आवश्यकता आहे"</string>
- <string name="msg_missing_notification_access" msgid="281113995110910548">"सूचना बिंदू दाखवण्यासाठी, <xliff:g id="NAME">%1$s</xliff:g> साठी अॅप सूचना चालू करा"</string>
+ <string name="msg_missing_notification_access" msgid="281113995110910548">"सूचना बिंदू दाखवण्यासाठी, <xliff:g id="NAME">%1$s</xliff:g> साठी अॅप सूचना सुरू करा"</string>
<string name="title_change_settings" msgid="1376365968844349552">"सेटिंग्ज बदला"</string>
<string name="notification_dots_service_title" msgid="4284221181793592871">"सूचना बिंदू दाखवा"</string>
<string name="auto_add_shortcuts_label" msgid="3698776050751790653">"होम स्क्रीनवर ॲप आयकन जोडा"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"पुढील"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"समजले"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"ऑफिस प्रोफाइल थांबवली आहे"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"ऑफिस अॅप्स तुम्हाला सूचना पाठवू शकत नाहीत, तुमची बॅटरी वापरू शकत नाहीत किंवा तुमचे स्थान अॅक्सेस करू शकत नाहीत"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"कामासंबंधित अॅप्स तुम्हाला सूचना पाठवू शकत नाहीत, तुमची बॅटरी वापरू शकत नाहीत किंवा तुमचे स्थान अॅक्सेस करू शकत नाहीत"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"ऑफिस प्रोफाइल थांबवली आहे. ऑफिस अॅप्स तुम्हाला सूचना पाठवू शकत नाहीत, तुमची बॅटरी वापरू शकत नाहीत किंवा तुमचे स्थान अॅक्सेस करू शकत नाहीत"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ऑफिस अॅप्स आणि सूचना थांबवा"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"हे करता आले नाही: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 9927280..a82e02f 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Nyahpasang"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Maklumat apl"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Pasang"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Jangan cadangkan apl"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Sematkan Ramalan"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"pasang pintasan"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Membenarkan apl menambah pintasan tanpa campur tangan pengguna."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"baca tetapan dan pintasan Laman Utama"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Seterusnya"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Profil kerja dijeda"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Apl kerja tidak boleh menghantar pemberitahuan kepada anda, menggunakan bateri anda atau mengakses lokasi anda"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Apl kerja tidak boleh menghantar pemberitahuan kepada anda, menggunakan bateri anda atau mengakses lokasi anda"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Profil kerja dijeda. Apl kerja tidak boleh menghantar pemberitahuan kepada anda, menggunakan bateri anda atau mengakses lokasi anda"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Jeda apl kerja dan pemberitahuan"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Gagal: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 5a7e57f..cfe735d 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"ဖြုတ်ရန်"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"အက်ပ်အချက်အလက်များ"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ထည့်သွင်းရန်"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"အက်ပ်ကို အကြံမပြုပါနှင့်"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"ခန့်မှန်းချက်ကို ပင်ထိုးရန်"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"အတိုကောက်မှတ်သားမှုများအား ထည့်သွင်းခြင်း"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"အသုံးပြုသူ လုပ်ဆောင်မှုမရှိပဲ အပ်ပလီကေးရှင်းကို အတိုကောက်မှတ်သားမှုများ ပြုလုပ်ခွင့် ပေးခြင်း"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ပင်မမျက်နှာစာ အပြင်အဆင် နှင့် အတိုကောက်မှတ်သားမှုများအား ဖတ်ခြင်း"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"ရှေ့သို့"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Ok"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"အလုပ်ပရိုဖိုင် ခဏရပ်ထားသည်"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"အလုပ်သုံးအက်ပ်များက အကြောင်းကြားချက်များ ပို့ခြင်း၊ သင့်ဘက်ထရီ သုံးခြင်း (သို့) သင့်တည်နေရာ သုံးခြင်းတို့ ပြုလုပ်နိုင်သည်"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"အလုပ်သုံးအက်ပ်များက အကြောင်းကြားချက်များ ပို့ခြင်း၊ သင့်ဘက်ထရီ သုံးခြင်း (သို့) သင့်တည်နေရာ သုံးခြင်းတို့ မပြုလုပ်နိုင်ပါ"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"အလုပ်ပရိုဖိုင် ခဏရပ်ထားသည်။ အလုပ်သုံးအက်ပ်များက အကြောင်းကြားချက်များ ပို့ခြင်း၊ သင့်ဘက်ထရီ သုံးခြင်း (သို့) သင့်တည်နေရာ သုံးခြင်းတို့ မပြုလုပ်နိုင်ပါ"</string>
<string name="work_switch_tip" msgid="808075064383839144">"အလုပ်သုံးအက်ပ်နှင့် အကြောင်းကြားချက်များ ခဏရပ်ရန်"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"မအောင်မြင်ပါ− <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 628263d..e9449f4 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Avinstaller"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Info om appen"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installer"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ikke foreslå appen"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fest forslaget"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installere snarveier"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Gir apper tillatelse til å legge til snarveier uten innblanding fra brukeren."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lese startsideinnstillinger og -snarveier"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Neste"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Greit"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Jobbprofilen er satt på pause"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Jobbapper kan ikke sende deg varsler, bruke batteriet eller få tilgang til posisjonen din"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Jobbapper kan ikke sende deg varsler, bruke batteriet eller få tilgang til posisjonen din"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Jobbprofilen er satt på pause. Jobbapper kan ikke sende deg varsler, bruke batteriet eller få tilgang til posisjonen din"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Sett jobbapper og -varsler på pause"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Mislyktes: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 4667ede..33dc1f0 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -44,14 +44,16 @@
<string name="long_accessible_way_to_add_shortcut" msgid="3327314059613154633">"कुनै सर्टकट छनौट गर्न वा रोजेका कारबाहीहरू प्रयोग गर्न डबल ट्याप गरेर छोइराख्नुहोस्।"</string>
<string name="out_of_space" msgid="4691004494942118364">"यो गृह स्क्रिनमा कुनै थप ठाउँ छैन।"</string>
<string name="hotseat_out_of_space" msgid="7448809638125333693">"मन पर्ने ट्रे अब कुनै ठाँउ छैन"</string>
- <string name="all_apps_button_label" msgid="8130441508702294465">"अनुप्रयोगको सूची"</string>
+ <string name="all_apps_button_label" msgid="8130441508702294465">"एपको सूची"</string>
<string name="all_apps_button_personal_label" msgid="1315764287305224468">"व्यक्तिगत अनुप्रयोगहरूको सूची"</string>
<string name="all_apps_button_work_label" msgid="7270707118948892488">"कार्यसम्बन्धी अनुप्रयोगहरूको सूची"</string>
<string name="all_apps_home_button_label" msgid="252062713717058851">"गृह"</string>
<string name="remove_drop_target_label" msgid="7812859488053230776">"हटाउनुहोस्"</string>
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"विस्थापित गर्नुहोस्"</string>
- <string name="app_info_drop_target_label" msgid="692894985365717661">"अनुप्रयोगको जानकारी"</string>
+ <string name="app_info_drop_target_label" msgid="692894985365717661">"एपको जानकारी"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"स्थापना गर्नुहोस्"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"यो एप सिफारिस नगरियोस्"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"सिफारिस गरिएको एप पिन गर्नुहोस्"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"सर्टकट स्थापना गर्नेहोस्"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"प्रयोगकर्ताको हस्तक्षेप बिना एउटा एपलाई सर्टकटमा थप्नको लागि अनुमति दिनुहोस्।"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"गृह सेटिङहरू र सर्टकटहरू पढ्नुहोस्"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"अर्को"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"बुझेँ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"कार्यालयको प्रोफाइल अस्थायी रूपमा रोक्का गरिएको छ"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको ब्याट्री प्रयोग गर्न वा तपाईंको स्थानसम्बन्धी जानकारीमाथि पहुँच राख्न सक्दैनन्"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको यन्त्रको ब्याट्री प्रयोग गर्न वा तपाईंको स्थान हेर्न सक्दैनन्"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"कार्यालयको प्रोफाइल अस्थायी रूपमा रोक्का गरिएको छ। कामसम्बन्धी एपहरूले तपाईंलाई सूचना पठाउन, तपाईंको यन्त्रको ब्याट्री प्रयोग गर्न वा तपाईंको स्थान हेर्न सक्दैनन्"</string>
<string name="work_switch_tip" msgid="808075064383839144">"कामसम्बन्धी एप र सूचनाहरू अस्थायी रूपमा रोक्का गर्नुहोस्"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"कार्य पूरा गर्न सकिएन: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index bc73fd1..17a6640 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Deïnstalleren"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"App-info"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installeren"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Geen app voorstellen"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Vastzetvoorspelling"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"Snelle links instellen"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Een app toestaan snelkoppelingen toe te voegen zonder tussenkomst van de gebruiker."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"instellingen en snelkoppelingen op startscherm lezen"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Volgende"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Werkprofiel is onderbroken"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Werk-apps kunnen je geen meldingen sturen, niet je batterij gebruiken en geen toegang krijgen tot je locatie"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Werk-apps kunnen je geen meldingen sturen, niet je batterij gebruiken en geen toegang krijgen tot je locatie"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Werkprofiel is onderbroken. Werk-apps kunnen je geen meldingen sturen, niet je batterij gebruiken en geen toegang krijgen tot je locatie"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Werk-apps en -meldingen onderbreken"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Mislukt: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 87a1948..2e8b25b 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"ଅନଇନଷ୍ଟଲ୍ କରନ୍ତୁ"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ଆପ୍ ସୂଚନା"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ଇନଷ୍ଟଲ୍ କରନ୍ତୁ"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ଆପ୍ ସୁପାରିଶ କରନ୍ତୁ ନାହିଁ"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"ପୂର୍ବାନୁମାନକୁ ପିନ୍ କରନ୍ତୁ"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"ଶର୍ଟକଟ୍ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"ୟୁଜରଙ୍କ ବିନା ହସ୍ତକ୍ଷେପରେ ଶର୍ଟକଟ୍ ଯୋଡ଼ିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ହୋମ୍ ସେଟିଙ୍ଗ ଏବଂ ଶର୍ଟକଟ୍ ପଢ଼ନ୍ତୁ"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"ପରବର୍ତ୍ତୀ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"ବୁଝିଗଲି"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"ୱାର୍କ ପ୍ରୋଫାଇଲକୁ ବିରତ କରାଯାଇଛି"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"କାର୍ଯ୍ୟସ୍ଥଳୀ ଆପ୍ ଆପଣଙ୍କୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପଠାଇପାରିବ ନାହିଁ, ଆପଣଙ୍କ ବ୍ୟାଟେରୀକୁ ବ୍ୟବହାର କରିପାରିବ ନାହିଁ କିମ୍ବା ଆପଣଙ୍କ ଲୋକେସନକୁ ଆକ୍ସେସ୍ କରିପାରିବ ନାହିଁ"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"କାର୍ଯ୍ୟସ୍ଥଳୀ ଆପଗୁଡ଼ିକ ଆପଣଙ୍କୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପଠାଇପାରିବ ନାହିଁ, ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରନ୍ତୁ କିମ୍ବା ଆପଣଙ୍କ ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରନ୍ତୁ"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ବିରତ କରାଯାଇଛି। କାର୍ଯ୍ୟସ୍ଥଳୀ ଆପ୍ ଆପଣଙ୍କୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପଠାଇପାରିବ ନାହିଁ, ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରନ୍ତୁ କିମ୍ବା ଆପଣଙ୍କ ଲୋକେସନ୍ ଆକ୍ସେସ୍ କରନ୍ତୁ"</string>
<string name="work_switch_tip" msgid="808075064383839144">"କାର୍ଯ୍ୟସ୍ଥଳୀ ଆପ୍ ଏବଂ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ବିରତ କରନ୍ତୁ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ବିଫଳ ହୋଇଛି: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index d3c0b19..2b56306 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"ਅਣਸਥਾਪਤ ਕਰੋ"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ਐਪ ਜਾਣਕਾਰੀ"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ਸਥਾਪਤ ਕਰੋ"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ਐਪ ਦਾ ਸੁਝਾਅ ਨਾ ਦਿਓ"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"ਪਿੰਨ ਦਾ ਪੂਰਵ-ਅਨੁਮਾਨ"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"ਸ਼ਾਰਟਕੱਟ ਸਥਾਪਤ ਕਰੋ"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"ਇੱਕ ਐਪ ਨੂੰ ਵਰਤੋਂਕਾਰ ਦੇ ਦਖ਼ਲ ਤੋਂ ਬਿਨਾਂ ਸ਼ਾਰਟਕੱਟ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ਹੋਮ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸ਼ਾਰਟਕੱਟ ਪੜ੍ਹੋ"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"ਅੱਗੇ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"ਸਮਝ ਲਿਆ"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੁਹਾਨੂੰ ਸੂਚਨਾਵਾਂ ਨਹੀਂ ਭੇਜ ਸਕਦੀਆਂ, ਤੁਹਾਡੀ ਬੈਟਰੀ ਨਹੀਂ ਵਰਤ ਸਕਦੀਆਂ ਜਾਂ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੁਹਾਨੂੰ ਸੂਚਨਾਵਾਂ ਨਹੀਂ ਭੇਜ ਸਕਦੀਆਂ, ਤੁਹਾਡੀ ਬੈਟਰੀ ਨਹੀਂ ਵਰਤ ਸਕਦੀਆਂ ਜਾਂ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ। ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੁਹਾਨੂੰ ਸੂਚਨਾਵਾਂ ਨਹੀਂ ਭੇਜ ਸਕਦੀਆਂ, ਤੁਹਾਡੀ ਬੈਟਰੀ ਨਹੀਂ ਵਰਤ ਸਕਦੀਆਂ ਜਾਂ ਤੁਹਾਡੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਨੂੰ ਰੋਕੋ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ਇਹ ਕਾਰਵਾਈ ਅਸਫਲ ਹੋਈ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index bfaef66..fb6c4ae 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Odinstaluj"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"O aplikacji"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Zainstaluj"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Nie proponuj aplikacji"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Podpowiadanie kodu PIN"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalowanie skrótów"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Pozwala aplikacji dodawać skróty bez interwencji użytkownika."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"odczytywanie ustawień i skrótów na ekranie głównym"</string>
@@ -133,14 +135,14 @@
<string name="accessibility_close" msgid="2277148124685870734">"Zamknij"</string>
<string name="notification_dismissed" msgid="6002233469409822874">"Powiadomienie odrzucone"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Osobiste"</string>
- <string name="all_apps_work_tab" msgid="4884822796154055118">"Do pracy"</string>
+ <string name="all_apps_work_tab" msgid="4884822796154055118">"Służbowe"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Profil do pracy"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Dane osobowe znajdują się w innym miejscu i są niewidoczne dla aplikacji do pracy"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Dane osobiste znajdują się w innym miejscu i są niewidoczne dla aplikacji do pracy"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Dane i aplikacje z profilu do pracy są widoczne dla Twojego administratora IT"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Dalej"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Wstrzymano profil do pracy"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Aplikacje do pracy nie mogą wysyłać powiadomień, używać baterii ani mieć dostępu do Twojej lokalizacji"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Aplikacje do pracy nie mogą wysyłać powiadomień, używać baterii ani mieć dostępu do Twojej lokalizacji"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Wstrzymano profil do pracy. Aplikacje do pracy nie mogą wysyłać powiadomień, używać baterii ani uzyskiwać dostępu do Twojej lokalizacji"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Wstrzymaj aplikacje do pracy i powiadomienia"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Niepowodzenie: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index c6dcc6f..e6af945 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstalar"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Info. da app"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalar"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Não sugerir app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fixar previsão"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalar atalhos"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permite a uma app adicionar atalhos sem a intervenção do utilizador."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ler definições e atalhos do Ecrã Principal"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Seguinte"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Perfil de trabalho em pausa"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"As apps de trabalho não podem enviar-lhe notificações, utilizar a sua bateria ou aceder à sua localização."</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"As apps de trabalho não podem enviar-lhe notificações, utilizar a sua bateria ou aceder à sua localização."</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"O perfil de trabalho está em pausa. As apps de trabalho não podem enviar-lhe notificações, utilizar a sua bateria ou aceder à sua localização."</string>
<string name="work_switch_tip" msgid="808075064383839144">"Coloque as apps de trabalho e as notificações em pausa."</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Falhou: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index bf0b837..d1eb271 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Desinstalar"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Informações do app"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalar"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Não sugerir esse app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fixar previsão"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalar atalhos"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permite que um app adicione atalhos sem intervenção do usuário."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ler configurações e atalhos da tela inicial"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Próxima"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Ok"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"O perfil de trabalho está pausado"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Apps de trabalho não podem enviar notificações, usar a bateria nem acessar o local"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Apps de trabalho não podem enviar notificações, usar a bateria nem acessar o local"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"O perfil de trabalho está pausado. Apps de trabalho não podem enviar notificações, usar a bateria nem acessar seu local"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pausar apps e notificações de trabalho"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Falha: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index efaf304..9ecfeab 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Dezinstalați"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Informații despre aplicații"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalați"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Nu sugera aplicația"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fixează predicția"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalează comenzi rapide"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Permite unei aplicații să adauge comenzi rapide fără intervenția utilizatorului."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"citește setări și comenzi rapide pentru ecranul de pornire"</string>
@@ -139,7 +141,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Înainte"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Profilul de serviciu este întrerupt"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Aplicațiile pentru lucru nu pot să vă trimită notificări, să utilizeze bateria sau să vă acceseze locația"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Aplicațiile pentru lucru nu pot să vă trimită notificări, să folosească bateria sau să vă acceseze locația"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Profilul de serviciu este întrerupt. Aplicațiile pentru lucru nu pot să vă trimită notificări, să folosească bateria sau să vă acceseze locația"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Întrerupeți aplicațiile pentru lucru și notificările"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Eșuare: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 084bbdb..3b5f171 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Удалить"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"О приложении"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Установить"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Скрыть рекомендацию"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Закрепить рекомендацию"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"Создание ярлыков"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Приложение сможет самостоятельно добавлять ярлыки."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Доступ к настройкам и ярлыкам главного экрана"</string>
@@ -135,12 +137,12 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Личные"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Рабочие"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Рабочий профиль"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Личные данные скрыты от рабочих приложений и недоступны им"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Личные данные скрыты от рабочих приложений и недоступны им."</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Рабочие приложения и данные видны системному администратору."</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Далее"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"ОК"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Рабочий профиль приостановлен"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Рабочие приложения не могут отправлять уведомления, расходовать заряд батареи и получать доступ к вашему местоположению."</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Рабочие приложения не могут отправлять уведомления, расходовать заряд батареи и получать доступ к вашему местоположению."</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Рабочий профиль приостановлен. Рабочие приложения не могут отправлять уведомления, расходовать заряд батареи и получать доступ к данным о вашем местоположении."</string>
<string name="work_switch_tip" msgid="808075064383839144">"Приостановить рабочие приложения и уведомления"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не удалось выполнить действие (<xliff:g id="WHAT">%1$s</xliff:g>)."</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index db703f6..da42f10 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"අස්ථාපනය කරන්න"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"යෙදුම් තොරතුරු"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ස්ථාපනය කරන්න"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"යෙදුම යෝජනා නොකරන්න"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"පුරෝකථනය අමුණන්න"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"කෙටිමං ස්ථාපනය කරන්න"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"පරිශීලක මැදිහත්වීමෙන් තොරව කෙටිමං එක් කිරීමට යෙදුමකට අවසර දෙයි."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"මුල් පිටු සැකසීම් සහ කෙටිමං කියවන්න"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"ඊළඟ"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"තේරුණා"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"කාර්යාල පැතිකඩ විරාම කර ඇත"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"කාර්යාල යෙදුම්වලට ඔබට දැනුම් දීම් එවීමට, ඔබගේ බැටරිය භාවිත කිරීමට හෝ ඔබගේ ස්ථානයට ප්රවේශ විය නොහැකිය"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"කාර්යාල යෙදුම්වලට ඔබට දැනුම් දීම් එවීමට, ඔබගේ බැටරිය භාවිත කිරීමට හෝ ඔබගේ ස්ථානයට ප්රවේශ විය නොහැකිය"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"කාර්යාල පැතිකඩ විරාම කර ඇත. කාර්යාල යෙදුම්වලට ඔබට දැනුම් දීම් එවීමට, ඔබගේ බැටරිය භාවිත කිරීමට හෝ ඔබගේ ස්ථානයට ප්රවේශ විය නොහැකිය"</string>
<string name="work_switch_tip" msgid="808075064383839144">"කාර්යාල යෙදුම් සහ දැනුම් දීම් විරාම කරන්න"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"අසාර්ථකයි: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 12e58fc..17dfccf 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Odinštalovať"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Info o aplikácii"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Inštalovať"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Nenavrhovať aplikáciu"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Pripnúť predpovedanú aplikáciu"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"inštalovať odkazy"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Povoľuje aplikácii pridať odkazy bez zásahu používateľa."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"čítanie nastavení a odkazov plochy"</string>
@@ -140,7 +142,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Ďalej"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Dobre"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Pracovný profil je pozastavený"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Pracovné aplikácie nemôžu posielať upozornenia, používať batériu ani polohu"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Pracovné aplikácie nemôžu posielať upozornenia, používať batériu ani polohu"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Pracovný profil je pozastavený. Pracovné aplikácie nemôžu posielať upozornenia, používať batériu ani polohu"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pozastavte pracovné aplikácie a upozornenia"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Zlyhalo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 197f94c..5691af2 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Odmesti"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Podatki o aplikaciji"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Namesti"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ne predlagaj aplikacije"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Predvidevanje pripenjanja"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"namestitev bližnjic"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Aplikaciji dovoli dodajanje bližnjic brez posredovanja uporabnika."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"branje nastavitev in bližnjic na začetnem zaslonu"</string>
@@ -140,7 +142,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Naprej"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Razumem"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Delovni profil je začasno zaustavljen"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Delovne aplikacije ne smejo pošiljati obvestil, porabljati energije baterije ali dostopati do lokacije"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Delovne aplikacije ne smejo pošiljati obvestil, porabljati energije baterije ali dostopati do lokacije"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Delovni profil je začasno zaustavljen. Delovne aplikacije ne smejo pošiljati obvestil, porabljati energije baterije ali dostopati do lokacije"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Začasna zaustavitev delovnih aplikacij in obvestil"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Ni uspelo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 3e6e119..59cfdef 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Çinstalo"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Informacion mbi aplikacionin"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Instalo"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Mos sugjero aplikacion"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Gozhdo aplikacionin e parashikuar"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"instalo shkurtore"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Lejon një aplikacion të shtojë shkurtore pa ndërhyrjen e përdoruesit."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"lexo cilësimet dhe shkurtoret e ekranit bazë"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Para"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"E kuptova"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Profili i punës është në pauzë"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Aplikacionet e punës nuk mund të të dërgojnë njoftime, të përdorin baterinë tënde apo të kenë qasje në vendndodhjen tënde"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Aplikacionet e punës nuk mund të të dërgojnë njoftime, të përdorin baterinë tënde apo të kenë qasje në vendndodhjen tënde"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Profili i punës është në pauzë. Aplikacionet e punës nuk mund të të dërgojnë njoftime, të përdorin baterinë tënde apo të kenë qasje në vendndodhjen tënde"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Vendos në pauzë aplikacionet e punës dhe njoftimet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Dështoi: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index c41f12b..256425c 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Деинсталирај"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Информ. о апликацији"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Инсталирај"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Не предлажи апликацију"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Закачи предвиђање"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"инсталирање пречица"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Дозвољава апликацији да додаје пречице без интервенције корисника."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"читање подешавања и пречица на почетном екрану"</string>
@@ -139,7 +141,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Даље"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Важи"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Пословни профил је паузиран"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Пословне апликације не могу да вам шаљу обавештења, користе батерију ни приступају локацији"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Пословне апликације не могу да вам шаљу обавештења, користе батерију нити приступају локацији"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Пословни профил је паузиран. Пословне апликације не могу да вам шаљу обавештења, користе батерију нити приступају локацији"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Паузирајте пословне апликације и обавештења"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Није успело: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 9b14e47..3ab4517 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Avinstallera"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Info om appen"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Installera"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Föreslå inte app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Fäst förslag"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"installera genvägar"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Tillåter att en app lägger till genvägar utan åtgärd från användaren."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"läsa inställningar och genvägar för startsidan"</string>
@@ -134,11 +136,11 @@
<string name="all_apps_work_tab" msgid="4884822796154055118">"Arbete"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Jobbprofil"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Privat data lagras för sig och är inte synlig för jobbapparna"</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Jobbappar och jobbdata är synlig för IT-administratören"</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"Jobbappar och jobbdata är synliga för IT-administratören"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Nästa"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Jobbprofilen är pausad"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Jobbappar kan inte skicka aviseringar, använda batteriet eller komma åt din plats"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Jobbappar kan inte skicka aviseringar, använda batteriet eller komma åt din plats"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Jobbprofilen är pausad. Jobbappar kan inte skicka aviseringar, använda batteriet eller komma åt din plats"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Pausa jobbappar och jobbaviseringar"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Misslyckades: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 77c6aad..de8bbd8 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Sakinua"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Maelezo ya programu"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Sakinisha"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Usipendekeze programu"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Bandika Utabiri"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"kuweka njia za mkato"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Huruhusu programu kuongeza njia za mkato bila mtumiaji kuingilia kati."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"soma mipangilio ya Mwanzo na njia za mkato"</string>
@@ -135,12 +137,12 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Binafsi"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"Kazini"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"Wasifu wa kazini"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Data ya binafsi ni tofauti na haionyeshwi kwenye programu za kazini"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"Data binafsi iko kando na haionyeshwi kwenye programu za kazini"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"Programu na data ya kazini huonekana kwa msimamizi wako wa TEHAMA"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"Endelea"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Nimeelewa"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Wasifu wa kazini umesimamishwa"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Programu za kazini haziwezi kukutumia arifa, kutumia betri yako au kufikia maelezo ya mahali ulipo"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Programu za kazini haziwezi kukutumia arifa, kutumia betri yako au kufikia maelezo ya mahali ulipo"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Wasifu wa kazini umesimamishwa. Programu za kazini haziwezi kukutumia arifa, kutumia betri yako au kufikia maelezo ya mahali ulipo"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Simamisha arifa na programu za kazini"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Hitilafu: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 30ea424..30de579 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"நிறுவல் நீக்கு"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ஆப்ஸ் தகவல்"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"நிறுவு"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ஆப்ஸைப் பரிந்துரைக்க வேண்டாம்"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"கணிக்கப்பட்ட ஆப்ஸைப் பின் செய்தல்"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"குறுக்குவழிகளை நிறுவுதல்"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"பயனரின் அனுமதி இல்லாமல் குறுக்குவழிகளைச் சேர்க்கப் ஆப்ஸை அனுமதிக்கிறது."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"முகப்பின் அமைப்பு மற்றும் குறுக்குவழிகளைப் படித்தல்"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"அடுத்து"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"முடிந்தது"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"பணிக் கணக்கு இடைநிறுத்தப்பட்டது"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"பணி ஆப்ஸால் அறிவிப்புகளை அனுப்பவோ பேட்டரியைப் பயன்படுத்தவோ இருப்பிடத்தை அணுகவோ முடியாது"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"பணி ஆப்ஸால் அறிவிப்புகளை அனுப்பவோ பேட்டரியைப் பயன்படுத்தவோ இருப்பிடத்தை அணுகவோ முடியாது"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"பணிக் கணக்கு இடைநிறுத்தப்பட்டது. பணி ஆப்ஸால் அறிவிப்புகளை அனுப்பவோ பேட்டரியைப் பயன்படுத்தவோ இருப்பிடத்தை அணுகவோ முடியாது"</string>
<string name="work_switch_tip" msgid="808075064383839144">"பணி தொடர்பான ஆப்ஸையும் அறிவிப்புகளையும் இடைநிறுத்தும்"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"தோல்வி: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index ab7538e..0eab3a9 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"అన్ఇన్స్టాల్ చేయి"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"యాప్ సమాచారం"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ఇన్స్టాల్ చేయండి"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"యాప్ను సూచించవద్దు"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"పిన్ సూచన"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"షార్ట్కట్లను ఇన్స్టాల్ చేయడం"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"వినియోగదారు ప్రమేయం లేకుండా సత్వరమార్గాలను జోడించడానికి అనువర్తనాన్ని అనుమతిస్తుంది."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"హోమ్ సెట్టింగ్లు మరియు సత్వరమార్గాలను చదవడం"</string>
@@ -133,13 +135,13 @@
<string name="all_apps_personal_tab" msgid="4190252696685155002">"వ్యక్తిగతం"</string>
<string name="all_apps_work_tab" msgid="4884822796154055118">"కార్యాలయం"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"కార్యాలయ ప్రొఫైల్"</string>
- <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"వ్యక్తిగత డేటా అనేది విడిగా & వర్క్ యాప్ల నుండి దాచబడి ఉంటుంది"</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"వర్క్ యాప్లు & డేటా మీ IT అడ్మిన్కు కనిపిస్తాయి"</string>
+ <string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"వ్యక్తిగత డేటా అనేది విడిగా & ఆఫీస్ యాప్లకు యాక్సెస్ లేకుండా, దాచబడి ఉంటుంది"</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"ఆఫీస్ యాప్లు & డేటా మీ IT అడ్మిన్కు కనిపిస్తాయి"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"తర్వాత"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"అర్థమైంది"</string>
- <string name="work_apps_paused_title" msgid="2389865654362803723">"వర్క్ ప్రొఫైల్ పాజ్ చేయబడింది"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"మీకు నోటిఫికేషన్లు పంపడం, మీ బ్యాటరీని ఉపయోగించడం, లేదా మీ లొకేషన్ను యాక్సెస్ చేయడం \'వర్క్ యాప్\'లకు సాధ్యపడదు"</string>
- <string name="work_apps_paused_content_description" msgid="7553586952985486433">"వర్క్ ప్రొఫైల్ పాజ్ చేయబడింది. \'వర్క్ యాప్\'లు మీకు నోటిఫికేషన్లు పంపడం, మీ బ్యాటరీని ఉపయోగించడం, లేదా మీ లొకేషన్ను యాక్సెస్ చేయడం చేయలేవు"</string>
- <string name="work_switch_tip" msgid="808075064383839144">"వర్క్ యాప్లు, నోటిఫికేషన్లను పాజ్ చేయండి"</string>
+ <string name="work_apps_paused_title" msgid="2389865654362803723">"ఆఫీస్ ప్రొఫైల్ పాజ్ చేయబడింది"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"మీకు నోటిఫికేషన్లు పంపడం, మీ బ్యాటరీని ఉపయోగించడం, లేదా మీ లొకేషన్ను యాక్సెస్ చేయడం \'వర్క్ యాప్\'లకు సాధ్యపడదు"</string>
+ <string name="work_apps_paused_content_description" msgid="7553586952985486433">"ఆఫీస్ ప్రొఫైల్ పాజ్ చేయబడింది. \'ఆఫీస్ యాప్\'లు మీకు నోటిఫికేషన్లు పంపడం, మీ బ్యాటరీని ఉపయోగించడం, లేదా మీ లొకేషన్ను యాక్సెస్ చేయడం చేయలేవు"</string>
+ <string name="work_switch_tip" msgid="808075064383839144">"ఆఫీస్ యాప్లు, నోటిఫికేషన్లను పాజ్ చేయండి"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"విఫలమైంది: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index b8f279e..a7cbf64 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"ถอนการติดตั้ง"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ข้อมูลแอป"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"ติดตั้ง"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"อย่าแนะนำแอป"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"การคาดการณ์ PIN"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"ติดตั้งทางลัด"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"อนุญาตให้แอปเพิ่มทางลัดโดยไม่ต้องให้ผู้ใช้จัดการ"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"อ่านการตั้งค่าและทางลัดหน้าแรกแล้ว"</string>
@@ -137,8 +139,8 @@
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"ผู้ดูแลระบบไอทีจะดูแอปและข้อมูลงานได้"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"ถัดไป"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"รับทราบ"</string>
- <string name="work_apps_paused_title" msgid="2389865654362803723">"โปรไฟล์งานปิดชั่วคราว"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"แอปงานจะส่งการแจ้งเตือน ใช้แบตเตอรี่ หรือเข้าถึงตำแหน่งของคุณไม่ได้"</string>
+ <string name="work_apps_paused_title" msgid="2389865654362803723">"โปรไฟล์งานหยุดชั่วคราว"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"แอปงานจะส่งการแจ้งเตือน ใช้แบตเตอรี่ หรือเข้าถึงตำแหน่งของคุณไม่ได้"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"โปรไฟล์งานปิดชั่วคราว แอปงานจะส่งการแจ้งเตือน ใช้แบตเตอรี่ หรือเข้าถึงตำแหน่งของคุณไม่ได้"</string>
<string name="work_switch_tip" msgid="808075064383839144">"หยุดแอปงานและการแจ้งเตือนไว้ชั่วคราว"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ไม่สำเร็จ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 0320866..9c0d817 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"I-uninstall"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Impormasyon ng app"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"I-install"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Huwag magmungkahi ng app"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"I-pin ang Hula"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"i-install ang mga shortcut"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Pinapayagan ang isang app na magdagdag ng mga shortcut nang walang panghihimasok ng user."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"basahin ang mga setting at shortcut ng Home"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Susunod"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Naka-pause ang profile sa trabaho"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Hindi makakapagpadala sa iyo ng mga notification, makakagamit ng battery mo, o makaka-access ng iyong lokasyon ang mga app para sa trabaho"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Ang mga app para sa trabaho ay hindi makakapagpadala sa iyo ng mga notification, makakagamit ng battery mo, o makaka-access ng iyong lokasyon"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Naka-pause ang profile sa trabaho. Hindi makakapagpadala sa iyo ng mga notification, makakagamit ng battery mo, o makaka-access ng iyong lokasyon ang mga app para sa trabaho"</string>
<string name="work_switch_tip" msgid="808075064383839144">"I-pause ang mga app at notification para sa trabaho"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Hindi nagawa: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 4548501..3ca4d10 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Yüklemeyi kaldır"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Uygulama bilgileri"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Yükle"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Uygulama önerme"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Tahmini Sabitle"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"kısayolları yükle"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Uygulamaya, kullanıcı müdahalesi olmadan kısayol ekleme izni verir."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Ana ekran ayarlarını ve kısayollarını oku"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"İleri"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Anladım"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"İş profili duraklatıldı"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"İş uygulamaları size bildirim gönderemez, pilinizi kullanamaz veya konum bilginize erişemez"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"İş uygulamaları size bildirim gönderemez, pilinizi kullanamaz veya konum bilginize erişemez"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"İş profili duraklatıldı. İş uygulamaları size bildirim gönderemez, pilinizi kullanamaz veya konum bilginize erişemez"</string>
<string name="work_switch_tip" msgid="808075064383839144">"İş uygulamalarını ve bildirimlerini duraklatın"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Başarısız: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index d3ce948..821096c 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Видалити додаток"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Про додаток"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Установити"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Не пропонувати додаток"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Закріпити передбачений додаток"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"створення ярликів"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Дозволяє програмі самостійно додавати ярлики."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"читати налаштування та ярлики головного екрана"</string>
@@ -140,7 +142,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Далі"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Робочий профіль призупинено"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Робочі додатки не можуть надсилати сповіщення, споживати заряд акумулятора й використовувати геодані"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Робочі додатки не можуть надсилати сповіщення, споживати заряд акумулятора й використовувати геодані"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Робочий профіль призупинено. Робочі додатки не можуть надсилати сповіщення, споживати заряд акумулятора й використовувати геодані"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Призупинити робочі додатки й сповіщення"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не вдалося <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 9e0287b..6b6ffae 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"اَن انسٹال کریں"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"ایپ کی معلومات"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"انسٹال کریں"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"ایپ تجویز نہ کریں"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"پیشگوئی پن کریں"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"شارٹ کٹس انسٹال کریں"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"کسی ایپ کو صارف کی مداخلت کے بغیر شارٹ کٹس شامل کرنے کی اجازت دیتا ہے۔"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"ہوم ترتیبات اور شارٹ کٹس کو پڑھیں"</string>
@@ -134,11 +136,11 @@
<string name="all_apps_work_tab" msgid="4884822796154055118">"دفتری"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"دفتری پروفائل"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"ذاتی ڈیٹا ورک ایپس سے الگ اور پوشیدہ ہے"</string>
- <string name="work_profile_edu_work_apps" msgid="237051938268703058">"آپ کے IT منتظم کے لئے ورک ایپس اور ڈیٹا مرئی ہے"</string>
+ <string name="work_profile_edu_work_apps" msgid="237051938268703058">"آپ کا IT منتظم ورک ایپس اور ڈیٹا کو دیکھ سکتا ہے"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"اگلا"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"سمجھ آ گئی"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"دفتری پروفائل روک دی گئی ہے"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"ورک ایپس آپ کو اطلاعت نہیں بھیج سکتیں، آپ کی بیٹری استعمال، یا آپ کے مقام تک رسائی حاصل نہیں کر سکتی ہیں"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"ورک ایپس آپ کو اطلاعات نہیں بھیج سکتیں، آپ کی بیٹری استعمال، یا آپ کے مقام تک رسائی حاصل نہیں کر سکتی ہیں"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"دفتری پروفائل موقوف کر دی گئی ہے۔ ورک ایپس آپ کو اطلاعت نہیں بھیج سکتیں، آپ کی بیٹری کا استعمال، یا آپ کے مقام تک رسائی حاصل نہیں کر سکتی ہیں"</string>
<string name="work_switch_tip" msgid="808075064383839144">"ورک ایپس اور اطلاعات کو روکیں"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ناکام ہو گيا: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index eb8823d..d2939d2 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -20,7 +20,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="649227358658669779">"Launcher3"</string>
- <string name="work_folder_name" msgid="3753320833950115786">"Ishga oid"</string>
+ <string name="work_folder_name" msgid="3753320833950115786">"Ish"</string>
<string name="activity_not_found" msgid="8071924732094499514">"Ilova o‘rnatilmadi."</string>
<string name="activity_not_available" msgid="7456344436509528827">"Ilova mavjud emas"</string>
<string name="safemode_shortcut_error" msgid="9160126848219158407">"Yuklab olingan ilova xavfsiz rejimda o‘chirib qo‘yildi"</string>
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"O‘chirib tashlash"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Ilova haqida"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"O‘rnatish"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ilova taklif qilinmasin"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Ilovalarni mahkamlash taklifi"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"yorliqlar yaratish"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Ilovalarga foydalanuvchidan so‘ramasdan yorliqlar qo‘shishga ruxsat beradi."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"Uy sozlamalari va yorliqlarini o‘qish"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Keyingisi"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Ish profili pauzada"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Ishga oid ilovalar batareya sarfi haqida bildirishnomalar yubora olmaydi va joylashuv axborotidan foydalana olmaydi"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Ishga oid ilovalar batareya sarfi haqida bildirishnomalar yubora olmaydi va joylashuv axborotidan foydalana olmaydi"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Ish profili pauzada. Ishga oid ilovalar batareya sarfi haqida bildirishnomalar yubora olmaydi va joylashuv axborotidan foydalana olmaydi"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Ishga oid ilova va bildirishnomalarni pauza qilish"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Xato: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index e9b6db1..678eef7 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Gỡ cài đặt"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Thông tin ứng dụng"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Cài đặt"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Không đề xuất ứng dụng"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Ghim ứng dụng dự đoán"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"cài đặt lối tắt"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Cho phép ứng dụng thêm lối tắt mà không cần sự can thiệp của người dùng."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"đọc cài đặt và lối tắt trên Màn hình chính"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Tiếp theo"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"OK"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Hồ sơ công việc của bạn đã bị tạm dừng"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Các ứng dụng công việc không thể gửi thông báo cho bạn, sử dụng pin hoặc truy cập thông tin vị trí của bạn"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Các ứng dụng công việc không thể gửi thông báo cho bạn, sử dụng pin hoặc truy cập thông tin vị trí của bạn"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Hồ sơ công việc của bạn đã bị tạm dừng. Các ứng dụng công việc không thể: gửi thông báo cho bạn, sử dụng pin hoặc xem dữ liệu vị trí"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Tạm dừng các ứng dụng và thông báo liên quan tới công việc"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Không thực hiện được thao tác: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index c302f71..ee83550 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"卸载"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"应用信息"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"安装"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"不要提供应用建议"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"固定预测的应用"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"安装快捷方式"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"允许应用自行添加快捷方式。"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"读取主屏幕设置和快捷方式"</string>
@@ -138,8 +140,8 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"继续"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"知道了"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"工作资料已被暂停"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"现在,工作应用无法向您发送通知、不能耗用电池电量,也无法获取您的位置信息"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"现在,工作应用无法向您发送通知、不能耗用电池电量,也无法获取您的位置信息"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"工作资料已被暂停。现在,工作应用无法向您发送通知、不能耗用电池电量,也无法获取您的位置信息"</string>
- <string name="work_switch_tip" msgid="808075064383839144">"暂停工作应用和工作通知"</string>
+ <string name="work_switch_tip" msgid="808075064383839144">"暂停工作应用及其通知"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"失败:<xliff:g id="WHAT">%1$s</xliff:g>"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 6b2bc8b..2fcaa24 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"解除安裝"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"應用程式資料"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"安裝"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"不要提供應用程式建議"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"固定預測"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"安裝捷徑"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"允許應用程式無需使用者許可也可新增捷徑。"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"讀取主畫面的設定和捷徑"</string>
@@ -131,14 +133,14 @@
<string name="accessibility_close" msgid="2277148124685870734">"關閉"</string>
<string name="notification_dismissed" msgid="6002233469409822874">"關閉咗通知"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"個人"</string>
- <string name="all_apps_work_tab" msgid="4884822796154055118">"商務"</string>
+ <string name="all_apps_work_tab" msgid="4884822796154055118">"工作"</string>
<string name="work_profile_toggle_label" msgid="3081029915775481146">"工作設定檔"</string>
<string name="work_profile_edu_personal_apps" msgid="4155536355149317441">"個人資料會獨立儲存,並在工作應用程式中隱藏。"</string>
<string name="work_profile_edu_work_apps" msgid="237051938268703058">"IT 管理員能看到工作應用程式的資料"</string>
<string name="work_profile_edu_next" msgid="8783418929296503629">"繼續"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"知道了"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"工作設定檔已暫停使用"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"工作應用程式無法向您傳送通知、使用電池或存取位置"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"工作應用程式無法向您傳送通知、使用電池或存取位置"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"工作設定檔已暫停。工作應用程式無法向您傳送通知、使用電池或存取位置"</string>
<string name="work_switch_tip" msgid="808075064383839144">"暫停工作應用程式和通知"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"操作失敗:<xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 3a9d90d..e015c80 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"解除安裝"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"應用程式資訊"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"安裝"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"不要提供應用程式建議"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"固定預測的應用程式"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"安裝捷徑"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"允許應用程式自動新增捷徑。"</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"讀取主螢幕的設定和捷徑"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"繼續"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"我知道了"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"工作資料夾已暫停"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"工作應用程式無法傳送通知給你、不能使用電池電量,也無法存取你的位置資訊"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"工作應用程式無法傳送通知給你、不能使用電池電量,也無法存取你的位置資訊"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"工作資料夾已暫停。工作應用程式無法傳送通知給你、不能使用電池電量,也無法存取你的位置資訊"</string>
<string name="work_switch_tip" msgid="808075064383839144">"暫停工作應用程式和通知"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"失敗:<xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 90d1093..fe04efb 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -52,6 +52,8 @@
<string name="uninstall_drop_target_label" msgid="4722034217958379417">"Khipha"</string>
<string name="app_info_drop_target_label" msgid="692894985365717661">"Ulwazi lohlelo lokusebenza"</string>
<string name="install_drop_target_label" msgid="2539096853673231757">"Faka"</string>
+ <string name="dismiss_prediction_label" msgid="3357562989568808658">"Ungaphakamisi uhlelo lokusebenza"</string>
+ <string name="pin_prediction" msgid="4196423321649756498">"Ukubikezela Iphinikhodi"</string>
<string name="permlab_install_shortcut" msgid="5632423390354674437">"faka izinqamuleli"</string>
<string name="permdesc_install_shortcut" msgid="923466509822011139">"Ivumela uhlelo lokusebenza ukufaka izinqamuleli ngaphandle kokungenelela komsebenzisi."</string>
<string name="permlab_read_settings" msgid="1941457408239617576">"funda izilungiselelo zokuthi Ikhaya nezinqamuleli"</string>
@@ -138,7 +140,7 @@
<string name="work_profile_edu_next" msgid="8783418929296503629">"Okulandelayo"</string>
<string name="work_profile_edu_accept" msgid="6069788082535149071">"Ngiyezwa"</string>
<string name="work_apps_paused_title" msgid="2389865654362803723">"Iphrofayela yomsebenzi iphunyuziwe"</string>
- <string name="work_apps_paused_body" msgid="5388070126389079077">"Izinhlelo zokusebenza zomsebenzi azikwazi ukukuthumela izaziso, ukusebenzisa ibhethri yakho, noma ukufinyelela indawo yakho"</string>
+ <string name="work_apps_paused_body" msgid="2197210494568696054">"Izinhlelo zokusebenza zomsebenzi azikwazi ukukuthumela izaziso, ukusebenzisa ibhethri lakho, noma ukufinyelela indawo yakho"</string>
<string name="work_apps_paused_content_description" msgid="7553586952985486433">"Iphrofayela yomsebenzi iphunyuziwe. Izinhlelo zokusebenza zomsebenzi azikwazi ukukuthumela izaziso, ukusebenzisa ibhethri yakho, noma ukufinyelela indawo yakho"</string>
<string name="work_switch_tip" msgid="808075064383839144">"Phumuza izinhlelo zokusebenza zomsebenzi nezaziso"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Yehlulekile: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
diff --git a/src/com/android/launcher3/AbstractFloatingView.java b/src/com/android/launcher3/AbstractFloatingView.java
index bed8278..1aa3144 100644
--- a/src/com/android/launcher3/AbstractFloatingView.java
+++ b/src/com/android/launcher3/AbstractFloatingView.java
@@ -59,6 +59,7 @@
TYPE_DISCOVERY_BOUNCE,
TYPE_SNACKBAR,
TYPE_LISTENER,
+ TYPE_ALL_APPS_EDU,
TYPE_TASK_MENU,
TYPE_OPTIONS_POPUP
@@ -74,25 +75,28 @@
public static final int TYPE_DISCOVERY_BOUNCE = 1 << 6;
public static final int TYPE_SNACKBAR = 1 << 7;
public static final int TYPE_LISTENER = 1 << 8;
+ public static final int TYPE_ALL_APPS_EDU = 1 << 9;
// Popups related to quickstep UI
- public static final int TYPE_TASK_MENU = 1 << 9;
- public static final int TYPE_OPTIONS_POPUP = 1 << 10;
+ public static final int TYPE_TASK_MENU = 1 << 10;
+ public static final int TYPE_OPTIONS_POPUP = 1 << 11;
public static final int TYPE_ALL = TYPE_FOLDER | TYPE_ACTION_POPUP
| TYPE_WIDGETS_BOTTOM_SHEET | TYPE_WIDGET_RESIZE_FRAME | TYPE_WIDGETS_FULL_SHEET
| TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE | TYPE_TASK_MENU
- | TYPE_OPTIONS_POPUP | TYPE_SNACKBAR | TYPE_LISTENER;
+ | TYPE_OPTIONS_POPUP | TYPE_SNACKBAR | TYPE_LISTENER | TYPE_ALL_APPS_EDU;
// Type of popups which should be kept open during launcher rebind
public static final int TYPE_REBIND_SAFE = TYPE_WIDGETS_FULL_SHEET
- | TYPE_WIDGETS_BOTTOM_SHEET | TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE;
+ | TYPE_WIDGETS_BOTTOM_SHEET | TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE
+ | TYPE_ALL_APPS_EDU;
// Usually we show the back button when a floating view is open. Instead, hide for these types.
public static final int TYPE_HIDE_BACK_BUTTON = TYPE_ON_BOARD_POPUP | TYPE_DISCOVERY_BOUNCE
| TYPE_SNACKBAR | TYPE_WIDGET_RESIZE_FRAME | TYPE_LISTENER;
- public static final int TYPE_ACCESSIBLE = TYPE_ALL & ~TYPE_DISCOVERY_BOUNCE & ~TYPE_LISTENER;
+ public static final int TYPE_ACCESSIBLE = TYPE_ALL & ~TYPE_DISCOVERY_BOUNCE & ~TYPE_LISTENER
+ & ~TYPE_ALL_APPS_EDU;
// These view all have particular operation associated with swipe down interaction.
public static final int TYPE_STATUS_BAR_SWIPE_DOWN_DISALLOW = TYPE_WIDGETS_BOTTOM_SHEET |
diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java
index 239d8a3..0ac2784 100644
--- a/src/com/android/launcher3/BaseDraggingActivity.java
+++ b/src/com/android/launcher3/BaseDraggingActivity.java
@@ -184,7 +184,7 @@
}
getUserEventDispatcher().logAppLaunch(v, intent, user);
getStatsLogManager().log(LAUNCHER_APP_LAUNCH_TAP, item == null ? null
- : item.buildProto(null));
+ : item.buildProto());
return true;
} catch (NullPointerException|ActivityNotFoundException|SecurityException e) {
Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java
index be941f2..1c157c2 100644
--- a/src/com/android/launcher3/Hotseat.java
+++ b/src/com/android/launcher3/Hotseat.java
@@ -38,6 +38,8 @@
@ViewDebug.ExportedProperty(category = "launcher")
private boolean mHasVerticalHotseat;
+ private Workspace mWorkspace;
+ private boolean mSendTouchToWorkspace;
public Hotseat(Context context) {
this(context, null);
@@ -112,8 +114,35 @@
InsettableFrameLayout.dispatchInsets(this, insets);
}
+ public void setWorkspace(Workspace w) {
+ mWorkspace = w;
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ // We allow horizontal workspace scrolling from within the Hotseat. We do this by delegating
+ // touch intercept the Workspace, and if it intercepts, delegating touch to the Workspace
+ // for the remainder of the this input stream.
+ int yThreshold = getMeasuredHeight() - getPaddingBottom();
+ if (mWorkspace != null && ev.getY() <= yThreshold) {
+ mSendTouchToWorkspace = mWorkspace.onInterceptTouchEvent(ev);
+ return mSendTouchToWorkspace;
+ }
+ return false;
+ }
+
@Override
public boolean onTouchEvent(MotionEvent event) {
+ // See comment in #onInterceptTouchEvent
+ if (mSendTouchToWorkspace) {
+ final int action = event.getAction();
+ switch (action & MotionEvent.ACTION_MASK) {
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ mSendTouchToWorkspace = false;
+ }
+ return mWorkspace.onTouchEvent(event);
+ }
return event.getY() > getCellHeight();
}
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 59476dd..1f84c42 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1116,6 +1116,7 @@
mWorkspace.initParentViews(mDragLayer);
mOverviewPanel = findViewById(R.id.overview_panel);
mHotseat = findViewById(R.id.hotseat);
+ mHotseat.setWorkspace(mWorkspace);
mLauncherView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
diff --git a/src/com/android/launcher3/LauncherRootView.java b/src/com/android/launcher3/LauncherRootView.java
index 226a924..9ac370f 100644
--- a/src/com/android/launcher3/LauncherRootView.java
+++ b/src/com/android/launcher3/LauncherRootView.java
@@ -1,5 +1,6 @@
package com.android.launcher3;
+import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY;
import static com.android.launcher3.util.SystemUiController.FLAG_DARK_NAV;
import static com.android.launcher3.util.SystemUiController.UI_STATE_ROOT_VIEW;
@@ -177,7 +178,7 @@
@TargetApi(Build.VERSION_CODES.Q)
public void setDisallowBackGesture(boolean disallowBackGesture) {
- if (!Utilities.ATLEAST_Q) {
+ if (!Utilities.ATLEAST_Q || SEPARATE_RECENTS_ACTIVITY.get()) {
return;
}
mDisallowBackGesture = disallowBackGesture;
diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java
index db2a6cd..31bfc09 100644
--- a/src/com/android/launcher3/LauncherState.java
+++ b/src/com/android/launcher3/LauncherState.java
@@ -33,6 +33,7 @@
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.states.HintState;
import com.android.launcher3.states.SpringLoadedState;
+import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.uioverrides.states.AllAppsState;
import com.android.launcher3.uioverrides.states.OverviewState;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
@@ -260,7 +261,7 @@
@Override
public String toString() {
- return "Ordinal-" + ordinal;
+ return TestProtocol.stateOrdinalToString(ordinal);
}
public void onBackPressed(Launcher launcher) {
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index 359190c..dc1ff66 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -1198,6 +1198,8 @@
if (mIsBeingDragged) {
final int activePointerId = mActivePointerId;
final int pointerIndex = ev.findPointerIndex(activePointerId);
+ if (pointerIndex == -1) return true;
+
final float primaryDirection = mOrientationHandler.getPrimaryDirection(ev,
pointerIndex);
final VelocityTracker velocityTracker = mVelocityTracker;
diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java
index 6919339..376b531 100644
--- a/src/com/android/launcher3/config/FeatureFlags.java
+++ b/src/com/android/launcher3/config/FeatureFlags.java
@@ -36,8 +36,6 @@
private static final List<DebugFlag> sDebugFlags = new ArrayList<>();
public static final String FLAGS_PREF_NAME = "featureFlags";
- public static final String FLAG_ENABLE_FIXED_ROTATION_TRANSFORM =
- "ENABLE_FIXED_ROTATION_TRANSFORM";
private FeatureFlags() { }
@@ -164,6 +162,14 @@
"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");
+
public static void initialize(Context context) {
synchronized (sDebugFlags) {
for (DebugFlag flag : sDebugFlags) {
diff --git a/src/com/android/launcher3/graphics/GridOptionsProvider.java b/src/com/android/launcher3/graphics/GridOptionsProvider.java
index af974f8..9bfd5ba 100644
--- a/src/com/android/launcher3/graphics/GridOptionsProvider.java
+++ b/src/com/android/launcher3/graphics/GridOptionsProvider.java
@@ -5,11 +5,13 @@
import android.content.ContentProvider;
import android.content.ContentValues;
+import android.content.pm.PackageManager;
import android.content.res.XmlResourceParser;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.graphics.Bitmap;
import android.net.Uri;
+import android.os.Binder;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor.AutoCloseOutputStream;
@@ -66,8 +68,6 @@
private static final String METHOD_GET_PREVIEW = "get_preview";
private static final String METADATA_KEY_PREVIEW_VERSION = "preview_version";
-
-
public static final PipeDataWriter<Future<Bitmap>> BITMAP_WRITER =
new PipeDataWriter<Future<Bitmap>>() {
@Override
@@ -201,6 +201,12 @@
@Override
public Bundle call(String method, String arg, Bundle extras) {
+ if (getContext().checkPermission("android.permission.BIND_WALLPAPER",
+ Binder.getCallingPid(), Binder.getCallingUid())
+ != PackageManager.PERMISSION_GRANTED) {
+ return null;
+ }
+
if (!METHOD_GET_PREVIEW.equals(method)) {
return null;
}
diff --git a/src/com/android/launcher3/graphics/PreloadIconDrawable.java b/src/com/android/launcher3/graphics/PreloadIconDrawable.java
index 4439284..e85b056 100644
--- a/src/com/android/launcher3/graphics/PreloadIconDrawable.java
+++ b/src/com/android/launcher3/graphics/PreloadIconDrawable.java
@@ -31,6 +31,7 @@
import android.graphics.Path;
import android.graphics.PathMeasure;
import android.graphics.Rect;
+import android.util.Pair;
import android.util.Property;
import android.util.SparseArray;
@@ -73,7 +74,8 @@
private static final float SMALL_SCALE = 0.6f;
- private static final SparseArray<WeakReference<Bitmap>> sShadowCache = new SparseArray<>();
+ private static final SparseArray<WeakReference<Pair<Path, Bitmap>>> sShadowCache =
+ new SparseArray<>();
private final Matrix mTmpMatrix = new Matrix();
private final PathMeasure mPathMeasure = new PathMeasure();
@@ -81,7 +83,7 @@
private final ItemInfoWithIcon mItem;
// Path in [0, 100] bounds.
- private final Path mProgressPath;
+ private final Path mShapePath;
private final Path mScaledTrackPath;
private final Path mScaledProgressPath;
@@ -105,7 +107,7 @@
public PreloadIconDrawable(ItemInfoWithIcon info, Context context) {
super(info.bitmap);
mItem = info;
- mProgressPath = getShapePath();
+ mShapePath = getShapePath();
mScaledTrackPath = new Path();
mScaledProgressPath = new Path();
@@ -127,7 +129,7 @@
bounds.left + PROGRESS_WIDTH + PROGRESS_GAP,
bounds.top + PROGRESS_WIDTH + PROGRESS_GAP);
- mProgressPath.transform(mTmpMatrix, mScaledTrackPath);
+ mShapePath.transform(mTmpMatrix, mScaledTrackPath);
float scale = bounds.width() / DEFAULT_PATH_SIZE;
mProgressPaint.setStrokeWidth(PROGRESS_WIDTH * scale);
@@ -141,8 +143,9 @@
private Bitmap getShadowBitmap(int width, int height, float shadowRadius) {
int key = (width << 16) | height;
- WeakReference<Bitmap> shadowRef = sShadowCache.get(key);
- Bitmap shadow = shadowRef != null ? shadowRef.get() : null;
+ WeakReference<Pair<Path, Bitmap>> shadowRef = sShadowCache.get(key);
+ Pair<Path, Bitmap> cache = shadowRef != null ? shadowRef.get() : null;
+ Bitmap shadow = cache != null && cache.first.equals(mShapePath) ? cache.second : null;
if (shadow != null) {
return shadow;
}
@@ -155,7 +158,7 @@
mProgressPaint.clearShadowLayer();
c.setBitmap(null);
- sShadowCache.put(key, new WeakReference<>(shadow));
+ sShadowCache.put(key, new WeakReference<>(Pair.create(mShapePath, shadow)));
return shadow;
}
diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java
index 475305f..4c2c79d 100644
--- a/src/com/android/launcher3/logging/StatsLogManager.java
+++ b/src/com/android/launcher3/logging/StatsLogManager.java
@@ -17,6 +17,8 @@
import android.content.Context;
+import androidx.annotation.Nullable;
+
import com.android.launcher3.R;
import com.android.launcher3.logger.LauncherAtom.ItemInfo;
import com.android.launcher3.logging.StatsLogUtils.LogStateProvider;
@@ -125,13 +127,13 @@
/**
* Logs an event and accompanying {@link ItemInfo}.
*/
- public void log(LauncherEvent event, ItemInfo itemInfo) {
+ public void log(LauncherEvent event, @Nullable ItemInfo info) {
}
/**
* Logs an event and accompanying {@link InstanceId} and {@link ItemInfo}.
*/
- public void log(LauncherEvent event, InstanceId instanceId, ItemInfo itemInfo) {
+ public void log(LauncherEvent event, InstanceId instanceId, @Nullable ItemInfo info) {
}
/**
diff --git a/src/com/android/launcher3/statemanager/StateManager.java b/src/com/android/launcher3/statemanager/StateManager.java
index 97dc052..44f7db9 100644
--- a/src/com/android/launcher3/statemanager/StateManager.java
+++ b/src/com/android/launcher3/statemanager/StateManager.java
@@ -554,6 +554,8 @@
*/
public static class AtomicAnimationFactory<STATE_TYPE> {
+ protected static final int NEXT_INDEX = 0;
+
private final Animator[] mStateElementAnimators;
/**
diff --git a/src/com/android/launcher3/testing/TestProtocol.java b/src/com/android/launcher3/testing/TestProtocol.java
index 0aab495..44eae56 100644
--- a/src/com/android/launcher3/testing/TestProtocol.java
+++ b/src/com/android/launcher3/testing/TestProtocol.java
@@ -49,7 +49,7 @@
case OVERVIEW_PEEK_STATE_ORDINAL:
return "OverviewPeek";
case OVERVIEW_MODAL_TASK_STATE_ORDINAL:
- return "OverviewModalState";
+ return "OverviewModal";
case QUICK_SWITCH_STATE_ORDINAL:
return "QuickSwitch";
case ALL_APPS_STATE_ORDINAL:
@@ -59,7 +59,7 @@
case HINT_STATE_ORDINAL:
return "Hint";
default:
- return null;
+ return "Unknown";
}
}
diff --git a/tests/tapl/com/android/launcher3/tapl/BaseOverview.java b/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
index 69afcc4..223ae29 100644
--- a/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
+++ b/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
@@ -106,21 +106,33 @@
*/
@NonNull
public OverviewTask getCurrentTask() {
+ final List<UiObject2> taskViews = getTasks();
+ mLauncher.assertNotEquals("Unable to find a task", 0, taskViews.size());
+
+ // taskViews contains up to 3 task views: the 'main' (having the widest visible part) one
+ // in the center, and parts of its right and left siblings. Find the main task view by
+ // its width.
+ final UiObject2 widestTask = Collections.max(taskViews,
+ (t1, t2) -> Integer.compare(mLauncher.getVisibleBounds(t1).width(),
+ mLauncher.getVisibleBounds(t2).width()));
+
+ return new OverviewTask(mLauncher, widestTask, this);
+ }
+
+ @NonNull
+ private List<UiObject2> getTasks() {
try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
- "want to get current task")) {
+ "want to get overview tasks")) {
verifyActiveContainer();
- final List<UiObject2> taskViews = mLauncher.getDevice().findObjects(
+ return mLauncher.getDevice().findObjects(
mLauncher.getOverviewObjectSelector("snapshot"));
- mLauncher.assertNotEquals("Unable to find a task", 0, taskViews.size());
-
- // taskViews contains up to 3 task views: the 'main' (having the widest visible
- // part) one in the center, and parts of its right and left siblings. Find the
- // main task view by its width.
- final UiObject2 widestTask = Collections.max(taskViews,
- (t1, t2) -> Integer.compare(mLauncher.getVisibleBounds(t1).width(),
- mLauncher.getVisibleBounds(t2).width()));
-
- return new OverviewTask(mLauncher, widestTask, this);
}
}
+
+ /**
+ * Returns whether Overview has tasks.
+ */
+ public boolean hasTasks() {
+ return getTasks().size() > 0;
+ }
}
\ No newline at end of file
diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index 546ff0b..1e0aa48 100644
--- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -332,26 +332,31 @@
private String getSystemAnomalyMessage() {
try {
- final StringBuilder sb = new StringBuilder();
+ {
+ final StringBuilder sb = new StringBuilder();
- UiObject2 object = mDevice.findObject(By.res("android", "alertTitle"));
- if (object != null) {
- sb.append("TITLE: ").append(object.getText());
- }
+ UiObject2 object = mDevice.findObject(By.res("android", "alertTitle"));
+ if (object != null) {
+ sb.append("TITLE: ").append(object.getText());
+ }
- object = mDevice.findObject(By.res("android", "message"));
- if (object != null) {
- sb.append(" PACKAGE: ").append(object.getApplicationPackage())
- .append(" MESSAGE: ").append(object.getText());
- }
+ object = mDevice.findObject(By.res("android", "message"));
+ if (object != null) {
+ sb.append(" PACKAGE: ").append(object.getApplicationPackage())
+ .append(" MESSAGE: ").append(object.getText());
+ }
- if (sb.length() != 0) {
- return "System alert popup is visible: " + sb;
+ if (sb.length() != 0) {
+ return "System alert popup is visible: " + sb;
+ }
}
if (hasSystemUiObject("keyguard_status_view")) return "Phone is locked";
if (!mDevice.hasObject(By.textStartsWith(""))) return "Screen is empty";
+
+ final String navigationModeError = getNavigationModeMismatchError();
+ if (navigationModeError != null) return navigationModeError;
} catch (Throwable e) {
Log.w(TAG, "getSystemAnomalyMessage failed", e);
}
@@ -437,14 +442,7 @@
}
}
- try {
- Log.e("b/156287114", "Input:");
- for (String line : mDevice.executeShellCommand("dumpsys input").split("\\n")) {
- Log.d("b/156287114", line);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
+ dumpDiagnostics();
log("Hierarchy dump for: " + message);
dumpViewHierarchy();
@@ -452,6 +450,24 @@
return message;
}
+ private void dumpDiagnostics() {
+ Log.e("b/156287114", "Input:");
+ logShellCommand("dumpsys input");
+ Log.e("b/156287114", "TIS:");
+ logShellCommand("dumpsys activity service TouchInteractionService");
+ }
+
+ private void logShellCommand(String command) {
+ try {
+ for (String line : mDevice.executeShellCommand(command).split("\\n")) {
+ SystemClock.sleep(10);
+ Log.d("b/156287114", line);
+ }
+ } catch (IOException e) {
+ Log.d("b/156287114", "Failed to execute " + command);
+ }
+ }
+
private void fail(String message) {
checkForAnomaly();
Assert.fail(formatSystemHealthMessage(formatErrorWithEvents(
@@ -833,27 +849,42 @@
@NonNull
List<UiObject2> getObjectsInContainer(UiObject2 container, String resName) {
- return container.findObjects(getLauncherObjectSelector(resName));
+ try {
+ return container.findObjects(getLauncherObjectSelector(resName));
+ } catch (StaleObjectException e) {
+ fail("The container disappeared from screen");
+ return null;
+ }
}
@NonNull
UiObject2 waitForObjectInContainer(UiObject2 container, String resName) {
- final UiObject2 object = container.wait(
- Until.findObject(getLauncherObjectSelector(resName)),
- WAIT_TIME_MS);
- assertNotNull("Can't find a view in Launcher, id: " + resName + " in container: "
- + container.getResourceName(), object);
- return object;
+ try {
+ final UiObject2 object = container.wait(
+ Until.findObject(getLauncherObjectSelector(resName)),
+ WAIT_TIME_MS);
+ assertNotNull("Can't find a view in Launcher, id: " + resName + " in container: "
+ + container.getResourceName(), object);
+ return object;
+ } catch (StaleObjectException e) {
+ fail("The container disappeared from screen");
+ return null;
+ }
}
@NonNull
UiObject2 waitForObjectInContainer(UiObject2 container, BySelector selector) {
- final UiObject2 object = container.wait(
- Until.findObject(selector),
- WAIT_TIME_MS);
- assertNotNull("Can't find a view in Launcher, id: " + selector + " in container: "
- + container.getResourceName(), object);
- return object;
+ try {
+ final UiObject2 object = container.wait(
+ Until.findObject(selector),
+ WAIT_TIME_MS);
+ assertNotNull("Can't find a view in Launcher, id: " + selector + " in container: "
+ + container.getResourceName(), object);
+ return object;
+ } catch (StaleObjectException e) {
+ fail("The container disappeared from screen");
+ return null;
+ }
}
private boolean hasLauncherObject(String resId) {
@@ -1144,7 +1175,8 @@
}
final MotionEvent event = getMotionEvent(downTime, currentTime, action, point.x, point.y);
- mInstrumentation.getUiAutomation().injectInputEvent(event, true);
+ assertTrue("injectInputEvent failed",
+ mInstrumentation.getUiAutomation().injectInputEvent(event, true));
event.recycle();
}
@@ -1318,16 +1350,7 @@
if (mCheckEventsForSuccessfulGestures) {
final String message = sEventChecker.verify(WAIT_TIME_MS, true);
if (message != null) {
- try {
- Log.e("b/156287114", "Input:");
- for (String line : mDevice.executeShellCommand("dumpsys input").split(
- "\\n")) {
- Log.d("b/156287114", line);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
+ dumpDiagnostics();
checkForAnomaly();
Assert.fail(formatSystemHealthMessage(
"http://go/tapl : successful gesture produced " + message));