Merge "Add dedicated a11y label for archived apps." into main
diff --git a/Android.bp b/Android.bp
index 4354b66..8f2e5a6 100644
--- a/Android.bp
+++ b/Android.bp
@@ -204,6 +204,7 @@
"com_android_launcher3_flags_lib",
"com_android_wm_shell_flags_lib",
"android.appwidget.flags-aconfig-java",
+ "com.android.window.flags.window-aconfig-java",
],
sdk_version: "current",
min_sdk_version: min_launcher3_sdk_version,
diff --git a/aconfig/Android.bp b/aconfig/Android.bp
index 5413601..bca7494 100644
--- a/aconfig/Android.bp
+++ b/aconfig/Android.bp
@@ -20,7 +20,7 @@
aconfig_declarations {
name: "com_android_launcher3_flags",
package: "com.android.launcher3",
- container: "system",
+ container: "system_ext",
srcs: ["**/*.aconfig"],
}
diff --git a/aconfig/launcher.aconfig b/aconfig/launcher.aconfig
index 147cac6..a37141c 100644
--- a/aconfig/launcher.aconfig
+++ b/aconfig/launcher.aconfig
@@ -1,5 +1,5 @@
package: "com.android.launcher3"
-container: "system"
+container: "system_ext"
flag {
name: "enable_expanding_pause_work_button"
@@ -186,3 +186,23 @@
description: "Use an activity for home screen overlay"
bug: "273828110"
}
+
+flag {
+ name: "grid_migration_fix"
+ namespace: "launcher"
+ description: "Keep items in place when migrating to a bigger grid"
+ bug: "325286145"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
+ name: "narrow_grid_restore"
+ namespace: "launcher"
+ description: "Using only the most recent workspace when restoring to avoid confusion."
+ bug: "325285743"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/aconfig/launcher_search.aconfig b/aconfig/launcher_search.aconfig
index 2f2690e..31d8d34 100644
--- a/aconfig/launcher_search.aconfig
+++ b/aconfig/launcher_search.aconfig
@@ -1,5 +1,5 @@
package: "com.android.launcher3"
-container: "system"
+container: "system_ext"
flag {
name: "enable_private_space"
@@ -41,4 +41,4 @@
namespace: "launcher_search"
description: "This flag disables drag and drop for Private Space Items."
bug: "289223923"
-}
\ No newline at end of file
+}
diff --git a/go/quickstep/res/values-my/strings.xml b/go/quickstep/res/values-my/strings.xml
index cbb485a..5fcb5bd 100644
--- a/go/quickstep/res/values-my/strings.xml
+++ b/go/quickstep/res/values-my/strings.xml
@@ -9,11 +9,11 @@
<string name="dialog_cancel" msgid="6464336969134856366">"မလုပ်တော့"</string>
<string name="dialog_settings" msgid="6564397136021186148">"ဆက်တင်များ"</string>
<string name="niu_actions_confirmation_title" msgid="3863451714863526143">"ဖန်သားပြင်ပေါ်ရှိ စာသားကို ဘာသာပြန်ပါ (သို့) နားထောင်ပါ"</string>
- <string name="niu_actions_confirmation_text" msgid="2105271481950866089">"သင့်ဖန်သားပြင်ပေါ်ရှိ စာသား၊ ဝဘ်လိပ်စာနှင့် ဖန်သားပြင်ဓာတ်ပုံများကဲ့သို့ အချက်အလက်များကို Google နှင့် မျှဝေနိုင်သည်။\n\nသင်မျှဝေသည့် အချက်အလက်များကို ပြောင်းရန် "<b>"ဆက်တင်များ > အက်ပ်များ > မူရင်းအက်ပ်များ > ဒစ်ဂျစ်တယ် Assistant အက်ပ်"</b>" သို့ သွားပါ။"</string>
+ <string name="niu_actions_confirmation_text" msgid="2105271481950866089">"သင့်ဖန်သားပြင်ပေါ်ရှိ စာသား၊ ဝဘ်လိပ်စာနှင့် ဖန်သားပြင်ဓာတ်ပုံများကဲ့သို့ အချက်အလက်များကို Google နှင့် မျှဝေနိုင်သည်။\n\nသင်မျှဝေသည့် အချက်အလက်များကို ပြောင်းရန် "<b>"ဆက်တင်များ > အက်ပ်များ > မူရင်းအက်ပ်များ > ဒစ်ဂျစ်တယ်အထောက်အကူ အက်ပ်"</b>" သို့ သွားပါ။"</string>
<string name="assistant_not_selected_title" msgid="5017072974603345228">"ဤဝန်ဆောင်မှုကို အသုံးပြုရန် assistant ရွေးပါ"</string>
- <string name="assistant_not_selected_text" msgid="3244613673884359276">"ဖန်သားပြင်ပေါ်ရှိ စာသားကို နားထောင်ရန် (သို့) ဘာသာပြန်ဆိုရန် ‘ဆက်တင်များ’ တွင် ဒစ်ဂျစ်တယ် assistant အက်ပ် ရွေးပါ"</string>
+ <string name="assistant_not_selected_text" msgid="3244613673884359276">"ဖန်သားပြင်ပေါ်ရှိ စာသားကို နားထောင်ရန် (သို့) ဘာသာပြန်ဆိုရန် ‘ဆက်တင်များ’ တွင် ဒစ်ဂျစ်တယ်အထောက်အကူ အက်ပ် ရွေးပါ"</string>
<string name="assistant_not_supported_title" msgid="1675788067597484142">"ဤဝန်ဆောင်မှုကို သုံးရန် assistant ကို ပြောင်းပါ"</string>
- <string name="assistant_not_supported_text" msgid="1708031078549268884">"ဖန်သားပြင်ပေါ်ရှိ စာသားကို နားထောင်ရန် (သို့) ဘာသာပြန်ဆိုရန် ‘ဆက်တင်များ’ တွင် ဒစ်ဂျစ်တယ် assistant အက်ပ်ကို ပြောင်းပါ"</string>
+ <string name="assistant_not_supported_text" msgid="1708031078549268884">"ဖန်သားပြင်ပေါ်ရှိ စာသားကို နားထောင်ရန် (သို့) ဘာသာပြန်ဆိုရန် ‘ဆက်တင်များ’ တွင် ဒစ်ဂျစ်တယ်အထောက်အကူ အက်ပ်ကို ပြောင်းပါ"</string>
<string name="tooltip_listen" msgid="7634466447860989102">"ဤဖန်သားပြင်ပေါ်ရှိ စာသားကို နားထောင်ရန် ဤနေရာကို တို့ပါ"</string>
<string name="tooltip_translate" msgid="4184845868901542567">"ဤဖန်သားပြင်ပေါ်ရှိ စာသားကို ဘာသာပြန်ဆိုရန် ဤနေရာကို တို့ပါ"</string>
<string name="toast_p2p_app_not_shareable" msgid="7229739094132131536">"ဤအက်ပ်ကို မျှဝေ၍မရပါ"</string>
diff --git a/quickstep/res/layout/task_menu.xml b/quickstep/res/layout/task_menu.xml
index 622edfe..b6d8786 100644
--- a/quickstep/res/layout/task_menu.xml
+++ b/quickstep/res/layout/task_menu.xml
@@ -35,11 +35,17 @@
android:paddingBottom="@dimen/task_menu_edge_padding"
android:textSize="16sp"/>
- <LinearLayout
- android:id="@+id/menu_option_layout"
+ <ScrollView
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:showDividers="middle" />
+ android:layout_height="wrap_content">
+
+ <LinearLayout
+ android:id="@+id/menu_option_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:showDividers="middle" />
+
+ </ScrollView>
</com.android.quickstep.views.TaskMenuView>
\ No newline at end of file
diff --git a/quickstep/res/values-uk/strings.xml b/quickstep/res/values-uk/strings.xml
index e18ddf5..c20c213 100644
--- a/quickstep/res/values-uk/strings.xml
+++ b/quickstep/res/values-uk/strings.xml
@@ -95,7 +95,7 @@
<string name="action_share" msgid="2648470652637092375">"Поділитися"</string>
<string name="action_screenshot" msgid="8171125848358142917">"Знімок екрана"</string>
<string name="action_split" msgid="2098009717623550676">"Розділити"</string>
- <string name="toast_split_select_app" msgid="8464310533320556058">"Щоб розділити екран, виберіть ще один додаток"</string>
+ <string name="toast_split_select_app" msgid="8464310533320556058">"Щоб розділити екран, виберіть ще один додаток."</string>
<string name="toast_contextual_split_select_app" msgid="433510957123687090">"Щоб розділити екран, виберіть ще один додаток."</string>
<string name="toast_split_select_app_cancel" msgid="1532690483356445639"><b>"Скасувати"</b></string>
<string name="toast_split_select_cont_desc" msgid="2119685056059607602">"Вийти з режиму розділення екрана"</string>
diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml
index 853ac74..3331321 100644
--- a/quickstep/res/values/dimens.xml
+++ b/quickstep/res/values/dimens.xml
@@ -401,6 +401,9 @@
<dimen name="taskbar_pinning_popup_menu_width">300dp</dimen>
<dimen name="taskbar_pinning_popup_menu_vertical_margin">16dp</dimen>
+ <!--- Floating Ime Inset height-->
+ <dimen name="floating_ime_inset_height">60dp</dimen>
+
<!-- Recents overview -->
<dimen name="recents_filter_icon_size">30dp</dimen>
diff --git a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
index 842f0ef..15180ef 100644
--- a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
+++ b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java
@@ -35,7 +35,7 @@
import androidx.annotation.UiThread;
import com.android.systemui.animation.RemoteAnimationDelegate;
-import com.android.systemui.shared.system.RemoteAnimationRunnerCompat;
+import com.android.systemui.animation.RemoteAnimationRunnerCompat;
import java.lang.ref.WeakReference;
diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
index 851f2b3..75b8796c 100644
--- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
+++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
@@ -161,10 +161,10 @@
import com.android.systemui.animation.DelegateTransitionAnimatorController;
import com.android.systemui.animation.LaunchableView;
import com.android.systemui.animation.RemoteAnimationDelegate;
+import com.android.systemui.animation.RemoteAnimationRunnerCompat;
import com.android.systemui.shared.system.BlurUtils;
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
import com.android.systemui.shared.system.QuickStepContract;
-import com.android.systemui.shared.system.RemoteAnimationRunnerCompat;
import com.android.wm.shell.startingsurface.IStartingWindowListener;
import java.io.PrintWriter;
@@ -2049,7 +2049,7 @@
private final RemoteAnimationTarget[] mAppTargets;
private final Matrix mMatrix = new Matrix();
private final Point mTmpPos = new Point();
- private final Rect mCurrentRect = new Rect();
+ private final RectF mCurrentRectF = new RectF();
private final float mStartRadius;
private final float mEndRadius;
private final SurfaceTransactionApplier mSurfaceApplier;
@@ -2116,25 +2116,24 @@
}
if (target.mode == MODE_CLOSING) {
- transferRectToTargetCoordinate(target, currentRectF, false, currentRectF);
- currentRectF.round(mCurrentRect);
+ transferRectToTargetCoordinate(target, currentRectF, false, mCurrentRectF);
// Scale the target window to match the currentRectF.
final float scale;
// We need to infer the crop (we crop the window to match the currentRectF).
if (mWindowStartBounds.height() > mWindowStartBounds.width()) {
- scale = Math.min(1f, currentRectF.width() / mWindowOriginalBounds.width());
+ scale = Math.min(1f, mCurrentRectF.width() / mWindowOriginalBounds.width());
- int unscaledHeight = (int) (mCurrentRect.height() * (1f / scale));
+ int unscaledHeight = (int) (mCurrentRectF.height() * (1f / scale));
int croppedHeight = mWindowStartBounds.height() - unscaledHeight;
mTmpRect.set(0, 0, mWindowOriginalBounds.width(),
mWindowStartBounds.height() - croppedHeight);
} else {
- scale = Math.min(1f, currentRectF.height()
+ scale = Math.min(1f, mCurrentRectF.height()
/ mWindowOriginalBounds.height());
- int unscaledWidth = (int) (mCurrentRect.width() * (1f / scale));
+ int unscaledWidth = (int) (mCurrentRectF.width() * (1f / scale));
int croppedWidth = mWindowStartBounds.width() - unscaledWidth;
mTmpRect.set(0, 0, mWindowStartBounds.width() - croppedWidth,
mWindowOriginalBounds.height());
@@ -2142,7 +2141,7 @@
// Match size and position of currentRect.
mMatrix.setScale(scale, scale);
- mMatrix.postTranslate(mCurrentRect.left, mCurrentRect.top);
+ mMatrix.postTranslate(mCurrentRectF.left, mCurrentRectF.top);
builder.setMatrix(mMatrix)
.setWindowCrop(mTmpRect)
diff --git a/quickstep/src/com/android/launcher3/WidgetPickerActivity.java b/quickstep/src/com/android/launcher3/WidgetPickerActivity.java
index 68e7824..8c4db4a 100644
--- a/quickstep/src/com/android/launcher3/WidgetPickerActivity.java
+++ b/quickstep/src/com/android/launcher3/WidgetPickerActivity.java
@@ -219,7 +219,9 @@
final boolean isHorizontallyResizable =
(info.resizeMode & AppWidgetProviderInfo.RESIZE_HORIZONTAL) != 0;
if (mDesiredWidgetWidth > 0 && isHorizontallyResizable) {
- if (info.maxResizeWidth > 0 && info.maxResizeWidth < mDesiredWidgetWidth) {
+ if (info.maxResizeWidth > 0
+ && info.maxResizeWidth >= info.minWidth
+ && info.maxResizeWidth < mDesiredWidgetWidth) {
return rejectWidget(
widget,
"maxResizeWidth[%d] < mDesiredWidgetWidth[%d]",
@@ -227,12 +229,13 @@
mDesiredWidgetWidth);
}
- final int minWidth = info.minResizeWidth > 0 ? info.minResizeWidth : info.minWidth;
+ final int minWidth = Math.min(info.minResizeWidth, info.minWidth);
if (minWidth > mDesiredWidgetWidth) {
return rejectWidget(
widget,
- "minWidth[%d] > mDesiredWidgetWidth[%d]",
- minWidth,
+ "min(minWidth[%d], minResizeWidth[%d]) > mDesiredWidgetWidth[%d]",
+ info.minWidth,
+ info.minResizeWidth,
mDesiredWidgetWidth);
}
}
@@ -240,7 +243,9 @@
final boolean isVerticallyResizable =
(info.resizeMode & AppWidgetProviderInfo.RESIZE_VERTICAL) != 0;
if (mDesiredWidgetHeight > 0 && isVerticallyResizable) {
- if (info.maxResizeHeight > 0 && info.maxResizeHeight < mDesiredWidgetHeight) {
+ if (info.maxResizeHeight > 0
+ && info.maxResizeHeight >= info.minHeight
+ && info.maxResizeHeight < mDesiredWidgetHeight) {
return rejectWidget(
widget,
"maxResizeHeight[%d] < mDesiredWidgetHeight[%d]",
@@ -248,20 +253,19 @@
mDesiredWidgetHeight);
}
- final int minHeight = info.minResizeHeight > 0 ? info.minResizeHeight : info.minHeight;
+ final int minHeight = Math.min(info.minResizeHeight, info.minHeight);
if (minHeight > mDesiredWidgetHeight) {
return rejectWidget(
widget,
- "minHeight[%d] > mDesiredWidgetHeight[%d]",
- minHeight,
+ "min(minHeight[%d], minResizeHeight[%d]) > mDesiredWidgetHeight[%d]",
+ info.minHeight,
+ info.minResizeHeight,
mDesiredWidgetHeight);
}
}
- if (!isHorizontallyResizable
- && !isVerticallyResizable
- && (info.minWidth < mDesiredWidgetWidth || info.minHeight < mDesiredWidgetHeight)) {
- return rejectWidget(widget, "too small and not resizeable");
+ if (!isHorizontallyResizable || !isVerticallyResizable) {
+ return rejectWidget(widget, "not resizeable");
}
return acceptWidget(widget);
@@ -271,12 +275,15 @@
WidgetItem widget, String rejectionReason, Object... args) {
return new WidgetAcceptabilityVerdict(
false,
- widget.label,
+ widget.widgetInfo != null
+ ? widget.widgetInfo.provider.flattenToShortString()
+ : widget.label,
String.format(Locale.ENGLISH, rejectionReason, args));
}
private static WidgetAcceptabilityVerdict acceptWidget(WidgetItem widget) {
- return new WidgetAcceptabilityVerdict(true, widget.label, "");
+ return new WidgetAcceptabilityVerdict(
+ true, widget.widgetInfo.provider.flattenToShortString(), "");
}
private record WidgetAcceptabilityVerdict(
diff --git a/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java b/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java
index 2d4894c..4741ddd 100644
--- a/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java
+++ b/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java
@@ -285,7 +285,8 @@
if (dragLayer != null) {
dragLayer.setVisibility(visibility);
}
- if (mLauncher instanceof QuickstepLauncher ql && ql.getTaskbarUIController() != null) {
+ if (mLauncher instanceof QuickstepLauncher ql && ql.getTaskbarUIController() != null
+ && mVisibleFreeformTasksCount != 0) {
ql.getTaskbarUIController().onLauncherVisibilityChanged(visibility == VISIBLE);
}
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarUIController.java
index 633325b..2dd610c4 100644
--- a/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarUIController.java
@@ -16,7 +16,10 @@
package com.android.launcher3.taskbar;
+import androidx.annotation.Nullable;
+
import com.android.launcher3.uioverrides.QuickstepLauncher;
+import com.android.quickstep.util.TISBindHelper;
/**
* A data source which integrates with a Launcher instance, used specifically for a
@@ -50,4 +53,10 @@
public boolean supportsVisualStashing() {
return false;
}
+
+ @Nullable
+ @Override
+ protected TISBindHelper getTISBindHelper() {
+ return mLauncher.getTISBindHelper();
+ }
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/FallbackTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/FallbackTaskbarUIController.java
index f981610..c0ecc61 100644
--- a/quickstep/src/com/android/launcher3/taskbar/FallbackTaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/FallbackTaskbarUIController.java
@@ -21,11 +21,14 @@
import android.animation.Animator;
+import androidx.annotation.Nullable;
+
import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.statemanager.StateManager;
import com.android.quickstep.RecentsActivity;
import com.android.quickstep.TopTaskTracker;
import com.android.quickstep.fallback.RecentsState;
+import com.android.quickstep.util.TISBindHelper;
import com.android.quickstep.views.RecentsView;
import java.util.stream.Stream;
@@ -124,4 +127,10 @@
.get(mControllers.taskbarActivityContext).getCachedTopTask(true);
return topTask.isHomeTask() || topTask.isRecentsTask();
}
+
+ @Nullable
+ @Override
+ protected TISBindHelper getTISBindHelper() {
+ return mRecentsActivity.getTISBindHelper();
+ }
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchView.java b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchView.java
index 42c423c..2d9e236 100644
--- a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchView.java
@@ -147,7 +147,7 @@
KeyboardQuickSwitchTaskView taskView = (KeyboardQuickSwitchTaskView) layoutInflater.inflate(
R.layout.keyboard_quick_switch_taskview, mContent, false);
taskView.setId(View.generateViewId());
- taskView.setOnClickListener(v -> mViewCallbacks.launchTappedTask(index));
+ taskView.setOnClickListener(v -> mViewCallbacks.launchTaskAt(index));
LayoutParams lp = new LayoutParams(width, mTaskViewHeight);
// Create a left-to-right ordering of views (or right-to-left in RTL locales)
@@ -186,7 +186,7 @@
KeyboardQuickSwitchTaskView overviewButton =
(KeyboardQuickSwitchTaskView) layoutInflater.inflate(
R.layout.keyboard_quick_switch_overview, this, false);
- overviewButton.setOnClickListener(v -> mViewCallbacks.launchTappedTask(MAX_TASKS));
+ overviewButton.setOnClickListener(v -> mViewCallbacks.launchTaskAt(MAX_TASKS));
overviewButton.<TextView>findViewById(R.id.text).setText(overflowString);
diff --git a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
index 3e262e5..c830aa8 100644
--- a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
@@ -22,7 +22,6 @@
import android.animation.Animator;
import android.app.ActivityOptions;
import android.view.KeyEvent;
-import android.view.View;
import android.view.animation.AnimationUtils;
import android.window.RemoteTransition;
@@ -137,7 +136,6 @@
}
// Even with a valid index, this can be null if the user tries to quick switch before the
// views have been added in the KeyboardQuickSwitchView.
- View taskView = mKeyboardQuickSwitchView.getTaskAt(index);
GroupTask task = mControllerCallbacks.getTaskAt(index);
if (task == null) {
return Math.max(0, index);
@@ -198,13 +196,18 @@
&& keyCode != KeyEvent.KEYCODE_DPAD_RIGHT
&& keyCode != KeyEvent.KEYCODE_DPAD_LEFT
&& keyCode != KeyEvent.KEYCODE_GRAVE
- && keyCode != KeyEvent.KEYCODE_ESCAPE) {
+ && keyCode != KeyEvent.KEYCODE_ESCAPE
+ && keyCode != KeyEvent.KEYCODE_ENTER) {
return false;
}
if (keyCode == KeyEvent.KEYCODE_GRAVE || keyCode == KeyEvent.KEYCODE_ESCAPE) {
closeQuickSwitchView(true);
return true;
}
+ if (keyCode == KeyEvent.KEYCODE_ENTER) {
+ launchTaskAt(mCurrentFocusIndex);
+ return true;
+ }
if (!allowTraversal) {
return false;
}
@@ -234,9 +237,10 @@
mCurrentFocusIndex = index;
}
- void launchTappedTask(int index) {
- KeyboardQuickSwitchViewController.this.launchTaskAt(index);
- closeQuickSwitchView(true);
+ void launchTaskAt(int index) {
+ mCurrentFocusIndex = Utilities.boundToRange(
+ index, 0, mKeyboardQuickSwitchView.getChildCount() - 1);
+ mControllers.taskbarActivityContext.launchKeyboardFocusedTask();
}
void updateThumbnailInBackground(Task task, Consumer<ThumbnailData> callback) {
diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
index 50e8d0e..1e861d2 100644
--- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
@@ -52,6 +52,7 @@
import com.android.quickstep.LauncherActivityInterface;
import com.android.quickstep.RecentsAnimationCallbacks;
import com.android.quickstep.util.GroupTask;
+import com.android.quickstep.util.TISBindHelper;
import com.android.quickstep.views.RecentsView;
import java.io.PrintWriter;
@@ -428,6 +429,12 @@
mTaskbarLauncherStateController.resetIconAlignment();
}
+ @Nullable
+ @Override
+ protected TISBindHelper getTISBindHelper() {
+ return mLauncher.getTISBindHelper();
+ }
+
@Override
public void dumpLogs(String prefix, PrintWriter pw) {
super.dumpLogs(prefix, pw);
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index 9006df8..87662e6 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -72,6 +72,8 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
+import androidx.core.graphics.Insets;
+import androidx.core.view.WindowInsetsCompat;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BubbleTextView;
@@ -418,6 +420,28 @@
}
/**
+ * Returns if software keyboard is docked or input toolbar is placed at the taskbar area
+ */
+ public boolean isImeDocked() {
+ View dragLayer = getDragLayer();
+ WindowInsets insets = dragLayer.getRootWindowInsets();
+ if (insets == null) {
+ return false;
+ }
+
+ WindowInsetsCompat insetsCompat =
+ WindowInsetsCompat.toWindowInsetsCompat(insets, dragLayer.getRootView());
+
+ if (insetsCompat.isVisible(WindowInsetsCompat.Type.ime())) {
+ Insets imeInsets = insetsCompat.getInsets(WindowInsetsCompat.Type.ime());
+ return imeInsets.bottom >= getResources().getDimensionPixelSize(
+ R.dimen.floating_ime_inset_height);
+ } else {
+ return false;
+ }
+ }
+
+ /**
* Show Taskbar upon receiving broadcast
*/
public void showTaskbarFromBroadcast() {
@@ -505,52 +529,26 @@
/**
* Creates {@link WindowManager.LayoutParams} for Taskbar, and also sets LP.paramsForRotation
- * for taskbar showing as navigation bar
+ * for taskbar
*/
private WindowManager.LayoutParams createAllWindowParams() {
final int windowType =
ENABLE_TASKBAR_NAVBAR_UNIFICATION ? TYPE_NAVIGATION_BAR : TYPE_NAVIGATION_BAR_PANEL;
WindowManager.LayoutParams windowLayoutParams =
createDefaultWindowLayoutParams(windowType, TaskbarActivityContext.WINDOW_TITLE);
- if (!isPhoneButtonNavMode()) {
- return windowLayoutParams;
- }
- // Provide WM layout params for all rotations to cache, see NavigationBar#getBarLayoutParams
- int width = WindowManager.LayoutParams.MATCH_PARENT;
- int height = WindowManager.LayoutParams.MATCH_PARENT;
- int gravity = Gravity.BOTTOM;
windowLayoutParams.paramsForRotation = new WindowManager.LayoutParams[4];
for (int rot = Surface.ROTATION_0; rot <= Surface.ROTATION_270; rot++) {
WindowManager.LayoutParams lp =
createDefaultWindowLayoutParams(windowType,
TaskbarActivityContext.WINDOW_TITLE);
- switch (rot) {
- case Surface.ROTATION_0, Surface.ROTATION_180 -> {
- // Defaults are fine
- width = WindowManager.LayoutParams.MATCH_PARENT;
- height = mLastRequestedNonFullscreenSize;
- gravity = Gravity.BOTTOM;
- }
- case Surface.ROTATION_90 -> {
- width = mLastRequestedNonFullscreenSize;
- height = WindowManager.LayoutParams.MATCH_PARENT;
- gravity = Gravity.END;
- }
- case Surface.ROTATION_270 -> {
- width = mLastRequestedNonFullscreenSize;
- height = WindowManager.LayoutParams.MATCH_PARENT;
- gravity = Gravity.START;
- }
-
+ if (isPhoneButtonNavMode()) {
+ populatePhoneButtonNavModeWindowLayoutParams(rot, lp);
}
- lp.width = width;
- lp.height = height;
- lp.gravity = gravity;
windowLayoutParams.paramsForRotation[rot] = lp;
}
- // Override current layout params
+ // Override with current layout params
WindowManager.LayoutParams currentParams =
windowLayoutParams.paramsForRotation[getDisplay().getRotation()];
windowLayoutParams.width = currentParams.width;
@@ -560,6 +558,32 @@
return windowLayoutParams;
}
+ /**
+ * Update {@link WindowManager.LayoutParams} with values specific to phone and 3 button
+ * navigation users
+ */
+ private void populatePhoneButtonNavModeWindowLayoutParams(int rot,
+ WindowManager.LayoutParams lp) {
+ lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+ lp.height = WindowManager.LayoutParams.MATCH_PARENT;
+ lp.gravity = Gravity.BOTTOM;
+
+ // Override with per-rotation specific values
+ switch (rot) {
+ case Surface.ROTATION_0, Surface.ROTATION_180 -> {
+ lp.height = mLastRequestedNonFullscreenSize;
+ }
+ case Surface.ROTATION_90 -> {
+ lp.width = mLastRequestedNonFullscreenSize;
+ lp.gravity = Gravity.END;
+ }
+ case Surface.ROTATION_270 -> {
+ lp.width = mLastRequestedNonFullscreenSize;
+ lp.gravity = Gravity.START;
+ }
+ }
+ }
+
public void onConfigurationChanged(@Config int configChanges) {
mControllers.onConfigurationChanged(configChanges);
if (!mIsUserSetupComplete) {
@@ -920,8 +944,10 @@
}
if (landscapePhoneButtonNav) {
mWindowLayoutParams.width = size;
+ mWindowLayoutParams.paramsForRotation[getDisplay().getRotation()].width = size;
} else {
mWindowLayoutParams.height = size;
+ mWindowLayoutParams.paramsForRotation[getDisplay().getRotation()].height = size;
}
mControllers.taskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged();
notifyUpdateLayoutParams();
@@ -1485,6 +1511,10 @@
btv.post(() -> mControllers.taskbarPopupController.showForIcon(btv));
}
+ public void launchKeyboardFocusedTask() {
+ mControllers.uiController.launchKeyboardFocusedTask();
+ }
+
public boolean isInApp() {
return mControllers.taskbarStashController.isInApp();
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
index f6478df..7f201b4 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
@@ -30,9 +30,12 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
+import android.view.WindowInsets;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.graphics.Insets;
+import androidx.core.view.WindowInsetsCompat;
import com.android.app.viewcapture.SettingsAwareViewCapture;
import com.android.launcher3.AbstractFloatingView;
@@ -111,6 +114,18 @@
}
@Override
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+ if (insets != null) {
+ WindowInsetsCompat insetsCompat = WindowInsetsCompat.toWindowInsetsCompat(insets, this);
+ Insets imeInsets = insetsCompat.getInsets(WindowInsetsCompat.Type.ime());
+ if (imeInsets != null) {
+ mControllerCallbacks.onImeInsetChanged();
+ }
+ }
+ return insets;
+ }
+
+ @Override
public void recreateControllers() {
mControllers = mControllerCallbacks.getTouchControllers();
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
index 74eda24..e48c20d 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
@@ -276,6 +276,13 @@
}
/**
+ * Called when an IME inset is changed.
+ */
+ public void onImeInsetChanged() {
+ mControllers.taskbarStashController.onImeInsetChanged();
+ }
+
+ /**
* Called when a child is removed from TaskbarDragLayer.
*/
public void onDragLayerViewRemoved() {
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt
index aa457ca..567fad0 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarInsetsController.kt
@@ -118,11 +118,9 @@
getProvidedInsets(insetsRoundedCornerFlag)
}
- if (!context.isGestureNav) {
- if (windowLayoutParams.paramsForRotation != null) {
- for (layoutParams in windowLayoutParams.paramsForRotation) {
- layoutParams.providedInsets = getProvidedInsets(insetsRoundedCornerFlag)
- }
+ if (windowLayoutParams.paramsForRotation != null) {
+ for (layoutParams in windowLayoutParams.paramsForRotation) {
+ layoutParams.providedInsets = getProvidedInsets(insetsRoundedCornerFlag)
}
}
@@ -156,19 +154,12 @@
)
}
- val gravity = windowLayoutParams.gravity
-
// Pre-calculate insets for different providers across different rotations for this gravity
for (rotation in Surface.ROTATION_0..Surface.ROTATION_270) {
// Add insets for navbar rotated params
- if (windowLayoutParams.paramsForRotation != null) {
- val layoutParams = windowLayoutParams.paramsForRotation[rotation]
- for (provider in layoutParams.providedInsets) {
- setProviderInsets(provider, layoutParams.gravity, rotation)
- }
- }
- for (provider in windowLayoutParams.providedInsets) {
- setProviderInsets(provider, gravity, rotation)
+ val layoutParams = windowLayoutParams.paramsForRotation[rotation]
+ for (provider in layoutParams.providedInsets) {
+ setProviderInsets(provider, layoutParams.gravity, rotation)
}
}
context.notifyUpdateLayoutParams()
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
index 8db343f..854b0d0 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
@@ -310,8 +310,16 @@
boolean isTransientTaskbar = DisplayController.isTransientTaskbar(mActivity);
boolean isInSetup = !mActivity.isUserSetupComplete() || setupUIVisible;
- boolean isStashedInAppAuto =
- isTransientTaskbar && !mTaskbarSharedState.getTaskbarWasPinned();
+ boolean taskbarWasPinned = mTaskbarSharedState.getTaskbarWasPinned();
+ boolean isStashedInAppAuto = isTransientTaskbar && !taskbarWasPinned;
+
+ // now that we know we need to keep transient taskbar unstashed after unpinning animation
+ // we need to reset the shared state, so everytime user recreates taskbar we don't unstash
+ // transient taskbar by default.
+ if (mTaskbarSharedState.getTaskbarWasPinned()) {
+ mTaskbarSharedState.setTaskbarWasPinned(false);
+ }
+
if (ENABLE_TASKBAR_NAVBAR_UNIFICATION) {
isStashedInAppAuto = isStashedInAppAuto && mTaskbarSharedState.taskbarWasStashedAuto;
}
@@ -324,8 +332,7 @@
// us that we're paused until a bit later. This avoids flickering upon recreating taskbar.
updateStateForFlag(FLAG_IN_APP, true);
applyState(/* duration = */ 0);
- if (mTaskbarSharedState.getTaskbarWasPinned()
- || !mTaskbarSharedState.taskbarWasStashedAuto) {
+ if (taskbarWasPinned || !mTaskbarSharedState.taskbarWasStashedAuto) {
tryStartTaskbarTimeout();
}
notifyStashChange(/* visible */ false, /* stashed */ isStashedInApp());
@@ -549,7 +556,8 @@
createAnimToIsStashed(
/* isStashed= */ false,
placeholderDuration,
- TRANSITION_UNSTASH_SUW_MANUAL);
+ TRANSITION_UNSTASH_SUW_MANUAL,
+ /* jankTag= */ "SUW_MANUAL");
animation.addListener(AnimatorListeners.forEndCallback(
() -> mControllers.taskbarViewController.setDeferUpdatesForSUW(false)));
animation.play(mAnimator);
@@ -560,9 +568,10 @@
* @param isStashed whether it's a stash animation or an unstash animation
* @param duration duration of the animation
* @param animationType what transition type to play.
+ * @param jankTag tag to be used in jank monitor trace.
*/
private void createAnimToIsStashed(boolean isStashed, long duration,
- @StashAnimation int animationType) {
+ @StashAnimation int animationType, String jankTag) {
if (animationType == TRANSITION_UNSTASH_SUW_MANUAL && isStashed) {
// The STASH_ANIMATION_SUW_MANUAL must only be used during an unstash animation.
Log.e(TAG, "Illegal arguments:Using TRANSITION_UNSTASH_SUW_MANUAL to stash taskbar");
@@ -573,7 +582,7 @@
}
mAnimator = new AnimatorSet();
addJankMonitorListener(
- mAnimator, /* expanding= */ !mIsStashed, /* animationType= */ animationType);
+ mAnimator, /* expanding= */ !isStashed, /* tag= */ jankTag);
boolean isTransientTaskbar = DisplayController.isTransientTaskbar(mActivity);
final float stashTranslation = mActivity.isPhoneMode() || isTransientTaskbar
? 0
@@ -800,7 +809,7 @@
}
private void addJankMonitorListener(
- AnimatorSet animator, boolean expanding, @StashAnimation int animationType) {
+ AnimatorSet animator, boolean expanding, String tag) {
View v = mControllers.taskbarActivityContext.getDragLayer();
if (!v.isAttachedToWindow()) {
// If the task bar drag layer is not attached to window, we don't need to monitor jank
@@ -814,8 +823,8 @@
public void onAnimationStart(@NonNull Animator animation) {
final Configuration.Builder builder =
Configuration.Builder.withView(action, v);
- if (animationType == TRANSITION_HOME_TO_APP) {
- builder.setTag("HOME_TO_APP");
+ if (tag != null) {
+ builder.setTag(tag);
}
InteractionJankMonitor.getInstance().begin(builder);
}
@@ -891,6 +900,10 @@
}
// Only update the following flags when system gesture is not in progress.
+ setStashedImeState();
+ }
+
+ private void setStashedImeState() {
boolean shouldStashForIme = shouldStashForIme();
updateStateForFlag(FLAG_STASHED_IN_TASKBAR_ALL_APPS, false);
if (hasAnyFlag(FLAG_STASHED_IN_APP_IME) != shouldStashForIme) {
@@ -902,6 +915,13 @@
}
/**
+ * Should be called when Ime inset is changed to determine if taskbar should be stashed
+ */
+ public void onImeInsetChanged() {
+ setStashedImeState();
+ }
+
+ /**
* When hiding the IME, delay the unstash animation to align with the end of the transition.
*/
private long getTaskbarStashStartDelayForIme() {
@@ -950,7 +970,7 @@
*
* <p>Do not stash if in small screen, with 3 button nav, and in landscape (or seascape).
* <p>Do not stash if taskbar is transient.
- * <p>Do not stash if hardware keyboard is attached and taskbar is pinned.
+ * <p>Do not stash if hardware keyboard is attached and taskbar is pinned and IME is docked
*/
private boolean shouldStashForIme() {
if (DisplayController.isTransientTaskbar(mActivity)) {
@@ -961,8 +981,10 @@
&& mActivity.getDeviceProfile().isLandscape) {
return false;
}
- // Do not stash if pinned taskbar and hardware keyboard is attached.
- if (mActivity.isHardwareKeyboard() && DisplayController.isPinnedTaskbar(mActivity)) {
+
+ // Do not stash if pinned taskbar, hardware keyboard is attached and no IME is docked
+ if (mActivity.isHardwareKeyboard() && DisplayController.isPinnedTaskbar(mActivity)
+ && !mActivity.isImeDocked()) {
return false;
}
@@ -1215,12 +1237,34 @@
mLastStartedTransitionType = animationType;
// This sets mAnimator.
- createAnimToIsStashed(mIsStashed, duration, animationType);
+ createAnimToIsStashed(mIsStashed, duration, animationType,
+ computeTaskbarJankMonitorTag(changedFlags));
return mAnimator;
}
return null;
}
+ /** Calculates the tag for CUJ_TASKBAR_EXPAND and CUJ_TASKBAR_COLLAPSE jank traces.*/
+ private String computeTaskbarJankMonitorTag(int changedFlags) {
+ if (hasAnyFlag(changedFlags, FLAG_IN_APP)) {
+ // moving in or out of the app
+ if (hasAnyFlag(FLAG_IN_APP)) {
+ return "Home to App";
+ } else {
+ return "App to Home";
+ }
+ }
+ if (hasAnyFlag(changedFlags, FLAG_STASHED_IN_APP_AUTO)) {
+ // stash and unstash with-in the app
+ if (hasAnyFlag(FLAG_STASHED_IN_APP_AUTO)) {
+ return "Stashed in app";
+ } else {
+ return "Manually unstashed";
+ }
+ }
+ return "";
+ }
+
private @StashAnimation int computeTransitionType(int changedFlags) {
boolean hotseatHiddenDuringAppLaunch =
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
index af1bd2a..efe1e39 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java
@@ -20,6 +20,7 @@
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT;
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION;
import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_APP;
+import static com.android.quickstep.OverviewCommandHelper.TYPE_HIDE;
import android.content.Intent;
import android.graphics.drawable.BitmapDrawable;
@@ -38,7 +39,9 @@
import com.android.launcher3.popup.SystemShortcut;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.SplitConfigurationOptions;
+import com.android.quickstep.OverviewCommandHelper;
import com.android.quickstep.util.GroupTask;
+import com.android.quickstep.util.TISBindHelper;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
import com.android.quickstep.views.TaskView.TaskIdAttributeContainer;
@@ -361,6 +364,28 @@
/** Adjusts the hotseat for the bubble bar. */
public void adjustHotseatForBubbleBar(boolean isBubbleBarVisible) {}
+ @Nullable
+ protected TISBindHelper getTISBindHelper() {
+ return null;
+ }
+
+ /**
+ * Launches the focused task in the Keyboard Quick Switch view through the OverviewCommandHelper
+ * <p>
+ * Use this helper method when the focused task may be the overview task.
+ */
+ public void launchKeyboardFocusedTask() {
+ TISBindHelper tisBindHelper = getTISBindHelper();
+ if (tisBindHelper == null) {
+ return;
+ }
+ OverviewCommandHelper overviewCommandHelper = tisBindHelper.getOverviewCommandHelper();
+ if (overviewCommandHelper == null) {
+ return;
+ }
+ overviewCommandHelper.addCommand(TYPE_HIDE);
+ }
+
/**
* Adjusts the taskbar based on the visibility of the launcher.
* @param isVisible True if launcher is visible, false otherwise.
diff --git a/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java b/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java
index 5c4eb9d..dcc3b05 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java
@@ -21,6 +21,7 @@
import android.app.Person;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.content.pm.LauncherUserInfo;
@@ -156,6 +157,13 @@
}
}
+ /**
+ * Checks if an activity is flagged as non-resizeable.
+ */
+ public static boolean isNonResizeableActivity(LauncherActivityInfo lai) {
+ return lai.getActivityInfo().resizeMode == ActivityInfo.RESIZE_MODE_UNRESIZEABLE;
+ }
+
private static class NoopDrawable extends ColorDrawable {
@Override
public int getIntrinsicHeight() {
diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java
index dbaeafb..2eced74 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java
@@ -112,7 +112,8 @@
boolean exitingOverview = !FeatureFlags.enableSplitContextually() && !toState.overviewUi;
if (mRecentsView.isSplitSelectionActive() && exitingOverview) {
setter.add(mRecentsView.getSplitSelectController().getSplitAnimationController()
- .createPlaceholderDismissAnim(mLauncher, LAUNCHER_SPLIT_SELECTION_EXIT_HOME));
+ .createPlaceholderDismissAnim(mLauncher, LAUNCHER_SPLIT_SELECTION_EXIT_HOME,
+ setter.getDuration()));
setter.setViewAlpha(
mRecentsView.getSplitInstructionsView(),
0,
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 722676a..2c45129 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -200,7 +200,7 @@
import java.util.List;
import java.util.Objects;
import java.util.Optional;
-import java.util.function.Consumer;
+import java.util.function.BiConsumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
@@ -245,6 +245,8 @@
private boolean mEnableWidgetDepth;
+ private boolean mIsPredictiveBackToHomeInProgress;
+
private HomeTransitionController mHomeTransitionController;
@Override
@@ -514,6 +516,7 @@
mAppTransitionManager.onActivityDestroyed();
}
mAppTransitionManager = null;
+ mIsPredictiveBackToHomeInProgress = false;
if (mUnfoldTransitionProgressProvider != null) {
SystemUiProxy.INSTANCE.get(this).setUnfoldAnimationListener(null);
@@ -596,9 +599,10 @@
ArrayList<TouchController> list = new ArrayList<>();
list.add(getDragController());
- Consumer<AnimatorSet> splitAnimator = animatorSet ->
+ BiConsumer<AnimatorSet, Long> splitAnimator = (animatorSet, duration) ->
animatorSet.play(mSplitSelectStateController.getSplitAnimationController()
- .createPlaceholderDismissAnim(this, LAUNCHER_SPLIT_SELECTION_EXIT_HOME));
+ .createPlaceholderDismissAnim(this, LAUNCHER_SPLIT_SELECTION_EXIT_HOME,
+ duration));
switch (mode) {
case NO_BUTTON:
list.add(new NoButtonQuickSwitchTouchController(this));
@@ -647,10 +651,13 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ // Back dispatcher is registered in {@link BaseActivity#onCreate}. For predictive back to
+ // work, we must opt-in BEFORE registering back dispatcher. So we need to call
+ // setEnableOnBackInvokedCallback() before super.onCreate()
if (Utilities.ATLEAST_U && enablePredictiveBackGesture()) {
getApplicationInfo().setEnableOnBackInvokedCallback(true);
}
+ super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mPendingSplitSelectInfo = ObjectWrapper.unwrap(
savedInstanceState.getIBinder(PENDING_SPLIT_SELECT_INFO));
@@ -974,6 +981,7 @@
if (taskbarManager != null) {
taskbarManager.setActivity(this);
}
+ mTISBindHelper.setPredictiveBackToHomeInProgress(mIsPredictiveBackToHomeInProgress);
}
@Override
@@ -1278,6 +1286,14 @@
mPendingSplitSelectInfo = null;
}
+ /**
+ * Sets flag whether a predictive back-to-home animation is in progress
+ */
+ public void setPredictiveBackToHomeInProgress(boolean isInProgress) {
+ mIsPredictiveBackToHomeInProgress = isInProgress;
+ mTISBindHelper.setPredictiveBackToHomeInProgress(isInProgress);
+ }
+
@Override
public boolean areFreeformTasksVisible() {
if (mDesktopVisibilityController != null) {
@@ -1348,6 +1364,11 @@
return (mTaskbarUIController != null && mTaskbarUIController.hasBubbles());
}
+ @NonNull
+ public TISBindHelper getTISBindHelper() {
+ return mTISBindHelper;
+ }
+
@Override
public boolean handleIncorrectSplitTargetSelection() {
if (!enableSplitContextually() || !mSplitSelectStateController.isSplitSelectActive()) {
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
index 0fb2b17..e3ff281 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
@@ -219,6 +219,20 @@
return () -> holderListener.mListeningHolders.remove(handler);
}
+ /**
+ * Recycling logic:
+ * The holder doesn't maintain any states associated with the view, so if the view was
+ * initially initialized by this holder, all its state are already set in the view. We just
+ * update the RemoteViews for this view again, in case the widget sent an update during the
+ * time between inflation and recycle.
+ */
+ @Override
+ protected LauncherAppWidgetHostView recycleExistingView(LauncherAppWidgetHostView view) {
+ RemoteViews views = getHolderListener(view.getAppWidgetId()).addHolder(mUpdateHandler);
+ view.updateAppWidget(views);
+ return view;
+ }
+
@NonNull
@Override
protected LauncherAppWidgetHostView createViewInternal(
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java
index 82a9c05..e8b5081 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java
@@ -54,7 +54,7 @@
import com.android.quickstep.util.OverviewToHomeAnim;
import com.android.quickstep.views.RecentsView;
-import java.util.function.Consumer;
+import java.util.function.BiConsumer;
/**
* Handles swiping up on the nav bar to go home from launcher, e.g. overview or all apps.
@@ -67,7 +67,7 @@
private static final float OVERVIEW_TO_HOME_SCRIM_MULTIPLIER = 0.5f;
private final Launcher mLauncher;
- private final Consumer<AnimatorSet> mCancelSplitRunnable;
+ private final BiConsumer<AnimatorSet, Long> mCancelSplitRunnable;
private final SingleAxisSwipeDetector mSwipeDetector;
private final float mPullbackDistance;
@@ -81,7 +81,7 @@
* Animation should be added to the provided AnimatorSet
*/
public NavBarToHomeTouchController(Launcher launcher,
- Consumer<AnimatorSet> cancelSplitRunnable) {
+ BiConsumer<AnimatorSet, Long> cancelSplitRunnable) {
mLauncher = launcher;
mCancelSplitRunnable = cancelSplitRunnable;
mSwipeDetector = new SingleAxisSwipeDetector(mLauncher, this,
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
index fc3eeba..26e994f 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonNavbarToOverviewTouchController.java
@@ -56,7 +56,7 @@
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
-import java.util.function.Consumer;
+import java.util.function.BiConsumer;
/**
* Touch controller which handles swipe and hold from the nav bar to go to Overview. Swiping above
@@ -72,7 +72,7 @@
private static final float TRANSLATION_ANIM_VELOCITY_DP_PER_MS = 0.8f;
private final VibratorWrapper mVibratorWrapper;
- private final Consumer<AnimatorSet> mCancelSplitRunnable;
+ private final BiConsumer<AnimatorSet, Long> mCancelSplitRunnable;
private final RecentsView mRecentsView;
private final MotionPauseDetector mMotionPauseDetector;
private final float mMotionPauseMinDisplacement;
@@ -93,7 +93,7 @@
* Animation should be added to the provided AnimatorSet
*/
public NoButtonNavbarToOverviewTouchController(Launcher l,
- Consumer<AnimatorSet> cancelSplitRunnable) {
+ BiConsumer<AnimatorSet, Long> cancelSplitRunnable) {
super(l);
mRecentsView = l.getOverviewPanel();
mMotionPauseDetector = new MotionPauseDetector(l);
@@ -208,9 +208,10 @@
// Normally we compute the duration based on the velocity and distance to the given
// state, but since the hint state tracks the entire screen without a clear endpoint, we
// need to manually set the duration to a reasonable value.
- animator.setDuration(HINT_STATE.getTransitionDuration(mLauncher, true /* isToState */));
+ long duration = HINT_STATE.getTransitionDuration(mLauncher, true /* isToState */);
+ animator.setDuration(duration);
AnimatorSet animatorSet = new AnimatorSet();
- mCancelSplitRunnable.accept(animatorSet);
+ mCancelSplitRunnable.accept(animatorSet, duration);
animatorSet.start();
}
if (FeatureFlags.ENABLE_PREMIUM_HAPTICS_ALL_APPS.get() &&
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
index b7a907f..a92e77a 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
@@ -324,12 +324,12 @@
@Override
public void onDragEnd(PointF velocity) {
+ cancelAnimations();
boolean horizontalFling = mSwipeDetector.isFling(velocity.x);
boolean verticalFling = mSwipeDetector.isFling(velocity.y);
boolean noFling = !horizontalFling && !verticalFling;
if (mMotionPauseDetector.isPaused() && noFling) {
// Going to Overview.
- cancelAnimations();
InteractionJankMonitorWrapper.cancel(Cuj.CUJ_LAUNCHER_QUICK_SWITCH);
StateAnimationConfig config = new StateAnimationConfig();
@@ -455,7 +455,6 @@
nonOverviewAnim.setDuration(Math.max(xDuration, yDuration));
mNonOverviewAnim.setEndAction(() -> onAnimationToStateCompleted(targetState));
- cancelAnimations();
xOverviewAnim.start();
yOverviewAnim.start();
nonOverviewAnim.start();
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
index ef5096b..e9f2d4f 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
@@ -21,7 +21,6 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
-import android.os.SystemClock;
import android.os.VibrationEffect;
import android.view.MotionEvent;
import android.view.View;
@@ -80,6 +79,7 @@
private float mDisplacementShift;
private float mProgressMultiplier;
private float mEndDisplacement;
+ private boolean mDraggingEnabled = true;
private FlingBlockCheck mFlingBlockCheck = new FlingBlockCheck();
private Float mOverrideVelocity = null;
@@ -270,6 +270,8 @@
@Override
public void onDragStart(boolean start, float startDisplacement) {
+ if (!mDraggingEnabled) return;
+
RecentsPagedOrientationHandler orientationHandler =
mRecentsView.getPagedOrientationHandler();
if (mCurrentAnimation == null) {
@@ -285,6 +287,8 @@
@Override
public boolean onDrag(float displacement) {
+ if (!mDraggingEnabled) return true;
+
RecentsPagedOrientationHandler orientationHandler =
mRecentsView.getPagedOrientationHandler();
float totalDisplacement = displacement + mDisplacementShift;
@@ -317,12 +321,9 @@
mOverrideVelocity = -mTaskBeingDragged.getResources().getDimension(velocityDimenId);
// Once halfway through task dismissal interpolation, switch from reversible
- // dragging-task animation to playing the remaining task translation animations
- final long now = SystemClock.uptimeMillis();
- MotionEvent upAction = MotionEvent.obtain(now, now,
- MotionEvent.ACTION_UP, 0.0f, 0.0f, 0);
- mDetector.onTouchEvent(upAction);
- upAction.recycle();
+ // dragging-task animation to playing the remaining task translation animations,
+ // while this is in progress disable dragging.
+ mDraggingEnabled = false;
}
} else {
mCurrentAnimation.setPlayFraction(
@@ -343,7 +344,7 @@
R.dimen.max_task_dismiss_drag_velocity);
velocity = Utilities.boundToRange(velocity, -maxTaskDismissDragVelocity,
maxTaskDismissDragVelocity);
- boolean fling = mDetector.isFling(velocity);
+ boolean fling = mDraggingEnabled && mDetector.isFling(velocity);
final boolean goingToEnd;
boolean blockedFling = fling && mFlingBlockCheck.isBlocked();
if (blockedFling) {
@@ -371,19 +372,21 @@
MIN_TASK_DISMISS_ANIMATION_DURATION, MAX_TASK_DISMISS_ANIMATION_DURATION);
mCurrentAnimation.setEndAction(this::clearState);
- mCurrentAnimation.startWithVelocity(mActivity, goingToEnd,
- velocity * orientationHandler.getSecondaryTranslationDirectionFactor(),
+ mCurrentAnimation.startWithVelocity(mActivity, goingToEnd, Math.abs(velocity),
mEndDisplacement, animationDuration);
if (goingUp && goingToEnd && !mIsDismissHapticRunning) {
VibratorWrapper.INSTANCE.get(mActivity).vibrate(TASK_DISMISS_VIBRATION_PRIMITIVE,
TASK_DISMISS_VIBRATION_PRIMITIVE_SCALE, TASK_DISMISS_VIBRATION_FALLBACK);
mIsDismissHapticRunning = true;
}
+
+ mDraggingEnabled = true;
}
private void clearState() {
mDetector.finishedScrolling();
mDetector.setDetectableScrollConditions(0, false);
+ mDraggingEnabled = true;
mTaskBeingDragged = null;
mCurrentAnimation = null;
mIsDismissHapticRunning = false;
diff --git a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java
index 5772450..cc5a923 100644
--- a/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java
+++ b/quickstep/src/com/android/quickstep/LauncherBackAnimationController.java
@@ -52,6 +52,7 @@
import android.window.BackProgressAnimator;
import android.window.IOnBackInvokedCallback;
+import com.android.app.animation.Interpolators;
import com.android.internal.view.AppearanceRegion;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BubbleTextView;
@@ -103,7 +104,8 @@
private float mWindowScaleEndCornerRadius;
private float mWindowScaleStartCornerRadius;
private final Interpolator mCancelInterpolator;
- private final Interpolator mProgressInterpolator = new DecelerateInterpolator();
+ private final Interpolator mProgressInterpolator = Interpolators.STANDARD_DECELERATE;
+ private final Interpolator mVerticalMoveInterpolator = new DecelerateInterpolator();
private final PointF mInitialTouchPos = new PointF();
private RemoteAnimationTarget mBackTarget;
@@ -376,7 +378,7 @@
float yDirection = rawYDelta < 0 ? -1 : 1;
// limit yDelta interpretation to 1/2 of screen height in either direction
float deltaYRatio = Math.min(screenHeight / 2f, Math.abs(rawYDelta)) / (screenHeight / 2f);
- float interpolatedYRatio = mProgressInterpolator.getInterpolation(deltaYRatio);
+ float interpolatedYRatio = mVerticalMoveInterpolator.getInterpolation(deltaYRatio);
// limit y-shift so surface never passes 8dp screen margin
float deltaY = yDirection * interpolatedYRatio * Math.max(0f, (screenHeight - height)
/ 2f - mWindowScaleMarginX);
@@ -437,6 +439,7 @@
if (mLauncher.isDestroyed()) {
return;
}
+ mLauncher.setPredictiveBackToHomeInProgress(true);
LauncherTaskbarUIController taskbarUIController = mLauncher.getTaskbarUIController();
if (taskbarUIController != null) {
taskbarUIController.onLauncherVisibilityChanged(true);
@@ -475,6 +478,7 @@
}
private void finishAnimation() {
+ mLauncher.setPredictiveBackToHomeInProgress(false);
mBackTarget = null;
mLauncherTarget = null;
mBackInProgress = false;
diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
index febfc3a..65b5397 100644
--- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
+++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
@@ -209,27 +209,38 @@
&& dp != null
&& (dp.isTablet || dp.isTwoPanels);
- if (cmd.type == TYPE_HIDE) {
- if (!allowQuickSwitch) {
+ switch (cmd.type) {
+ case TYPE_HIDE:
+ if (!allowQuickSwitch) {
+ return true;
+ }
+ mKeyboardTaskFocusIndex = uiController.launchFocusedTask();
+ if (mKeyboardTaskFocusIndex == -1) {
+ return true;
+ }
+ break;
+ case TYPE_KEYBOARD_INPUT:
+ if (allowQuickSwitch) {
+ uiController.openQuickSwitchView();
+ return true;
+ } else {
+ mKeyboardTaskFocusIndex = 0;
+ break;
+ }
+ case TYPE_HOME:
+ ActiveGestureLog.INSTANCE.addLog(
+ "OverviewCommandHelper.executeCommand(TYPE_HOME)");
+ mService.startActivity(mOverviewComponentObserver.getHomeIntent());
return true;
- }
- mKeyboardTaskFocusIndex = uiController.launchFocusedTask();
- if (mKeyboardTaskFocusIndex == -1) {
- return true;
- }
- }
- if (cmd.type == TYPE_KEYBOARD_INPUT) {
- if (allowQuickSwitch) {
- uiController.openQuickSwitchView();
- return true;
- } else {
+ case TYPE_SHOW:
+ // When Recents is not currently visible, the command's type is TYPE_SHOW
+ // when overview is triggered via the keyboard overview button or Action+Tab
+ // keys (Not Alt+Tab which is KQS). The overview button on-screen in 3-button
+ // nav is TYPE_TOGGLE.
mKeyboardTaskFocusIndex = 0;
- }
- }
- if (cmd.type == TYPE_HOME) {
- ActiveGestureLog.INSTANCE.addLog("OverviewCommandHelper.executeCommand(TYPE_HOME)");
- mService.startActivity(mOverviewComponentObserver.getHomeIntent());
- return true;
+ break;
+ default:
+ // continue below to handle displaying Recents.
}
} else {
createdRecentsView = visibleRecentsView;
@@ -351,7 +362,8 @@
private void updateRecentsViewFocus(CommandInfo cmd) {
RecentsView recentsView =
mOverviewComponentObserver.getActivityInterface().getVisibleRecentsView();
- if (recentsView == null || (cmd.type != TYPE_KEYBOARD_INPUT && cmd.type != TYPE_HIDE)) {
+ if (recentsView == null || (cmd.type != TYPE_KEYBOARD_INPUT && cmd.type != TYPE_HIDE
+ && cmd.type != TYPE_SHOW)) {
return;
}
// When the overview is launched via alt tab (cmd type is TYPE_KEYBOARD_INPUT),
diff --git a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
index 8535a33..c3a4351 100644
--- a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
+++ b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java
@@ -187,7 +187,10 @@
// Allow null-pointer to catch illegal states.
runOnTISBinder(tisBinder -> tisBinder.getTaskbarManager().recreateTaskbar());
return response;
-
+ case TestProtocol.REQUEST_TASKBAR_IME_DOCKED:
+ return getTISBinderUIProperty(Bundle::putBoolean, tisBinder ->
+ tisBinder.getTaskbarManager()
+ .getCurrentActivityContext().isImeDocked());
case TestProtocol.REQUEST_UNSTASH_BUBBLE_BAR_IF_STASHED:
runOnTISBinder(tisBinder -> {
// Allow null-pointer to catch illegal states.
diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java
index 22163b9..02f9a69 100644
--- a/quickstep/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/src/com/android/quickstep/RecentsActivity.java
@@ -498,4 +498,9 @@
OverviewCommandHelper overviewCommandHelper = mTISBindHelper.getOverviewCommandHelper();
return overviewCommandHelper == null || overviewCommandHelper.canStartHomeSafely();
}
+
+ @NonNull
+ public TISBindHelper getTISBindHelper() {
+ return mTISBindHelper;
+ }
}
diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
index cb0aa8f..c56a621 100644
--- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
+++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
@@ -119,6 +119,7 @@
private boolean mIsSwipeToNotificationEnabled;
private final boolean mIsOneHandedModeSupported;
private boolean mPipIsActive;
+ private boolean mIsPredictiveBackToHomeInProgress;
private int mGestureBlockingTaskId = -1;
private @NonNull Region mExclusionRegion = GestureExclusionManager.EMPTY_REGION;
@@ -362,6 +363,20 @@
}
/**
+ * Sets the flag that indicates whether a predictive back-to-home animation is in progress
+ */
+ public void setPredictiveBackToHomeInProgress(boolean isInProgress) {
+ mIsPredictiveBackToHomeInProgress = isInProgress;
+ }
+
+ /**
+ * @return whether a predictive back-to-home animation is currently in progress
+ */
+ public boolean isPredictiveBackToHomeInProgress() {
+ return mIsPredictiveBackToHomeInProgress;
+ }
+
+ /**
* @return whether SystemUI is in a state where we can start a system gesture.
*/
public boolean canStartSystemGesture() {
@@ -609,6 +624,7 @@
pw.println(" deferredGestureRegion=" + mDeferredGestureRegion.getBounds());
pw.println(" exclusionRegion=" + mExclusionRegion.getBounds());
pw.println(" pipIsActive=" + mPipIsActive);
+ pw.println(" predictiveBackToHomeInProgress=" + mIsPredictiveBackToHomeInProgress);
mRotationTouchHelper.dump(pw);
}
}
diff --git a/quickstep/src/com/android/quickstep/TaskAnimationManager.java b/quickstep/src/com/android/quickstep/TaskAnimationManager.java
index a1a3145..4e62d60 100644
--- a/quickstep/src/com/android/quickstep/TaskAnimationManager.java
+++ b/quickstep/src/com/android/quickstep/TaskAnimationManager.java
@@ -115,7 +115,6 @@
ActiveGestureLog.INSTANCE.addLog(
/* event= */ "startRecentsAnimation",
/* gestureEvent= */ START_RECENTS_ANIMATION);
- mRecentsAnimationStartPending = true;
// Notify if recents animation is still running
if (mController != null) {
String msg = "New recents animation started before old animation completed";
@@ -300,10 +299,16 @@
options.setTransientLaunch();
}
options.setSourceInfo(ActivityOptions.SourceInfo.TYPE_RECENTS_ANIMATION, eventTime);
- SystemUiProxy.INSTANCE.getNoCreate().startRecentsActivity(intent, options, mCallbacks);
+ mRecentsAnimationStartPending = SystemUiProxy.INSTANCE.getNoCreate()
+ .startRecentsActivity(intent, options, mCallbacks);
} else {
- UI_HELPER_EXECUTOR.execute(() -> ActivityManagerWrapper.getInstance()
- .startRecentsActivity(intent, eventTime, mCallbacks, null, null));
+ UI_HELPER_EXECUTOR.execute(
+ () -> ActivityManagerWrapper.getInstance().startRecentsActivity(
+ intent,
+ eventTime,
+ mCallbacks,
+ result -> mRecentsAnimationStartPending = result,
+ MAIN_EXECUTOR.getHandler()));
}
gestureState.setState(STATE_RECENTS_ANIMATION_INITIALIZED);
return mCallbacks;
diff --git a/quickstep/src/com/android/quickstep/TaskViewUtils.java b/quickstep/src/com/android/quickstep/TaskViewUtils.java
index 03e6c99..e30ea7a 100644
--- a/quickstep/src/com/android/quickstep/TaskViewUtils.java
+++ b/quickstep/src/com/android/quickstep/TaskViewUtils.java
@@ -82,9 +82,9 @@
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskThumbnailView;
import com.android.quickstep.views.TaskView;
+import com.android.systemui.animation.RemoteAnimationTargetCompat;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
-import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
import java.util.ArrayList;
import java.util.List;
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index f9486bd..415f73f 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -398,6 +398,14 @@
}
/**
+ * Sets whether a predictive back-to-home animation is in progress in the device state
+ */
+ public void setPredictiveBackToHomeInProgress(boolean isInProgress) {
+ executeForTouchInteractionService(tis ->
+ tis.mDeviceState.setPredictiveBackToHomeInProgress(isInProgress));
+ }
+
+ /**
* Returns the {@link OverviewCommandHelper}.
* <p>
* Returns {@code null} if TouchInteractionService is not connected
@@ -1170,7 +1178,8 @@
}
boolean previousGestureAnimatedToLauncher =
- previousGestureState.isRunningAnimationToLauncher();
+ previousGestureState.isRunningAnimationToLauncher()
+ || mDeviceState.isPredictiveBackToHomeInProgress();
// with shell-transitions, home is resumed during recents animation, so
// explicitly check against recents animation too.
boolean launcherResumedThroughShellTransition =
@@ -1275,7 +1284,8 @@
boolean hasWindowFocus = activity.getRootView().hasWindowFocus();
boolean isPreviousGestureAnimatingToLauncher =
- previousGestureState.isRunningAnimationToLauncher();
+ previousGestureState.isRunningAnimationToLauncher()
+ || mDeviceState.isPredictiveBackToHomeInProgress();
boolean isInLiveTileMode = gestureState.getActivityInterface().isInLiveTileMode();
reasonString.append(SUBSTRING_PREFIX)
.append(hasWindowFocus
diff --git a/quickstep/src/com/android/quickstep/util/AppPairsController.java b/quickstep/src/com/android/quickstep/util/AppPairsController.java
index b846323..ef6e085 100644
--- a/quickstep/src/com/android/quickstep/util/AppPairsController.java
+++ b/quickstep/src/com/android/quickstep/util/AppPairsController.java
@@ -20,6 +20,7 @@
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_APP_PAIR_LAUNCH;
+import static com.android.launcher3.model.data.AppInfo.PACKAGE_KEY_COMPARATOR;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_BOTTOM_OR_RIGHT;
@@ -30,6 +31,7 @@
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.pm.LauncherApps;
import android.util.Log;
import android.util.Pair;
@@ -42,10 +44,12 @@
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
+import com.android.launcher3.allapps.AllAppsStore;
import com.android.launcher3.apppairs.AppPairIcon;
import com.android.launcher3.icons.IconCache;
import com.android.launcher3.logging.InstanceId;
import com.android.launcher3.logging.StatsLogManager;
+import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.FolderInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
@@ -93,14 +97,38 @@
}
/**
- * Creates a new app pair ItemInfo and adds it to the workspace
+ * Creates a new app pair ItemInfo and adds it to the workspace.
+ * <br>
+ * We create WorkspaceItemInfos to save onto the app pair in the following way:
+ * <br> 1. We verify that the ComponentKey from our Recents tile corresponds to a real
+ * launchable app in the app store.
+ * <br> 2. If it doesn't, we search for the underlying launchable app via package name, and use
+ * that instead.
+ * <br> 3. If that fails, we re-use the existing WorkspaceItemInfo by cloning it and replacing
+ * its intent with one from PackageManager.
+ * <br> 4. If everything fails, we just use the WorkspaceItemInfo as is, with its existing
+ * intent. This is not preferred, but will still work in most cases (notably it will not work
+ * well on trampoline apps).
*/
public void saveAppPair(GroupedTaskView gtv) {
TaskView.TaskIdAttributeContainer[] attributes = gtv.getTaskIdAttributeContainers();
- WorkspaceItemInfo app1 = attributes[0].getItemInfo().clone();
- WorkspaceItemInfo app2 = attributes[1].getItemInfo().clone();
- app1.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
- app2.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
+ WorkspaceItemInfo recentsInfo1 = attributes[0].getItemInfo();
+ WorkspaceItemInfo recentsInfo2 = attributes[1].getItemInfo();
+ WorkspaceItemInfo app1 = lookupLaunchableItem(recentsInfo1.getComponentKey());
+ WorkspaceItemInfo app2 = lookupLaunchableItem(recentsInfo2.getComponentKey());
+
+ // If app lookup fails, use the WorkspaceItemInfo that we have, but try to override default
+ // intent with one from PackageManager.
+ if (app1 == null) {
+ Log.w(TAG, "Creating an app pair, but app lookup for " + recentsInfo1.title
+ + " failed. Falling back to the WorkspaceItemInfo from Recents.");
+ app1 = convertRecentsItemToAppItem(recentsInfo1);
+ }
+ if (app2 == null) {
+ Log.w(TAG, "Creating an app pair, but app lookup for " + recentsInfo2.title
+ + " failed. Falling back to the WorkspaceItemInfo from Recents.");
+ app2 = convertRecentsItemToAppItem(recentsInfo2);
+ }
@PersistentSnapPosition int snapPosition = gtv.getSnapPosition();
if (!isPersistentSnapPosition(snapPosition)) {
@@ -189,6 +217,52 @@
}
/**
+ * Creates a new launchable WorkspaceItemInfo of itemType=ITEM_TYPE_APPLICATION by looking the
+ * ComponentKey up in the AllAppsStore. If no app is found, attempts a lookup by package
+ * instead. If that lookup fails, returns null.
+ */
+ @Nullable
+ private WorkspaceItemInfo lookupLaunchableItem(@Nullable ComponentKey key) {
+ if (key == null) {
+ return null;
+ }
+
+ AllAppsStore appsStore = Launcher.getLauncher(mContext).getAppsView().getAppsStore();
+
+ // Lookup by ComponentKey
+ AppInfo appInfo = appsStore.getApp(key);
+ if (appInfo == null) {
+ // Lookup by package
+ appInfo = appsStore.getApp(key, PACKAGE_KEY_COMPARATOR);
+ }
+
+ return appInfo != null ? appInfo.makeWorkspaceItem(mContext) : null;
+ }
+
+ /**
+ * Converts a WorkspaceItemInfo of itemType=ITEM_TYPE_TASK (from a Recents task) to a new
+ * WorkspaceItemInfo of itemType=ITEM_TYPE_APPLICATION.
+ */
+ private WorkspaceItemInfo convertRecentsItemToAppItem(WorkspaceItemInfo recentsItem) {
+ if (recentsItem.itemType != LauncherSettings.Favorites.ITEM_TYPE_TASK) {
+ Log.w(TAG, "Expected ItemInfo of type ITEM_TYPE_TASK, but received "
+ + recentsItem.itemType);
+ }
+
+ WorkspaceItemInfo launchableItem = recentsItem.clone();
+ PackageManager p = mContext.getPackageManager();
+ Intent launchIntent = p.getLaunchIntentForPackage(recentsItem.getTargetPackage());
+ Log.w(TAG, "Initial intent from Recents: " + launchableItem.intent + "\n"
+ + "Intent from PackageManager: " + launchIntent);
+ if (launchIntent != null) {
+ // If lookup from PackageManager fails, just use the existing intent
+ launchableItem.intent = launchIntent;
+ }
+ launchableItem.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
+ return launchableItem;
+ }
+
+ /**
* Handles the complicated logic for how to animate an app pair entrance when already inside an
* app or app pair.
*
diff --git a/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java b/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java
index 6d9ecd9..132d1c1 100644
--- a/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java
+++ b/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java
@@ -30,7 +30,7 @@
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.states.StateAnimationConfig;
-import java.util.function.Consumer;
+import java.util.function.BiConsumer;
/**
* Runs an animation from overview to home. Currently, this animation is just a wrapper around the
@@ -44,14 +44,14 @@
private final Launcher mLauncher;
private final Runnable mOnReachedHome;
@Nullable
- private final Consumer<AnimatorSet> mSplitCancelConsumer;
+ private final BiConsumer<AnimatorSet, Long> mSplitCancelConsumer;
// Only run mOnReachedHome when both of these are true.
private boolean mIsHomeStaggeredAnimFinished;
private boolean mIsOverviewHidden;
public OverviewToHomeAnim(Launcher launcher, Runnable onReachedHome,
- @Nullable Consumer<AnimatorSet> splitCancelConsumer) {
+ @Nullable BiConsumer<AnimatorSet, Long> splitCancelConsumer) {
mLauncher = launcher;
mOnReachedHome = onReachedHome;
mSplitCancelConsumer = splitCancelConsumer;
@@ -103,7 +103,7 @@
if (mSplitCancelConsumer != null) {
// Clear split state when swiping to home
- mSplitCancelConsumer.accept(anim);
+ mSplitCancelConsumer.accept(anim, config.duration);
}
anim.play(stateAnim);
stateManager.setCurrentAnimation(anim, NORMAL);
diff --git a/quickstep/src/com/android/quickstep/util/SplitAnimationController.kt b/quickstep/src/com/android/quickstep/util/SplitAnimationController.kt
index 1eb71fc..b7b1d8f 100644
--- a/quickstep/src/com/android/quickstep/util/SplitAnimationController.kt
+++ b/quickstep/src/com/android/quickstep/util/SplitAnimationController.kt
@@ -242,7 +242,7 @@
return
}
- val anim = createPlaceholderDismissAnim(launcher, splitDismissEvent)
+ val anim = createPlaceholderDismissAnim(launcher, splitDismissEvent, null /*duration*/)
anim.start()
}
@@ -251,8 +251,10 @@
* for why split is being dismissed
*/
fun createPlaceholderDismissAnim(launcher: StatefulActivity<*>,
- splitDismissEvent: EventEnum) : AnimatorSet {
+ splitDismissEvent: EventEnum,
+ duration: Long?) : AnimatorSet {
val animatorSet = AnimatorSet()
+ duration?.let { animatorSet.duration = it }
val recentsView : RecentsView<*, *> = launcher.getOverviewPanel()
val floatingTask: FloatingTaskView = splitSelectStateController.firstFloatingTaskView
?: return animatorSet
diff --git a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
index f06418b..8e2520e 100644
--- a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
+++ b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java
@@ -101,9 +101,9 @@
import com.android.quickstep.views.GroupedTaskView;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.SplitInstructionsView;
+import com.android.systemui.animation.RemoteAnimationRunnerCompat;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.ActivityManagerWrapper;
-import com.android.systemui.shared.system.RemoteAnimationRunnerCompat;
import com.android.wm.shell.common.split.SplitScreenConstants.PersistentSnapPosition;
import com.android.wm.shell.splitscreen.ISplitSelectListener;
diff --git a/quickstep/src/com/android/quickstep/util/TISBindHelper.java b/quickstep/src/com/android/quickstep/util/TISBindHelper.java
index ddc796f..9a01042 100644
--- a/quickstep/src/com/android/quickstep/util/TISBindHelper.java
+++ b/quickstep/src/com/android/quickstep/util/TISBindHelper.java
@@ -108,6 +108,15 @@
return mBinder == null ? null : mBinder.getTaskbarManager();
}
+ /**
+ * Sets flag whether a predictive back-to-home animation is in progress
+ */
+ public void setPredictiveBackToHomeInProgress(boolean isInProgress) {
+ if (mBinder != null) {
+ mBinder.setPredictiveBackToHomeInProgress(isInProgress);
+ }
+ }
+
@Nullable
public OverviewCommandHelper getOverviewCommandHelper() {
return mBinder == null ? null : mBinder.getOverviewCommandHelper();
diff --git a/quickstep/src/com/android/quickstep/views/DesktopTaskView.java b/quickstep/src/com/android/quickstep/views/DesktopTaskView.java
index 4c7d5c4..f2c9f27 100644
--- a/quickstep/src/com/android/quickstep/views/DesktopTaskView.java
+++ b/quickstep/src/com/android/quickstep/views/DesktopTaskView.java
@@ -28,7 +28,6 @@
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
-import android.os.SystemProperties;
import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseArray;
@@ -52,7 +51,7 @@
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.QuickStepContract;
-import com.android.wm.shell.Flags;
+import com.android.window.flags.Flags;
import kotlin.Unit;
@@ -69,11 +68,6 @@
// TODO(b/249371338): TaskView needs to be refactored to have better support for N tasks.
public class DesktopTaskView extends TaskView {
- private static final boolean DESKTOP_MODE_SUPPORTED = SystemProperties.getBoolean(
- "persist.wm.debug.desktop_mode_2", false);
-
- private static final boolean ENABLE_DESKTOP_WINDOWING = Flags.enableDesktopWindowing();
-
private static final String TAG = DesktopTaskView.class.getSimpleName();
private static final boolean DEBUG = false;
@@ -96,13 +90,7 @@
/** Check whether desktop windowing is enabled */
public static boolean isDesktopModeSupported() {
- // Check for aconfig flag first
- if (ENABLE_DESKTOP_WINDOWING) {
- return true;
- }
- // Fall back to sysprop flag
- // TODO(b/304778354): remove sysprop once desktop aconfig flag supports dynamic overriding
- return DESKTOP_MODE_SUPPORTED;
+ return Flags.enableDesktopWindowingMode();
}
public DesktopTaskView(Context context) {
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 99c42a7..7bfa5ed 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -2093,22 +2093,20 @@
// Update task size and padding that are dependent on DeviceProfile and insets.
private void updateSizeAndPadding() {
DeviceProfile dp = mActivity.getDeviceProfile();
- getTaskSize(mTempRect);
- mTaskWidth = mTempRect.width();
- mTaskHeight = mTempRect.height();
+ getTaskSize(mLastComputedTaskSize);
+ mTaskWidth = mLastComputedTaskSize.width();
+ mTaskHeight = mLastComputedTaskSize.height();
- mTempRect.top -= dp.overviewTaskThumbnailTopMarginPx;
- setPadding(mTempRect.left - mInsets.left, mTempRect.top - mInsets.top,
- dp.widthPx - mInsets.right - mTempRect.right,
- dp.heightPx - mInsets.bottom - mTempRect.bottom);
+ setPadding(mLastComputedTaskSize.left - mInsets.left,
+ mLastComputedTaskSize.top - dp.overviewTaskThumbnailTopMarginPx - mInsets.top,
+ dp.widthPx - mInsets.right - mLastComputedTaskSize.right,
+ dp.heightPx - mInsets.bottom - mLastComputedTaskSize.bottom);
- mSizeStrategy.calculateGridSize(mActivity.getDeviceProfile(), mActivity,
- mLastComputedGridSize);
- mSizeStrategy.calculateGridTaskSize(mActivity, mActivity.getDeviceProfile(),
- mLastComputedGridTaskSize, getPagedOrientationHandler());
+ mSizeStrategy.calculateGridSize(dp, mActivity, mLastComputedGridSize);
+ mSizeStrategy.calculateGridTaskSize(mActivity, dp, mLastComputedGridTaskSize,
+ getPagedOrientationHandler());
if (isDesktopModeSupported()) {
- mSizeStrategy.calculateDesktopTaskSize(mActivity, mActivity.getDeviceProfile(),
- mLastComputedDesktopTaskSize);
+ mSizeStrategy.calculateDesktopTaskSize(mActivity, dp, mLastComputedDesktopTaskSize);
}
if (enableGridOnlyOverview()) {
mSizeStrategy.calculateCarouselTaskSize(mActivity, dp, mLastComputedCarouselTaskSize,
@@ -2169,7 +2167,6 @@
public void getTaskSize(Rect outRect) {
mSizeStrategy.calculateTaskSize(mActivity, mActivity.getDeviceProfile(), outRect,
getPagedOrientationHandler());
- mLastComputedTaskSize.set(outRect);
}
/**
@@ -4264,10 +4261,12 @@
for (int i = getTaskViewCount() - 1; i >= 0; i--) {
TaskView child = requireTaskViewAt(i);
int[] childTaskIds = child.getTaskIds();
- if (!mRunningTaskTileHidden ||
- (childTaskIds[0] != runningTaskId && childTaskIds[1] != runningTaskId)) {
- child.setStableAlpha(alpha);
+ if (runningTaskId != INVALID_TASK_ID
+ && mRunningTaskTileHidden
+ && (childTaskIds[0] == runningTaskId || childTaskIds[1] == runningTaskId)) {
+ continue;
}
+ child.setStableAlpha(alpha);
}
mClearAllButton.setContentAlpha(mContentAlpha);
int alphaInt = Math.round(alpha * 255);
@@ -4407,9 +4406,6 @@
updateEmptyStateUi(changed);
- // Update the pivots such that when the task is scaled, it fills the full page
- getTaskSize(mTempRect);
- updatePivots();
setTaskModalness(mTaskModalness);
mLastComputedTaskStartPushOutDistance = null;
mLastComputedTaskEndPushOutDistance = null;
diff --git a/quickstep/src/com/android/quickstep/views/SplitInstructionsView.java b/quickstep/src/com/android/quickstep/views/SplitInstructionsView.java
index a11a913..be07e8a 100644
--- a/quickstep/src/com/android/quickstep/views/SplitInstructionsView.java
+++ b/quickstep/src/com/android/quickstep/views/SplitInstructionsView.java
@@ -21,11 +21,9 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.Context;
-import android.os.Bundle;
import android.util.AttributeSet;
import android.util.FloatProperty;
import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -141,32 +139,6 @@
mLauncher.getStateManager().goToState(LauncherState.NORMAL);
}
- @Override
- public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
- super.onInitializeAccessibilityNodeInfo(info);
- if (!FeatureFlags.enableSplitContextually()) {
- return;
- }
-
- info.addAction(new AccessibilityNodeInfo.AccessibilityAction(
- R.string.toast_split_select_cont_desc,
- getResources().getString(R.string.toast_split_select_cont_desc)
- ));
- }
-
- @Override
- public boolean performAccessibilityAction(int action, Bundle arguments) {
- if (!FeatureFlags.enableSplitContextually()) {
- return super.performAccessibilityAction(action, arguments);
- }
-
- if (action == R.string.toast_split_select_cont_desc) {
- exitSplitSelection();
- return true;
- }
- return super.performAccessibilityAction(action, arguments);
- }
-
void ensureProperRotation() {
((RecentsView) mLauncher.getOverviewPanel()).getPagedOrientationHandler()
.setSplitInstructionsParams(
diff --git a/quickstep/src/com/android/quickstep/views/TaskMenuView.java b/quickstep/src/com/android/quickstep/views/TaskMenuView.java
index a5e8989..2bd48d5 100644
--- a/quickstep/src/com/android/quickstep/views/TaskMenuView.java
+++ b/quickstep/src/com/android/quickstep/views/TaskMenuView.java
@@ -18,6 +18,8 @@
import static com.android.app.animation.Interpolators.EMPHASIZED;
import static com.android.launcher3.Flags.enableOverviewIconMenu;
+import static com.android.launcher3.testing.shared.TestProtocol.TEST_TAPL_OVERVIEW_ACTIONS_MENU_FAILURE;
+import static com.android.launcher3.testing.shared.TestProtocol.testLogD;
import static com.android.launcher3.util.MultiPropertyFactory.MULTI_PROPERTY_VALUE;
import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_BOTTOM_OR_RIGHT;
import static com.android.quickstep.views.TaskThumbnailView.DIM_ALPHA;
@@ -136,6 +138,17 @@
};
}
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (!enableOverviewIconMenu()) {
+ int maxMenuHeight = calculateMaxHeight();
+ if (MeasureSpec.getSize(heightMeasureSpec) > maxMenuHeight) {
+ heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxMenuHeight, MeasureSpec.AT_MOST);
+ }
+ }
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+
public void onRotationChanged() {
if (mOpenCloseAnimator != null && mOpenCloseAnimator.isRunning()) {
mOpenCloseAnimator.end();
@@ -359,6 +372,8 @@
mOpenCloseAnimator.addListener(new AnimationSuccessListener() {
@Override
public void onAnimationStart(Animator animation) {
+ testLogD(TEST_TAPL_OVERVIEW_ACTIONS_MENU_FAILURE,
+ "TaskMenuView.java.animateOpenOrClosed: onAnimationStart");
setVisibility(VISIBLE);
if (closing && mOnClosingStartCallback != null) {
mOnClosingStartCallback.run();
@@ -367,6 +382,8 @@
@Override
public void onAnimationSuccess(Animator animator) {
+ testLogD(TEST_TAPL_OVERVIEW_ACTIONS_MENU_FAILURE,
+ "TaskMenuView.java.animateOpenOrClosed: onAnimationSuccess");
if (closing) {
closeComplete();
}
@@ -393,6 +410,18 @@
return new RoundedRectRevealOutlineProvider(radius, radius, fromRect, toRect);
}
+ /**
+ * Calculates max height based on how much space we have available.
+ * If not enough space then the view will scroll. The maximum menu size will sit inside the task
+ * with a margin on the top and bottom.
+ */
+ private int calculateMaxHeight() {
+ float taskBottom = mTaskView.getHeight() + mTaskView.getPersistentTranslationY();
+ float taskInsetMargin = getResources().getDimension(R.dimen.task_card_margin);
+
+ return (int) (taskBottom - taskInsetMargin - getTranslationY());
+ }
+
private void setOnClosingStartCallback(Runnable onClosingStartCallback) {
mOnClosingStartCallback = onClosingStartCallback;
}
diff --git a/quickstep/tests/src/com/android/quickstep/AbstractQuickStepTest.java b/quickstep/tests/src/com/android/quickstep/AbstractQuickStepTest.java
index 9ad360f..6a48b77 100644
--- a/quickstep/tests/src/com/android/quickstep/AbstractQuickStepTest.java
+++ b/quickstep/tests/src/com/android/quickstep/AbstractQuickStepTest.java
@@ -25,8 +25,6 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.tapl.LaunchedAppState;
-import com.android.launcher3.tapl.LauncherInstrumentation;
-import com.android.launcher3.tapl.LauncherInstrumentation.ContainerType;
import com.android.launcher3.ui.AbstractLauncherUiTest;
import com.android.quickstep.views.RecentsView;
@@ -55,31 +53,6 @@
}
}
- @Override
- protected void checkLauncherState(Launcher launcher, ContainerType expectedContainerType,
- boolean isResumed, boolean isStarted) {
- if (ENABLE_SHELL_TRANSITIONS || !isInLiveTileMode(launcher, expectedContainerType)) {
- super.checkLauncherState(launcher, expectedContainerType, isResumed, isStarted);
- } else {
- assertTrue("[Live Tile] hasBeenResumed() == isStarted(), hasBeenResumed(): "
- + isResumed, isResumed != isStarted);
- }
- }
-
- @Override
- protected void checkLauncherStateInOverview(Launcher launcher,
- ContainerType expectedContainerType, boolean isStarted, boolean isResumed) {
- if (ENABLE_SHELL_TRANSITIONS || !isInLiveTileMode(launcher, expectedContainerType)) {
- super.checkLauncherStateInOverview(launcher, expectedContainerType, isStarted,
- isResumed);
- } else {
- assertTrue(
- "[Live Tile] Launcher is not started or has been resumed in state: "
- + expectedContainerType,
- isStarted && !isResumed);
- }
- }
-
protected void assertTestActivityIsRunning(int activityNumber, String message) {
assertTrue(message, mDevice.wait(
Until.hasObject(By.pkg(getAppPackageName()).text("TestActivity" + activityNumber)),
@@ -94,15 +67,4 @@
isInLaunchedApp(launcher)));
return launchedAppState;
}
-
- private boolean isInLiveTileMode(Launcher launcher,
- LauncherInstrumentation.ContainerType expectedContainerType) {
- if (expectedContainerType != LauncherInstrumentation.ContainerType.OVERVIEW) {
- return false;
- }
-
- RecentsView recentsView = launcher.getOverviewPanel();
- return recentsView.getSizeStrategy().isInLiveTileMode()
- && recentsView.getRunningTaskViewId() != -1;
- }
}
diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java
index ad8535f..45a9527 100644
--- a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java
+++ b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java
@@ -44,6 +44,7 @@
import com.android.launcher3.tapl.OverviewActions;
import com.android.launcher3.tapl.OverviewTask;
import com.android.launcher3.tapl.SelectModeButtons;
+import com.android.launcher3.tapl.Workspace;
import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape;
import com.android.launcher3.util.Wait;
import com.android.launcher3.util.rule.ScreenRecordRule.ScreenRecord;
@@ -227,6 +228,32 @@
isInState(() -> LauncherState.NORMAL));
}
+ @Test
+ public void testOpenOverviewWithActionPlusTabKeys() throws Exception {
+ startTestAppsWithCheck();
+ startAppFast(CALCULATOR_APP_PACKAGE); // Ensure Calculator is last opened app.
+ Workspace home = mLauncher.goHome();
+ assertTrue("Launcher state is not Home", isInState(() -> LauncherState.NORMAL));
+
+ Overview overview = home.openOverviewFromActionPlusTabKeyboardShortcut();
+
+ assertTrue("Launcher state is not Overview", isInState(() -> LauncherState.OVERVIEW));
+ overview.launchFocusedTaskByEnterKey(CALCULATOR_APP_PACKAGE); // Assert app is focused.
+ }
+
+ @Test
+ public void testOpenOverviewWithRecentsKey() throws Exception {
+ startTestAppsWithCheck();
+ startAppFast(CALCULATOR_APP_PACKAGE); // Ensure Calculator is last opened app.
+ Workspace home = mLauncher.goHome();
+ assertTrue("Launcher state is not Home", isInState(() -> LauncherState.NORMAL));
+
+ Overview overview = home.openOverviewFromRecentsKeyboardShortcut();
+
+ assertTrue("Launcher state is not Overview", isInState(() -> LauncherState.OVERVIEW));
+ overview.launchFocusedTaskByEnterKey(CALCULATOR_APP_PACKAGE); // Assert app is focused.
+ }
+
private int getCurrentOverviewPage(Launcher launcher) {
return launcher.<RecentsView>getOverviewPanel().getCurrentPage();
}
@@ -346,7 +373,7 @@
boolean isTransientTaskbar = mLauncher.isTransientTaskbar();
// Expect task bar invisible when the launched app was the IME activity.
LaunchedAppState launchedAppState = getAndAssertLaunchedApp();
- if (!isTransientTaskbar && isHardwareKeyboard()) {
+ if (!isTransientTaskbar && isHardwareKeyboard() && !mLauncher.isImeDocked()) {
launchedAppState.assertTaskbarVisible();
} else {
launchedAppState.assertTaskbarHidden();
@@ -476,6 +503,7 @@
@Test
@PortraitLandscape
+ @ScreenRecord // b/326839375
public void testOverviewDeadzones() throws Exception {
startTestAppsWithCheck();
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 835c201..8dd419c 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Voeg by tuisskerm"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g>-legstuk by tuisskerm gevoeg"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Voorstelle"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Gee jou dag \'n hupstoot"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Nuus vir jou"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Jou ontspansone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Bereik jou fiksheiddoelwitte"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Spring die weer voor"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Jy hou dalk ook van"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>-legstukke aan die regterkant, soektog en opsies aan die linkerkant"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# legstuk}other{# legstukke}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# kortpad}other{# kortpaaie}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privaat"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Privaat Ruimte-instellings"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Sluit/ontsluit Privaat Ruimte"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Privaat Ruimte-oorgang"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Installeer apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Installeer apps in privaat ruimte"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 98c41de..e283418 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ወደ መነሻ ማያ ገፅ አክል"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> ምግብር ወደ መነሻ ማያ ገፅ ታክሏል"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"የአስተያየት ጥቆማዎች"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"ቀንዎን ያሳምሩ"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"ዜና ለእርስዎ"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"የሚያርፉበት ቦታዎ"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"የአካል ብቃት ግቦችዎን ያሳኩ"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"ለአየር ሁኔታው አስቀድመው ያቅዱ"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"ይህንንም ሊወዱት ይችላሉ"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ምግብሮች በቀኝ በኩል፣ ፍለጋ እና አማራጮች በግራ በኩል"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ምግብር}one{# ምግብሮች}other{# ምግብሮች}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# አቋራጭ}one{# አቋራጭ}other{# አቋራጮች}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>፣ <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"የግል"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"የግል ቦታ ቅንብሮች"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"የግል ቦታን ቆልፍ/ክፈት"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"የግል ቦታ ሽግግር"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"መተግበሪያዎችን ይጫኑ"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"መተግበሪያዎችን ወደ የግል ቦታ ይጫኑ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 91e2337..86a9a87 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"إضافة إلى الشاشة الرئيسية"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"تمت إضافة الأداة <xliff:g id="WIDGET_NAME">%1$s</xliff:g> إلى الشاشة الرئيسية."</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"اقتراحات"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"تعزيز إنتاجية يومك"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"أخبار مقترَحة لك"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"محتوى ترفيهي مقترَح"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"تحقيق أهداف اللياقة البدنية"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"معرفة حالة الطقس أولاً بأول"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"محتوى قد يعجبك أيضًا"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"تطبيقات \"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>\" المصغّرة على اليسار، والبحث والخيارات على اليمين"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{تطبيق مصغّر واحد}zero{# تطبيق مصغّر}two{تطبيقان مصغّران}few{# تطبيقات مصغّرة}many{# تطبيقًا مصغّرًا}other{# تطبيق مصغّر}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{اختصار واحد}zero{# اختصار}two{اختصاران}few{# اختصارات}many{# اختصارًا}other{# اختصار}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>، <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"المساحة الخاصة"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"إعدادات المساحة الخاصة"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"قفل المساحة الخاصة أو فتح قفلها"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"النقل إلى المساحة الخاصة"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"تثبيت التطبيقات"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"تثبيت التطبيقات في المساحة الخاصّة"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 3fa40d5..53de80b 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"গৃহ স্ক্ৰীনত যোগ কৰক"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> ৱিজেটটো গৃহ স্ক্ৰীনত যোগ দিয়া হৈছে"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"পৰামৰ্শ"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"আপোনাৰ দিনটো কাৰ্যকৰী কৰি তোলক"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"আপোনাৰ বাবে বাতৰি"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"আপোনাৰ পচন্দৰ স্থান"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"আপোনাৰ সুস্থতাৰ লক্ষ্যত উপনীত হওক"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"বতৰৰ বিষয়ে আগতীয়াকৈ জানক"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"আপুনি হয়তো এইটোও পচন্দ কৰিব"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ৱিজেট সোঁফালে, সন্ধান আৰু বিকল্পসমূহ বাওঁফালে"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# টা ৱিজেট}one{# টা ৱিজেট}other{# টা ৱিজেট}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# টা শ্বৰ্টকাট}one{# টা শ্বৰ্টকাট}other{# টা শ্বৰ্টকাট}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ব্যক্তিগত"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ব্যক্তিগত স্পে’চৰ ছেটিং"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ব্যক্তিগত স্পে’চ লক/আনলক কৰক"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ব্যক্তিগত স্পে’চৰ স্থানান্তৰণ"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"এপ্ ইনষ্টল কৰক"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"এপ্সমূহ প্ৰাইভেট স্পেচত ইনষ্টল কৰক"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 2848606..3dce943 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Əsas ekrana əlavə edin"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> vidceti əsas ekrana əlavə edildi"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Təkliflər"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Günü canlandırın"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Sizin üçün xəbərlər"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"İstirahət zonası"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Fitnes hədəflərinə nail olun"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Hava barədə məlumatlı olun"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Tövsiyələr"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> vidcetləri sağda, axtarış və seçimlər solda"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# vidcet}other{# vidcet}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# qısayol}other{# qısayol}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Şəxsi"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Şəxsi məkan ayarları"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Şəxsi məkanı kilidləyin/kiliddən çıxarın"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Şəxsi məkana keçid"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Tətbiqlər quraşdırın"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Tətbiqləri şəxsi sahədə quraşdırın"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index f75dd60..ef21114 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Dodaj na početni ekran"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Dodali ste vidžet <xliff:g id="WIDGET_NAME">%1$s</xliff:g> na početni ekran"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Predlozi"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Poboljšajte dan"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Vesti za vas"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Zona za opuštanje"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Ostvarite fitnes ciljeve"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Budite u toku sa vremenskim prilikama"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Možda će vam se dopasti i"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Vidžeti <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> sa desne strane, pretraga i opcije sa leve strane"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# vidžet}one{# vidžet}few{# vidžeta}other{# vidžeta}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# prečica}one{# prečica}few{# prečice}other{# prečica}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privatno"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Podešavanja privatnog prostora"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Zaključaj/otključaj privatni prostor"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Prenos privatnog prostora"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instalirajte aplikacije"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instaliraj aplikacije u privatan prostor"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 4b3780b..760cd2c 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Дадаць на галоўны экран"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Віджэт \"<xliff:g id="WIDGET_NAME">%1$s</xliff:g>\" дададзены на галоўны экран"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Прапановы"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Прадукцыйны дзень"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Навіны для вас"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Зона адпачынку"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Вашы фітнэс-мэты"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Прагноз надвор\'я"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Іншыя рэкамендацыі"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Віджэты праграмы \"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>\" справа, пошук і параметры злева"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# віджэт}one{# віджэт}few{# віджэты}many{# віджэтаў}other{# віджэта}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ярлык}one{# ярлык}few{# ярлыкі}many{# ярлыкоў}other{# ярлыка}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Прыватная"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Налады прыватнай вобласці"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Заблакіраваць (разблакіраваць) прыватную вобласць"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Пераход у прыватную вобласць"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Усталяваць праграмы"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Усталяваць праграмы ў прыватнай прасторы"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 40c9c6a..9d69b65 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Добавяне към началния екран"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Приспособлението <xliff:g id="WIDGET_NAME">%1$s</xliff:g> е добавено към началния екран"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Предложения"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Подобрете ежедневието си"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Новини за вас"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Зоната ви за разпускане"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Постигнете фитнес целите си"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Бъдете една крачка напред с прогнозата за времето"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Може също да харесате"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Приспособленията за <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> са отдясно, търсенето и опциите – отляво"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# приспособление}other{# приспособления}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# пряк път}other{# преки пътя}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Лично"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Настройки за личното пространство"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Заключване/отключване на личното пространство"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Преминаване към личното пространство"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Инсталиране на приложения"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Инсталиране на приложения в частно пространство"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index c34b641..2b0c638 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"হোম স্ক্রিনে যোগ করুন"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> উইজেট হোম স্ক্রিনে যোগ করা হয়েছে"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"সাজেশন"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"আপনার দিন আরও ভালো করুন"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"আপনার জন্য খবর"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"আপনার চিল জোন"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"আপনার ফিটনেস সংক্রান্ত লক্ষ্যে পৌঁছান"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"আবহাওয়া সম্পর্কে আগেই খবর পান"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"আপনার এগুলিও পছন্দ হতে পারে"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> উইজেট ডানদিকে, সার্চ ও বিকল্প বাঁদিকে রয়েছে"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{#টি উইজেট}one{#টি উইজেট}other{#টি উইজেট}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{#টি শর্টকাট}one{#টি শর্টকাট}other{#টি শর্টকাট}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ব্যক্তিগত"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ব্যক্তিগত স্পেসের সেটিংস"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ব্যক্তিগত স্পেস লক/আনলক করুন"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ব্যক্তিগত স্পেস ট্রানজিট করা"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"অ্যাপ ইনস্টল করুন"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"প্রাইভেট স্পেসে অ্যাপ ইনস্টল করুন"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index e2955c3..e1d2da5 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Dodaj na početni ekran"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Vidžet <xliff:g id="WIDGET_NAME">%1$s</xliff:g> je dodan na početni ekran"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Prijedlozi"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Podignite raspoloženje danas"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Vijesti za vas"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Vaša zona opuštanja"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Postignite svoje ciljeve fitnesa"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Ne dajte da vas uhvati oluja"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Možda vam se svidi i ovo"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Vidžeti aplikacije <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> su na desnoj, a pretraživanje i opcije na lijevoj strani"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# vidžet}one{# vidžet}few{# vidžeta}other{# vidžeta}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# prečica}one{# prečica}few{# prečice}other{# prečica}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privatno"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Postavke privatnog prostora"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Zaključavanje/otključavanje privatnog prostora"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Prelazak u privatan prostor"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instaliranje aplikacija"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instaliranje aplikacija u privatni prostor"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index a8bae8b..dffa857 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Afegeix a la pantalla d\'inici"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"El widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> s\'ha afegit a la pantalla d\'inici"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggeriments"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Millora el teu dia"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Notícies per a tu"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"La teva zona de relax"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Assoleix els teus objectius de fitnes"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Que no et sorprengui el temps"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"També et pot agradar"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgets de <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> a la dreta, cerca i opcions a l\'esquerra"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# drecera}other{# dreceres}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privat"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Configuració d\'Espai privat"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Bloqueja o desbloqueja Espai privat"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Canvia a Espai privat"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instal·la aplicacions"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instal·la les aplicacions a Espai privat"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 312b57b..12e8a9f 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Přidat na plochu"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> byl přidán na plochu"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Návrhy"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Buďte produktivnější"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Zprávy pro vás"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Vaše klidová zóna"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Dosažení kondičních cílů"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Mějte přehled o počasí"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Také by se vám mohlo líbit"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgety <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> vpravo, vyhledávání a možnosti vlevo"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{ # widget}few{# widgety}many{# widgetu}other{# widgetů}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# zkratka}few{# zkratky}many{# zkratky}other{# zkratek}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Soukromé"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Nastavení soukromého prostoru"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Zamknout/odemknout soukromý prostor"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Převádění soukromého prostoru"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instalace aplikací"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instalovat aplikace do soukromého prostoru"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 967a720..fee0ddb 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Føj til startskærm"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widgetten <xliff:g id="WIDGET_NAME">%1$s</xliff:g> blev føjet til startskærmen"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Forslag"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Boost din dag"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Nyheder til dig"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Dit afslapningshjørne"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Nå dine fitnessmål"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Vær på forkant med vejret"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Du kan måske også lide"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>-widgets til højre, søgning og valgmuligheder til venstre"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}one{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# genvej}one{# genvej}other{# genveje}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privat"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Indstillinger for privat rum"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lås/oplås det private område"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Ændringer af tilstanden for det private område"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Installer apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Installer apps i privat område"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 478aabc..1d263c8 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Zum Startbildschirm hinzufügen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g>-Widget zum Startbildschirm hinzugefügt"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Vorschläge"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Deine Alltagshelfer"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Neuigkeiten für dich"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Zum Entspannen"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Erreiche deine Fitnessziele"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Dem Wetter einen Schritt voraus"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Das könnte dir auch gefallen"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>-Widgets rechts, Suche und Optionen links"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# Widget}other{# Widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# Verknüpfung}other{# Verknüpfungen}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privat"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Einstellungen für privaten Bereich"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Privaten Bereich sperren/entsperren"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Sperrzustand des privaten Bereichs wird gerade geändert"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Apps installieren"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Apps im privaten Bereich installieren"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 092f8d8..e67bbc6 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Προσθήκη στην αρχική οθόνη"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Το γραφικό στοιχείο <xliff:g id="WIDGET_NAME">%1$s</xliff:g> προστέθηκε στην αρχική οθόνη."</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Προτάσεις"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Ενισχύστε την απόδοσή σας σήμερα"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Ειδήσεις για εσάς"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Ο δικός σας τρόπος χαλάρωσης"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Επιτύχετε τους στόχους που έχετε θέσει για τη φυσική σας κατάσταση"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Ετοιμαστείτε για κάθε καιρό"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Μπορεί να σας αρέσουν επίσης"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Γραφικά στοιχεία <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> στα δεξιά, αναζήτηση και επιλογές στα αριστερά"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# γραφικό στοιχείο}other{# γραφικά στοιχεία}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# συντόμευση}other{# συντομεύσεις}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Ιδιωτικό"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Ρυθμίσεις Ιδιωτικού χώρου"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Κλείδωμα/Ξεκλείδωμα Ιδιωτικού χώρου"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Μετάβαση στον Ιδιωτικό χώρο"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Εγκατάσταση εφαρμογών"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Εγκατάσταση εφαρμογών στον απόρρητο χώρο"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index c88d5e6..e9339c7 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Add to home screen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> widget added to home screen"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggestions"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Boost your day"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"News for you"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Your chill zone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Reach your fitness goals"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Stay ahead of the weather"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"You might also like"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> widgets on right, search and options on left"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# shortcut}other{# shortcuts}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Private"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Private Space Settings"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lock/Unlock Private Space"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Private Space transitioning"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Install apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Install apps to private space"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index fc611f3..14be657 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -40,7 +40,7 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Add to home screen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> widget added to home screen"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggestions"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Boost your day"</string>
+ <string name="productivity_widget_recommendation_category_label" msgid="1722113555721820766">"Your Daily Essentials"</string>
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"News For You"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Your Chill Zone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Reach Your Fitness Goals"</string>
@@ -184,6 +184,7 @@
<string name="ps_container_title" msgid="4391796149519594205">"Private"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Private Space Settings"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lock/Unlock Private Space"</string>
+ <string name="ps_container_lock_title" msgid="2640257399982364682">"Lock"</string>
<string name="ps_container_transition" msgid="8667331812048014412">"Private Space Transitioning"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Install apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Install apps to Private Space"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index c88d5e6..e9339c7 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Add to home screen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> widget added to home screen"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggestions"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Boost your day"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"News for you"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Your chill zone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Reach your fitness goals"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Stay ahead of the weather"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"You might also like"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> widgets on right, search and options on left"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# shortcut}other{# shortcuts}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Private"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Private Space Settings"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lock/Unlock Private Space"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Private Space transitioning"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Install apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Install apps to private space"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index c88d5e6..e9339c7 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Add to home screen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> widget added to home screen"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggestions"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Boost your day"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"News for you"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Your chill zone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Reach your fitness goals"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Stay ahead of the weather"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"You might also like"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> widgets on right, search and options on left"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# shortcut}other{# shortcuts}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Private"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Private Space Settings"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lock/Unlock Private Space"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Private Space transitioning"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Install apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Install apps to private space"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 5ce5858..985174a 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -40,7 +40,7 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Add to home screen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> widget added to home screen"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggestions"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Boost your day"</string>
+ <string name="productivity_widget_recommendation_category_label" msgid="1722113555721820766">"Your Daily Essentials"</string>
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"News For You"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Your Chill Zone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Reach Your Fitness Goals"</string>
@@ -184,6 +184,7 @@
<string name="ps_container_title" msgid="4391796149519594205">"Private"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Private Space Settings"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lock/Unlock Private Space"</string>
+ <string name="ps_container_lock_title" msgid="2640257399982364682">"Lock"</string>
<string name="ps_container_transition" msgid="8667331812048014412">"Private Space Transitioning"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Install apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Install apps to Private Space"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index dc087f2..90b27cc 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Agregar a pantalla principal"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Se agregó el widget de <xliff:g id="WIDGET_NAME">%1$s</xliff:g> a la pantalla principal"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Sugerencias"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Aprovecha mejor tu día"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Noticias para ti"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Zona de descanso"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Logra tus objetivos de fitness"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Mantente al tanto del clima"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Puede que también te guste"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgets de <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> a la derecha, búsqueda y opciones a la izquierda"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# acceso directo}other{# accesos directos}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privado"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Configuración de Espacio privado"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Bloquear o desbloquear Espacio privado"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Pasar a Espacio privado"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instala apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instala las apps en el espacio privado"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 94d83bd..4bf5516 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Añadir a pantalla de inicio"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> añadido a la pantalla de inicio"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Sugerencias"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Mejora tu día"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Noticias para ti"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Tu zona de descanso"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Logra tus objetivos de actividad física"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Infórmate sobre el tiempo"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"También te puede interesar"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgets de <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> a la derecha, búsqueda y opciones a la izquierda"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# acceso directo}other{# accesos directos}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privado"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Ajustes del espacio privado"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Bloquear/Desbloquear espacio privado"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Cambiar a espacio privado"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Descargar aplicaciones"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Descargar aplicaciones en el espacio privado"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 4b30dce..26277af 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Lisa avakuvale"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Vidin <xliff:g id="WIDGET_NAME">%1$s</xliff:g> lisati avakuvale"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Soovitused"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Saavutage päeva jooksul rohkem"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Uudised teile"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Teie lõõgastumiskoht"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Saavutage oma treeningueesmärgid"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Olge ilmateatega kursis"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Teile võivad meeldida ka need"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Teenuse <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> vidinad paremal, otsing ja valikud vasakul"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# vidin}other{# vidinat}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# otsetee}other{# otseteed}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privaatne"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Privaatse ruumi seaded"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Privaatse ruumi lukustamine/avamine"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Privaatse ruumi üleviimine"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Rakenduste installimine"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Rakenduste installimine privaatses ruumis"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 3c708f8..435d057 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Gehitu hasierako pantailan"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> widgeta hasierako pantailan gehitu da"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Iradokizunak"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Atera etekin handiagoa egunari"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Zuretzako albisteak"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Lasaitzeko gunea"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Erdietsi zure fitness-helburuak"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Hartu aurrea eguraldiari"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Gustatuko zaizkizulakoan"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> zerbitzuaren widgetak eskuinean, bilaketa eta aukerak ezkerrean"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widget}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# lasterbide}other{# lasterbide}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Pribatua"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Eremu pribatuaren ezarpenak"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Blokeatu/Desblokeatu eremu pribatua"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Eremu pribaturako trantsizioa"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Aplikazioak instalatu"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instalatu aplikazioak eremu pribatuan"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index f9ed4a0..6c71677 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"افزودن به صفحه اصلی"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"ابزارک <xliff:g id="WIDGET_NAME">%1$s</xliff:g> به صفحه اصلی اضافه شد"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"پیشنهادها"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"روزتان را پربار کنید"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"اخبار برای شما"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"منطقه آرامش شما"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"دستیابی به اهداف تناسب اندام"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"آبوهوا را پیشبینی کنید"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"شاید این را هم بپسندید"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"ابزارکهای <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> در سمت چپ، جستجو و گزینهها در سمت راست"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ابزارک}one{# ابزارک}other{# ابزارک}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# میانبر}one{# میانبر}other{# میانبر}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>،<xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"خصوصی"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"تنظیمات «فضای خصوصی»"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"قفل/ باز کردن «فضای خصوصی»"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"انتقال «فضای خصوصی»"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"نصب برنامهها"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"نصب برنامهها در «فضای خصوصی»"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 6d9cf77..1109611 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Lisää aloitusnäytölle"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget lisätty aloitusnäytölle: <xliff:g id="WIDGET_NAME">%1$s</xliff:g>"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Ehdotukset"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Tehosta päivääsi"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Uutisia sinulle"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Ota rennosti"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Saavuta kuntoilutavoitteet"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Pysy ajan tasalla säästä"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Saatat pitää myös näistä"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> widgetit oikealla, haku ja vaihtoehdot vasemmalla"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgetiä}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# pikakuvake}other{# pikakuvaketta}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Yksityinen"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Yksityisen tilan asetukset"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lukitse yksityinen tila / avaa sen lukitus"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Yksityisen tilan siirtäminen"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Asenna sovelluksia"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Asenna sovelluksia yksityiseen tilaan"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index a3ed04c..bb70551 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Ajouter à l\'écran d\'accueil"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Le widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> a été ajouté à l\'écran d\'accueil"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggestions"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Productivité assurée"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Actualités personnalisées"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Zone de divertissement"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Objectifs de mise en forme"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"À l\'affût de la météo"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Autres recommandations"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgets <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> à droite, recherche et options à gauche"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}one{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# raccourci}one{# raccourci}other{# raccourcis}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privé"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Paramètres de l\'Espace privé"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Verrouiller/Déverrouiller l\'Espace privé"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Transition vers l\'Espace privé"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Installer des applications"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Installer des applications dans l\'Espace privé"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 80e3059..62844b0 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Ajouter à l\'écran d\'accueil"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> ajouté à l\'écran d\'accueil"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggestions"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Boostez votre journée"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Actualités personnalisées"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Votre espace détente"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Atteignez vos objectifs forme"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Soyez au fait de la météo"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Découvrez également"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgets <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> à droite, recherche et options à gauche"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}one{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# raccourci}one{# raccourci}other{# raccourcis}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privé"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Paramètres d\'Espace privé"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Verrouiller/Déverrouiller Espace privé"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Transition vers Espace privé"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Installer des applis"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Installer des applis dans l\'espace privé"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 677cfe3..82cdf3a 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Engadir á pantalla de inicio"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Engadiuse o widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> á pantalla de inicio"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suxestións"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Mellora o teu día"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Novidades para ti"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Reláxate"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Acada os teus obxectivos para estar en forma"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Adiántate á meteoroloxía"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Tamén che pode interesar…"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgets de <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> á dereita, busca e opcións á esquerda"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# atallo}other{# atallos}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privado"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Configuración do espazo privado"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Bloquear ou desbloquear o espazo privado"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Transición ao espazo privado"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instalar as aplicacións"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instalar as aplicacións no espazo privado"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index a77cbfd..4a5ac83 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"હોમ સ્ક્રીનમાં ઉમેરો"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"હોમ સ્ક્રીન પર <xliff:g id="WIDGET_NAME">%1$s</xliff:g> વિજેટ ઉમેર્યુ"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"સૂચનો"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"તમારા દિવસને બૂસ્ટ કરો"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"તમારા માટે સમાચાર"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"તમારો આરામદાયક ઝોન"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"તમારા ફિટનેસ લક્ષ્યો પૂરા કરો"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"હવામાન વિશે અપ ટૂ ડેટ રહો"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"કદાચ તમને આ પણ પસંદ હોય"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>ની વિજેટ જમણે, શોધ અને વિકલ્પો ડાબે"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# વિજેટ}one{# વિજેટ}other{# વિજેટ}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# શૉર્ટકટ}one{# શૉર્ટકટ}other{# શૉર્ટકટ}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ખાનગી"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ખાનગી સ્પેસના સેટિંગ"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ખાનગી સ્પેસને લૉક/અનલૉક કરો"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ખાનગી સ્પેસ પર સ્થાનાંતરણ"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ઍપ ઇન્સ્ટૉલ કરો"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"ખાનગી સ્પેસમાં ઍપ ઇન્સ્ટૉલ કરો"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index b08230e..319939a 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"होम स्क्रीन पर जोड़ें"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> विजेट को होम स्क्रीन पर जोड़ा गया"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"सुझाव"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"अपना दिन बेहतर बनाएं"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"आपके लिए खबरें"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"आपके मनोरंजन के लिए"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"फ़िटनेस के लक्ष्य हासिल करें"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"मौसम की अप-टू-डेट जानकारी पाएं"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"शायद आपको ये भी पसंद आएं"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> के विजेट दाईं ओर, खोज का विजेट और अन्य विकल्प बाईं ओर"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# विजेट}one{# विजेट}other{# विजेट}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# शॉर्टकट}one{# शॉर्टकट}other{# शॉर्टकट}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"निजी"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"प्राइवेट स्पेस सेटिंग"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"प्राइवेट स्पेस को लॉक करें/अनलॉक करें"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"प्राइवेट स्पेस की सेटिंग में बदलाव किया जा रहा है"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ऐप्लिकेशन इंस्टॉल करें"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"प्राइवेट स्पेस में ऐप्लिकेशन इंस्टॉल करें"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 1d85b4c..46b0abf 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Dodaj na početni zaslon"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> dodan je na početni zaslon"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Prijedlozi"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Unaprijedite svoj dan"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Vijesti za vas"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Vaša zona za opuštanje"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Postignite svoje ciljeve u fitnesu"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Budite korak ispred vremenskih prilika"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Možda će vam se svidjeti i ovo"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> –widgeti zdesna, pretraživanje i opcije slijeva"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}one{# widget}few{# widgeta}other{# widgeta}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# prečac}one{# prečac}few{# prečaca}other{# prečaca}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privatno"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Postavke privatnog prostora"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Zaključavanje/otključavanje privatnog prostora"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Prelazak na privatni prostor"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instaliranje aplikacija"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instaliranje aplikacija u privatni prostor"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 3ee1143..06d17f5 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Hozzáadás a kezdőképernyőhöz"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> modul hozzáadva a kezdőképernyőhöz"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Javaslatok"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Felturbózhatja a napját"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Hírek Önnek"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Az Ön relaxáló zónája"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Elérheti kitűzött erőnléti céljait"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Mindig friss időjárás-információk"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Lehet, hogy ez is tetszeni fog"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"A <xliff:g id="SELECTED_HEADER">%1$s</xliff:g>-modulok a jobb, a kereső és a beállítások pedig a bal oldalon találhatók"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# modul}other{# modul}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# gyorsparancs}other{# gyorsparancs}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privát"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Privát terület beállításai"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Privát terület zárolása/zárolásának feloldása"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Átállás privát területre…"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Alkalmazástelepítés"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Alkalmazások telepítése magánterületre"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 4f69c17..0e4a120 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Ավելացնել հիմնական էկրանին"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> վիջեթն ավելացվել է հիմնական էկրանին"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Առաջարկներ"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Ակտիվացրեք ձեր օրը"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Նորություններ ձեզ համար"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Ձեր հանգստի գոտին"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Հասեք ձեր ֆիթնես նպատակներին"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Եղեք տեղեկացված եղանակի մասին"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Ձեզ կարող է դուր գալ"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"«<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>» հավելվածի վիջեթներն աջ կողմում են, իսկ որոնման դաշտը և կարգավորումները՝ ձախ կողմում"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# վիջեթ}one{# վիջեթ}other{# վիջեթ}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# դյուրանցում}one{# դյուրանցում}other{# դյուրանցում}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Անձնական"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Անձնական տարածքի կարգավորումներ"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Կողպել/ապակողպել անձնական տարածքը"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Անցում անձնական տարածք"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Հավելվածների տեղադրում"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Հավելվածների տեղադրում անձնական տարածքում"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index a1bd81e..3e325b3 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Tambahkan ke layar utama"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> ditambahkan ke layar utama"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Saran"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Tingkatkan hari Anda"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Berita untuk Anda"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Zona Nyaman Anda"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Capai Target Kebugaran Anda"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Tetap Waspada Menghadapi Cuaca"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Anda Mungkin Juga Suka"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widget <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> di bagian kanan, penelusuran dan opsi di bagian kiri"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widget}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# pintasan}other{# pintasan}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Pribadi"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Setelan Ruang Pribadi"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Kunci/Buka Kunci Ruang Pribadi"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Ruang Pribadi Bertransisi"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Menginstal aplikasi"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instal aplikasi ke Ruang Pribadi"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 034362e..b2e91d4 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Bæta á heimaskjá"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> græju bætt við heimaskjá"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Tillögur"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Gerðu daginn betri"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Fréttir fyrir þig"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Slakaðu á"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Náðu hreyfingarmarkmiðunum þínum"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Vertu einu skrefi á undan veðrinu"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Þú gætir einnig haft áhuga á"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>-græjur til hægri, leit og valkostir til vinstri"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# græja}one{# græja}other{# græjur}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# flýtileið}one{# flýtileið}other{# flýtileiðir}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Lokað"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Stillingar einkarýmis"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Læsaeinkarými/taka einkarými úr lás"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Einkarými að breytast"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Setja upp forrit"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Setja upp forrit í einkarými"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 808ee5b..f259595 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Aggiungi alla schermata Home"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> aggiunto alla schermata Home"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggerimenti"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Dai la carica alla tua giornata"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Notizie per te"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Il tuo angolo di tranquillità"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Raggiungi i tuoi obiettivi di fitness"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Non perderti le previsioni meteo"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Ti potrebbero anche piacere"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widget di <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> a destra, ricerca e opzioni a sinistra"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widget}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# scorciatoia}other{# scorciatoie}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privato"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Impostazioni dello Spazio privato"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Blocca/sblocca Spazio privato"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Transizione dello Spazio privato in corso…"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Installa app"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Installa le app su spazi privati"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index b0e4fc6..d22e937 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"הוספה למסך הבית"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"הווידג\'ט <xliff:g id="WIDGET_NAME">%1$s</xliff:g> נוסף למסך הבית"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"הצעות"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"משפרים את היום"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"חדשות בשבילך"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"המקום שלך לרגיעה"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"השגת יעדי הכושר שלך"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"התעדכנות במזג האוויר"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"אולי יעניין אותך גם"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ווידג\'טים מימין, חיפוש ואפשרויות משמאל"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{ווידג\'ט אחד}one{# ווידג\'טים}two{# ווידג\'טים}other{# ווידג\'טים}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{קיצור דרך אחד}one{# קיצורי דרך}two{# קיצורי דרך}other{# קיצורי דרך}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"פרטי"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"הגדרות המרחב הפרטי"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"נעילה או ביטול הנעילה של המרחב הפרטי"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"מעבר למרחב הפרטי"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"התקנת אפליקציות"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"התקנת אפליקציות במרחב הפרטי"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 9cb3fd5..769af4b 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ホーム画面に追加"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"「<xliff:g id="WIDGET_NAME">%1$s</xliff:g>」ウィジェットをホーム画面に追加しました"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"候補"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"生産性を向上"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"あなたへのおすすめニュース"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"休憩エリア"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"フィットネスの目標を達成"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"天気予報"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"あなたへのおすすめ"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> のウィジェットは右側に、検索とオプションは左側にあります"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# 件のウィジェット}other{# 件のウィジェット}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# 件のショートカット}other{# 件のショートカット}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>、<xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"プライベート"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"プライベート スペースの設定"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"プライベート スペースをロック / ロック解除する"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"プライベート スペース移行中"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"アプリをインストールする"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"プライベート スペースにアプリをインストールします"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index d765680..43249d8 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"მთავარ ეკრანზე დამატება"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> ვიჯეტი დამატებულია მთავარ ეკრანზე"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"შეთავაზებები"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"გაიუმჯობესეთ დღე"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"News თქვენთვის"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"განტვირთვის ადგილი"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"მიაღწიეთ ფიტნეს-მიზნებს"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"მიიღეთ ინფორმაცია წინასწარ ამინდის შესახებ"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"ასევე შეიძლება მოგეწონოთ"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ვიჯეტები მდებარეობს მარჯვნივ, ძებნა და პარამეტრები — მარცხნივ"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ვიჯეტი}other{# ვიჯეტი}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# მალსახმობი}other{# მალსახმობი}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"პირადი"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"პირადი სივრცის პარამეტრები"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"პირადი სივრცის ჩაკეტვა/განბლოკვა"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"პირად სივრცეზე გადასვლა"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"აპების ინსტალაცია"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"კერძო სივრცეში აპების ინსტალაცია"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index e0f14ba..005f860 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Негізгі экранға қосу"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> виджеті негізгі экранға енгізілді."</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Ұсыныстар"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Күні бойы қуатты болыңыз"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Сізге арналған жаңалықтар"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Жанға жайлы жер"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Денені шынықтыру бойынша қойған мақсаттарыңызға жетіңіз"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Ауа райын алдын ала біліп отырыңыз"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Сізге мыналар да ұнауы мүмкін"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> виджеттері оң жақта, іздеу мен опциялар сол жақта"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# виджет}other{# виджет}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# таңбаша}other{# таңбаша}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Жеке"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Жеке бөлме параметрлері"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Жеке бөлмені құлыптау/оның құлпын ашу"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Жеке бөлмеге өту"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Қолданбалар орнату"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Қолданбаларды \"Құпия кеңістікке\" орнатыңыз."</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index c68194a..abce94a 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"បញ្ចូលទៅក្នុងអេក្រង់ដើម"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"បានបញ្ចូលធាតុក្រាហ្វិក <xliff:g id="WIDGET_NAME">%1$s</xliff:g> ទៅអេក្រង់ដើម"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"ការណែនាំ"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"ពង្រឹងសុខុមាលភាពប្រចាំថ្ងៃរបស់អ្នក"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"ព័ត៌មានសម្រាប់អ្នក"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"តំបន់បន្ធូរអារម្មណ៍របស់អ្នក"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"សម្រេចគោលដៅហាត់ប្រាណរបស់អ្នក"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"ទទួលបានដំណឹងជាមុនអំពីអាកាសធាតុ"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"អ្នកក៏អាចនឹងចូលចិត្ត"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"ធាតុក្រាហ្វិក <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> នៅខាងស្ដាំ ការស្វែងរក និងជម្រើសនៅខាងឆ្វេង"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{ធាតុក្រាហ្វិក #}other{ធាតុក្រាហ្វិក #}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{ផ្លូវកាត់ #}other{ផ្លូវកាត់ #}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ឯកជន"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ការកំណត់ Private Space"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ចាក់សោ/ដោះសោ Private Space"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ការផ្លាស់ប្ដូរ Private Space"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ដំឡើងកម្មវិធី"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"ដំឡើងកម្មវិធីទៅលំហឯកជន"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index c82288f..4815371 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ಹೋಮ್ ಸ್ಕ್ರೀನ್ಗೆ ಸೇರಿಸಿ"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"ಹೋಮ್ಸ್ಕ್ರೀನ್ಗೆ <xliff:g id="WIDGET_NAME">%1$s</xliff:g> ವಿಜೆಟ್ ಅನ್ನು ಸೇರಿಸಲಾಗಿದೆ"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"ಸಲಹೆಗಳು"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"ನಿಮ್ಮ ದಿನವನ್ನು ಇನ್ನಷ್ಟು ಉತ್ಸಾಹಗೊಳಿಸಿ"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"ನಿಮಗಾಗಿ ಸುದ್ದಿ"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"ನೀವು ವಿಶ್ರಾಂತಿ ಪಡೆಯುವ ಸ್ಥಳ"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"ನಿಮ್ಮ ಫಿಟ್ನೆಸ್ ಗುರಿಗಳನ್ನು ಸಾಧಿಸಿ"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"ಹವಾಮಾನದ ಕುರಿತು ಮುಂಚೆಯೇ ಅಪ್ಡೇಟ್ ಆಗಿರಿ"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"ನಿಮಗೆ ಇವು ಕೂಡ ಇಷ್ಟವಾಗಬಹುದು"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"ಬಲಭಾಗದಲ್ಲಿ <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ವಿಜೆಟ್ಗಳು, ಎಡಭಾಗದಲ್ಲಿ ಹುಡುಕಾಟ ಮತ್ತು ಆಯ್ಕೆಗಳು"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ವಿಜೆಟ್}one{# ವಿಜೆಟ್ಗಳು}other{# ವಿಜೆಟ್ಗಳು}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ಶಾರ್ಟ್ಕಟ್}one{# ಶಾರ್ಟ್ಕಟ್ಗಳು}other{# ಶಾರ್ಟ್ಕಟ್ಗಳು}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ಖಾಸಗಿ"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ಖಾಸಗಿ ಸ್ಪೇಸ್ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ಖಾಸಗಿ ಸ್ಪೇಸ್ ಅನ್ನು ಲಾಕ್/ಅನ್ಲಾಕ್ ಮಾಡಿ"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ಖಾಸಗಿ ಸ್ಪೇಸ್ ಪರಿವರ್ತನೆಯಾಗುತ್ತಿದೆ"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ಆ್ಯಪ್ಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"ಆ್ಯಪ್ಗಳನ್ನು ಪ್ರೈವೇಟ್ ಸ್ಪೇಸ್ನಲ್ಲಿ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index d8e64d6..fc0d8bb 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"홈 화면에 추가"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> 위젯이 홈 화면에 추가됨"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"추천"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"생산성 향상"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"추천 뉴스"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"휴식 공간"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"피트니스 목표 달성"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"사전에 날씨 확인"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"좋아할 만한 항목"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"오른쪽에 <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> 위젯, 왼쪽에 검색 및 옵션"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{위젯 #개}other{위젯 #개}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{바로가기 #개}other{바로가기 #개}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"비공개"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"비공개 스페이스 설정"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"비공개 스페이스 잠금/잠금 해제"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"비공개 스페이스 전환"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"앱 설치"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"비공개 스페이스에 앱 설치"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 8b2fef4..dff3f00 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Башкы экранга кошуу"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> виджети башкы экранга кошулду"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Сунуштар"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Майнаптуу күн"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Сиз үчүн жаңылыктар"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Чер жазуу"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Фитнес максаттарыңызга жетиңиз"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Аба ырайы тууралуу маалымат"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Төмөнкүлөр да жагышы мүмкүн"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> виджеттери оң, ал эми издөө жана параметрлер сол жакта"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# виджет}other{# виджет}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ыкчам баскыч}other{# ыкчам баскыч}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Жеке"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Жеке чөйрөнүн параметрлери"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Жеке чөйрөнү кулпулоо/кулпусун ачуу"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Жеке чөйрөгө өтүү"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Колдонмолорду орнотуу"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Колдонмолорду Жеке мейкиндикке орнотуe"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 99f3042..328d108 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ເພີ່ມໃສ່ໂຮມສະກຣີນ"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"ເພີ່ມວິດເຈັດ <xliff:g id="WIDGET_NAME">%1$s</xliff:g> ໃສ່ໂຮມສະກຣີນແລ້ວ"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"ການແນະນຳ"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"ເຮັດໃຫ້ເປັນມື້ທີ່ມີປະສິດທິພາບ"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"ຂ່າວສຳລັບທ່ານ"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"ພື້ນທີ່ພັກຜ່ອນຂອງທ່ານ"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"ບັນລຸເປົ້າໝາຍການອອກກຳລັງກາຍຂອງທ່ານ"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"ຮູ້ສະພາບອາກາດລ່ວງໜ້າ"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"ທ່ານອາດຈະມັກ"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"ວິດເຈັດ <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ຢູ່ທາງຂວາ, ການຊອກຫາ ແລະ ຕົວເລືອກຢູ່ທາງຊ້າຍ"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ວິດເຈັດ}other{# ວິດເຈັດ}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ທາງລັດ}other{# ທາງລັດ}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ສ່ວນຕົວ"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ການຕັ້ງຄ່າພື້ນທີ່ສ່ວນຕົວ"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ລັອກ/ປົດລັອກພື້ນທີ່ສ່ວນຕົວ"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ການປ່ຽນແປງພື້ນທີ່ສ່ວນຕົວ"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ຕິດຕັ້ງແອັບ"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"ຕິດຕັ້ງແອັບໄປໃສ່ພື້ນທີ່ສ່ວນບຸກຄົນ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 6579674..db18d7b 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Pridėti prie pagrindinio ekrano"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Valdiklis „<xliff:g id="WIDGET_NAME">%1$s</xliff:g>“ pridėtas prie pagrindinio ekrano"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Pasiūlymai"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Padidinkite dienos produktyvumą"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Naujienos jums"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Jūsų atsipalaidavimo zona"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Pasiekite mankštos tikslus"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Visada žinokite, kokie bus orai"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Jums taip pat gali patikti"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> valdikliai dešinėje, paieška ir parinktys kairėje"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# valdiklis}one{# valdiklis}few{# valdikliai}many{# valdiklio}other{# valdiklių}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# spartusis klavišas}one{# spartusis klavišas}few{# spartieji klavišai}many{# sparčiojo klavišo}other{# sparčiųjų klavišų}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privatus"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Privačios erdvės nustatymai"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Užrakinti ir (arba) atrakinti privačią erdvę"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Privačios erdvės perkėlimas"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Programų diegimas"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Įdiegti programas privačioje erdvėje"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 7df06a9..f0e58df 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Pievienot sākuma ekrānam"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Logrīks “<xliff:g id="WIDGET_NAME">%1$s</xliff:g>” ir pievienots sākuma ekrānam"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Ieteikumi"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Produktīvākai dienai"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Ziņas jums"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Jūsu atpūtas stūrītis"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Sasniedziet fitnesa mērķus"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Neļaujiet laikapstākļiem jūs pārsteigt"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Jums varētu patikt arī…"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Pa labi logrīki <xliff:g id="SELECTED_HEADER">%1$s</xliff:g>, pa kreisi meklēšana un iespējas"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# logrīks}zero{# logrīku}one{# logrīks}other{# logrīki}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# saīsne}zero{# saīšņu}one{# saīsne}other{# saīsnes}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privātā mape"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Privātās mapes iestatījumi"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Bloķēt/atbloķēt privāto mapi"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Pāriet uz privāto mapi"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Lietotņu instalēšana"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instalējiet lietotnes privātajā telpā."</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 7dd8926..51b2b96 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Додај на почетниот екран"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Виџетот <xliff:g id="WIDGET_NAME">%1$s</xliff:g> е додаден на почетниот екран"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Предлози"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Подобрете го денот"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Вести за вас"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Вашата зона за релаксација"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Достигнете ги целите за фитнес"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Бидете во тек со временската прогноза"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Можеби ќе ви се допадне и"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> виџети оддесно, „Пребарување“ и „Опции“ одлево"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# виџет}one{# виџет}other{# виџети}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# кратенка}one{# кратенка}other{# кратенки}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Приватен"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Поставки за „Приватен простор“"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Заклучување/отклучување на „Приватен простор“"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Префрлање на „Приватен простор“"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Инсталирање апликации"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Инсталирање апликации во „Приватен простор“"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 2abab01..3f515b8 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ഹോം സ്ക്രീനിലേക്ക് ചേർക്കുക"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> വിജറ്റ് ഹോം സ്ക്രീനിലേക്ക് ചേർത്തു"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"നിർദ്ദേശങ്ങൾ"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"കൂടുതൽ കാര്യക്ഷമമാകൂ"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"നിങ്ങൾക്കായുള്ള വാർത്ത"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"നിങ്ങൾക്ക് സുഖപ്രദമായ സ്ഥലം"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"ശാരീരികക്ഷമതയുമായി ബന്ധപ്പെട്ട ലക്ഷ്യങ്ങൾ കൈവരിക്കൂ"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"കാലാവസ്ഥ മുൻകൂട്ടി മനസ്സിലാക്കുക"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"നിങ്ങൾക്ക് ഇനിപ്പറയുന്നവ ഇഷ്ടമായേക്കാം"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"വലതുവശത്ത് <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> വിജറ്റുകളും ഇടതുവശത്ത് തിരയൽ, ഓപ്ഷനുകൾ എന്നിവയും"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# വിജറ്റ്}other{# വിജറ്റുകൾ}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# കുറുക്കുവഴി}other{# കുറുക്കുവഴികൾ}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"സ്വകാര്യം"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"സ്വകാര്യ സ്പേസ് ക്രമീകരണം"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"സ്വകാര്യ സ്പേസ് ലോക്ക് ചെയ്യുക/അൺലോക്ക് ചെയ്യുക"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"പ്രൈവറ്റ് സ്പേസ് ട്രാൻസിഷനിംഗ്"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"സ്വകാര്യ സ്പേസിലേക്ക് ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 71b7d4f..0dd648a 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Үндсэн нүүрэнд нэмэх"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> виджетийг үндсэн нүүрэнд нэмсэн"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Зөвлөмжүүд"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Өдрөө сайхан болгоорой"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Танд зориулсан мэдээ"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Таны амралтын бүс"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Фитнесийн зорилгодоо хүрээрэй"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Цаг агаарын урьдчилсан мэдээлэлтэй байгаарай"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Танд таалагдаж магадгүй"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Баруун талд <xliff:g id="SELECTED_HEADER">%1$s</xliff:g>-н виджет, зүүн талд хайлт болон сонгуултууд байна"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# виджет}other{# виджет}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# товчлол}other{# товчлол}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Хувийн"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Private Space-н тохиргоо"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Private Space-г түгжих/түгжээг тайлах"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Private Space-н шилжилт"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Аппуудыг суулгах"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Хувийн орон зайд аппууд суулгана уу"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 7b1ceb9..9d0f2bf 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"होम स्क्रीनवर जोडा"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> हे विजेट तुमच्या होम स्क्रीनवर जोडले आहे"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"सूचना"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"तुमचा दिवस आणखी उत्साहवर्धक करा"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"तुमच्यासाठी बातम्या"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"तुमचा आरामदायक झोन"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"तुमची फिटनेस ध्येये गाठा"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"हवामानासंबंधित बातम्या आगामी मिळवा"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"तुम्हाला हेदेखील आवडू शकते"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"उजवीकडे <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> विजेट, डावीकडे शोध आणि पर्याय"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# विजेट}other{# विजेट}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# शॉर्टकट}other{# शॉर्टकट}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"खाजगी"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"खाजगी स्पेस ची सेटिंग्ज"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"खाजगी स्पेस लॉक/अनलॉक करा"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"खाजगी स्पेस वर स्विच करणे"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"अॅप्स इंस्टॉल करा"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"अॅप्स खाजगी स्पेस मध्ये इंस्टॉल करा"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 94e89e0..83fd3ee 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Tambahkan pada skrin utama"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> ditambahkan pada skrin utama"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Cadangan"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Tingkatkan hari anda"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Berita Untuk Anda"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Zon Santai Anda"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Capai Matlamat Kecergasan Anda"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Ketahui Perkembangan Terkini Cuaca"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Anda Mungkin Turut Menyukai"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widget <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> pada sebelah kanan, carian dan pilihan pada sebelah kiri"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widget}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# pintasan}other{# pintasan}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Peribadi"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Tetapan Ruang Peribadi"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Kunci/Buka kunci Ruang Peribadi"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Peralihan Ruang Peribadi"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Pasang apl"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Pasang apl pada Ruang Peribadi"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index c10ddcd..c832434 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ပင်မစာမျက်နှာတွင် ထည့်ရန်"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> ဝိဂျက်ကို ပင်မစာမျက်နှာတွင် ထည့်လိုက်ပြီ"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"အကြံပြုချက်"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"သင့်နေ့ကို မွမ်းမံရန်"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"သင့်အတွက် သတင်းများ"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"သင်အနားယူသောနေရာ"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"သင့်ကြံ့ခိုင်ရေးပန်းတိုင်ဆီ သွားရန်"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"မိုးလေဝသကို ကြိုတင်ကာကွယ်ရန်"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"သင်နှစ်သက်နိုင်သောအရာများ"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ဝိဂျက်များသည် ညာဘက်တွင်ရှိပြီး ရှာဖွေမှုနှင့် ရွေးစရာများသည် ဘယ်ဘက်တွင်ရှိသည်"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{ဝိဂျက် # ခု}other{ဝိဂျက် # ခု}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{ဖြတ်လမ်းလင့်ခ် # ခု}other{ဖြတ်လမ်းလင့်ခ် # ခု}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>၊ <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"သီးသန့်"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"သီးသန့်ချတ်ခန်း ဆက်တင်များ"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"သီးသန့်ချတ်ခန်း လော့ခ်ချ/ဖွင့်ရန်"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"သီးသန့်ချတ်ခန်း အပြောင်းအလဲ"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"အက်ပ်များ ထည့်သွင်းခြင်း"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"‘သီးသန့်နေရာ’ တွင် အက်ပ်များ ထည့်သွင်းနိုင်သည်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index ee73d51..69697dc 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Legg til på startskjermen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g>-modulen er lagt til på startskjermen"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Forslag"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Få en bedre dag"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Nyheter for deg"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Avslappingssonen din"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Nå treningsmålene dine"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Hold deg i forkant av været"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Kanskje du også liker"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> moduler til høyre, søk og alternativer til venstre"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# modul}other{# moduler}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# snarvei}other{# snarveier}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privat"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Innstillinger for Private Space"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lås / lås opp Private Space"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Private Space-overgang"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Installer apper"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Installer apper i privat område"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index f061a82..c6d2e48 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"होम स्क्रिनमा राख्नुहोस्"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"होम स्क्रिनमा <xliff:g id="WIDGET_NAME">%1$s</xliff:g> विजेट हालियो"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"सुझावहरू"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"आफ्नो आजको पर्फर्मेन्स बढाउनुहोस्"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"तपाईंका निम्ति सिफारिस गरिएका समाचार"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"तपाईंको Chill Zone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"आफूले तय गरेको तन्दुरुस्तीको लक्ष्यमा पुग्नुहोस्"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"मौसमको पूर्वानुमान प्राप्त गर्नुहोस्"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"तपाईंलाई निम्न कुराहरू पनि मन पर्न सक्छन्"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"दायाँ भागमा <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> विजेटहरू, बायाँ भागमा खोज र विकल्पहरू"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# विजेट}other{# वटा विजेट}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# सर्टकट}other{# वटा सर्टकट}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"निजी"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"निजी स्पेससम्बन्धी सेटिङ"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"निजी स्पेस लक/अनलक गर्नुहोस्"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"निजी स्पेस ट्रान्जिसन गरिँदै छ"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"एपहरू इन्स्टल गर्नुहोस्"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"निजी स्पेसमा एपहरू इन्स्टल गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 557fab3..c9d1e51 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Toevoegen aan startscherm"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> toegevoegd aan startscherm"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Suggesties"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Geef je dag een boost"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Nieuws voor jou"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Je chillzone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Behaal je fitnessdoelen"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Blijf het weer een stap voor"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Misschien ook interessant"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>-widgets aan de rechterkant, zoeken en opties aan de linkerkant"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# snelkoppeling}other{# snelkoppelingen}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privé"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Instellingen voor privéruimte"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Privéruimte vergrendelen/ontgrendelen"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Overschakelen naar privéruimte"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Apps installeren"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Apps installeren in privégedeelte"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index ed62a35..16cadba 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ହୋମ ସ୍କ୍ରିନରେ ଯୋଗ କରନ୍ତୁ"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g>ର ୱିଜେଟ ହୋମ ସ୍କ୍ରିନରେ ଯୋଡ଼ାଗଲା"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"ପରାମର୍ଶଗୁଡ଼ିକ"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"ଆପଣଙ୍କ ଦିନକୁ ବୁଷ୍ଟ କରନ୍ତୁ"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"ଆପଣଙ୍କ ପାଇଁ ନ୍ୟୁଜ"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"ଆପଣଙ୍କ ଚିଲ ଜୋନ"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"ଆପଣଙ୍କ ଫିଟନେସ ଲକ୍ଷ୍ୟରେ ପହଞ୍ଚନ୍ତୁ"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"ପାଣିପାଗ ବିଷୟରେ ଆଗୁଆ ସୂଚନା ପାଆନ୍ତୁ"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"ଆପଣ ମଧ୍ୟ ପସନ୍ଦ କରିପାରନ୍ତି"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"ଡାହାଣରେ <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ୱିଜେଟଗୁଡ଼ିକ ଅଛି, ବାମରେ ସର୍ଚ୍ଚ ଓ ବିକଳ୍ପଗୁଡ଼ିକ ଅଛି"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ୱିଜେଟ}other{# ୱିଜେଟ}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{#ଟି ସର୍ଟକଟ୍}other{#ଟି ସର୍ଟକଟ୍}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ପ୍ରାଇଭେଟ"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ପ୍ରାଇଭେଟ ସ୍ପେସ ସେଟିଂସ"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ପ୍ରାଇଭେଟ ସ୍ପେସକୁ ଲକ/ଅନଲକ କରନ୍ତୁ"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ପ୍ରାଇଭେଟ ସ୍ପେସ ଟ୍ରାଞ୍ଜିସନିଂ"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ଆପ୍ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"ଆପ୍ସକୁ ପ୍ରାଇଭେଟ ସ୍ପେସରେ ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 661f035..c83186d 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> ਵਿਜੇਟ ਨੂੰ ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"ਸੁਝਾਅ"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"ਆਪਣੇ ਦਿਨ ਨੂੰ ਬੂਸਟ ਕਰੋ"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"ਤੁਹਾਡੇ ਲਈ ਖਬਰਾਂ"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"ਤੁਹਾਡੇ ਲਈ ਸਕੂਨਮਈ ਖੇਤਰ"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"ਆਪਣੇ ਫਿੱਟਨੈੱਸ ਸੰਬੰਧੀ ਟੀਚੇ ਹਾਸਲ ਕਰੋ"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"ਮੌਸਮ ਬਾਰੇ ਅੱਪ-ਟੂ-ਡੇਟ ਰਹੋ"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"ਸ਼ਾਇਦ ਤੁਸੀਂ ਇਹ ਵੀ ਪਸੰਦ ਕਰੋ"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ਵਿਜੇਟ ਸੱਜੇ ਪਾਸੇ ਹਨ, ਖੋਜ ਵਿਜੇਟ ਅਤੇ ਹੋਰ ਵਿਕਲਪ ਖੱਬੇ ਪਾਸੇ ਹਨ"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ਵਿਜੇਟ}one{# ਵਿਜੇਟ}other{# ਵਿਜੇਟ}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ਸ਼ਾਰਟਕੱਟ}one{# ਸ਼ਾਰਟਕੱਟ}other{# ਸ਼ਾਰਟਕੱਟ}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ਨਿੱਜੀ"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ਨਿੱਜੀ ਸਪੇਸ ਸੰਬੰਧੀ ਸੈਟਿੰਗਾਂ"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ਨਿੱਜੀ ਸਪੇਸ ਨੂੰ ਲਾਕ/ਅਣਲਾਕ ਕਰੋ"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ਨਿੱਜੀ ਸਪੇਸ ਨੂੰ ਤਬਦੀਲ ਕਰਨਾ"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ਐਪਾਂ ਸਥਾਪਤ ਕਰੋ"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਵਿੱਚ ਐਪਾਂ ਸਥਾਪਤ ਕਰੋ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index a2627ff..4cf4beb 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Dodaj do ekranu głównego"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widżet <xliff:g id="WIDGET_NAME">%1$s</xliff:g> został dodany do ekranu głównego"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Sugestie"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"To Ci się przyda na co dzień"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Wiadomości dla Ciebie"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Strefa relaksu"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Zadbaj o swoją formę"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Nie daj się zaskoczyć pogodzie"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"To też może Cię zainteresować"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widżety (<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>) po prawej, wyszukiwanie i opcje po lewej"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widżet}few{# widżety}many{# widżetów}other{# widżetu}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# skrót}few{# skróty}many{# skrótów}other{# skrótu}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Prywatne"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Ustawienia obszaru prywatnego"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Zablokuj/odblokuj obszar prywatny"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Przenoszenie obszaru prywatnego"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instalowanie aplikacji"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Zainstaluj aplikacje w przestrzeni prywatnej"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 46ace14..4304a5a 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Adicionar ao ecrã principal"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> adicionado ao ecrã principal"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Sugestões"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Melhorar o seu dia"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Notícias para si"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"A sua zona de relaxamento"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Atingir os seus objetivos de fitness"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Ficar a par da meteorologia"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Também poderá gostar de"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgets de <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> à direita, pesquisa e opções à esquerda"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# atalho}other{# atalhos}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privado"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Definições do espaço privado"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Bloquear/desbloquear espaço privado"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Transição do espaço privado"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instalar apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instale apps no espaço privado"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index f12bd4f..6256567 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -23,7 +23,7 @@
<string name="work_folder_name" msgid="3753320833950115786">"Trabalho"</string>
<string name="activity_not_found" msgid="8071924732094499514">"O app não está instalado."</string>
<string name="activity_not_available" msgid="7456344436509528827">"O app não está disponível"</string>
- <string name="safemode_shortcut_error" msgid="9160126848219158407">"App transferido por download desativado no modo de segurança"</string>
+ <string name="safemode_shortcut_error" msgid="9160126848219158407">"App baixado desativado no modo de segurança"</string>
<string name="safemode_widget_error" msgid="4863470563535682004">"Widgets desativados no modo de segurança"</string>
<string name="shortcut_not_available" msgid="2536503539825726397">"O atalho não está disponível"</string>
<string name="home_screen" msgid="5629429142036709174">"Início"</string>
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Adicionar à tela inicial"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget <xliff:g id="WIDGET_NAME">%1$s</xliff:g> adicionado à tela inicial"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Sugestões"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Melhore seu dia"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Notícias para você"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Sua zona de relaxamento"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Alcance seus objetivos fitness"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Fique por dentro da previsão do tempo"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Você também pode gostar de"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgets da <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> à direita, pesquisa e opções à esquerda"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}one{# widget}other{# widgets}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# atalho}one{# atalho}other{# atalhos}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Particular"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Configurações do Espaço particular"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Bloquear/desbloquear o Espaço particular"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Espaço particular em transição"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instalar apps"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instalar apps no espaço privado"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 93fb1b1..3bc7d35 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Adaugă pe ecranul de pornire"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widgetul <xliff:g id="WIDGET_NAME">%1$s</xliff:g> a fost adăugat pe ecranul de pornire"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Sugestii"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Lucrează mai productiv"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Știri pentru tine"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Zona de relaxare"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Atinge-ți obiectivele de fitness"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Fii la curent cu prognoza meteo"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"S-ar putea să îți placă și"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgeturi pentru <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> în dreapta, căutare și opțiuni în stânga"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}few{# widgeturi}other{# de widgeturi}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# comandă rapidă}few{# comenzi rapide}other{# de comenzi rapide}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g> <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privat"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Setări spațiu privat"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Blochează / deblochează spațiul privat"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Tranziție pentru spațiul privat"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instalează aplicații"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instalează aplicații în Spațiul privat"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 4942eeb..63c7f76 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Добавить на главный экран"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Виджет \"<xliff:g id="WIDGET_NAME">%1$s</xliff:g>\" добавлен на главный экран"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Подсказки"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Эффективная работа"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Новости для вас"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Развлечение и общение"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Ваши фитнес-цели"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Прогноз погоды"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Другие рекомендации"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Виджеты приложения \"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>\" находятся справа, а панель поиска и настройки – слева"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# виджет}one{# виджет}few{# виджета}many{# виджетов}other{# виджета}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ярлык}one{# ярлык}few{# ярлыка}many{# ярлыков}other{# ярлыка}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Доступно только вам"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Настройки личного пространства"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Блокировка и разблокировка личного пространства"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Переход к личному пространству"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Установить приложения"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Установить приложения в личном пространстве"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index a0b54eb..78d3249 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"මුල් තිරය වෙත එක් කරන්න"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> විජට්ටුව මුල් පිටු තිරය වෙත එක් කරන ලදි"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"යෝජනා"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"ඔබේ දවස වැඩි කරන්න"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"ඔබ වෙනුවෙන් පුවත්"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"ඔබේ නිවුණු කලාපය"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"ඔබේ යෝග්යතා ඉලක්ක ළඟා කර ගන්න"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"කාලගුණයට ඉදිරියෙන් සිටින්න"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"ඔබ මේවාට ද කැමති විය හැක"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"දකුණේ <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> විජට්, වමේ සෙවීම සහ විකල්ප"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{විජට් #}one{විජට් #}other{විජට් #}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{කෙටි මං #}one{කෙටි මං #}other{කෙටි මං #}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"පෞද්ගලික"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"පෞද්ගලික අවකාශ සැකසීම්"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"පෞද්ගලික අවකාශය අගුළු දමන්න/අගුළු හරින්න"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"පෞද්ගලික අවකාශ සංක්රමණය"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"යෙදුම් ස්ථාපනය කරන්න"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"පෞද්ගලික අවකාශයට යෙදුම් ස්ථාපනය කරන්න"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 7853de1..4cf5f7b 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Pridať na plochu"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Na plochu bola pridaná miniaplikácia <xliff:g id="WIDGET_NAME">%1$s</xliff:g>"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Návrhy"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Zvýšte dnes svoju produktivitu"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Vaše správy"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Vaša komfortná zóna"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Dosiahnite svoje kondičné ciele"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Získavajte informácie o počasí v predstihu"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Mohlo by sa vám páčiť"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Miniaplikácie <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> vpravo, vyhľadávanie a možnosti vľavo"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# miniaplikácia}few{# miniaplikácie}many{# widgets}other{# miniaplikácií}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# odkaz}few{# odkazy}many{# shortcuts}other{# odkazov}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Súkromné"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Nastavenia súkromného priestoru"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Súkromný priestor zamykania a odomykania"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Prechod súkromného priestoru"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Inštalovať aplikácie"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Inštalácia aplikácií v súkromnom priestore"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index c1f6599..6fa10ba 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Dodaj na začetni zaslon"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Pripomoček »<xliff:g id="WIDGET_NAME">%1$s</xliff:g>« je dodan na začetni zaslon."</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Predlogi"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Dajte pospešek svojemu dnevu"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Novice za vas"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Vaš kotiček za sprostitev"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Dosegajte cilje glede telesne pripravljenosti"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Bodite na tekočem z vremenom"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Morda vam bo všeč tudi"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Pripomočki <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> na desni, iskanje in možnosti na levi"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# pripomoček}one{# pripomoček}two{# pripomočka}few{# pripomočki}other{# pripomočkov}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# bližnjica}one{# bližnjica}two{# bližnjici}few{# bližnjice}other{# bližnjic}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Zasebno"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Nastavitve zasebnega prostora"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Zaklepanje/odklepanje zasebnega prostora"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Preklapljanje zasebnega prostora"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Nameščanje aplikacij"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Nameščanje aplikacij v zasebni prostor"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 9dab542..edc1aad 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Shto në ekranin bazë"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Miniaplikacioni <xliff:g id="WIDGET_NAME">%1$s</xliff:g> u shtua në ekranin bazë"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Sugjerime"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Përmirëso ditën tënde"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Lajme për ty"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Zona jote e qetësisë"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Realizo objektivat e stërvitjes"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Qëndro i informuar për motin"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Gjithashtu mund të të pëlqejë"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Miniaplikacionet e <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> në të djathtë, kërkimi dhe opsionet në të majtë"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# miniaplikacion}other{# miniaplikacione}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# shkurtore}other{# shkurtore}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Private"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Cilësimet e \"Hapësirës private\""</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Kyç/Shkyç \"Hapësirën private\""</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Kalimi te \"Hapësira private\""</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Instalo aplikacionet"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Instalo aplikacionet në hapësirën private"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 8553e58..8550fa3 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Додај на почетни екран"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Додали сте виџет <xliff:g id="WIDGET_NAME">%1$s</xliff:g> на почетни екран"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Предлози"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Побољшајте дан"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Вести за вас"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Зона за опуштање"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Остварите фитнес циљеве"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Будите у току са временским приликама"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Можда ће вам се допасти и"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Виџети <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> са десне стране, претрага и опције са леве стране"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# виџет}one{# виџет}few{# виџета}other{# виџета}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# пречица}one{# пречица}few{# пречице}other{# пречица}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Приватно"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Подешавања приватног простора"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Закључај/откључај приватни простор"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Пренос приватног простора"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Инсталирајте апликације"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Инсталирај апликације у приватан простор"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 24cf747..fae79c7 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Lägg till på startskärmen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Widget för <xliff:g id="WIDGET_NAME">%1$s</xliff:g> har lagts till på startskärmen"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Förslag"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Få ut mer av din dag"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Nyheter för dig"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Koppla av"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Nå dina träningsmål"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Håll koll på vädret"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Andra appar du kanske gillar"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Widgetar för <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> till höger, sökning och alternativ till vänster"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widgetar}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# genväg}other{# genvägar}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Privat"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Inställningar för privat rum"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Lås eller lås upp ditt privata rum"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Överföring av privat rum"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Installera appar"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Installera appar i privat rum"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 4537d82..693beae 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Weka kwenye skrini ya kwanza"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Umeongeza wijeti ya <xliff:g id="WIDGET_NAME">%1$s</xliff:g> kwenye skrini ya kwanza"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Mapendekezo"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Boresha siku yako"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Habari Kwa Ajili Yako"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Mahali Pako pa Kupumzika"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Fikia Malengo Yako ya Siha"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Pata Taarifa kuhusu Hali ya Hewa"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Huenda Pia Ukapenda"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Wijeti za <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ziko upande wa kulia, utafutaji na chaguo ziko upande wa kushoto"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{Wijeti #}other{Wijeti #}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{Njia # ya mkato}other{Njia # za mkato}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Ya Faragha"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Mipangilio ya Nafasi ya Faragha"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Funga/Fungua Nafasi ya Faragha"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Mabadiliko ya Nafasi ya Faragha"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Sakinisha programu"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Sakinisha programu kwenye Sehemu ya Faragha"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index fede476..a7c323e 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"முகப்புத் திரையில் சேர்"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> விட்ஜெட் முகப்புத் திரையில் சேர்க்கப்பட்டது"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"பரிந்துரைகள்"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"உங்கள் நாளை உற்சாகமாக்குங்கள்"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"உங்களுக்கான செய்திகள்"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"உங்கள் மனதுக்கு இதமானவை"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"உடற்பயிற்சி இலக்குகளை அடையுங்கள்"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"வானிலை குறித்து முன்கூட்டியே அறிந்திருங்கள்"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"நீங்கள் இவற்றையும் விரும்பக்கூடும்"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> விட்ஜெட்கள் வலதுபுறத்தில் உள்ளன, தேடல் மற்றும் விருப்பங்கள் இடதுபுறத்தில் உள்ளன"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# விட்ஜெட்}other{# விட்ஜெட்டுகள்}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ஷார்ட்கட்}other{# ஷார்ட்கட்கள்}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"தனிப்பட்டது"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"தனிப்பட்ட சேமிப்பிட அமைப்புகள்"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"தனிப்பட்ட சேமிப்பிடத்தை லாக்/அன்லாக் செய்யும்"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"தனிப்பட்ட சேமிப்பிடத்திற்கு மாற்றுகிறது"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ஆப்ஸை நிறுவுதல்"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"தனிப்பட்ட சேமிப்பிடத்தில் ஆப்ஸை நிறுவும்"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 9fcc88f..f54a9f7 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"మొదటి స్క్రీన్కు జోడించండి"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"మొదటి స్క్రీన్కు <xliff:g id="WIDGET_NAME">%1$s</xliff:g> విడ్జెట్ జోడించబడింది"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"సూచనలు"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"మీ రోజును బూస్ట్ చేయండి"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"మీ కోసం వార్తలు"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"మీరు ప్రశాంతంగా ఉండే ప్రదేశం"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"ఫిట్నెస్ లక్ష్యాలను చేరుకోండి"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"వాతావరణాన్ని ముందుగానే తెలుసుకోండి"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"మీరు వీటిని కూడా ఇష్టపడవచ్చు"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"కుడి వైపున <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> విడ్జెట్లు, ఎడమ వైపున సెర్చ్, ఇతర ఆప్షన్లు"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# విడ్జెట్}other{# విడ్జెట్లు}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# షార్ట్కట్}other{# షార్ట్కట్లు}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ప్రైవేట్"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"ప్రైవేట్ స్పేస్ సెట్టింగ్లు"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ప్రైవేట్ స్పేస్ను లాక్/అన్లాక్ చేయండి"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"ప్రైవేట్ స్పేస్ కేటాయించడం జరుగుతుంది"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"యాప్లను ఇన్స్టాల్ చేయండి"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"ప్రైవేట్ స్పేస్కు యాప్లను ఇన్స్టాల్ చేయండి"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index d189ed4..db07dc2 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"เพิ่มลงในหน้าจอหลัก"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"เพิ่มวิดเจ็ต <xliff:g id="WIDGET_NAME">%1$s</xliff:g> ลงในหน้าจอหลักแล้ว"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"คำแนะนำ"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"เสริมสร้างวันของคุณ"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"ข่าวสารสำหรับคุณ"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"พื้นที่สบายๆ ของคุณ"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"บรรลุเป้าหมายการออกกำลังกาย"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"รู้สภาพอากาศล่วงหน้า"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"คุณอาจชอบ"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"วิดเจ็ต<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>ทางด้านขวา การค้นหาและตัวเลือกทางด้านซ้าย"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{วิดเจ็ต # รายการ}other{วิดเจ็ต # รายการ}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{ทางลัด # รายการ}other{ทางลัด # รายการ}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"ส่วนตัว"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"การตั้งค่าพื้นที่ส่วนตัว"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"ล็อก/ปลดล็อกพื้นที่ส่วนตัว"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"การเปลี่ยนไปใช้พื้นที่ส่วนตัว"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ติดตั้งแอป"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"ติดตั้งแอปไปยังพื้นที่ส่วนตัว"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 3dedd43..c1d51b5 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Idagdag sa home screen"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Idinagdag sa home screen ang widget na <xliff:g id="WIDGET_NAME">%1$s</xliff:g>"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Mga Suhestyon"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"I-boost ang iyong araw"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Balita para sa Iyo"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Ang Iyong Chill Zone"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Makamit ang Iyong Mga Layunin sa Fitness"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Manatiling Handa sa Lagay ng Panahon"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Baka Magustuhan Mo Rin"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Mga widget ng <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> sa kanan, paghahanap at mga opsyon sa kaliwa"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}one{# widget}other{# na widget}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# shortcut}one{# shortcut}other{# na shortcut}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Pribado"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Mga Setting ng Pribadong Space"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"I-lock/I-unlock ang Pribadong Space"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Pag-transition ng Pribadong Space"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Mag-install ng mga app"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Mag-install ng mga app sa Pribadong Space"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 561f82e..b5807f5 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Ana ekrana ekle"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> widget\'ı ana ekrana eklendi"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Öneriler"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Gününüzü canlandırın"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Size özel haberler"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Huzur alanınız"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Fitness hedeflerinize ulaşın"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Havanın durumu sizi şaşırtmasın"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Şunları da beğenebilirsiniz"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> widget\'ları sağda, arama ve seçenekler solda"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# widget}other{# widget}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# kısayol}other{# kısayol}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Gizli"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Gizli Alan Ayarları"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Gizli Alanı Kilitleyin/Kilidini Açın"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Gizli Alana Geçiş"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Uygulamaları yükleme"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Uygulamaları özel alana yükleyin"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 83727f8..3c9852b 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Додати на головний екран"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Віджет <xliff:g id="WIDGET_NAME">%1$s</xliff:g> додано на головний екран"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Пропозиції"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Підвищуйте свою продуктивність"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Новини для вас"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Ваша зона розваг"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Досягайте своїх фітнес-цілей"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Завчасно дізнавайтеся про зміни погоди"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Вам також може сподобатися"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>: віджети праворуч, пошук і опції ліворуч"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# віджет}one{# віджет}few{# віджети}many{# віджетів}other{# віджета}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ярлик}one{# ярлик}few{# ярлики}many{# ярликів}other{# ярлика}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Приватні"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Налаштування приватного простору"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Заблокувати/розблокувати приватний простір"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Перехід у приватний простір"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Установити додатки"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Установити додатки в особистому просторі"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index c38fde3..2690a4c 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"ہوم اسکرین میں شامل کریں"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> ویجیٹ کو ہوم اسکرین میں شامل کیا گیا"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"تجاویز"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"اپنی آج کی کارکردگی کو بوسٹ کریں"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"آپ کے لیے خبریں"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"آپ کا آرام دہ زون"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"اپنی تندرستی کے مقاصد حاصل کریں"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"موسم سے باخبر رہیں"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"آپ کو یہ بھی پسند آ سکتا ہے"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> دائیں طرف وجیٹس، بائیں طرف تلاش اور اختیارات"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ویجیٹ}other{# ویجیٹس}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# شارٹ کٹ}other{# شارٹ کٹس}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>، <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"نجی"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"نجی اسپیس کی ترتیبات"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"نجی اسپیس کو مقفل کریں/غیر مقفل کریں"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"نجی اسپیس کی منتقلی"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"ایپس انسٹال کریں"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"پرائیویٹ اسپیس میں ایپس انسٹال کریں"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 5c885cd..31bdd3c 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Bosh ekranga chiqarish"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"<xliff:g id="WIDGET_NAME">%1$s</xliff:g> vidjeti bosh ekranga qoʻshildi"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Takliflar"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Kuningizni yaxshilang"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Siz uchun yangiliklar"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Sokin hududingiz"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Fitness maqsadlaringizga erishing"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Doim ob-havodan oldinda yuring"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Sizga yoqishi mumkin"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"<xliff:g id="SELECTED_HEADER">%1$s</xliff:g> vidjetlari oʻngda, qidiruv va sozlamalar chapda"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# ta vidjet}other{# ta vidjet}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# ta yorliq}other{# ta yorliq}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Yopiq"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Shaxsiy xona sozlamalari"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Shaxsiy xonani ochish/qulflash"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Maxfiy joyga almashtirish"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Ilovalar oʻrnatish"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Ilovalarni Maxfiy makonga oʻrnatish"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index cf66729..24b2cce 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Thêm vào màn hình chính"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Đã thêm tiện ích <xliff:g id="WIDGET_NAME">%1$s</xliff:g> vào màn hình chính"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Nội dung đề xuất"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Thúc đẩy hiệu quả cho ngày của bạn"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Tin tức cho bạn"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Giai điệu thư giãn của bạn"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Đạt được mục tiêu tập thể dục"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Luôn nắm bắt tình hình thời tiết"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Có thể bạn cũng thích"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Tiện ích <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> ở bên phải, công cụ tìm kiếm và tuỳ chọn ở bên trái"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# tiện ích}other{# tiện ích}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# lối tắt}other{# lối tắt}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Riêng tư"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Cài đặt không gian riêng tư"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Khoá/mở khoá không gian riêng tư"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Chuyển đổi sang không gian riêng tư"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Cài đặt ứng dụng"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Cài đặt ứng dụng vào Không gian riêng tư"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 5c9f7ac..994c976 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"添加到主屏幕"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"已将“<xliff:g id="WIDGET_NAME">%1$s</xliff:g>”微件添加到主屏幕"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"建议"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"您的日常必备"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"更多相关新闻"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"您的休闲区"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"达成您的健身目标"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"天气早知道"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"您可能还会喜欢"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"右边是<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>微件,左边是搜索功能和选项"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# 个微件}other{# 个微件}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# 个快捷方式}other{# 个快捷方式}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>,<xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"私密"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"私密空间设置"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"锁定/解锁私密空间"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"私密空间转换"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"安装应用"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"将应用安装到私密空间"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index e0e07c1..2a27de3 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"加去主畫面"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"已經將「<xliff:g id="WIDGET_NAME">%1$s</xliff:g>」小工具加咗去主畫面"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"建議"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"日常必備"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"你的專屬新聞"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"放鬆專區"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"向健身目標邁進"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"隨時掌握天氣資料"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"相關推薦"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"右邊係「<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>」小工具,左邊係搜尋功能同選項"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# 個小工具}other{# 個小工具}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# 個捷徑}other{# 個捷徑}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>、<xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"私人"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"「私人空間」設定"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"鎖定/解鎖「私人空間」"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"轉為「私人空間」"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"安裝應用程式"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"將應用程式安裝在「私人空間」中"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index bd46e26..e802d9a 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"新增至主畫面"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"已將「<xliff:g id="WIDGET_NAME">%1$s</xliff:g>」小工具新增到主畫面"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"建議"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"日常必備"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"你的專屬新聞"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"放鬆專區"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"達成健身目標"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"隨時掌握天氣資訊"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"你可能也會喜歡的內容"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"右邊是「<xliff:g id="SELECTED_HEADER">%1$s</xliff:g>」小工具,左邊是搜尋功能和選項"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{# 項小工具}other{# 項小工具}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{# 個捷徑}other{# 個捷徑}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>、<xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"私人"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"私人空間設定"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"鎖定/取消鎖定私人空間"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"轉換私人空間狀態"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"安裝應用程式"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"將應用程式安裝在私人空間中"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index e5c1924..b939535 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -40,14 +40,14 @@
<string name="add_to_home_screen" msgid="9168649446635919791">"Faka kusikrini sasekhaya"</string>
<string name="added_to_home_screen_accessibility_text" msgid="4451545765448884415">"Iwijethi ye-<xliff:g id="WIDGET_NAME">%1$s</xliff:g> yengezwe kusikrini sasekhaya"</string>
<string name="suggested_widgets_header_title" msgid="1844314680798145222">"Iziphakamiso"</string>
- <string name="productivity_widget_recommendation_category_label" msgid="3939186477156514997">"Thuthukisa usuku lwakho"</string>
+ <!-- no translation found for productivity_widget_recommendation_category_label (1722113555721820766) -->
+ <skip />
<string name="news_widget_recommendation_category_label" msgid="3908242346768119070">"Izindaba Zakho"</string>
<string name="social_and_entertainment_widget_recommendation_category_label" msgid="2923840997302308191">"Indawo Ozipholela Kuyo"</string>
<string name="fitness_widget_recommendation_category_label" msgid="2657652999128882431">"Finyelela Imigomo Yakho Yokufaneleka"</string>
<string name="weather_widget_recommendation_category_label" msgid="6712678763480668598">"Hlale Wazi Ngesimo Sezulu"</string>
<string name="others_widget_recommendation_category_label" msgid="897876078077284733">"Ungase Futhi Uthande"</string>
- <!-- no translation found for widget_picker_right_pane_accessibility_title (1673313931455067502) -->
- <skip />
+ <string name="widget_picker_right_pane_accessibility_title" msgid="1673313931455067502">"Amawijethi okuthi <xliff:g id="SELECTED_HEADER">%1$s</xliff:g> kwesokudla, ukusesha nokukhethwayo kwesobunxele"</string>
<string name="widgets_count" msgid="6467746476364652096">"{count,plural, =1{iwijethi #}one{amawijethi #}other{amawijethi #}}"</string>
<string name="shortcuts_count" msgid="8471715556199592381">"{count,plural, =1{isinqamuleli #}one{izinqamuleli #}other{izinqamuleli #}}"</string>
<string name="widgets_and_shortcuts_count" msgid="7209136747878365116">"<xliff:g id="WIDGETS_COUNT">%1$s</xliff:g>, <xliff:g id="SHORTCUTS_COUNT">%2$s</xliff:g>"</string>
@@ -185,6 +185,8 @@
<string name="ps_container_title" msgid="4391796149519594205">"Okuyimfihlo"</string>
<string name="ps_container_settings" msgid="6059734123353320479">"Amasethingi Esikhala Esiyimfihlo"</string>
<string name="ps_container_lock_unlock_button" msgid="7605602332253423755">"Khiya/Vula Isikhala Esiyimfihlo"</string>
+ <!-- no translation found for ps_container_lock_title (2640257399982364682) -->
+ <skip />
<string name="ps_container_transition" msgid="8667331812048014412">"Ukuguqulwa Kwendawo Yangasese"</string>
<string name="ps_add_button_label" msgid="8611055839242385935">"Faka ama-app"</string>
<string name="ps_add_button_content_description" msgid="3254274107740952556">"Faka ama-app Endaweni Engasese"</string>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index c101762..fe62a01 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -400,6 +400,9 @@
<dimen name="taskbar_button_margin_split">0dp</dimen>
<dimen name="taskbar_button_margin_6_5">0dp</dimen>
+ <!--- Floating Ime Inset height-->
+ <dimen name="floating_ime_inset_height">0dp</dimen>
+
<!-- Bubble bar (placeholders to compile in Launcher3 without Quickstep) -->
<dimen name="bubblebar_hotseat_adjustment_threshold">0dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2a3af79..ab572aa 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -46,6 +46,10 @@
<string name="save_app_pair">Save app pair</string>
<!-- App pair default title -->
<string name="app_pair_default_title"><xliff:g id="app1" example="Chrome">%1$s</xliff:g> | <xliff:g id="app2" example="YouTube">%2$s</xliff:g></string>
+ <!-- Displayed when an app pair can't launch at this screen size [CHAR_LIMIT=none] -->
+ <string name="app_pair_unlaunchable_at_screen_size">This pair isn\'t supported at this screen size</string>
+ <!-- Displayed when an app pair can't launch at this screen size, but user can unfold device to restore functionality [CHAR_LIMIT=none] -->
+ <string name="app_pair_needs_unfold">Unfold your device to use this pair</string>
<!-- Widgets -->
<!-- Message to tell the user to press and hold on a widget to add it [CHAR_LIMIT=50] -->
diff --git a/src/com/android/launcher3/Alarm.java b/src/com/android/launcher3/Alarm.java
index e4aebf6..fb8088c 100644
--- a/src/com/android/launcher3/Alarm.java
+++ b/src/com/android/launcher3/Alarm.java
@@ -17,6 +17,7 @@
package com.android.launcher3;
import android.os.Handler;
+import android.os.Looper;
import android.os.SystemClock;
public class Alarm implements Runnable{
@@ -33,7 +34,11 @@
private long mLastSetTimeout;
public Alarm() {
- mHandler = new Handler();
+ this(Looper.myLooper());
+ }
+
+ public Alarm(Looper looper) {
+ mHandler = new Handler(looper);
}
public void setOnAlarmListener(OnAlarmListener alarmListener) {
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index 941a793..72758f2 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -329,7 +329,6 @@
* Sets or clears a delegate used for accessible drag and drop
*/
public void setDragAndDropAccessibilityDelegate(DragAndDropAccessibilityDelegate delegate) {
- setOnClickListener(delegate);
ViewCompat.setAccessibilityDelegate(this, delegate);
mTouchHelper = delegate;
@@ -337,7 +336,6 @@
? IMPORTANT_FOR_ACCESSIBILITY_YES : IMPORTANT_FOR_ACCESSIBILITY_NO;
setImportantForAccessibility(accessibilityFlag);
getShortcutsAndWidgets().setImportantForAccessibility(accessibilityFlag);
-
// ExploreByTouchHelper sets focusability. Clear it when the delegate is cleared.
setFocusable(delegate != null);
// Invalidate the accessibility hierarchy
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index edfef5e..c1ebbe5 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -28,6 +28,7 @@
import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE;
import static com.android.launcher3.AbstractFloatingView.getTopOpenViewWithType;
import static com.android.launcher3.Flags.enableAddAppWidgetViaConfigActivityV2;
+import static com.android.launcher3.Flags.enableWorkspaceInflation;
import static com.android.launcher3.LauncherAnimUtils.HOTSEAT_SCALE_PROPERTY_FACTORY;
import static com.android.launcher3.LauncherAnimUtils.SCALE_INDEX_WIDGET_TRANSITION;
import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
@@ -262,7 +263,7 @@
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.plugins.shared.LauncherOverlayManager;
import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlayTouchProxy;
-import com.android.wm.shell.Flags;
+import com.android.window.flags.Flags;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -318,10 +319,6 @@
private static final FloatProperty<Hotseat> HOTSEAT_WIDGET_SCALE =
HOTSEAT_SCALE_PROPERTY_FACTORY.get(SCALE_INDEX_WIDGET_TRANSITION);
- private static final boolean ENABLE_DESKTOP_WINDOWING = Flags.enableDesktopWindowing();
- private static final boolean DESKTOP_MODE_SUPPORTED =
- "1".equals(Utilities.getSystemProperty("persist.wm.debug.desktop_mode_2", "0"));
-
private final ModelCallbacks mModelCallbacks = createModelCallbacks();
private final KeyboardShortcutsDelegate mKeyboardShortcutsDelegate =
@@ -1485,8 +1482,8 @@
CellPos presenterPos = getCellPosMapper().mapModelToPresenter(itemInfo);
if (showPendingWidget) {
launcherInfo.restoreStatus = LauncherAppWidgetInfo.FLAG_UI_NOT_READY;
- PendingAppWidgetHostView pendingAppWidgetHostView =
- new PendingAppWidgetHostView(this, launcherInfo, appWidgetInfo);
+ PendingAppWidgetHostView pendingAppWidgetHostView = new PendingAppWidgetHostView(
+ this, mAppWidgetHolder, launcherInfo, appWidgetInfo);
pendingAppWidgetHostView.setPreviewBitmap(widgetPreviewBitmap);
hostView = pendingAppWidgetHostView;
} else if (hostView instanceof PendingAppWidgetHostView) {
@@ -2187,17 +2184,23 @@
*/
@Override
public void bindItems(final List<ItemInfo> items, final boolean forceAnimateIcons) {
- bindItems(items.stream().map(i -> Pair.create(
+ bindInflatedItems(items.stream().map(i -> Pair.create(
i, getItemInflater().inflateItem(i, getModelWriter()))).toList(),
forceAnimateIcons ? new AnimatorSet() : null);
}
+ @Override
+ public void bindInflatedItems(List<Pair<ItemInfo, View>> items) {
+ bindInflatedItems(items, null);
+ }
+
/**
* Bind all the items in the map, ignoring any null views
*
* @param boundAnim if non-null, uses it to create and play the bounce animation for added views
*/
- public void bindItems(List<Pair<ItemInfo, View>> shortcuts, @Nullable AnimatorSet boundAnim) {
+ public void bindInflatedItems(
+ List<Pair<ItemInfo, View>> shortcuts, @Nullable AnimatorSet boundAnim) {
// Get the list of added items and intersect them with the set of items here
Workspace<?> workspace = mWorkspace;
int newItemsScreenId = -1;
@@ -2222,10 +2225,13 @@
}
}
- final View view = e.second;
+ View view = e.second;
if (view == null) {
continue;
}
+ if (enableWorkspaceInflation() && view instanceof LauncherAppWidgetHostView lv) {
+ view = getAppWidgetHolder().attachViewToHostAndGetAttachedView(lv);
+ }
workspace.addInScreenFromBind(view, item);
if (boundAnim != null) {
// Animate all the applications up now
@@ -2324,9 +2330,9 @@
@Override
public void onInitialBindComplete(IntSet boundPages, RunnableList pendingTasks,
- int workspaceItemCount, boolean isBindSync) {
- mModelCallbacks.onInitialBindComplete(boundPages, pendingTasks, workspaceItemCount,
- isBindSync);
+ RunnableList onCompleteSignal, int workspaceItemCount, boolean isBindSync) {
+ mModelCallbacks.onInitialBindComplete(boundPages, pendingTasks, onCompleteSignal,
+ workspaceItemCount, isBindSync);
}
/**
@@ -2714,8 +2720,7 @@
}
private void updateDisallowBack() {
- // TODO(b/304778354): remove sysprop once desktop aconfig flag supports dynamic overriding
- if (ENABLE_DESKTOP_WINDOWING || DESKTOP_MODE_SUPPORTED) {
+ if (Flags.enableDesktopWindowingMode()) {
// Do not disable back in launcher when prototype behavior is enabled
return;
}
@@ -3057,6 +3062,7 @@
return super.getStatsLogManager().withDefaultInstanceId(mAllAppsSessionLogId);
}
+ @Override
public ItemInflater<Launcher> getItemInflater() {
return mItemInflater;
}
diff --git a/src/com/android/launcher3/ModelCallbacks.kt b/src/com/android/launcher3/ModelCallbacks.kt
index 9867556..9b65a31 100644
--- a/src/com/android/launcher3/ModelCallbacks.kt
+++ b/src/com/android/launcher3/ModelCallbacks.kt
@@ -72,6 +72,7 @@
override fun onInitialBindComplete(
boundPages: LIntSet,
pendingTasks: RunnableList,
+ onCompleteSignal: RunnableList,
workspaceItemCount: Int,
isBindSync: Boolean
) {
@@ -99,7 +100,14 @@
}
}
pendingExecutor = executor
- executor.attachTo(launcher)
+
+ if (Flags.enableWorkspaceInflation()) {
+ // Finish the executor as soon as the pending inflation is completed
+ onCompleteSignal.add(executor::markCompleted)
+ } else {
+ // Pending executor is already completed, wait until first draw to run the tasks
+ executor.attachTo(launcher)
+ }
launcher.bindComplete(workspaceItemCount, isBindSync)
}
@@ -409,4 +417,6 @@
}
fun getIsFirstPagePinnedItemEnabled(): Boolean = isFirstPagePinnedItemEnabled
+
+ override fun getItemInflater() = launcher.itemInflater
}
diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
index a846e68..e861d38 100644
--- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
+++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
@@ -440,7 +440,7 @@
anim.addListener(forEndCallback(
() -> view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)));
}
- mContext.bindItems(Collections.singletonList(Pair.create(item, view)), anim);
+ mContext.bindInflatedItems(Collections.singletonList(Pair.create(item, view)), anim);
}
/**
diff --git a/src/com/android/launcher3/allapps/AllAppsStore.java b/src/com/android/launcher3/allapps/AllAppsStore.java
index 009a2aa6..9623709 100644
--- a/src/com/android/launcher3/allapps/AllAppsStore.java
+++ b/src/com/android/launcher3/allapps/AllAppsStore.java
@@ -40,6 +40,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -138,12 +139,22 @@
/**
* Returns {@link AppInfo} if any apps matches with provided {@link ComponentKey}, otherwise
* null.
+ *
+ * Uses {@link AppInfo#COMPONENT_KEY_COMPARATOR} as a default comparator.
*/
@Nullable
public AppInfo getApp(ComponentKey key) {
+ return getApp(key, COMPONENT_KEY_COMPARATOR);
+ }
+
+ /**
+ * Generic version of {@link #getApp(ComponentKey)} that allows comparator to be specified.
+ */
+ @Nullable
+ public AppInfo getApp(ComponentKey key, Comparator<AppInfo> comparator) {
mTempInfo.componentName = key.componentName;
mTempInfo.user = key.user;
- int index = Arrays.binarySearch(mApps, mTempInfo, COMPONENT_KEY_COMPARATOR);
+ int index = Arrays.binarySearch(mApps, mTempInfo, comparator);
return index < 0 ? null : mApps[index];
}
diff --git a/src/com/android/launcher3/allapps/PrivateProfileManager.java b/src/com/android/launcher3/allapps/PrivateProfileManager.java
index 6422943..1ebd49e 100644
--- a/src/com/android/launcher3/allapps/PrivateProfileManager.java
+++ b/src/com/android/launcher3/allapps/PrivateProfileManager.java
@@ -60,9 +60,10 @@
*/
public class PrivateProfileManager extends UserProfileManager {
- private static final String SAFETY_CENTER_INTENT = Intent.ACTION_SAFETY_CENTER;
- private static final String PS_SETTINGS_FRAGMENT_KEY = ":settings:fragment_args_key";
- private static final String PS_SETTINGS_FRAGMENT_VALUE = "AndroidPrivateSpace_personal";
+ // TODO (b/324573634): Fix the intent string.
+ public static final Intent PRIVATE_SPACE_INTENT = new
+ Intent("com.android.settings.action.PRIVATE_SPACE_SETUP_FLOW");
+
private final ActivityAllAppsContainerView<?> mAllApps;
private final Predicate<UserHandle> mPrivateProfileMatcher;
private Set<String> mPreInstalledSystemPackages = new HashSet<>();
@@ -158,18 +159,23 @@
}
}
- /** Opens the Private Space Settings Entry Point. */
+ /** Opens the Private Space Settings Page. */
public void openPrivateSpaceSettings() {
- Intent psSettingsIntent = new Intent(SAFETY_CENTER_INTENT);
- psSettingsIntent.putExtra(PS_SETTINGS_FRAGMENT_KEY, PS_SETTINGS_FRAGMENT_VALUE);
- mAllApps.getContext().startActivity(psSettingsIntent);
+ if (mPrivateSpaceSettingsAvailable) {
+ mAllApps.getContext().startActivity(PRIVATE_SPACE_INTENT);
+ }
}
- /** Whether Private Space Settings Entry Point is available on the device. */
+ /** Returns whether or not Private Space Settings Page is available. */
public boolean isPrivateSpaceSettingsAvailable() {
return mPrivateSpaceSettingsAvailable;
}
+ /** Sets whether Private Space Settings Page is available. */
+ public boolean setPrivateSpaceSettingsAvailable(boolean value) {
+ return mPrivateSpaceSettingsAvailable = value;
+ }
+
/** Initializes binder call based properties in non-main thread.
* <p>
* This can cause the Private Space container items to not load/respond correctly sometimes,
@@ -183,19 +189,14 @@
Preconditions.assertNonUiThread();
setPreInstalledSystemPackages();
setAppInstallerIntent();
- setPrivateSpaceSettingsAvailable();
+ initializePrivateSpaceSettingsState();
}
- private void setPrivateSpaceSettingsAvailable() {
- if (mPrivateSpaceSettingsAvailable) {
- return;
- }
+ private void initializePrivateSpaceSettingsState() {
Preconditions.assertNonUiThread();
- Intent psSettingsIntent = new Intent(SAFETY_CENTER_INTENT);
- psSettingsIntent.putExtra(PS_SETTINGS_FRAGMENT_KEY, PS_SETTINGS_FRAGMENT_VALUE);
ResolveInfo resolveInfo = mAllApps.getContext().getPackageManager()
- .resolveActivity(psSettingsIntent, PackageManager.MATCH_SYSTEM_ONLY);
- mPrivateSpaceSettingsAvailable = resolveInfo != null;
+ .resolveActivity(PRIVATE_SPACE_INTENT, PackageManager.MATCH_SYSTEM_ONLY);
+ setPrivateSpaceSettingsAvailable(resolveInfo != null);
}
private void setPreInstalledSystemPackages() {
diff --git a/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewController.java b/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewController.java
index 91fcf80..6067454 100644
--- a/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewController.java
+++ b/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewController.java
@@ -17,6 +17,7 @@
package com.android.launcher3.allapps;
import static android.view.View.GONE;
+import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
@@ -49,6 +50,7 @@
import com.android.launcher3.allapps.UserProfileManager.UserProfileState;
import com.android.launcher3.anim.AnimatedPropertySetter;
import com.android.launcher3.anim.PropertySetter;
+import com.android.launcher3.views.RecyclerViewFastScroller;
import java.util.List;
@@ -220,11 +222,15 @@
private ValueAnimator animateCollapseAnimation(ViewGroup lockButton) {
float from = 1;
float to = 0;
+ RecyclerViewFastScroller scrollBar = mAllApps.getActiveRecyclerView().getScrollbar();
ValueAnimator collapseAnim = ValueAnimator.ofFloat(from, to);
collapseAnim.setDuration(EXPAND_COLLAPSE_DURATION);
collapseAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
+ if (scrollBar != null) {
+ scrollBar.setVisibility(INVISIBLE);
+ }
// scroll up
collapse();
// Animate the collapsing of the text.
@@ -233,6 +239,10 @@
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
+ if (scrollBar != null) {
+ scrollBar.setThumbOffsetY(-1);
+ scrollBar.setVisibility(VISIBLE);
+ }
mPrivateProfileManager.lockPrivateProfile();
}
});
diff --git a/src/com/android/launcher3/apppairs/AppPairIcon.java b/src/com/android/launcher3/apppairs/AppPairIcon.java
index 9b85a65..48d0fbd 100644
--- a/src/com/android/launcher3/apppairs/AppPairIcon.java
+++ b/src/com/android/launcher3/apppairs/AppPairIcon.java
@@ -17,6 +17,7 @@
package com.android.launcher3.apppairs;
import android.content.Context;
+import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
@@ -33,11 +34,13 @@
import com.android.launcher3.Reorderable;
import com.android.launcher3.dragndrop.DraggableView;
import com.android.launcher3.model.data.FolderInfo;
+import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.util.MultiTranslateDelegate;
import com.android.launcher3.views.ActivityContext;
import java.util.Collections;
import java.util.Comparator;
+import java.util.function.Predicate;
/**
* A {@link android.widget.FrameLayout} used to represent an app pair icon on the workspace.
@@ -48,6 +51,11 @@
public class AppPairIcon extends FrameLayout implements DraggableView, Reorderable {
private static final String TAG = "AppPairIcon";
+ /**
+ * Indicates that the app pair is currently launchable on the current screen.
+ */
+ private boolean mIsLaunchableAtScreenSize = true;
+
// A view that holds the app pair icon graphic.
private AppPairIconGraphic mIconGraphic;
// A view that holds the app pair's title.
@@ -86,6 +94,13 @@
icon.setOnClickListener(activity.getItemOnClickListener());
icon.mInfo = appPairInfo;
+ if (icon.mInfo.contents.size() != 2) {
+ Log.wtf(TAG, "AppPair contents not 2, size: " + icon.mInfo.contents.size());
+ return icon;
+ }
+
+ icon.checkScreenSize();
+
// Set up icon drawable area
icon.mIconGraphic = icon.findViewById(R.id.app_pair_icon_graphic);
icon.mIconGraphic.init(activity.getDeviceProfile(), icon);
@@ -109,11 +124,6 @@
* Returns a formatted accessibility title for app pairs.
*/
public String getAccessibilityTitle(FolderInfo appPairInfo) {
- if (appPairInfo.contents.size() != 2) {
- Log.wtf(TAG, "AppPair contents not 2, size: " + appPairInfo.contents.size());
- return "";
- }
-
CharSequence app1 = appPairInfo.contents.get(0).title;
CharSequence app2 = appPairInfo.contents.get(1).title;
return getContext().getString(R.string.app_pair_name_format, app1, app2);
@@ -167,4 +177,40 @@
public View getIconDrawableArea() {
return mIconGraphic;
}
+
+ public boolean isLaunchableAtScreenSize() {
+ return mIsLaunchableAtScreenSize;
+ }
+
+ /**
+ * Checks if the app pair is launchable in the current device configuration.
+ *
+ * App pairs can be "disabled" in two ways:
+ * 1) One of the member WorkspaceItemInfos is disabled (i.e. the app software itself is paused
+ * by the user or can't be launched).
+ * 2) This specific instance of an app pair can't be launched due to screen size requirements.
+ *
+ * This method checks and updates #2. Both #1 and #2 are checked when app pairs are drawn
+ * {@link AppPairIconGraphic#dispatchDraw(Canvas)} or clicked on
+ * {@link com.android.launcher3.touch.ItemClickHandler#onClickAppPairIcon(View)}
+ */
+ public void checkScreenSize() {
+ DeviceProfile dp = ActivityContext.lookupContext(getContext()).getDeviceProfile();
+ // If user is on a small screen, we can't launch if either of the apps is non-resizeable
+ mIsLaunchableAtScreenSize =
+ dp.isTablet || getInfo().contents.stream().noneMatch(
+ wii -> wii.hasStatusFlag(WorkspaceItemInfo.FLAG_NON_RESIZEABLE));
+ }
+
+ /**
+ * Called when WorkspaceItemInfos get updated, and the app pair icon may need to be redrawn.
+ */
+ public void maybeRedrawForWorkspaceUpdate(Predicate<WorkspaceItemInfo> itemCheck) {
+ // If either of the app pair icons return true on the predicate (i.e. in the list of
+ // updated apps), redraw the icon graphic (icon background and both icons).
+ if (getInfo().contents.stream().anyMatch(itemCheck)) {
+ checkScreenSize();
+ mIconGraphic.invalidate();
+ }
+ }
}
diff --git a/src/com/android/launcher3/apppairs/AppPairIconBackground.java b/src/com/android/launcher3/apppairs/AppPairIconBackground.java
index 4e60ece..b5011f1 100644
--- a/src/com/android/launcher3/apppairs/AppPairIconBackground.java
+++ b/src/com/android/launcher3/apppairs/AppPairIconBackground.java
@@ -157,7 +157,7 @@
@Override
public void setAlpha(int i) {
- // Required by Drawable but not used.
+ mBackgroundPaint.setAlpha(i);
}
@Override
diff --git a/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt b/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt
index 65c270a..365edf8 100644
--- a/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt
+++ b/src/com/android/launcher3/apppairs/AppPairIconGraphic.kt
@@ -46,6 +46,9 @@
private const val CENTER_CHANNEL_SCALE = 1 / 30f
private const val BIG_RADIUS_SCALE = 1 / 5f
private const val SMALL_RADIUS_SCALE = 1 / 15f
+ // Disabled alpha is 38%, or 97/255
+ private const val DISABLED_ALPHA = 97
+ private const val ENABLED_ALPHA = 255
}
// App pair icons are slightly smaller than regular icons, so we pad the icon by this much on
@@ -87,6 +90,14 @@
appPairBackground = AppPairIconBackground(context, this)
appPairBackground.setBounds(0, 0, backgroundSize.toInt(), backgroundSize.toInt())
applyIcons(parentIcon.info.contents)
+
+ // Center the drawable area in the larger icon canvas
+ val lp: LayoutParams = layoutParams as LayoutParams
+ lp.gravity = Gravity.CENTER_HORIZONTAL
+ lp.topMargin = outerPadding.toInt()
+ lp.height = backgroundSize.toInt()
+ lp.width = backgroundSize.toInt()
+ layoutParams = lp
}
/** Sets up app pair member icons for drawing. */
@@ -126,15 +137,12 @@
override fun dispatchDraw(canvas: Canvas) {
super.dispatchDraw(canvas)
- // Center the drawable area in the larger icon canvas
- val lp: LayoutParams = layoutParams as LayoutParams
- lp.gravity = Gravity.CENTER_HORIZONTAL
- lp.topMargin = outerPadding.toInt()
- lp.height = backgroundSize.toInt()
- lp.width = backgroundSize.toInt()
- layoutParams = lp
+ val drawAlpha =
+ if (!parentIcon.isLaunchableAtScreenSize || parentIcon.info.isDisabled) DISABLED_ALPHA
+ else ENABLED_ALPHA
// Draw background
+ appPairBackground.alpha = drawAlpha
appPairBackground.draw(canvas)
// Make sure icons are loaded and fresh
@@ -148,6 +156,7 @@
} else {
canvas.translate(width / 2f - memberIconSize / 2f, innerPadding)
}
+ appIcon1?.alpha = drawAlpha
appIcon1?.draw(canvas)
canvas.restore()
@@ -165,6 +174,7 @@
height - (innerPadding + memberIconSize)
)
}
+ appIcon2?.alpha = drawAlpha
appIcon2?.draw(canvas)
canvas.restore()
}
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index f013126..ec9c27d 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -40,6 +40,7 @@
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
+import android.os.Looper;
import android.text.InputType;
import android.text.Selection;
import android.text.TextUtils;
@@ -165,10 +166,10 @@
private static final Rect sTempRect = new Rect();
private static final int MIN_FOLDERS_FOR_HARDWARE_OPTIMIZATION = 10;
- private final Alarm mReorderAlarm = new Alarm();
- private final Alarm mOnExitAlarm = new Alarm();
- private final Alarm mOnScrollHintAlarm = new Alarm();
- final Alarm mScrollPauseAlarm = new Alarm();
+ private final Alarm mReorderAlarm = new Alarm(Looper.getMainLooper());
+ private final Alarm mOnExitAlarm = new Alarm(Looper.getMainLooper());
+ private final Alarm mOnScrollHintAlarm = new Alarm(Looper.getMainLooper());
+ final Alarm mScrollPauseAlarm = new Alarm(Looper.getMainLooper());
final ArrayList<View> mItemsInReadingOrder = new ArrayList<View>();
diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java
index 284b31e..ee0d5fc 100644
--- a/src/com/android/launcher3/folder/FolderIcon.java
+++ b/src/com/android/launcher3/folder/FolderIcon.java
@@ -32,6 +32,7 @@
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.os.Looper;
import android.util.AttributeSet;
import android.util.Property;
import android.view.LayoutInflater;
@@ -121,7 +122,7 @@
boolean mAnimating = false;
- private Alarm mOpenAlarm = new Alarm();
+ private Alarm mOpenAlarm = new Alarm(Looper.getMainLooper());
private boolean mForceHideDot;
@ViewDebug.ExportedProperty(category = "launcher", deepExport = true)
diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java
index ee66a60..8e73660 100644
--- a/src/com/android/launcher3/icons/IconCache.java
+++ b/src/com/android/launcher3/icons/IconCache.java
@@ -37,6 +37,7 @@
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.graphics.drawable.Drawable;
+import android.os.Looper;
import android.os.Process;
import android.os.Trace;
import android.os.UserHandle;
@@ -44,6 +45,7 @@
import android.util.Log;
import android.util.SparseArray;
+import androidx.annotation.AnyThread;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
@@ -65,7 +67,6 @@
import com.android.launcher3.util.CancellableTask;
import com.android.launcher3.util.InstantAppResolver;
import com.android.launcher3.util.PackageUserKey;
-import com.android.launcher3.util.Preconditions;
import com.android.launcher3.widget.WidgetSections;
import com.android.launcher3.widget.WidgetSections.WidgetSection;
@@ -173,9 +174,9 @@
*
* @return a request ID that can be used to cancel the request.
*/
+ @AnyThread
public CancellableTask updateIconInBackground(final ItemInfoUpdateReceiver caller,
final ItemInfoWithIcon info) {
- Preconditions.assertUIThread();
Supplier<ItemInfoWithIcon> task;
if (info instanceof AppInfo || info instanceof WorkspaceItemInfo) {
task = () -> {
@@ -193,13 +194,19 @@
return mCancelledTask;
}
- if (mPendingIconRequestCount <= 0) {
- MODEL_EXECUTOR.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND);
+ Runnable endRunnable;
+ if (Looper.myLooper() == Looper.getMainLooper()) {
+ if (mPendingIconRequestCount <= 0) {
+ MODEL_EXECUTOR.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND);
+ }
+ mPendingIconRequestCount++;
+ endRunnable = this::onIconRequestEnd;
+ } else {
+ endRunnable = () -> { };
}
- mPendingIconRequestCount++;
CancellableTask<ItemInfoWithIcon> request = new CancellableTask<>(
- task, MAIN_EXECUTOR, caller::reapplyItemInfo, this::onIconRequestEnd);
+ task, MAIN_EXECUTOR, caller::reapplyItemInfo, endRunnable);
Utilities.postAsyncCallback(mWorkerHandler, request);
return request;
}
diff --git a/src/com/android/launcher3/model/BaseLauncherBinder.java b/src/com/android/launcher3/model/BaseLauncherBinder.java
index 9b2344d..fa2a1b0 100644
--- a/src/com/android/launcher3/model/BaseLauncherBinder.java
+++ b/src/com/android/launcher3/model/BaseLauncherBinder.java
@@ -16,20 +16,25 @@
package com.android.launcher3.model;
+import static com.android.launcher3.Flags.enableWorkspaceInflation;
import static com.android.launcher3.config.FeatureFlags.ENABLE_SMARTSPACE_REMOVAL;
import static com.android.launcher3.model.ItemInstallQueue.FLAG_LOADER_RUNNING;
import static com.android.launcher3.model.ModelUtils.filterCurrentWorkspaceItems;
+import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import android.os.Process;
import android.os.Trace;
import android.util.Log;
+import android.util.Pair;
+import android.view.View;
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherModel.CallbackTask;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.Workspace;
+import com.android.launcher3.celllayout.CellPosMapper;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.BgDataModel.Callbacks;
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
@@ -38,6 +43,7 @@
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
+import com.android.launcher3.util.ItemInflater;
import com.android.launcher3.util.LooperExecutor;
import com.android.launcher3.util.LooperIdleLock;
import com.android.launcher3.util.PackageUserKey;
@@ -279,8 +285,8 @@
// Separate the items that are on the current screen, and all the other remaining items
ArrayList<ItemInfo> currentWorkspaceItems = new ArrayList<>();
ArrayList<ItemInfo> otherWorkspaceItems = new ArrayList<>();
- ArrayList<LauncherAppWidgetInfo> currentAppWidgets = new ArrayList<>();
- ArrayList<LauncherAppWidgetInfo> otherAppWidgets = new ArrayList<>();
+ ArrayList<ItemInfo> currentAppWidgets = new ArrayList<>();
+ ArrayList<ItemInfo> otherAppWidgets = new ArrayList<>();
filterCurrentWorkspaceItems(currentScreenIds, mWorkspaceItems, currentWorkspaceItems,
otherWorkspaceItems);
@@ -304,8 +310,8 @@
executeCallbacksTask(c -> c.bindScreens(mOrderedScreenIds), mUiExecutor);
// Load items on the current page.
- bindWorkspaceItems(currentWorkspaceItems, mUiExecutor);
- bindAppWidgets(currentAppWidgets, mUiExecutor);
+ bindItemsInChunks(currentWorkspaceItems, ITEMS_CHUNK, mUiExecutor);
+ bindItemsInChunks(currentAppWidgets, 1, mUiExecutor);
if (!FeatureFlags.CHANGE_MODEL_DELEGATE_LOADING_ORDER.get()) {
mExtraItems.forEach(item ->
executeCallbacksTask(c -> c.bindExtraContainerItems(item), mUiExecutor));
@@ -313,8 +319,41 @@
RunnableList pendingTasks = new RunnableList();
Executor pendingExecutor = pendingTasks::add;
- bindWorkspaceItems(otherWorkspaceItems, pendingExecutor);
- bindAppWidgets(otherAppWidgets, pendingExecutor);
+
+ RunnableList onCompleteSignal = new RunnableList();
+
+ if (enableWorkspaceInflation()) {
+ MODEL_EXECUTOR.execute(() -> {
+ setupPendingBind(otherWorkspaceItems, otherAppWidgets, currentScreenIds,
+ pendingExecutor);
+
+ // Wait for the async inflation to complete and then notify the completion
+ // signal on UI thread.
+ MAIN_EXECUTOR.execute(onCompleteSignal::executeAllAndDestroy);
+ });
+ } else {
+ setupPendingBind(
+ otherWorkspaceItems, otherAppWidgets, currentScreenIds, pendingExecutor);
+ onCompleteSignal.executeAllAndDestroy();
+ }
+
+ executeCallbacksTask(
+ c -> {
+ if (!enableWorkspaceInflation()) {
+ MODEL_EXECUTOR.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+ }
+ c.onInitialBindComplete(currentScreenIds, pendingTasks, onCompleteSignal,
+ workspaceItemCount, isBindSync);
+ }, mUiExecutor);
+ }
+
+ private void setupPendingBind(
+ List<ItemInfo> otherWorkspaceItems,
+ List<ItemInfo> otherAppWidgets,
+ IntSet currentScreenIds,
+ Executor pendingExecutor) {
+ bindItemsInChunks(otherWorkspaceItems, ITEMS_CHUNK, pendingExecutor);
+ bindItemsInChunks(otherAppWidgets, 1, pendingExecutor);
StringCache cacheClone = mBgDataModel.stringCache.clone();
executeCallbacksTask(c -> c.bindStringCache(cacheClone), pendingExecutor);
@@ -326,38 +365,51 @@
ItemInstallQueue.INSTANCE.get(mApp.getContext())
.resumeModelPush(FLAG_LOADER_RUNNING);
});
-
- executeCallbacksTask(
- c -> {
- MODEL_EXECUTOR.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
- c.onInitialBindComplete(
- currentScreenIds, pendingTasks, workspaceItemCount, isBindSync);
- }, mUiExecutor);
}
- private void bindWorkspaceItems(
- final ArrayList<ItemInfo> workspaceItems, final Executor executor) {
+ /**
+ * Tries to inflate the items asynchronously and bind. Returns true on success or false if
+ * async-binding is not supported in this case.
+ */
+ private boolean inflateAsyncAndBind(List<ItemInfo> items, Executor executor) {
+ if (!enableWorkspaceInflation()) {
+ return false;
+ }
+ ItemInflater inflater = mCallbacks.getItemInflater();
+ if (inflater == null) {
+ return false;
+ }
+
+ if (mMyBindingId != mBgDataModel.lastBindId) {
+ Log.d(TAG, "Too many consecutive reloads, skipping obsolete view inflation");
+ return true;
+ }
+
+ ModelWriter writer = mApp.getModel()
+ .getWriter(false /* verifyChanges */, CellPosMapper.DEFAULT, null);
+ List<Pair<ItemInfo, View>> bindItems = items.stream().map(i ->
+ Pair.create(i, inflater.inflateItem(i, writer, null))).toList();
+ executeCallbacksTask(c -> c.bindInflatedItems(bindItems), executor);
+ return true;
+ }
+
+ private void bindItemsInChunks(List<ItemInfo> workspaceItems, int chunkCount,
+ Executor executor) {
+ if (inflateAsyncAndBind(workspaceItems, executor)) {
+ return;
+ }
+
// Bind the workspace items
int count = workspaceItems.size();
- for (int i = 0; i < count; i += ITEMS_CHUNK) {
+ for (int i = 0; i < count; i += chunkCount) {
final int start = i;
- final int chunkSize = (i + ITEMS_CHUNK <= count) ? ITEMS_CHUNK : (count - i);
+ final int chunkSize = (i + chunkCount <= count) ? chunkCount : (count - i);
executeCallbacksTask(
c -> c.bindItems(workspaceItems.subList(start, start + chunkSize), false),
executor);
}
}
- private void bindAppWidgets(List<LauncherAppWidgetInfo> appWidgets, Executor executor) {
- // Bind the widgets, one at a time
- int count = appWidgets.size();
- for (int i = 0; i < count; i++) {
- final ItemInfo widget = appWidgets.get(i);
- executeCallbacksTask(
- c -> c.bindItems(Collections.singletonList(widget), false), executor);
- }
- }
-
protected void executeCallbacksTask(CallbackTask task, Executor executor) {
executor.execute(() -> {
if (mMyBindingId != mBgDataModel.lastBindId) {
@@ -430,8 +482,11 @@
bindAppWidgets(appWidgets);
executeCallbacksTask(c -> {
MODEL_EXECUTOR.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
- c.onInitialBindComplete(
- mCurrentScreenIds, new RunnableList(), workspaceItemCount, isBindSync);
+
+ RunnableList onCompleteSignal = new RunnableList();
+ onCompleteSignal.executeAllAndDestroy();
+ c.onInitialBindComplete(mCurrentScreenIds, new RunnableList(), onCompleteSignal,
+ workspaceItemCount, isBindSync);
}, mUiExecutor);
}
diff --git a/src/com/android/launcher3/model/BgDataModel.java b/src/com/android/launcher3/model/BgDataModel.java
index 7f0f683..8579d1d 100644
--- a/src/com/android/launcher3/model/BgDataModel.java
+++ b/src/com/android/launcher3/model/BgDataModel.java
@@ -33,6 +33,8 @@
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
+import android.util.Pair;
+import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -54,6 +56,7 @@
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.IntSparseArrayMap;
+import com.android.launcher3.util.ItemInflater;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.widget.model.WidgetsListBaseEntry;
@@ -495,7 +498,15 @@
default void clearPendingBinds() { }
default void startBinding() { }
- default void bindItems(List<ItemInfo> shortcuts, boolean forceAnimateIcons) { }
+ @Nullable
+ default ItemInflater getItemInflater() {
+ return null;
+ }
+
+ default void bindItems(@NonNull List<ItemInfo> shortcuts, boolean forceAnimateIcons) { }
+ /** Alternate method to bind preinflated views */
+ default void bindInflatedItems(@NonNull List<Pair<ItemInfo, View>> items) { }
+
default void bindScreens(IntArray orderedScreenIds) { }
default void setIsFirstPagePinnedItemEnabled(boolean isFirstPagePinnedItemEnabled) { }
default void finishBindingItems(IntSet pagesBoundFirst) { }
@@ -520,7 +531,9 @@
default void bindSmartspaceWidget() { }
/** Called when workspace has been bound. */
- default void onInitialBindComplete(IntSet boundPages, RunnableList pendingTasks,
+ default void onInitialBindComplete(@NonNull IntSet boundPages,
+ @NonNull RunnableList pendingTasks,
+ @NonNull RunnableList onCompleteSignal,
int workspaceItemCount, boolean isBindSync) {
pendingTasks.executeAllAndDestroy();
}
diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java
index 71ab51c..17cef90 100644
--- a/src/com/android/launcher3/model/LoaderTask.java
+++ b/src/com/android/launcher3/model/LoaderTask.java
@@ -475,12 +475,24 @@
mItemsDeleted = c.commitDeleted();
processFolderItems();
+ processAppPairItems();
c.commitRestoredItems();
}
}
/**
+ * After all items have been processed and added to the BgDataModel, this method requests
+ * high-res icons for the items that are part of an app pair
+ */
+ private void processAppPairItems() {
+ mBgDataModel.workspaceItems.stream()
+ .filter((itemInfo -> itemInfo.itemType == ITEM_TYPE_APP_PAIR))
+ .forEach(fi -> ((FolderInfo) fi).contents.forEach(item ->
+ mIconCache.getTitleAndIcon(item, false /*useLowResIcon*/)));
+ }
+
+ /**
* Initialized the UserManagerState, and determines which users are unlocked. Additionally, if
* the user is unlocked, it queries LauncherAppsService for pinned shortcuts and stores the
* result in a class variable to be used in other methods while processing workspace items.
diff --git a/src/com/android/launcher3/model/ModelUtils.java b/src/com/android/launcher3/model/ModelUtils.java
index bc51c9b..9e72e28 100644
--- a/src/com/android/launcher3/model/ModelUtils.java
+++ b/src/com/android/launcher3/model/ModelUtils.java
@@ -20,7 +20,6 @@
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@@ -37,9 +36,9 @@
*/
public static <T extends ItemInfo> void filterCurrentWorkspaceItems(
final IntSet currentScreenIds,
- ArrayList<T> allWorkspaceItems,
- ArrayList<T> currentScreenItems,
- ArrayList<T> otherScreenItems) {
+ List<? extends T> allWorkspaceItems,
+ List<T> currentScreenItems,
+ List<T> otherScreenItems) {
// Purge any null ItemInfos
allWorkspaceItems.removeIf(Objects::isNull);
// Order the set of items by their containers first, this allows use to walk through the
diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java
index 4d06c2e..0ba468d 100644
--- a/src/com/android/launcher3/model/PackageUpdatedTask.java
+++ b/src/com/android/launcher3/model/PackageUpdatedTask.java
@@ -48,6 +48,7 @@
import com.android.launcher3.pm.PackageInstallInfo;
import com.android.launcher3.pm.UserCache;
import com.android.launcher3.shortcuts.ShortcutRequest;
+import com.android.launcher3.uioverrides.ApiWrapper;
import com.android.launcher3.util.FlagOp;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.ItemInfoMatcher;
@@ -284,6 +285,12 @@
}
}
if (si.itemType == Favorites.ITEM_TYPE_APPLICATION) {
+ if (activities != null && !activities.isEmpty()) {
+ si.status = ApiWrapper
+ .isNonResizeableActivity(activities.get(0))
+ ? si.status | WorkspaceItemInfo.FLAG_NON_RESIZEABLE
+ : si.status & ~WorkspaceItemInfo.FLAG_NON_RESIZEABLE;
+ }
iconCache.getTitleAndIcon(si, si.usingLowResIcon());
infoUpdated = true;
}
diff --git a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt
index 287c29e..59f56df 100644
--- a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt
+++ b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt
@@ -38,6 +38,7 @@
import com.android.launcher3.model.data.WorkspaceItemInfo
import com.android.launcher3.pm.PackageInstallInfo
import com.android.launcher3.shortcuts.ShortcutKey
+import com.android.launcher3.uioverrides.ApiWrapper
import com.android.launcher3.util.ComponentKey
import com.android.launcher3.util.PackageManagerHelper
import com.android.launcher3.util.PackageUserKey
@@ -132,7 +133,7 @@
var allowMissingTarget = false
var intent = c.parseIntent()
if (intent == null) {
- c.markDeleted("Null intent for item id=${c.id}", RestoreError.MISSING_INFO)
+ c.markDeleted("Null intent from db for item id=${c.id}", RestoreError.MISSING_INFO)
return
}
var disabledState =
@@ -157,13 +158,19 @@
c.markRestored()
} else {
// Gracefully try to find a fallback activity.
+ FileLog.d(
+ TAG,
+ "Activity not enabled for id=${c.id}, component=$cn, user=${c.user}." +
+ " Will attempt to find fallback Activity for targetPkg=$targetPkg."
+ )
intent = pmHelper.getAppLaunchIntent(targetPkg, c.user)
if (intent != null) {
c.restoreFlag = 0
c.updater().put(Favorites.INTENT, intent.toUri(0)).commit()
} else {
c.markDeleted(
- "Intent null, unable to find a launch target",
+ "No Activities found for id=${c.id}, targetPkg=$targetPkg, component=$cn." +
+ " Unable to create launch Intent.",
RestoreError.MISSING_INFO
)
return
@@ -315,6 +322,9 @@
}
val activityInfo = c.launcherActivityInfo
if (activityInfo != null) {
+ if (ApiWrapper.isNonResizeableActivity(activityInfo)) {
+ info.status = info.status or WorkspaceItemInfo.FLAG_NON_RESIZEABLE
+ }
info.setProgressLevel(
PackageManagerHelper.getLoadingProgress(activityInfo),
PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING
diff --git a/src/com/android/launcher3/model/data/AppInfo.java b/src/com/android/launcher3/model/data/AppInfo.java
index b213fe3..210d720 100644
--- a/src/com/android/launcher3/model/data/AppInfo.java
+++ b/src/com/android/launcher3/model/data/AppInfo.java
@@ -52,6 +52,9 @@
return uc != 0 ? uc : a.componentName.compareTo(b.componentName);
};
+ public static final Comparator<AppInfo> PACKAGE_KEY_COMPARATOR = Comparator.comparingInt(
+ (AppInfo a) -> a.user.hashCode()).thenComparing(ItemInfo::getTargetPackage);
+
/**
* The intent used to start the application.
*/
diff --git a/src/com/android/launcher3/model/data/WorkspaceItemInfo.java b/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
index 435d223..9917ad7 100644
--- a/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
+++ b/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
@@ -75,6 +75,12 @@
public static final int FLAG_START_FOR_RESULT = 1 << 4;
/**
+ * The app is flagged non-resizeable, meaning that it does not support multi-window on small
+ * screens.
+ */
+ public static final int FLAG_NON_RESIZEABLE = 1 << 5;
+
+ /**
* The intent used to start the application.
*/
@NonNull
diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java
index 4abefc7..111931e 100644
--- a/src/com/android/launcher3/touch/ItemClickHandler.java
+++ b/src/com/android/launcher3/touch/ItemClickHandler.java
@@ -41,6 +41,7 @@
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.BuildConfig;
+import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
@@ -149,7 +150,15 @@
private static void onClickAppPairIcon(View v) {
Launcher launcher = Launcher.getLauncher(v.getContext());
AppPairIcon appPairIcon = (AppPairIcon) v;
- if (appPairIcon.getInfo().isDisabled()) {
+ if (!appPairIcon.isLaunchableAtScreenSize()) {
+ // Display a message for app pairs that are disabled due to screen size
+ boolean isFoldable = InvariantDeviceProfile.INSTANCE.get(launcher)
+ .supportedProfiles.stream().anyMatch(dp -> dp.isTwoPanels);
+ Toast.makeText(launcher, isFoldable
+ ? R.string.app_pair_needs_unfold
+ : R.string.app_pair_unlaunchable_at_screen_size,
+ Toast.LENGTH_SHORT).show();
+ } else if (appPairIcon.getInfo().isDisabled()) {
WorkspaceItemInfo app1 = appPairIcon.getInfo().contents.get(0);
WorkspaceItemInfo app2 = appPairIcon.getInfo().contents.get(1);
// Show the user why the app pair is disabled.
diff --git a/src/com/android/launcher3/util/ActivityTracker.java b/src/com/android/launcher3/util/ActivityTracker.java
index 7af1a13..405d2bb 100644
--- a/src/com/android/launcher3/util/ActivityTracker.java
+++ b/src/com/android/launcher3/util/ActivityTracker.java
@@ -15,13 +15,14 @@
*/
package com.android.launcher3.util;
+import static com.android.launcher3.testing.shared.TestProtocol.GET_FROM_RECENTS_FAILURE;
+import static com.android.launcher3.testing.shared.TestProtocol.testLogD;
+
import androidx.annotation.Nullable;
import com.android.launcher3.BaseActivity;
import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.HashSet;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -40,6 +41,9 @@
public void onActivityDestroyed(T activity) {
if (mCurrentActivity.get() == activity) {
+ testLogD(GET_FROM_RECENTS_FAILURE,
+ String.format("ActivityTracker.onActivityDestroyed this=%s, activity=%s",
+ this, activity));
mCurrentActivity.clear();
}
}
@@ -71,6 +75,8 @@
}
public boolean handleCreate(T activity) {
+ testLogD(GET_FROM_RECENTS_FAILURE,
+ String.format("ActivityTracker.handleCreate this=%s, activity=%s", this, activity));
mCurrentActivity = new WeakReference<>(activity);
return handleIntent(activity, false /* alreadyOnHome */);
}
diff --git a/src/com/android/launcher3/util/ItemInflater.kt b/src/com/android/launcher3/util/ItemInflater.kt
index 79091ca..cc66af1 100644
--- a/src/com/android/launcher3/util/ItemInflater.kt
+++ b/src/com/android/launcher3/util/ItemInflater.kt
@@ -121,7 +121,7 @@
}
val view =
if (type == WidgetInflater.TYPE_PENDING || widgetInfo == null)
- PendingAppWidgetHostView(context, item, widgetInfo)
+ PendingAppWidgetHostView(context, widgetHolder, item, widgetInfo)
else widgetHolder.createView(item.appWidgetId, widgetInfo)
prepareAppWidget(view, item)
return view
diff --git a/src/com/android/launcher3/util/LauncherBindableItemsContainer.java b/src/com/android/launcher3/util/LauncherBindableItemsContainer.java
index f73940b..69786bb 100644
--- a/src/com/android/launcher3/util/LauncherBindableItemsContainer.java
+++ b/src/com/android/launcher3/util/LauncherBindableItemsContainer.java
@@ -19,6 +19,7 @@
import android.view.View;
import com.android.launcher3.BubbleTextView;
+import com.android.launcher3.apppairs.AppPairIcon;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.graphics.PreloadIconDrawable;
@@ -58,6 +59,8 @@
: null);
} else if (info instanceof FolderInfo && v instanceof FolderIcon) {
((FolderIcon) v).updatePreviewItems(updates::contains);
+ } else if (info instanceof FolderInfo && v instanceof AppPairIcon appPairIcon) {
+ appPairIcon.maybeRedrawForWorkspaceUpdate(updates::contains);
}
// Iterate all items
@@ -86,6 +89,8 @@
((PendingAppWidgetHostView) v).applyState();
} else if (v instanceof FolderIcon && info instanceof FolderInfo) {
((FolderIcon) v).updatePreviewItems(updates::contains);
+ } else if (info instanceof FolderInfo && v instanceof AppPairIcon appPairIcon) {
+ appPairIcon.maybeRedrawForWorkspaceUpdate(updates::contains);
}
// process all the shortcuts
return false;
diff --git a/src/com/android/launcher3/util/RunnableList.java b/src/com/android/launcher3/util/RunnableList.java
index f6e0c57..2b8bf56 100644
--- a/src/com/android/launcher3/util/RunnableList.java
+++ b/src/com/android/launcher3/util/RunnableList.java
@@ -69,4 +69,11 @@
}
}
}
+
+ /**
+ * Returns true if the list has been destroyed
+ */
+ public boolean isDestroyed() {
+ return mDestroyed;
+ }
}
diff --git a/src/com/android/launcher3/util/SplitConfigurationOptions.java b/src/com/android/launcher3/util/SplitConfigurationOptions.java
index f4a0225..837d7bc 100644
--- a/src/com/android/launcher3/util/SplitConfigurationOptions.java
+++ b/src/com/android/launcher3/util/SplitConfigurationOptions.java
@@ -169,6 +169,15 @@
dividerWidthPercent = visualDividerBounds.width() / totalWidth;
dividerHeightPercent = visualDividerBounds.height() / totalHeight;
}
+
+ @Override
+ public String toString() {
+ return "LeftTop: " + leftTopBounds + ", taskId: " + leftTopTaskId + "\n"
+ + "RightBottom: " + rightBottomBounds + ", taskId: " + rightBottomTaskId + "\n"
+ + "Divider: " + visualDividerBounds + "\n"
+ + "AppsVertical? " + appsStackedVertically + "\n"
+ + "snapPosition: " + snapPosition;
+ }
}
public static class SplitStageInfo {
diff --git a/src/com/android/launcher3/util/window/WindowManagerProxy.java b/src/com/android/launcher3/util/window/WindowManagerProxy.java
index 6a0090c..4a906d3 100644
--- a/src/com/android/launcher3/util/window/WindowManagerProxy.java
+++ b/src/com/android/launcher3/util/window/WindowManagerProxy.java
@@ -145,7 +145,18 @@
: (isGesture
? getDimenByName(systemRes, NAVBAR_HEIGHT_LANDSCAPE)
: 0));
- Insets newNavInsets = Insets.of(navInsets.left, navInsets.top, navInsets.right, bottomNav);
+ int leftNav = navInsets.left;
+ int rightNav = navInsets.right;
+ if (!isLargeScreen && !isGesture && !isPortrait) {
+ // In 3-button landscape/seascape, Launcher should always have nav insets regardless if
+ // it's initiated from fullscreen apps.
+ int navBarWidth = getDimenByName(systemRes, NAVBAR_LANDSCAPE_LEFT_RIGHT_SIZE);
+ switch (getRotation(context)) {
+ case Surface.ROTATION_90 -> rightNav = navBarWidth;
+ case Surface.ROTATION_270 -> leftNav = navBarWidth;
+ }
+ }
+ Insets newNavInsets = Insets.of(leftNav, navInsets.top, rightNav, bottomNav);
insetsBuilder.setInsets(WindowInsets.Type.navigationBars(), newNavInsets);
insetsBuilder.setInsetsIgnoringVisibility(WindowInsets.Type.navigationBars(), newNavInsets);
diff --git a/src/com/android/launcher3/views/ActivityContext.java b/src/com/android/launcher3/views/ActivityContext.java
index 230a651..31f5d65 100644
--- a/src/com/android/launcher3/views/ActivityContext.java
+++ b/src/com/android/launcher3/views/ActivityContext.java
@@ -322,8 +322,8 @@
}
/**
- * Returns if the software keyboard is hidden. Hardware keyboards do not display on screen by
- * default.
+ * Returns if the software keyboard (including input toolbar) is hidden. Hardware
+ * keyboards do not display on screen by default.
*/
default boolean isSoftwareKeyboardHidden() {
if (isHardwareKeyboard()) {
diff --git a/src/com/android/launcher3/widget/BaseLauncherAppWidgetHostView.java b/src/com/android/launcher3/widget/BaseLauncherAppWidgetHostView.java
index 580b4f1..104209e 100644
--- a/src/com/android/launcher3/widget/BaseLauncherAppWidgetHostView.java
+++ b/src/com/android/launcher3/widget/BaseLauncherAppWidgetHostView.java
@@ -34,6 +34,17 @@
*/
public abstract class BaseLauncherAppWidgetHostView extends NavigableAppWidgetHostView {
+ private static final ViewOutlineProvider VIEW_OUTLINE_PROVIDER = new ViewOutlineProvider() {
+ @Override
+ public void getOutline(View view, Outline outline) {
+ // Since ShortcutAndWidgetContainer sets clipChildren to false, we should restrict the
+ // outline to be the view bounds, otherwise widgets might draw themselves outside of
+ // the launcher view. Setting alpha to 0 to match the previous behavior.
+ outline.setRect(0, 0, view.getWidth(), view.getHeight());
+ outline.setAlpha(.0f);
+ }
+ };
+
protected final LayoutInflater mInflater;
private final Rect mEnforcedRectangle = new Rect();
@@ -49,10 +60,13 @@
}
};
+ private boolean mIsCornerRadiusEnforced;
+
public BaseLauncherAppWidgetHostView(Context context) {
super(context);
setExecutor(Executors.THREAD_POOL_EXECUTOR);
+ setClipToOutline(true);
mInflater = LayoutInflater.from(context);
mEnforcedCornerRadius = RoundedCornerEnforcement.computeEnforcedRadius(getContext());
@@ -84,8 +98,8 @@
@UiThread
private void resetRoundedCorners() {
- setOutlineProvider(ViewOutlineProvider.BACKGROUND);
- setClipToOutline(false);
+ setOutlineProvider(VIEW_OUTLINE_PROVIDER);
+ mIsCornerRadiusEnforced = false;
}
@UiThread
@@ -104,7 +118,7 @@
background,
mEnforcedRectangle);
setOutlineProvider(mCornerRadiusEnforcementOutline);
- setClipToOutline(true);
+ mIsCornerRadiusEnforced = true;
invalidateOutline();
}
@@ -115,6 +129,6 @@
/** Returns true if the corner radius are enforced for this App Widget. */
public boolean hasEnforcedCornerRadius() {
- return getClipToOutline();
+ return mIsCornerRadiusEnforced;
}
}
diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetHost.java b/src/com/android/launcher3/widget/LauncherAppWidgetHost.java
index b1c477c..40c3984 100644
--- a/src/com/android/launcher3/widget/LauncherAppWidgetHost.java
+++ b/src/com/android/launcher3/widget/LauncherAppWidgetHost.java
@@ -54,6 +54,9 @@
@Nullable
private final IntConsumer mAppWidgetRemovedCallback;
+ @Nullable
+ private ListenableHostView mViewToRecycle;
+
public LauncherAppWidgetHost(@NonNull Context context,
@Nullable IntConsumer appWidgetRemovedCallback,
List<ProviderChangedListener> providerChangeListeners) {
@@ -73,11 +76,21 @@
}
}
+ /**
+ * Sets the view to be recycled for the next widget creation.
+ */
+ public void recycleViewForNextCreation(ListenableHostView viewToRecycle) {
+ mViewToRecycle = viewToRecycle;
+ }
+
@Override
@NonNull
public LauncherAppWidgetHostView onCreateView(Context context, int appWidgetId,
AppWidgetProviderInfo appWidget) {
- return new ListenableHostView(context);
+ ListenableHostView result =
+ mViewToRecycle != null ? mViewToRecycle : new ListenableHostView(context);
+ mViewToRecycle = null;
+ return result;
}
/**
diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
index e77ec12..2259e3c 100644
--- a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
+++ b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
@@ -40,12 +40,12 @@
import com.android.launcher3.CheckLongPressHelper;
import com.android.launcher3.Flags;
-import com.android.launcher3.Launcher;
import com.android.launcher3.R;
-import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.util.Themes;
+import com.android.launcher3.views.ActivityContext;
+import com.android.launcher3.views.BaseDragLayer;
import com.android.launcher3.views.BaseDragLayer.TouchCompleteListener;
/**
@@ -72,7 +72,7 @@
private final Rect mTempRect = new Rect();
private final CheckLongPressHelper mLongPressHelper;
- protected final Launcher mLauncher;
+ protected final ActivityContext mActivityContext;
// Maintain the color manager.
private final LocalColorExtractor mColorExtractor;
@@ -94,15 +94,15 @@
public LauncherAppWidgetHostView(Context context) {
super(context);
- mLauncher = Launcher.getLauncher(context);
+ mActivityContext = ActivityContext.lookupContext(context);
mLongPressHelper = new CheckLongPressHelper(this, this);
- setAccessibilityDelegate(mLauncher.getAccessibilityDelegate());
+ setAccessibilityDelegate(mActivityContext.getAccessibilityDelegate());
setBackgroundResource(R.drawable.widget_internal_focus_bg);
if (Flags.enableFocusOutline()) {
setDefaultFocusHighlightEnabled(false);
}
- if (Themes.getAttrBoolean(mLauncher, R.attr.isWorkspaceDarkText)) {
+ if (Themes.getAttrBoolean(context, R.attr.isWorkspaceDarkText)) {
setOnLightBackground(true);
}
mColorExtractor = new LocalColorExtractor(); // no-op
@@ -120,8 +120,7 @@
@Override
public boolean onLongClick(View view) {
if (mIsScrollable) {
- DragLayer dragLayer = mLauncher.getDragLayer();
- dragLayer.requestDisallowInterceptTouchEvent(false);
+ mActivityContext.getDragLayer().requestDisallowInterceptTouchEvent(false);
}
view.performLongClick();
return true;
@@ -218,7 +217,7 @@
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
- DragLayer dragLayer = mLauncher.getDragLayer();
+ BaseDragLayer dragLayer = mActivityContext.getDragLayer();
if (mIsScrollable) {
dragLayer.requestDisallowInterceptTouchEvent(true);
}
diff --git a/src/com/android/launcher3/widget/LauncherWidgetHolder.java b/src/com/android/launcher3/widget/LauncherWidgetHolder.java
index 23127b3..15bd6ed 100644
--- a/src/com/android/launcher3/widget/LauncherWidgetHolder.java
+++ b/src/com/android/launcher3/widget/LauncherWidgetHolder.java
@@ -17,7 +17,9 @@
import static android.app.Activity.RESULT_CANCELED;
+import static com.android.launcher3.Flags.enableWorkspaceInflation;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
+import static com.android.launcher3.widget.LauncherAppWidgetProviderInfo.fromProviderInfo;
import android.appwidget.AppWidgetHost;
import android.appwidget.AppWidgetHostView;
@@ -27,6 +29,7 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.os.Looper;
import android.util.SparseArray;
import android.widget.Toast;
@@ -310,7 +313,9 @@
}
/**
- * Create a view for the specified app widget
+ * Create a view for the specified app widget. When calling this method from a background
+ * thread, the returned view will not receive ongoing updates. The caller needs to reattach
+ * the view using {@link #attachViewToHostAndGetAttachedView} on UIThread
*
* @param appWidgetId The ID of the widget
* @param appWidget The {@link LauncherAppWidgetProviderInfo} of the widget
@@ -327,7 +332,55 @@
}
LauncherAppWidgetHostView view = createViewInternal(appWidgetId, appWidget);
- mViews.put(appWidgetId, view);
+ // Do not update mViews on a background thread call, as the holder is not thread safe.
+ if (!enableWorkspaceInflation() || Looper.myLooper() == Looper.getMainLooper()) {
+ mViews.put(appWidgetId, view);
+ }
+ return view;
+ }
+
+ /**
+ * Attaches an already inflated view to the host. If the view can't be attached, creates
+ * and attaches a new view.
+ * @return the final attached view
+ */
+ @NonNull
+ public final AppWidgetHostView attachViewToHostAndGetAttachedView(
+ @NonNull LauncherAppWidgetHostView view) {
+ if (mViews.get(view.getAppWidgetId()) != view) {
+ view = recycleExistingView(view);
+ mViews.put(view.getAppWidgetId(), view);
+ }
+ return view;
+ }
+
+ /**
+ * Recycling logic:
+ * 1) If the final view should be a pendingView
+ * if the provided view is also a pendingView, return itself
+ * otherwise discard provided view and return a new pending view
+ * 2) If the recycled view is a pendingView, discard it and return a new view
+ * 3) Use the same for as creating a new view, but used the provided view in the host instead
+ * of creating a new view. This ensures that all the host callbacks are properly attached
+ * as a result of using the same flow.
+ */
+ protected LauncherAppWidgetHostView recycleExistingView(LauncherAppWidgetHostView view) {
+ if ((mFlags & FLAG_LISTENING) == 0) {
+ if (view instanceof PendingAppWidgetHostView pv && pv.isDeferredWidget()) {
+ return view;
+ } else {
+ return new PendingAppWidgetHostView(mContext, this, view.getAppWidgetId(),
+ fromProviderInfo(mContext, view.getAppWidgetInfo()));
+ }
+ }
+ LauncherAppWidgetHost host = (LauncherAppWidgetHost) mWidgetHost;
+ if (view instanceof ListenableHostView lhv) {
+ host.recycleViewForNextCreation(lhv);
+ }
+
+ view = createViewInternal(
+ view.getAppWidgetId(), fromProviderInfo(mContext, view.getAppWidgetInfo()));
+ host.recycleViewForNextCreation(null);
return view;
}
@@ -338,8 +391,15 @@
// Since the launcher hasn't started listening to widget updates, we can't simply call
// host.createView here because the later will make a binder call to retrieve
// RemoteViews from system process.
- return new PendingAppWidgetHostView(mContext, appWidgetId, appWidget);
+ return new PendingAppWidgetHostView(mContext, this, appWidgetId, appWidget);
} else {
+ if (enableWorkspaceInflation() && Looper.myLooper() != Looper.getMainLooper()) {
+ // Widget is being inflated a background thread, just create and
+ // return a placeholder view
+ ListenableHostView hostView = new ListenableHostView(mContext);
+ hostView.setAppWidget(appWidgetId, appWidget);
+ return hostView;
+ }
try {
return (LauncherAppWidgetHostView) mWidgetHost.createView(
mContext, appWidgetId, appWidget);
diff --git a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
index adf85c7..86400ba 100644
--- a/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
+++ b/src/com/android/launcher3/widget/PendingAppWidgetHostView.java
@@ -50,6 +50,7 @@
import androidx.annotation.Nullable;
import com.android.launcher3.DeviceProfile;
+import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.icons.FastBitmapDrawable;
@@ -65,7 +66,7 @@
public class PendingAppWidgetHostView extends LauncherAppWidgetHostView
implements OnClickListener, ItemInfoUpdateReceiver {
private static final float SETUP_ICON_SIZE_FACTOR = 2f / 5;
- private static final float MIN_SATUNATION = 0.7f;
+ private static final float MIN_SATURATION = 0.7f;
private static final int FLAG_DRAW_SETTINGS = 1;
private static final int FLAG_DRAW_ICON = 2;
@@ -75,6 +76,7 @@
private final Rect mRect = new Rect();
+ private final LauncherWidgetHolder mWidgetHolder;
private final LauncherAppWidgetProviderInfo mAppwidget;
private final LauncherAppWidgetInfo mInfo;
private final int mStartState;
@@ -90,6 +92,7 @@
private Drawable mSettingIconDrawable;
private boolean mDrawableSizeChanged;
+ private boolean mIsDeferredWidget;
private final TextPaint mPaint;
@@ -98,13 +101,13 @@
@Nullable private Bitmap mPreviewBitmap;
- public PendingAppWidgetHostView(Context context, LauncherAppWidgetInfo info,
- @Nullable LauncherAppWidgetProviderInfo appWidget) {
- this(context, info, appWidget,
+ public PendingAppWidgetHostView(Context context, LauncherWidgetHolder widgetHolder,
+ LauncherAppWidgetInfo info, @Nullable LauncherAppWidgetProviderInfo appWidget) {
+ this(context, widgetHolder, info, appWidget,
context.getResources().getText(R.string.gadget_complete_setup_text));
super.updateAppWidget(null);
- setOnClickListener(mLauncher.getItemOnClickListener());
+ setOnClickListener(mActivityContext.getItemOnClickListener());
if (info.pendingItemInfo == null) {
info.pendingItemInfo = new PackageItemInfo(info.providerName.getPackageName(),
@@ -117,14 +120,16 @@
}
public PendingAppWidgetHostView(
- Context context, int appWidgetId, @NonNull LauncherAppWidgetProviderInfo appWidget) {
- this(context, new LauncherAppWidgetInfo(appWidgetId, appWidget.provider),
+ Context context, LauncherWidgetHolder widgetHolder,
+ int appWidgetId, @NonNull LauncherAppWidgetProviderInfo appWidget) {
+ this(context, widgetHolder, new LauncherAppWidgetInfo(appWidgetId, appWidget.provider),
appWidget, appWidget.label);
getBackground().mutate().setAlpha(DEFERRED_ALPHA);
mCenterDrawable = new ColorDrawable(Color.TRANSPARENT);
mDragFlags = FLAG_DRAW_LABEL;
mDrawableSizeChanged = true;
+ mIsDeferredWidget = true;
}
/** Set {@link Bitmap} of widget preview. */
@@ -136,10 +141,11 @@
invalidate();
}
- private PendingAppWidgetHostView(Context context, LauncherAppWidgetInfo info,
+ private PendingAppWidgetHostView(Context context,
+ LauncherWidgetHolder widgetHolder, LauncherAppWidgetInfo info,
LauncherAppWidgetProviderInfo appwidget, CharSequence label) {
super(new ContextThemeWrapper(context, R.style.WidgetContainerTheme));
-
+ mWidgetHolder = widgetHolder;
mAppwidget = appwidget;
mInfo = info;
mStartState = info.restoreStatus;
@@ -148,9 +154,12 @@
mPaint = new TextPaint();
mPaint.setColor(Themes.getAttrColor(getContext(), android.R.attr.textColorPrimary));
- mPaint.setTextSize(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX,
- mLauncher.getDeviceProfile().iconTextSizePx, getResources().getDisplayMetrics()));
+ mPaint.setTextSize(TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_PX,
+ mActivityContext.getDeviceProfile().iconTextSizePx,
+ getResources().getDisplayMetrics()));
mPreviewPaint = new Paint(ANTI_ALIAS_FLAG | DITHER_FLAG | FILTER_BITMAP_FLAG);
+
setWillNotDraw(false);
setBackgroundResource(R.drawable.pending_widget_bg);
}
@@ -161,6 +170,11 @@
}
@Override
+ public int getAppWidgetId() {
+ return mInfo.appWidgetId;
+ }
+
+ @Override
public void updateAppWidget(RemoteViews remoteViews) {
checkIfRestored();
}
@@ -172,6 +186,10 @@
}
}
+ public boolean isDeferredWidget() {
+ return mIsDeferredWidget;
+ }
+
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
@@ -184,8 +202,8 @@
if (mOnDetachCleanup != null) {
mOnDetachCleanup.close();
}
- mOnDetachCleanup = mLauncher.getAppWidgetHolder()
- .addOnUpdateListener(mInfo.appWidgetId, mAppwidget, this::checkIfRestored);
+ mOnDetachCleanup = mWidgetHolder.addOnUpdateListener(
+ mInfo.appWidgetId, mAppwidget, this::checkIfRestored);
checkIfRestored();
}
}
@@ -211,11 +229,13 @@
// This occurs when LauncherAppWidgetHostView is used to render a preview layout.
return;
}
- // Remove and rebind the current widget (which was inflated in the wrong
- // orientation), but don't delete it from the database
- mLauncher.removeItem(this, info, false /* deleteFromDb */,
- "widget removed because of configuration change");
- mLauncher.bindAppWidget(info);
+ if (mActivityContext instanceof Launcher launcher) {
+ // Remove and rebind the current widget (which was inflated in the wrong
+ // orientation), but don't delete it from the database
+ launcher.removeItem(this, info, false /* deleteFromDb */,
+ "widget removed because of configuration change");
+ launcher.bindAppWidget(info);
+ }
}
@Override
@@ -303,7 +323,7 @@
// Make the dominant color bright.
float[] hsv = new float[3];
Color.colorToHSV(dominantColor, hsv);
- hsv[1] = Math.min(hsv[1], MIN_SATUNATION);
+ hsv[1] = Math.min(hsv[1], MIN_SATURATION);
hsv[2] = 1;
mSettingIconDrawable.setColorFilter(Color.HSVToColor(hsv), PorterDuff.Mode.SRC_IN);
}
@@ -344,7 +364,7 @@
}
private void updateDrawableBounds() {
- DeviceProfile grid = mLauncher.getDeviceProfile();
+ DeviceProfile grid = mActivityContext.getDeviceProfile();
int paddingTop = getPaddingTop();
int paddingBottom = getPaddingBottom();
int paddingLeft = getPaddingLeft();
diff --git a/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java b/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
index f10ab48..ef3ccf0 100644
--- a/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
+++ b/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinder.java
@@ -124,6 +124,7 @@
widget.applyFromCellItem(widgetItem, 1f,
bitmap -> holder.onPreviewLoaded(Pair.create(widgetItem, bitmap)),
holder.previewCache.get(widgetItem));
+ widget.requestLayout();
}
}
}
diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java b/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java
index b9f9ac5..efde7d8 100644
--- a/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java
+++ b/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java
@@ -107,6 +107,15 @@
.authority(context.getPackageName()).build());
}
+ /**
+ * Checks if an activity is flagged as non-resizeable.
+ */
+ public static boolean isNonResizeableActivity(LauncherActivityInfo lai) {
+ // Overridden in quickstep
+ return false;
+ }
+
+
private static class NoopDrawable extends ColorDrawable {
@Override
public int getIntrinsicHeight() {
diff --git a/tests/AndroidManifest-common.xml b/tests/AndroidManifest-common.xml
index 7059268..7cb7964 100644
--- a/tests/AndroidManifest-common.xml
+++ b/tests/AndroidManifest-common.xml
@@ -301,6 +301,24 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
+ <activity-alias android:name="SplitTask1"
+ android:label="1st TopLeft"
+ android:exported="true"
+ android:targetActivity="com.android.launcher3.testcomponent.BaseTestingActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ </activity-alias>
+ <activity-alias android:name="SplitTask2"
+ android:label="2nd BottomRight"
+ android:exported="true"
+ android:targetActivity="com.android.launcher3.testcomponent.BaseTestingActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ </activity-alias>
<activity-alias android:name="MaxShortcutsActivity"
android:label="TestActivityMaxShortcuts"
android:exported="true"
diff --git a/tests/multivalentTests/shared/com/android/launcher3/testing/shared/TestProtocol.java b/tests/multivalentTests/shared/com/android/launcher3/testing/shared/TestProtocol.java
index 4e1e9c8..afda3a3 100644
--- a/tests/multivalentTests/shared/com/android/launcher3/testing/shared/TestProtocol.java
+++ b/tests/multivalentTests/shared/com/android/launcher3/testing/shared/TestProtocol.java
@@ -101,6 +101,7 @@
public static final String REQUEST_TASKBAR_FROM_NAV_THRESHOLD = "taskbar-from-nav-threshold";
public static final String REQUEST_STASHED_TASKBAR_SCALE = "taskbar-stash-handle-scale";
public static final String REQUEST_RECREATE_TASKBAR = "recreate-taskbar";
+ public static final String REQUEST_TASKBAR_IME_DOCKED = "taskbar-ime-docked";
public static final String REQUEST_APP_LIST_FREEZE_FLAGS = "app-list-freeze-flags";
public static final String REQUEST_APPS_LIST_SCROLL_Y = "apps-list-scroll-y";
public static final String REQUEST_TASKBAR_APPS_LIST_SCROLL_Y = "taskbar-apps-list-scroll-y";
@@ -172,6 +173,10 @@
public static final String OVERVIEW_OVER_HOME = "b/279059025";
public static final String UIOBJECT_STALE_ELEMENT = "b/319501259";
public static final String ACTIVITY_NOT_RESUMED_AFTER_BACK = "b/322823209";
+ public static final String GET_FROM_RECENTS_FAILURE = "b/321775748";
+ public static final String SUCCESSFUL_GESTURE_MISMATCH_EVENTS = "b/324940434";
+ public static final String TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE = "b/326908466";
+ public static final String TEST_TAPL_OVERVIEW_ACTIONS_MENU_FAILURE = "b/326073471";
public static final String REQUEST_EMULATE_DISPLAY = "emulate-display";
public static final String REQUEST_STOP_EMULATE_DISPLAY = "stop-emulate-display";
diff --git a/tests/multivalentTests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/multivalentTests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
index 679bd01..1f824b8 100644
--- a/tests/multivalentTests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/multivalentTests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -55,14 +55,11 @@
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.Utilities;
-import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.tapl.HomeAllApps;
import com.android.launcher3.tapl.HomeAppIcon;
import com.android.launcher3.tapl.LauncherInstrumentation;
-import com.android.launcher3.tapl.LauncherInstrumentation.ContainerType;
import com.android.launcher3.tapl.TestHelpers;
import com.android.launcher3.testcomponent.TestCommandReceiver;
-import com.android.launcher3.testing.shared.TestProtocol;
import com.android.launcher3.util.LooperExecutor;
import com.android.launcher3.util.SimpleBroadcastReceiver;
import com.android.launcher3.util.TestUtil;
@@ -204,10 +201,6 @@
mLauncher.setSystemHealthSupplier(startTime -> TestCommandReceiver.callCommand(
TestCommandReceiver.GET_SYSTEM_HEALTH_MESSAGE, startTime.toString())
.getString("result"));
- mLauncher.setOnSettledStateAction(
- containerType -> executeOnLauncher(
- launcher ->
- checkLauncherIntegrity(launcher, containerType)));
}
mLauncher.enableDebugTracing();
// Avoid double-reporting of Launcher crashes.
@@ -561,16 +554,20 @@
true /* newTask */);
}
- public static void startTestActivity(int activityNumber) {
+ public static void startTestActivity(String activityName, String activityLabel) {
final String packageName = getAppPackageName();
final Intent intent = getInstrumentation().getContext().getPackageManager().
getLaunchIntentForPackage(packageName);
intent.setComponent(new ComponentName(packageName,
- "com.android.launcher3.tests.Activity" + activityNumber));
- startIntent(intent, By.pkg(packageName).text("TestActivity" + activityNumber),
+ "com.android.launcher3.tests." + activityName));
+ startIntent(intent, By.pkg(packageName).text(activityLabel),
false /* newTask */);
}
+ public static void startTestActivity(int activityNumber) {
+ startTestActivity("Activity" + activityNumber, "TestActivity" + activityNumber);
+ }
+
public static void startImeTestActivity() {
final String packageName = getAppPackageName();
final Intent intent = getInstrumentation().getContext().getPackageManager().
@@ -638,86 +635,6 @@
return launcher.getAppsView().getActiveRecyclerView().computeVerticalScrollOffset();
}
- private void checkLauncherIntegrity(
- Launcher launcher, ContainerType expectedContainerType) {
- if (launcher != null) {
- final StateManager<LauncherState> stateManager = launcher.getStateManager();
- final LauncherState stableState = stateManager.getCurrentStableState();
-
- assertTrue("Stable state != state: " + stableState.getClass().getSimpleName() + ", "
- + stateManager.getState().getClass().getSimpleName(),
- stableState == stateManager.getState());
-
- final boolean isResumed = launcher.hasBeenResumed();
- final boolean isStarted = launcher.isStarted();
- checkLauncherState(launcher, expectedContainerType, isResumed, isStarted);
-
- final int ordinal = stableState.ordinal;
-
- switch (expectedContainerType) {
- case WORKSPACE:
- case WIDGETS: {
- assertTrue(
- "Launcher is not resumed in state: " + expectedContainerType,
- isResumed);
- assertTrue(TestProtocol.stateOrdinalToString(ordinal),
- ordinal == TestProtocol.NORMAL_STATE_ORDINAL);
- break;
- }
- case HOME_ALL_APPS: {
- assertTrue(
- "Launcher is not resumed in state: " + expectedContainerType,
- isResumed);
- assertTrue(TestProtocol.stateOrdinalToString(ordinal),
- ordinal == TestProtocol.ALL_APPS_STATE_ORDINAL);
- break;
- }
- case OVERVIEW: {
- verifyOverviewState(launcher, expectedContainerType, isStarted, isResumed,
- ordinal, TestProtocol.OVERVIEW_STATE_ORDINAL);
- break;
- }
- case SPLIT_SCREEN_SELECT: {
- verifyOverviewState(launcher, expectedContainerType, isStarted, isResumed,
- ordinal, TestProtocol.OVERVIEW_SPLIT_SELECT_ORDINAL);
- break;
- }
- case TASKBAR_ALL_APPS:
- case LAUNCHED_APP: {
- assertTrue("Launcher is resumed in state: " + expectedContainerType,
- !isResumed);
- assertTrue(TestProtocol.stateOrdinalToString(ordinal),
- ordinal == TestProtocol.NORMAL_STATE_ORDINAL);
- break;
- }
- default:
- throw new IllegalArgumentException(
- "Illegal container: " + expectedContainerType);
- }
- } else {
- assertTrue(
- "Container type is not LAUNCHED_APP, TASKBAR_ALL_APPS "
- + "or FALLBACK_OVERVIEW: " + expectedContainerType,
- expectedContainerType == ContainerType.LAUNCHED_APP
- || expectedContainerType == ContainerType.TASKBAR_ALL_APPS
- || expectedContainerType == ContainerType.FALLBACK_OVERVIEW);
- }
- }
-
- protected void checkLauncherState(Launcher launcher, ContainerType expectedContainerType,
- boolean isResumed, boolean isStarted) {
- assertTrue("hasBeenResumed() != isStarted(), hasBeenResumed(): " + isResumed,
- isResumed == isStarted);
- assertTrue("hasBeenResumed() != isUserActive(), hasBeenResumed(): " + isResumed,
- isResumed == launcher.isUserActive());
- }
-
- protected void checkLauncherStateInOverview(Launcher launcher,
- ContainerType expectedContainerType, boolean isStarted, boolean isResumed) {
- assertTrue("Launcher is not resumed in state: " + expectedContainerType,
- isResumed);
- }
-
protected void onLauncherActivityClose(Launcher launcher) {
}
@@ -746,10 +663,4 @@
}
return homeAppIcon;
}
-
- private void verifyOverviewState(Launcher launcher, ContainerType expectedContainerType,
- boolean isStarted, boolean isResumed, int ordinal, int expectedOrdinal) {
- checkLauncherStateInOverview(launcher, expectedContainerType, isStarted, isResumed);
- assertEquals(TestProtocol.stateOrdinalToString(ordinal), ordinal, expectedOrdinal);
- }
}
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/AllApps.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/AllApps.java
index 2dbc29d..9591891 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/AllApps.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/AllApps.java
@@ -261,7 +261,7 @@
int attempts = 0;
final Rect margins = new Rect(
/* left= */ 0,
- getTopVisibleIconBounds(allAppsContainer).bottom,
+ mHeight / 2,
/* right= */ 0,
/* bottom= */ getAppsListRecyclerBottomPadding());
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/AppIcon.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/AppIcon.java
index 156568b..7c6d684 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/AppIcon.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/AppIcon.java
@@ -16,6 +16,9 @@
package com.android.launcher3.tapl;
+import static com.android.launcher3.testing.shared.TestProtocol.TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE;
+
+import android.util.Log;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -49,7 +52,7 @@
/**
* Find an app icon with the given name.
*
- * @param appName app icon to look for
+ * @param appName app icon to look for
* @param launcher (optional) - only match ui elements from Launcher's package
*/
static BySelector getAppIconSelector(String appName, LauncherInstrumentation launcher) {
@@ -95,6 +98,8 @@
@Override
protected void waitForLongPressConfirmation() {
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "AppIcon.waitForLongPressConfirmation, resName: popupContainer");
mLauncher.waitForLauncherObject("popup_container");
}
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/Folder.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/Folder.java
index 1352cc0..b8adfe6 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/Folder.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/Folder.java
@@ -16,6 +16,8 @@
package com.android.launcher3.tapl;
+import android.graphics.Rect;
+
import androidx.annotation.NonNull;
import androidx.test.uiautomator.UiObject2;
@@ -58,4 +60,7 @@
return mLauncher.getWorkspace();
}
}
+ Rect getDropLocationBounds() {
+ return mLauncher.getVisibleBounds(mContainer);
+ }
}
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/FolderIcon.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/FolderIcon.java
index 0c453bd..080e52c 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/FolderIcon.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/FolderIcon.java
@@ -26,7 +26,7 @@
/**
* Folder Icon, an app folder in workspace.
*/
-public class FolderIcon implements FolderDragTarget {
+public class FolderIcon implements IconDragTarget {
protected final UiObject2 mObject;
protected final LauncherInstrumentation mLauncher;
@@ -60,7 +60,7 @@
/** This method requires public access, however should not be called in tests. */
@Override
- public FolderIcon getTargetFolder(Rect bounds) {
+ public FolderIcon getTargetIcon(Rect bounds) {
return this;
}
}
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/HomeAppIcon.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/HomeAppIcon.java
index 693baa0..ca85b29 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/HomeAppIcon.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/HomeAppIcon.java
@@ -27,7 +27,7 @@
/**
* App icon on the workspace or all apps.
*/
-public abstract class HomeAppIcon extends AppIcon implements FolderDragTarget, WorkspaceDragSource {
+public abstract class HomeAppIcon extends AppIcon implements IconDragTarget, WorkspaceDragSource {
private final String mAppName;
@@ -42,7 +42,7 @@
* @param target the destination icon.
*/
@NonNull
- public FolderIcon dragToIcon(FolderDragTarget target) {
+ public FolderIcon dragToIcon(IconDragTarget target) {
try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
LauncherInstrumentation.Closable c = mLauncher.addContextLayer("want to drag icon")) {
final Rect dropBounds = target.getDropLocationBounds();
@@ -51,13 +51,33 @@
() -> {
final Rect bounds = target.getDropLocationBounds();
return new Point(bounds.centerX(), bounds.centerY());
- });
- FolderIcon result = target.getTargetFolder(dropBounds);
+ }, false);
+ FolderIcon result = target.getTargetIcon(dropBounds);
mLauncher.assertTrue("Can't find the target folder.", result != null);
return result;
}
}
+ /**
+ * Drag the AppIcon to the given position of a folder icon, and then inside that folder.
+ *
+ * @param target the destination folder.
+ */
+ @NonNull
+ public Folder dragToFolder(IconDragTarget target) {
+ try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
+ LauncherInstrumentation.Closable c = mLauncher.addContextLayer("want to drag icon")) {
+ Workspace.dragIconToWorkspace(
+ mLauncher, this,
+ () -> {
+ final Rect bounds = target.getDropLocationBounds();
+ return new Point(bounds.centerX(), bounds.centerY());
+ }, /* isDraggingToFolder */ true);
+ }
+ return new Folder(mLauncher);
+ }
+
+
/** This method requires public access, however should not be called in tests. */
@Override
public Rect getDropLocationBounds() {
@@ -66,7 +86,7 @@
/** This method requires public access, however should not be called in tests. */
@Override
- public FolderIcon getTargetFolder(Rect bounds) {
+ public FolderIcon getTargetIcon(Rect bounds) {
for (FolderIcon folderIcon : mLauncher.getWorkspace().getFolderIcons()) {
final Rect folderIconBounds = folderIcon.getDropLocationBounds();
if (bounds.contains(folderIconBounds.centerX(), folderIconBounds.centerY())) {
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/FolderDragTarget.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/IconDragTarget.java
similarity index 91%
rename from tests/multivalentTests/tapl/com/android/launcher3/tapl/FolderDragTarget.java
rename to tests/multivalentTests/tapl/com/android/launcher3/tapl/IconDragTarget.java
index 2c60668..2f86703 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/FolderDragTarget.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/IconDragTarget.java
@@ -18,11 +18,11 @@
import android.graphics.Rect;
-public interface FolderDragTarget {
+public interface IconDragTarget {
/** This method requires public access, however should not be called in tests. */
Rect getDropLocationBounds();
/** This method requires public access, however should not be called in tests. */
- FolderIcon getTargetFolder(Rect bounds);
+ FolderIcon getTargetIcon(Rect bounds);
}
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/Launchable.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/Launchable.java
index ed47334..9d3bc6e 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/Launchable.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/Launchable.java
@@ -17,8 +17,10 @@
package com.android.launcher3.tapl;
import static com.android.launcher3.testing.shared.TestProtocol.SPRING_LOADED_STATE_ORDINAL;
+import static com.android.launcher3.testing.shared.TestProtocol.TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE;
import android.graphics.Point;
+import android.util.Log;
import android.view.MotionEvent;
import androidx.test.uiautomator.UiObject2;
@@ -113,11 +115,15 @@
iconCenter.y - getStartDragThreshold());
if (runToSpringLoadedState) {
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "Launchable.startDrag: actionName: long-pressing and triggering drag start"
+ + " iconCenter: " + iconCenter + " dragStartCenter: "
+ + dragStartCenter);
mLauncher.runToState(() -> movePointerForStartDrag(
- downTime,
- iconCenter,
- dragStartCenter,
- expectLongClickEvents),
+ downTime,
+ iconCenter,
+ dragStartCenter,
+ expectLongClickEvents),
SPRING_LOADED_STATE_ORDINAL, "long-pressing and triggering drag start");
} else {
movePointerForStartDrag(
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/LaunchedAppState.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/LaunchedAppState.java
index 200f2ff..b5414b7 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/LaunchedAppState.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/LaunchedAppState.java
@@ -24,7 +24,9 @@
import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_SHELL_DRAG_READY;
import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_STASHED_TASKBAR_SCALE;
import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_TASKBAR_FROM_NAV_THRESHOLD;
+import static com.android.launcher3.testing.shared.TestProtocol.SUCCESSFUL_GESTURE_MISMATCH_EVENTS;
import static com.android.launcher3.testing.shared.TestProtocol.TEST_INFO_RESPONSE_FIELD;
+import static com.android.launcher3.testing.shared.TestProtocol.testLogD;
import android.graphics.Point;
import android.graphics.Rect;
@@ -139,6 +141,8 @@
return new Taskbar(mLauncher);
} finally {
+ testLogD(SUCCESSFUL_GESTURE_MISMATCH_EVENTS,
+ "swipeUpToUnstashTaskbar: completed gesture");
mLauncher.getTestInfo(REQUEST_DISABLE_BLOCK_TIMEOUT);
}
}
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index 326802f..053b360 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -30,7 +30,10 @@
import static com.android.launcher3.testing.shared.TestProtocol.NORMAL_STATE_ORDINAL;
import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_GET_SPLIT_SELECTION_ACTIVE;
import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_NUM_ALL_APPS_COLUMNS;
+import static com.android.launcher3.testing.shared.TestProtocol.SUCCESSFUL_GESTURE_MISMATCH_EVENTS;
+import static com.android.launcher3.testing.shared.TestProtocol.TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE;
import static com.android.launcher3.testing.shared.TestProtocol.TEST_INFO_RESPONSE_FIELD;
+import static com.android.launcher3.testing.shared.TestProtocol.testLogD;
import android.app.ActivityManager;
import android.app.Instrumentation;
@@ -94,7 +97,6 @@
import java.util.Optional;
import java.util.concurrent.TimeoutException;
import java.util.function.BooleanSupplier;
-import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.regex.Pattern;
@@ -200,8 +202,6 @@
private boolean mIgnoreTaskbarVisibility = false;
- private Consumer<ContainerType> mOnSettledStateAction;
-
private LogEventChecker mEventChecker;
// UI anomaly checker provided by the test.
@@ -655,10 +655,6 @@
this.mSystemHealthSupplier = supplier;
}
- public void setOnSettledStateAction(Consumer<ContainerType> onSettledStateAction) {
- mOnSettledStateAction = onSettledStateAction;
- }
-
public void onTestStart() {
mTestStartTime = System.currentTimeMillis();
}
@@ -869,8 +865,6 @@
final UiObject2 container = verifyVisibleObjects(containerType);
- if (mOnSettledStateAction != null) mOnSettledStateAction.accept(containerType);
-
return container;
}
@@ -1172,7 +1166,11 @@
log("Hierarchy before clicking home:");
dumpViewHierarchy();
action = "clicking home button";
-
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "LauncherInstrumentation.goHome: isThreeFingerTrackpadGesture: "
+ + isThreeFingerTrackpadGesture
+ + "getNavigationModel() == NavigationModel.ZERO_BUTTON: " + (
+ getNavigationModel() == NavigationModel.ZERO_BUTTON));
runToState(
getHomeButton()::click,
NORMAL_STATE_ORDINAL,
@@ -1216,7 +1214,8 @@
waitForNavigationUiObject("back").click();
}
if (launcherVisible) {
- if (getContext().getApplicationInfo().isOnBackInvokedCallbackEnabled()) {
+ if (InstrumentationRegistry.getTargetContext().getApplicationInfo()
+ .isOnBackInvokedCallbackEnabled()) {
expectEvent(TestProtocol.SEQUENCE_MAIN, EVENT_ON_BACK_INVOKED);
} else {
expectEvent(TestProtocol.SEQUENCE_MAIN, EVENT_KEY_BACK_DOWN);
@@ -1518,6 +1517,8 @@
@NonNull
UiObject2 waitForLauncherObject(String resName) {
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "LauncherInstrumentation.waitForLauncherObject");
return waitForObjectBySelector(getLauncherObjectSelector(resName));
}
@@ -1547,12 +1548,16 @@
@NonNull
List<UiObject2> waitForObjectsBySelector(BySelector selector) {
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "LauncherInstrumentation.waitForObjectsBySelector");
final List<UiObject2> objects = mDevice.wait(Until.findObjects(selector), WAIT_TIME_MS);
assertNotNull("Can't find any view in Launcher, selector: " + selector, objects);
return objects;
}
private UiObject2 waitForObjectBySelector(BySelector selector) {
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "LauncherInstrumentation.waitForObjectBySelector");
final UiObject2 object = mDevice.wait(Until.findObject(selector), WAIT_TIME_MS);
assertNotNull("Can't find a view in Launcher, selector: " + selector, object);
return object;
@@ -1595,6 +1600,9 @@
void runToState(Runnable command, int expectedState, boolean requireEvent, String actionName) {
if (requireEvent) {
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "LauncherInstrumentation.runToState: command: " + command + " expectedState: "
+ + expectedState + " actionName: " + actionName + "requireEvent: true");
runToState(command, expectedState, actionName);
} else {
command.run();
@@ -1972,11 +1980,15 @@
mPointerCount = 1;
pointerCount = mPointerCount;
}
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "LauncherInstrumentation.sendPointer: ACTION_DOWN");
break;
case MotionEvent.ACTION_UP:
if (hasTIS && gestureScope == GestureScope.EXPECT_PILFER) {
expectEvent(TestProtocol.SEQUENCE_PILFER, EVENT_PILFER_POINTERS);
}
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "LauncherInstrumentation.sendPointer: ACTION_UP");
break;
case MotionEvent.ACTION_POINTER_DOWN:
mPointerCount++;
@@ -2241,6 +2253,11 @@
.getBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD);
}
+ public boolean isImeDocked() {
+ return getTestInfo(TestProtocol.REQUEST_TASKBAR_IME_DOCKED).getBoolean(
+ TestProtocol.TEST_INFO_RESPONSE_FIELD);
+ }
+
/** Enables transient taskbar for testing purposes only. */
public void enableTransientTaskbar(boolean enable) {
getTestInfo(enable
@@ -2312,9 +2329,13 @@
}
if (mEventChecker != null) {
+ testLogD(SUCCESSFUL_GESTURE_MISMATCH_EVENTS, "eventsCheck: mEventChecker exists");
mEventChecker = null;
if (mCheckEventsForSuccessfulGestures) {
final String message = eventChecker.verify(WAIT_TIME_MS, true);
+ testLogD(SUCCESSFUL_GESTURE_MISMATCH_EVENTS,
+ "mCheckEventsForSuccessfulGestures = true | eventsCheck: message="
+ + message);
if (message != null) {
dumpDiagnostics(message);
checkForAnomaly();
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/LogEventChecker.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/LogEventChecker.java
index 672c6e0..70d63bd 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/LogEventChecker.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/LogEventChecker.java
@@ -18,6 +18,8 @@
import static com.android.launcher3.testing.shared.TestProtocol.SEQUENCE_MAIN;
import static com.android.launcher3.testing.shared.TestProtocol.SEQUENCE_PILFER;
import static com.android.launcher3.testing.shared.TestProtocol.SEQUENCE_TIS;
+import static com.android.launcher3.testing.shared.TestProtocol.SUCCESSFUL_GESTURE_MISMATCH_EVENTS;
+import static com.android.launcher3.testing.shared.TestProtocol.testLogD;
import android.os.SystemClock;
@@ -88,6 +90,7 @@
}
String verify(long waitForExpectedCountMs, boolean successfulGesture) {
+ testLogD(SUCCESSFUL_GESTURE_MISMATCH_EVENTS, "LogEventChecker.java - verify");
final ListMap<String> actualEvents = finishSync(waitForExpectedCountMs);
if (actualEvents == null) return "null event sequences because launcher likely died";
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/Workspace.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/Workspace.java
index 1029b78..4e92634 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/Workspace.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/Workspace.java
@@ -17,10 +17,15 @@
package com.android.launcher3.tapl;
import static android.view.KeyEvent.KEYCODE_META_RIGHT;
+import static android.view.KeyEvent.KEYCODE_RECENT_APPS;
+import static android.view.KeyEvent.KEYCODE_TAB;
+import static android.view.KeyEvent.META_META_ON;
import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED;
import static com.android.launcher3.testing.shared.TestProtocol.ALL_APPS_STATE_ORDINAL;
import static com.android.launcher3.testing.shared.TestProtocol.NORMAL_STATE_ORDINAL;
+import static com.android.launcher3.testing.shared.TestProtocol.OVERVIEW_STATE_ORDINAL;
+import static com.android.launcher3.testing.shared.TestProtocol.TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE;
import static com.android.launcher3.testing.shared.TestProtocol.UIOBJECT_STALE_ELEMENT;
import static junit.framework.TestCase.assertNotNull;
@@ -134,6 +139,40 @@
}
}
+ /** Opens the Launcher Overview page with the action+tab keyboard shortcut. */
+ public Overview openOverviewFromActionPlusTabKeyboardShortcut() {
+ try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
+ LauncherInstrumentation.Closable c =
+ mLauncher.addContextLayer("want to open overview")) {
+ verifyActiveContainer();
+ mLauncher.runToState(
+ () -> mLauncher.getDevice().pressKeyCode(KEYCODE_TAB, META_META_ON),
+ OVERVIEW_STATE_ORDINAL,
+ "pressing keyboard shortcut");
+ try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
+ "pressed meta+tab key")) {
+ return new Overview(mLauncher);
+ }
+ }
+ }
+
+ /** Opens the Launcher Overview page with the Recents keyboard shortcut. */
+ public Overview openOverviewFromRecentsKeyboardShortcut() {
+ try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
+ LauncherInstrumentation.Closable c =
+ mLauncher.addContextLayer("want to open overview")) {
+ verifyActiveContainer();
+ mLauncher.runToState(
+ () -> mLauncher.getDevice().pressKeyCode(KEYCODE_RECENT_APPS),
+ OVERVIEW_STATE_ORDINAL,
+ "pressing keyboard shortcut");
+ try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
+ "pressed recents apps key")) {
+ return new Overview(mLauncher);
+ }
+ }
+ }
+
/**
* Returns the home qsb.
*
@@ -551,7 +590,8 @@
* This function expects the launchable is inside the workspace and there is no drop event.
*/
static void dragIconToWorkspace(
- LauncherInstrumentation launcher, Launchable launchable, Supplier<Point> destSupplier) {
+ LauncherInstrumentation launcher, Launchable launchable, Supplier<Point> destSupplier,
+ boolean isDraggingToFolder) {
dragIconToWorkspace(
launcher,
launchable,
@@ -559,7 +599,8 @@
/* isDecelerating= */ false,
() -> launcher.expectEvent(TestProtocol.SEQUENCE_MAIN, LONG_CLICK_EVENT),
/* expectDropEvents= */ null,
- /* startsActivity = */ false);
+ /* startsActivity = */ false,
+ isDraggingToFolder);
}
static void dragIconToWorkspace(
@@ -570,7 +611,8 @@
@Nullable Runnable expectDropEvents,
boolean startsActivity) {
dragIconToWorkspace(launcher, launchable, dest, /* isDecelerating */ true,
- expectLongClickEvents, expectDropEvents, startsActivity);
+ expectLongClickEvents, expectDropEvents, startsActivity,
+ /* isDraggingToFolder */ false);
}
static void dragIconToWorkspace(
@@ -580,10 +622,13 @@
boolean isDecelerating,
Runnable expectLongClickEvents,
@Nullable Runnable expectDropEvents,
- boolean startsActivity) {
+ boolean startsActivity,
+ boolean isDraggingToFolder) {
try (LauncherInstrumentation.Closable ignored = launcher.addContextLayer(
"want to drag icon to workspace")) {
final long downTime = SystemClock.uptimeMillis();
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "Workspace.dragIconToWorkspace: starting drag | downtime: " + downTime);
Point dragStart = launchable.startDrag(
downTime,
expectLongClickEvents,
@@ -607,11 +652,27 @@
dragStart = screenEdge;
}
- // targetDest.x is now between 0 and displayX so we found the target page,
- // we just have to put move the icon to the destination and drop it
- launcher.movePointer(dragStart, targetDest, DEFAULT_DRAG_STEPS, isDecelerating,
- downTime, SystemClock.uptimeMillis(), false,
- LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER);
+ // targetDest.x is now between 0 and displayX so we found the target page.
+ // If not a folder, we just have to put move the icon to the destination and drop it.
+ // If it's a folder we want to drag to the folder icon and then drag to the center of
+ // that folder when it opens.
+ if (isDraggingToFolder) {
+ Point finalDragStart = dragStart;
+ Point finalTargetDest = targetDest;
+ Folder folder = executeAndWaitForFolderOpen(launcher, () -> launcher.movePointer(
+ finalDragStart, finalTargetDest, DEFAULT_DRAG_STEPS, isDecelerating,
+ downTime, SystemClock.uptimeMillis(), false,
+ LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER));
+
+ Rect dropBounds = folder.getDropLocationBounds();
+ dragStart = targetDest;
+ targetDest = new Point(dropBounds.centerX(), dropBounds.centerY());
+ }
+
+ launcher.movePointer(dragStart, targetDest,
+ DEFAULT_DRAG_STEPS, isDecelerating, downTime, SystemClock.uptimeMillis(),
+ false, LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER);
+
dropDraggedIcon(launcher, targetDest, downTime, expectDropEvents, startsActivity);
}
}
@@ -696,6 +757,16 @@
() -> "Page scroll didn't happen", "Scrolling page");
}
+ private static Folder executeAndWaitForFolderOpen(LauncherInstrumentation launcher,
+ Runnable command) {
+ launcher.executeAndWaitForEvent(command,
+ event -> TestProtocol.FOLDER_OPENED_MESSAGE.equals(
+ event.getClassName().toString()),
+ () -> "Fail to open folder.",
+ "open folder");
+ return new Folder(launcher);
+ }
+
static void dragIconToHotseat(
LauncherInstrumentation launcher,
Launchable launchable,
diff --git a/tests/multivalentTests/tapl/com/android/launcher3/tapl/WorkspaceDragSource.java b/tests/multivalentTests/tapl/com/android/launcher3/tapl/WorkspaceDragSource.java
index e5a2a2e..b42d43b 100644
--- a/tests/multivalentTests/tapl/com/android/launcher3/tapl/WorkspaceDragSource.java
+++ b/tests/multivalentTests/tapl/com/android/launcher3/tapl/WorkspaceDragSource.java
@@ -15,7 +15,10 @@
*/
package com.android.launcher3.tapl;
+import static com.android.launcher3.testing.shared.TestProtocol.TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE;
+
import android.graphics.Point;
+import android.util.Log;
import java.util.function.Supplier;
@@ -76,6 +79,9 @@
LauncherInstrumentation.Closable c = launcher.addContextLayer(
String.format("want to drag the icon to cell(%d, %d)", cellX, cellY))) {
final Supplier<Point> dest = () -> Workspace.getCellCenter(launcher, cellX, cellY);
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "WorkspaceDragSource.dragToWorkspace: dragging icon to workspace | dest: "
+ + dest.get());
Workspace.dragIconToWorkspace(
launcher,
launchable,
diff --git a/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt b/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt
index 2905d85..3ba563d 100644
--- a/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt
+++ b/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt
@@ -19,6 +19,7 @@
import android.content.res.Configuration
import android.graphics.Point
import android.graphics.Rect
+import android.platform.test.flag.junit.SetFlagsRule
import android.platform.test.rule.AllowedDevices
import android.platform.test.rule.DeviceProduct
import android.platform.test.rule.IgnoreLimit
@@ -33,6 +34,7 @@
import com.android.launcher3.util.NavigationMode
import com.android.launcher3.util.WindowBounds
import com.android.launcher3.util.rule.TestStabilityRule
+import com.android.launcher3.util.rule.setFlags
import com.android.launcher3.util.window.CachedDisplayInfo
import com.android.launcher3.util.window.WindowManagerProxy
import com.google.common.truth.Truth
@@ -64,6 +66,8 @@
private val windowManagerProxy: WindowManagerProxy = mock()
private val launcherPrefs: LauncherPrefs = mock()
+ @get:Rule val setFlagsRule = SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT)
+
@Rule @JvmField val testStabilityRule = TestStabilityRule()
@Rule @JvmField val limitDevicesRule = LimitDevicesRule()
@@ -270,6 +274,7 @@
isGestureMode: Boolean = true,
densityDpi: Int
) {
+ setFlagsRule.setFlags(false, Flags.FLAG_ENABLE_TWOLINE_TOGGLE)
val windowsBounds = perDisplayBoundsCache[displayInfo]!!
val realBounds = windowsBounds[rotation]
whenever(windowManagerProxy.getDisplayInfo(any())).thenReturn(displayInfo)
diff --git a/tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java b/tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java
index ea7feb5..0907f8f 100644
--- a/tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java
+++ b/tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java
@@ -76,9 +76,6 @@
new UserIconInfo(MAIN_HANDLE, UserIconInfo.TYPE_MAIN);
private static final UserIconInfo PRIVATE_ICON_INFO =
new UserIconInfo(PRIVATE_HANDLE, UserIconInfo.TYPE_PRIVATE);
- private static final String SAFETY_CENTER_INTENT = Intent.ACTION_SAFETY_CENTER;
- private static final String PS_SETTINGS_FRAGMENT_KEY = ":settings:fragment_args_key";
- private static final String PS_SETTINGS_FRAGMENT_VALUE = "AndroidPrivateSpace_personal";
private PrivateProfileManager mPrivateProfileManager;
@Mock
@@ -180,9 +177,9 @@
@Test
public void openPrivateSpaceSettings_triggersSecurityAndPrivacyIntent() {
- Intent expectedIntent = new Intent(SAFETY_CENTER_INTENT);
- expectedIntent.putExtra(PS_SETTINGS_FRAGMENT_KEY, PS_SETTINGS_FRAGMENT_VALUE);
+ Intent expectedIntent = PrivateProfileManager.PRIVATE_SPACE_INTENT;
ArgumentCaptor<Intent> acIntent = ArgumentCaptor.forClass(Intent.class);
+ mPrivateProfileManager.setPrivateSpaceSettingsAvailable(true);
mPrivateProfileManager.openPrivateSpaceSettings();
@@ -190,9 +187,6 @@
Intent actualIntent = acIntent.getValue();
assertEquals("Intent Action is different", expectedIntent.getAction(),
actualIntent.getAction());
- assertEquals("Settings Fragment is incorrect in Intent",
- expectedIntent.getStringExtra(PS_SETTINGS_FRAGMENT_KEY),
- actualIntent.getStringExtra(PS_SETTINGS_FRAGMENT_KEY));
}
private static void awaitTasksCompleted() throws Exception {
diff --git a/tests/src/com/android/launcher3/dragging/TaplDragTest.java b/tests/src/com/android/launcher3/dragging/TaplDragTest.java
index d57461f..d1227d8 100644
--- a/tests/src/com/android/launcher3/dragging/TaplDragTest.java
+++ b/tests/src/com/android/launcher3/dragging/TaplDragTest.java
@@ -15,6 +15,7 @@
*/
package com.android.launcher3.dragging;
+import static com.android.launcher3.testing.shared.TestProtocol.TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE;
import static com.android.launcher3.util.TestConstants.AppNames.GMAIL_APP_NAME;
import static com.android.launcher3.util.TestConstants.AppNames.MAPS_APP_NAME;
import static com.android.launcher3.util.TestConstants.AppNames.PHOTOS_APP_NAME;
@@ -87,8 +88,7 @@
PHOTOS_APP_NAME);
final HomeAppIcon mapIcon = createShortcutInCenterIfNotExist(MAPS_APP_NAME);
- folderIcon = mapIcon.dragToIcon(folderIcon);
- folder = folderIcon.open();
+ folder = mapIcon.dragToFolder(folderIcon);
folder.getAppIcon(MAPS_APP_NAME);
workspace = folder.close();
@@ -234,6 +234,11 @@
final HomeAppIcon launcherTestAppIcon = createShortcutInCenterIfNotExist(TEST_APP_NAME);
for (Point target : targets) {
startTime = SystemClock.uptimeMillis();
+ Log.d(TEST_DRAG_APP_ICON_TO_MULTIPLE_WORKSPACES_FAILURE,
+ "TaplDragTest.java.testDragAppIconToMultipleWorkspaceCells: shortcut name: "
+ + launcherTestAppIcon.getIconName()
+ + " | target cell coordinates: (" + target.x + ", " + target.y
+ + ") | start time: " + startTime);
launcherTestAppIcon.dragToWorkspace(target.x, target.y);
endTime = SystemClock.uptimeMillis();
elapsedTime = endTime - startTime;
diff --git a/tests/src/com/android/launcher3/model/AsyncBindingTest.kt b/tests/src/com/android/launcher3/model/AsyncBindingTest.kt
new file mode 100644
index 0000000..af367a8
--- /dev/null
+++ b/tests/src/com/android/launcher3/model/AsyncBindingTest.kt
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2024 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.launcher3.model
+
+import android.os.Looper
+import android.platform.test.flag.junit.SetFlagsRule
+import android.util.Pair
+import android.util.SparseArray
+import android.view.View
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.launcher3.Flags
+import com.android.launcher3.model.BgDataModel.Callbacks
+import com.android.launcher3.model.data.ItemInfo
+import com.android.launcher3.util.Executors.MAIN_EXECUTOR
+import com.android.launcher3.util.Executors.MODEL_EXECUTOR
+import com.android.launcher3.util.IntArray
+import com.android.launcher3.util.IntSet
+import com.android.launcher3.util.ItemInflater
+import com.android.launcher3.util.LauncherLayoutBuilder
+import com.android.launcher3.util.LauncherModelHelper
+import com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE
+import com.android.launcher3.util.RunnableList
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.Spy
+import org.mockito.kotlin.any
+import org.mockito.kotlin.argThat
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.doAnswer
+import org.mockito.kotlin.isNull
+import org.mockito.kotlin.never
+import org.mockito.kotlin.reset
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+
+/** Tests to verify async binding of model views */
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class AsyncBindingTest {
+
+ @get:Rule val setFlagsRule = SetFlagsRule()
+
+ @Spy private var callbacks = MyCallbacks()
+ @Mock private lateinit var itemInflater: ItemInflater<*>
+
+ private val inflationLooper = SparseArray<Looper>()
+
+ private lateinit var modelHelper: LauncherModelHelper
+
+ @Before
+ fun setUp() {
+ setFlagsRule.enableFlags(Flags.FLAG_ENABLE_WORKSPACE_INFLATION)
+ MockitoAnnotations.initMocks(this)
+ modelHelper = LauncherModelHelper()
+
+ doAnswer { i ->
+ inflationLooper[(i.arguments[0] as ItemInfo).id] = Looper.myLooper()
+ View(modelHelper.sandboxContext)
+ }
+ .whenever(itemInflater)
+ .inflateItem(any(), any(), isNull())
+
+ // Set up the workspace with 3 pages of apps
+ modelHelper.setupDefaultLayoutProvider(
+ LauncherLayoutBuilder()
+ .atWorkspace(0, 1, 0)
+ .putApp(TEST_PACKAGE, TEST_PACKAGE)
+ .atWorkspace(1, 1, 0)
+ .putApp(TEST_PACKAGE, TEST_PACKAGE)
+ .atWorkspace(0, 1, 1)
+ .putApp(TEST_PACKAGE, TEST_PACKAGE)
+ .atWorkspace(1, 1, 1)
+ .putApp(TEST_PACKAGE, TEST_PACKAGE)
+ .atWorkspace(0, 1, 2)
+ .putApp(TEST_PACKAGE, TEST_PACKAGE)
+ )
+ }
+
+ @After
+ fun tearDown() {
+ modelHelper.destroy()
+ }
+
+ @Test
+ fun test_bind_normally_without_itemInflater() {
+ MAIN_EXECUTOR.execute { modelHelper.model.addCallbacksAndLoad(callbacks) }
+ waitForLoaderAndTempMainThread()
+
+ verify(callbacks, never()).bindInflatedItems(any())
+ verify(callbacks, atLeastOnce()).bindItems(any(), any())
+ }
+
+ @Test
+ fun test_bind_inflates_item_on_background() {
+ callbacks.inflater = itemInflater
+ MAIN_EXECUTOR.execute { modelHelper.model.addCallbacksAndLoad(callbacks) }
+ waitForLoaderAndTempMainThread()
+
+ verify(callbacks, never()).bindItems(any(), any())
+ verify(callbacks, times(1)).bindInflatedItems(argThat { t -> t.size == 2 })
+
+ // Verify remaining items are bound using pendingTasks
+ reset(callbacks)
+ MAIN_EXECUTOR.submit(callbacks.pendingTasks!!::executeAllAndDestroy).get()
+ verify(callbacks, times(1)).bindInflatedItems(argThat { t -> t.size == 3 })
+
+ // Verify that all items were inflated on the background thread
+ assertEquals(5, inflationLooper.size())
+ for (i in 0..4) assertEquals(MODEL_EXECUTOR.looper, inflationLooper.valueAt(i))
+ }
+
+ @Test
+ fun test_bind_sync_partially_inflates_on_background() {
+ modelHelper.loadModelSync()
+ assertTrue(modelHelper.model.isModelLoaded)
+ callbacks.inflater = itemInflater
+
+ val firstPageBindIds = IntSet()
+
+ MAIN_EXECUTOR.submit {
+ modelHelper.model.addCallbacksAndLoad(callbacks)
+ verify(callbacks, never()).bindItems(any(), any())
+ verify(callbacks, times(1))
+ .bindInflatedItems(
+ argThat { t ->
+ t.forEach { firstPageBindIds.add(it.first.id) }
+ t.size == 2
+ }
+ )
+
+ // Verify that onInitialBindComplete is called and the binding is not yet complete
+ assertFalse(callbacks.onCompleteSignal!!.isDestroyed)
+ }
+ .get()
+
+ waitForLoaderAndTempMainThread()
+ assertTrue(callbacks.onCompleteSignal!!.isDestroyed)
+
+ // Verify that firstPageBindIds are loaded on the main thread and remaining
+ // on the background thread.
+ assertEquals(5, inflationLooper.size())
+ for (i in 0..4) {
+ if (firstPageBindIds.contains(inflationLooper.keyAt(i)))
+ assertEquals(MAIN_EXECUTOR.looper, inflationLooper.valueAt(i))
+ else assertEquals(MODEL_EXECUTOR.looper, inflationLooper.valueAt(i))
+ }
+
+ MAIN_EXECUTOR.submit {
+ reset(callbacks)
+ callbacks.pendingTasks!!.executeAllAndDestroy()
+ // Verify remaining 3 times are bound using pending tasks
+ verify(callbacks, times(1)).bindInflatedItems(argThat { t -> t.size == 3 })
+ }
+ .get()
+ }
+
+ private fun waitForLoaderAndTempMainThread() {
+ MAIN_EXECUTOR.submit {}.get()
+ MODEL_EXECUTOR.submit {}.get()
+ MAIN_EXECUTOR.submit {}.get()
+ }
+
+ class MyCallbacks : Callbacks {
+
+ var inflater: ItemInflater<*>? = null
+ var pendingTasks: RunnableList? = null
+ var onCompleteSignal: RunnableList? = null
+
+ override fun bindItems(shortcuts: MutableList<ItemInfo>, forceAnimateIcons: Boolean) {}
+
+ override fun bindInflatedItems(items: MutableList<Pair<ItemInfo, View>>) {}
+
+ override fun getPagesToBindSynchronously(orderedScreenIds: IntArray?) = IntSet.wrap(0)
+
+ override fun onInitialBindComplete(
+ boundPages: IntSet,
+ pendingTasks: RunnableList,
+ onCompleteSignal: RunnableList,
+ workspaceItemCount: Int,
+ isBindSync: Boolean
+ ) {
+ this.pendingTasks = pendingTasks
+ this.onCompleteSignal = onCompleteSignal
+ }
+
+ override fun getItemInflater() = inflater
+ }
+}
diff --git a/tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java b/tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
index 8631f03..7a0b60a 100644
--- a/tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
+++ b/tests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
@@ -2,35 +2,23 @@
import static android.os.Process.myUserHandle;
-import static androidx.test.InstrumentationRegistry.getInstrumentation;
-
-import static com.android.launcher3.Flags.FLAG_ENABLE_SUPPORT_FOR_ARCHIVING;
-import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_ARCHIVED;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.LauncherModelHelper.TEST_ACTIVITY;
import static com.android.launcher3.util.LauncherModelHelper.TEST_ACTIVITY2;
import static com.android.launcher3.util.LauncherModelHelper.TEST_ACTIVITY3;
import static com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE;
+import static com.android.launcher3.util.TestUtil.runOnExecutorSync;
import static com.android.launcher3.util.rule.TestStabilityRule.LOCAL;
import static com.android.launcher3.util.rule.TestStabilityRule.PLATFORM_POSTSUBMIT;
-import static com.android.launcher3.util.TestUtil.DUMMY_CLASS_NAME;
-import static com.android.launcher3.util.TestUtil.DUMMY_PACKAGE;
-import static com.android.launcher3.util.TestUtil.runOnExecutorSync;
-
-import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import android.content.Context;
-import android.platform.test.annotations.RequiresFlagsEnabled;
-import android.platform.test.flag.junit.CheckFlagsRule;
-import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
-import androidx.test.uiautomator.UiDevice;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.icons.BitmapInfo;
@@ -40,7 +28,6 @@
import com.android.launcher3.util.LauncherLayoutBuilder;
import com.android.launcher3.util.LauncherModelHelper;
import com.android.launcher3.util.PackageUserKey;
-import com.android.launcher3.util.TestUtil;
import com.android.launcher3.util.rule.TestStabilityRule;
import org.junit.After;
@@ -50,7 +37,6 @@
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
-import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@@ -65,18 +51,9 @@
@Rule(order = 0)
public TestRule testStabilityRule = new TestStabilityRule();
- @Rule
- public final CheckFlagsRule mCheckFlagsRule =
- DeviceFlagsValueProvider.createCheckFlagsRule();
-
private static final String PENDING_APP_1 = TEST_PACKAGE + ".pending1";
private static final String PENDING_APP_2 = TEST_PACKAGE + ".pending2";
- private static final String ARCHIVED_PACKAGE = DUMMY_PACKAGE;
- private static final String ARCHIVED_CLASS_NAME = DUMMY_CLASS_NAME;
- private static final String ARCHIVED_TITLE = "Aardwolf";
-
-
private LauncherModelHelper mModelHelper;
private Context mContext;
@@ -88,7 +65,6 @@
mContext = mModelHelper.sandboxContext;
mSession1 = mModelHelper.createInstallerSession(PENDING_APP_1);
mModelHelper.createInstallerSession(PENDING_APP_2);
- TestUtil.installDummyApp();
LauncherLayoutBuilder builder = new LauncherLayoutBuilder()
.atHotseat(1).putFolder("MyFolder")
@@ -105,22 +81,14 @@
.addApp(PENDING_APP_2, TEST_ACTIVITY) // 8
.addApp(PENDING_APP_2, TEST_ACTIVITY2) // 9
.addApp(PENDING_APP_2, TEST_ACTIVITY3) // 10
-
- // Dummy Test Package
- .addApp(ARCHIVED_PACKAGE, ARCHIVED_CLASS_NAME) // 11
.build();
mModelHelper.setupDefaultLayoutProvider(builder);
mModelHelper.loadModelSync();
- assertEquals(11, mModelHelper.getBgDataModel().itemsIdMap.size());
-
- UiDevice device = UiDevice.getInstance(getInstrumentation());
- assertThat(device.executeShellCommand(String.format("pm archive %s", ARCHIVED_PACKAGE)))
- .isEqualTo("Success\n");
+ assertEquals(10, mModelHelper.getBgDataModel().itemsIdMap.size());
}
@After
- public void tearDown() throws IOException {
- TestUtil.uninstallDummyApp();
+ public void tearDown() {
mModelHelper.destroy();
}
@@ -180,47 +148,6 @@
});
}
- @Test
- @RequiresFlagsEnabled(FLAG_ENABLE_SUPPORT_FOR_ARCHIVING)
- public void testSessionUpdate_archivedApps_sessionInfoPrioritized() {
- // Run on model executor so that no other task runs in the middle.
- runOnExecutorSync(MODEL_EXECUTOR, () -> {
- // Clear all icons from apps list so that its easy to check what was updated
- allItems().forEach(wi -> wi.bitmap = BitmapInfo.LOW_RES_INFO);
- int mSession2 = mModelHelper.createInstallerSession(ARCHIVED_PACKAGE);
- mModelHelper.getModel().enqueueModelUpdateTask(
- newTask(CacheDataUpdatedTask.OP_CACHE_UPDATE, ARCHIVED_PACKAGE));
- List<Integer> pendingArchivedAppIds = List.of(11);
- // Mark the app items as archived.
- allItems().forEach(wi -> {
- if (pendingArchivedAppIds.contains(wi.id)) {
- wi.runtimeStatusFlags |= FLAG_ARCHIVED;
- }
- });
- // Before cache is updated with sessionInfo, confirm the title.
- for (WorkspaceItemInfo info : allItems()) {
- if (pendingArchivedAppIds.contains(info.id)) {
- assertEquals(info.title, ARCHIVED_TITLE);
- }
- }
-
- // Update the cache with session details.
- LauncherAppState.getInstance(mContext).getIconCache().updateSessionCache(
- new PackageUserKey(ARCHIVED_PACKAGE, myUserHandle()),
- mContext.getPackageManager().getPackageInstaller().getSessionInfo(mSession2));
-
- // Trigger a refresh for workspace itemInfo objects.
- mModelHelper.getModel().enqueueModelUpdateTask(
- newTask(CacheDataUpdatedTask.OP_SESSION_UPDATE, ARCHIVED_PACKAGE));
- // Verify the new title from session is applied to the iconInfo.
- for (WorkspaceItemInfo info : allItems()) {
- if (pendingArchivedAppIds.contains(info.id)) {
- assertEquals(info.title, ARCHIVED_PACKAGE);
- }
- }
- });
- }
-
private void verifyUpdate(int... idsUpdated) {
IntSet updates = IntSet.wrap(idsUpdated);
for (WorkspaceItemInfo info : allItems()) {
diff --git a/tests/src/com/android/launcher3/model/FolderIconLoadTest.kt b/tests/src/com/android/launcher3/model/FolderIconLoadTest.kt
index 60a4d2d..2118ed6 100644
--- a/tests/src/com/android/launcher3/model/FolderIconLoadTest.kt
+++ b/tests/src/com/android/launcher3/model/FolderIconLoadTest.kt
@@ -24,11 +24,13 @@
import com.android.launcher3.util.LauncherModelHelper
import com.android.launcher3.util.LauncherModelHelper.*
import com.android.launcher3.util.TestUtil
+import com.android.launcher3.util.rule.TestStabilityRule
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import java.util.concurrent.CountDownLatch
import org.junit.After
import org.junit.Before
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -56,6 +58,8 @@
TEST_ACTIVITY14
)
+ @get:Rule(order = 0) val testStabilityRule = TestStabilityRule()
+
@Before
fun setUp() {
modelHelper = LauncherModelHelper()
@@ -87,6 +91,9 @@
@Test
@Throws(Exception::class)
+ @TestStabilityRule.Stability(
+ flavors = TestStabilityRule.LOCAL or TestStabilityRule.PLATFORM_POSTSUBMIT
+ ) // b/319923578
fun folderLoadedWithHighRes_max_3x3() {
val idp = LauncherAppState.getIDP(modelHelper.sandboxContext)
idp.numFolderColumns = intArrayOf(3, 3, 3, 3)
@@ -100,6 +107,9 @@
@Test
@Throws(Exception::class)
+ @TestStabilityRule.Stability(
+ flavors = TestStabilityRule.LOCAL or TestStabilityRule.PLATFORM_POSTSUBMIT
+ ) // b/319923578
fun folderLoadedWithHighRes_max_4x4() {
val idp = LauncherAppState.getIDP(modelHelper.sandboxContext)
idp.numFolderColumns = intArrayOf(4, 4, 4, 4)
@@ -113,6 +123,10 @@
@Test
@Throws(Exception::class)
+ // Stress tests are long. We permanently demote them from presubmit to match the presubmit SLO.
+ @TestStabilityRule.Stability(
+ flavors = TestStabilityRule.LOCAL or TestStabilityRule.PLATFORM_POSTSUBMIT
+ ) // b/319923578
fun folderLoadedWithHighRes_differentFolderConfigurations() {
val idp = LauncherAppState.getIDP(modelHelper.sandboxContext)
idp.numFolderColumns = intArrayOf(4, 3, 4, 4)
diff --git a/tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java b/tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java
index 25a4c4e..b140f2e 100644
--- a/tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java
+++ b/tests/src/com/android/launcher3/model/ModelMultiCallbacksTest.java
@@ -187,7 +187,7 @@
@Override
public void onInitialBindComplete(IntSet boundPages, RunnableList pendingTasks,
- int workspaceItemCount, boolean isBindSync) {
+ RunnableList onCompleteSignal, int workspaceItemCount, boolean isBindSync) {
mPageBoundSync = boundPages;
mPendingTasks = pendingTasks;
}
diff --git a/tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt b/tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt
index fc7caed..30957fc 100644
--- a/tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt
+++ b/tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt
@@ -201,7 +201,7 @@
// When
itemProcessorUnderTest.processItem()
// Then
- verify(mockCursor).markDeleted("Null intent for item id=1", MISSING_INFO)
+ verify(mockCursor).markDeleted("Null intent from db for item id=1", MISSING_INFO)
verify(mockCursor, times(0)).checkAndAddItem(any(), any(), anyOrNull())
}
@@ -309,7 +309,14 @@
assertWithMessage("item restoreFlag should be unchanged")
.that(mockCursor.restoreFlag)
.isEqualTo(1)
- verify(mockCursor).markDeleted("Intent null, unable to find a launch target", MISSING_INFO)
+ verify(mockCursor)
+ .markDeleted(
+ "No Activities found for id=1," +
+ " targetPkg=package," +
+ " component=ComponentInfo{package/class}." +
+ " Unable to create launch Intent.",
+ MISSING_INFO
+ )
verify(mockCursor, times(0)).checkAndAddItem(any(), any(), anyOrNull())
}
diff --git a/tests/src/com/android/launcher3/ui/BubbleTextViewTest.java b/tests/src/com/android/launcher3/ui/BubbleTextViewTest.java
index 58af51c..6df3ecd 100644
--- a/tests/src/com/android/launcher3/ui/BubbleTextViewTest.java
+++ b/tests/src/com/android/launcher3/ui/BubbleTextViewTest.java
@@ -101,6 +101,7 @@
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
Utilities.enableRunningInTestHarnessForTests();
+ mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_TWOLINE_TOGGLE);
mContext = new ActivityContextWrapper(getApplicationContext());
mBubbleTextView = new BubbleTextView(mContext);
mBubbleTextView.reset();
diff --git a/tests/src/com/android/launcher3/ui/TaplWorkProfileTest.java b/tests/src/com/android/launcher3/ui/TaplWorkProfileTest.java
index 802e564..a9947a0 100644
--- a/tests/src/com/android/launcher3/ui/TaplWorkProfileTest.java
+++ b/tests/src/com/android/launcher3/ui/TaplWorkProfileTest.java
@@ -133,6 +133,7 @@
}
@Test
+ @com.android.launcher3.util.rule.ScreenRecordRule.ScreenRecord // b/325383911
public void workTabExists() {
assumeTrue(mWorkProfileSetupSuccessful);
waitForWorkTabSetup();
diff --git a/tests/src/com/android/launcher3/util/ItemInflaterTest.kt b/tests/src/com/android/launcher3/util/ItemInflaterTest.kt
new file mode 100644
index 0000000..efad899
--- /dev/null
+++ b/tests/src/com/android/launcher3/util/ItemInflaterTest.kt
@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2024 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.launcher3.util
+
+import android.content.ComponentName
+import android.content.Context
+import android.content.pm.LauncherApps
+import android.os.Bundle
+import android.os.Process
+import android.platform.test.flag.junit.SetFlagsRule
+import android.view.View.OnClickListener
+import android.view.View.OnFocusChangeListener
+import android.widget.FrameLayout
+import androidx.test.core.app.ApplicationProvider.getApplicationContext
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
+import com.android.launcher3.BubbleTextView
+import com.android.launcher3.Flags
+import com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APP_PAIR
+import com.android.launcher3.apppairs.AppPairIcon
+import com.android.launcher3.folder.FolderIcon
+import com.android.launcher3.model.ModelWriter
+import com.android.launcher3.model.data.AppInfo
+import com.android.launcher3.model.data.FolderInfo
+import com.android.launcher3.model.data.LauncherAppWidgetInfo
+import com.android.launcher3.model.data.LauncherAppWidgetInfo.FLAG_ID_NOT_VALID
+import com.android.launcher3.model.data.LauncherAppWidgetInfo.FLAG_UI_NOT_READY
+import com.android.launcher3.model.data.LauncherAppWidgetInfo.RESTORE_COMPLETED
+import com.android.launcher3.ui.TestViewHelpers
+import com.android.launcher3.util.Executors.MAIN_EXECUTOR
+import com.android.launcher3.util.Executors.VIEW_PREINFLATION_EXECUTOR
+import com.android.launcher3.util.rule.ShellCommandRule
+import com.android.launcher3.widget.LauncherAppWidgetHostView
+import com.android.launcher3.widget.LauncherWidgetHolder
+import com.android.launcher3.widget.PendingAppWidgetHostView
+import com.android.launcher3.widget.WidgetManagerHelper
+import java.util.concurrent.Callable
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.kotlin.any
+import org.mockito.kotlin.same
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.verifyNoMoreInteractions
+
+/** Tests for ItemInflater */
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class ItemInflaterTest {
+
+ @get:Rule val setFlagsRule = SetFlagsRule()
+ @get:Rule val grantWidgetRule = ShellCommandRule.grantWidgetBind()
+
+ private val clickListener = OnClickListener {}
+ private val focusListener = OnFocusChangeListener { _, _ -> }
+
+ @Mock private lateinit var modelWriter: ModelWriter
+
+ private lateinit var testContext: Context
+ private lateinit var uiContext: ActivityContextWrapper
+
+ private lateinit var widgetHolder: LauncherWidgetHolder
+ private lateinit var underTest: ItemInflater<*>
+
+ @Before
+ fun setUp() {
+ MockitoAnnotations.initMocks(this)
+ testContext = InstrumentationRegistry.getInstrumentation().context
+
+ uiContext = ActivityContextWrapper(getApplicationContext())
+ uiContext.setTheme(Themes.getActivityThemeRes(uiContext, 0))
+
+ widgetHolder = LauncherWidgetHolder.newInstance(uiContext)
+ widgetHolder.startListening()
+ underTest =
+ ItemInflater(
+ uiContext,
+ widgetHolder,
+ clickListener,
+ focusListener,
+ FrameLayout(uiContext)
+ )
+ }
+
+ @After
+ fun tearDown() {
+ widgetHolder.destroy()
+ }
+
+ @Test
+ fun test_workspace_item_inflated_on_UI() {
+ val itemInfo = workspaceItemInfo()
+ val view =
+ MAIN_EXECUTOR.submit(Callable { underTest.inflateItem(itemInfo, modelWriter) }).get()
+
+ assertTrue(view is BubbleTextView)
+ assertEquals(itemInfo, view!!.tag)
+ }
+
+ @Test
+ fun test_workspace_item_inflated_on_BG() {
+ setFlagsRule.enableFlags(Flags.FLAG_ENABLE_WORKSPACE_INFLATION)
+
+ val itemInfo = workspaceItemInfo()
+ val view =
+ VIEW_PREINFLATION_EXECUTOR.submit(
+ Callable { underTest.inflateItem(itemInfo, modelWriter) }
+ )
+ .get()
+
+ assertTrue(view is BubbleTextView)
+ assertEquals(itemInfo, view!!.tag)
+ }
+
+ @Test
+ fun test_folder_inflated_on_UI() {
+ val itemInfo = FolderInfo()
+ itemInfo.contents.add(workspaceItemInfo())
+ itemInfo.contents.add(workspaceItemInfo())
+ itemInfo.contents.add(workspaceItemInfo())
+
+ val view =
+ MAIN_EXECUTOR.submit(Callable { underTest.inflateItem(itemInfo, modelWriter) }).get()
+
+ assertTrue(view is FolderIcon)
+ assertEquals(itemInfo, view!!.tag)
+ }
+
+ @Test
+ fun test_folder_inflated_on_BG() {
+ setFlagsRule.enableFlags(Flags.FLAG_ENABLE_WORKSPACE_INFLATION)
+
+ val itemInfo = FolderInfo()
+ itemInfo.contents.add(workspaceItemInfo())
+ itemInfo.contents.add(workspaceItemInfo())
+ itemInfo.contents.add(workspaceItemInfo())
+
+ val view =
+ VIEW_PREINFLATION_EXECUTOR.submit(
+ Callable { underTest.inflateItem(itemInfo, modelWriter) }
+ )
+ .get()
+
+ assertTrue(view is FolderIcon)
+ assertEquals(itemInfo, view!!.tag)
+ }
+
+ @Test
+ fun test_app_pair_inflated_on_UI() {
+ val itemInfo = FolderInfo()
+ itemInfo.itemType = ITEM_TYPE_APP_PAIR
+ itemInfo.contents.add(workspaceItemInfo())
+ itemInfo.contents.add(workspaceItemInfo())
+
+ val view =
+ MAIN_EXECUTOR.submit(Callable { underTest.inflateItem(itemInfo, modelWriter) }).get()
+
+ assertTrue(view is AppPairIcon)
+ assertEquals(itemInfo, view!!.tag)
+ }
+
+ @Test
+ fun test_app_pair_inflated_on_BG() {
+ setFlagsRule.enableFlags(Flags.FLAG_ENABLE_WORKSPACE_INFLATION)
+
+ val itemInfo = FolderInfo()
+ itemInfo.itemType = ITEM_TYPE_APP_PAIR
+ itemInfo.contents.add(workspaceItemInfo())
+ itemInfo.contents.add(workspaceItemInfo())
+
+ val view =
+ VIEW_PREINFLATION_EXECUTOR.submit(
+ Callable { underTest.inflateItem(itemInfo, modelWriter) }
+ )
+ .get()
+
+ assertTrue(view is AppPairIcon)
+ assertEquals(itemInfo, view!!.tag)
+ }
+
+ @Test
+ fun test_pending_widget_inflated_on_UI() {
+ val itemInfo = widgetItemInfo(true)
+
+ val view =
+ MAIN_EXECUTOR.submit(Callable { underTest.inflateItem(itemInfo, modelWriter) }).get()
+
+ assertTrue(view is PendingAppWidgetHostView)
+ assertEquals(itemInfo, view!!.tag)
+ }
+
+ @Test
+ fun test_pending_widget_inflated_on_BG() {
+ setFlagsRule.enableFlags(Flags.FLAG_ENABLE_WORKSPACE_INFLATION)
+
+ val itemInfo = widgetItemInfo(true)
+ val view =
+ VIEW_PREINFLATION_EXECUTOR.submit(
+ Callable { underTest.inflateItem(itemInfo, modelWriter) }
+ )
+ .get()
+
+ assertTrue(view is PendingAppWidgetHostView)
+ assertEquals(itemInfo, view!!.tag)
+ }
+
+ @Test
+ fun test_widget_restored_and_inflated_on_UI() {
+ val itemInfo = widgetItemInfo(false)
+
+ val view =
+ MAIN_EXECUTOR.submit(Callable { underTest.inflateItem(itemInfo, modelWriter) }).get()
+
+ // Verify that the widget is automatically restored and a final widget is returned
+ assertTrue(view is LauncherAppWidgetHostView)
+ assertFalse(view is PendingAppWidgetHostView)
+ assertEquals(itemInfo, view!!.tag)
+ assertEquals(RESTORE_COMPLETED, itemInfo.restoreStatus)
+ verify(modelWriter).updateItemInDatabase(same(itemInfo))
+ }
+
+ @Test
+ fun test_widget_restored_and_inflated_on_BG() {
+ setFlagsRule.enableFlags(Flags.FLAG_ENABLE_WORKSPACE_INFLATION)
+ val itemInfo = widgetItemInfo(false)
+
+ val view =
+ VIEW_PREINFLATION_EXECUTOR.submit(
+ Callable { underTest.inflateItem(itemInfo, modelWriter) }
+ )
+ .get()
+
+ // Verify that the widget is automatically restored and a final widget is returned
+ assertTrue(view is LauncherAppWidgetHostView)
+ assertFalse(view is PendingAppWidgetHostView)
+ assertEquals(itemInfo, view!!.tag)
+ assertEquals(RESTORE_COMPLETED, itemInfo.restoreStatus)
+ verify(modelWriter).updateItemInDatabase(same(itemInfo))
+ }
+
+ @Test
+ fun test_invalid_widget_deleted() {
+ val itemInfo =
+ widgetItemInfo(false).apply {
+ providerName = ComponentName(providerName.packageName, "invalid_provider_name")
+ }
+ val view =
+ MAIN_EXECUTOR.submit(Callable { underTest.inflateItem(itemInfo, modelWriter) }).get()
+ assertNull(view)
+ verify(modelWriter).deleteItemFromDatabase(same(itemInfo), any())
+ }
+
+ @Test
+ fun test_normal_widget_inflated_UI() {
+ val providerInfo = TestViewHelpers.findWidgetProvider(false)
+ val id = widgetHolder.allocateAppWidgetId()
+ assertTrue(
+ WidgetManagerHelper(uiContext).bindAppWidgetIdIfAllowed(id, providerInfo, Bundle())
+ )
+ val itemInfo = LauncherAppWidgetInfo(id, providerInfo.provider)
+ itemInfo.spanX = 2
+ itemInfo.spanY = 2
+
+ val view =
+ MAIN_EXECUTOR.submit(Callable { underTest.inflateItem(itemInfo, modelWriter) }).get()
+
+ // Verify that the widget is automatically restored and a final widget is returned
+ assertTrue(view is LauncherAppWidgetHostView)
+ assertFalse(view is PendingAppWidgetHostView)
+ assertEquals(itemInfo, view!!.tag)
+ verifyNoMoreInteractions(modelWriter)
+ }
+
+ private fun workspaceItemInfo() =
+ AppInfo(
+ uiContext,
+ uiContext
+ .getSystemService(LauncherApps::class.java)!!
+ .getActivityList(testContext.packageName, Process.myUserHandle())[0],
+ Process.myUserHandle()
+ )
+ .makeWorkspaceItem(uiContext)
+
+ private fun widgetItemInfo(hasConfig: Boolean) =
+ LauncherAppWidgetInfo(0, TestViewHelpers.findWidgetProvider(hasConfig).component).apply {
+ spanX = 2
+ spanY = 2
+ restoreStatus = FLAG_ID_NOT_VALID or FLAG_UI_NOT_READY
+ }
+}