Merge "Migrate materialColor* attributes into colors" into main
diff --git a/protos/launcher_atom.proto b/protos/launcher_atom.proto
index 823c821..ce99348 100644
--- a/protos/launcher_atom.proto
+++ b/protos/launcher_atom.proto
@@ -33,6 +33,7 @@
FolderIcon folder_icon = 9;
Slice slice = 10;
SearchActionItem search_action_item = 11;
+ TaskView task_view = 15;
}
// When used for launch event, stores the global predictive rank
optional int32 rank = 5;
@@ -262,6 +263,21 @@
optional int32 index = 3;
}
+// TaskView in RecentsView.
+message TaskView {
+ // TaskViewType.
+ optional int32 type = 1;
+
+ // Index of TaskView in RecentsView.
+ optional int32 index = 2;
+
+ // ComponentName of the Task.
+ optional string component_name = 3;
+
+ // Number of tasks in the TaskView.
+ optional int32 cardinality = 4;
+}
+
// Represents folder in a closed state.
message FolderIcon {
// Number of items inside folder.
diff --git a/quickstep/res/values-tr/strings.xml b/quickstep/res/values-tr/strings.xml
index c50c1f8..6a0b78f 100644
--- a/quickstep/res/values-tr/strings.xml
+++ b/quickstep/res/values-tr/strings.xml
@@ -89,7 +89,7 @@
<string name="gesture_tutorial_try_again" msgid="65962545858556697">"Tekrar deneyin"</string>
<string name="gesture_tutorial_nice" msgid="2936275692616928280">"Güzel!"</string>
<string name="gesture_tutorial_step" msgid="1279786122817620968">"Eğitim <xliff:g id="CURRENT">%1$d</xliff:g>/<xliff:g id="TOTAL">%2$d</xliff:g>"</string>
- <string name="allset_title" msgid="5021126669778966707">"İşlem tamam!"</string>
+ <string name="allset_title" msgid="5021126669778966707">"Kurulum tamamlandı"</string>
<string name="allset_hint" msgid="459504134589971527">"Ana ekrana gitmek için yukarı kaydırın"</string>
<string name="allset_button_hint" msgid="2395219947744706291">"Ana ekranınıza gitmek için ana sayfa düğmesine dokunun"</string>
<string name="allset_description_generic" msgid="5385500062202019855">"<xliff:g id="DEVICE">%1$s</xliff:g> adlı cihazınızı kullanmaya hazırsınız"</string>
diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
index e624be7..7d193aa 100644
--- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
+++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
@@ -19,6 +19,7 @@
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
+import static android.app.role.RoleManager.ROLE_HOME;
import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING;
import static android.view.RemoteAnimationTarget.MODE_CLOSING;
import static android.view.RemoteAnimationTarget.MODE_OPENING;
@@ -74,6 +75,7 @@
import android.animation.ValueAnimator;
import android.app.ActivityOptions;
import android.app.WindowConfiguration;
+import android.app.role.RoleManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.res.Resources;
@@ -1194,7 +1196,9 @@
.registerRemoteTransition(mLauncherOpenTransition, homeCheck);
if (mBackAnimationController != null) {
mBackAnimationController.registerComponentCallbacks();
- mBackAnimationController.registerBackCallbacks(mHandler);
+ if (isHomeRoleHeld()) {
+ mBackAnimationController.registerBackCallbacks(mHandler);
+ }
}
}
@@ -1207,6 +1211,22 @@
.unregisterContentObserver(mAnimationRemovalObserver));
}
+ /**
+ * Called when the overview-target changes. Updates the back callback registration state.
+ */
+ public void onOverviewTargetChange() {
+ if (isHomeRoleHeld()) {
+ mBackAnimationController.registerBackCallbacks(mHandler);
+ } else {
+ mBackAnimationController.unregisterBackCallbacks();
+ }
+ }
+
+ private boolean isHomeRoleHeld() {
+ RoleManager roleManager = mLauncher.getSystemService(RoleManager.class);
+ return roleManager == null || roleManager.isRoleHeld(ROLE_HOME);
+ }
+
private void unregisterRemoteAnimations() {
if (SEPARATE_RECENTS_ACTIVITY.get()) {
return;
diff --git a/quickstep/src/com/android/launcher3/model/data/TaskViewItemInfo.kt b/quickstep/src/com/android/launcher3/model/data/TaskViewItemInfo.kt
new file mode 100644
index 0000000..ee28d7a
--- /dev/null
+++ b/quickstep/src/com/android/launcher3/model/data/TaskViewItemInfo.kt
@@ -0,0 +1,80 @@
+/*
+ * 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.data
+
+import android.content.Context
+import android.content.Intent
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.VisibleForTesting.Companion.PRIVATE
+import com.android.launcher3.Flags.privateSpaceRestrictAccessibilityDrag
+import com.android.launcher3.LauncherSettings
+import com.android.launcher3.logger.LauncherAtom
+import com.android.launcher3.pm.UserCache
+import com.android.quickstep.TaskUtils
+import com.android.quickstep.views.TaskContainer
+
+class TaskViewItemInfo(taskContainer: TaskContainer) : WorkspaceItemInfo() {
+ @VisibleForTesting(otherwise = PRIVATE) val taskViewAtom: LauncherAtom.TaskView
+
+ init {
+ itemType = LauncherSettings.Favorites.ITEM_TYPE_TASK
+ container = LauncherSettings.Favorites.CONTAINER_TASKSWITCHER
+ val componentKey = TaskUtils.getLaunchComponentKeyForTask(taskContainer.task.key)
+ user = componentKey.user
+ intent = Intent().setComponent(componentKey.componentName)
+ title = taskContainer.task.title
+ if (privateSpaceRestrictAccessibilityDrag()) {
+ if (
+ UserCache.getInstance(taskContainer.taskView.context)
+ .getUserInfo(componentKey.user)
+ .isPrivate
+ ) {
+ runtimeStatusFlags = runtimeStatusFlags or ItemInfoWithIcon.FLAG_NOT_PINNABLE
+ }
+ }
+
+ taskViewAtom =
+ createTaskViewAtom(
+ type = taskContainer.taskView.type.ordinal,
+ index =
+ taskContainer.taskView.recentsView?.indexOfChild(taskContainer.taskView) ?: -1,
+ componentName = componentKey.componentName.flattenToShortString(),
+ cardinality = taskContainer.taskView.taskContainers.size,
+ )
+ }
+
+ override fun buildProto(cInfo: CollectionInfo?, context: Context): LauncherAtom.ItemInfo =
+ super.buildProto(cInfo, context).toBuilder().setTaskView(taskViewAtom).build()
+
+ companion object {
+ @VisibleForTesting(otherwise = PRIVATE)
+ fun createTaskViewAtom(
+ type: Int,
+ index: Int,
+ componentName: String,
+ cardinality: Int,
+ ): LauncherAtom.TaskView =
+ LauncherAtom.TaskView.newBuilder()
+ .apply {
+ this.type = type
+ this.index = index
+ this.componentName = componentName
+ this.cardinality = cardinality
+ }
+ .build()
+ }
+}
diff --git a/quickstep/src/com/android/launcher3/taskbar/ManageWindowsTaskbarShortcut.kt b/quickstep/src/com/android/launcher3/taskbar/ManageWindowsTaskbarShortcut.kt
index bd3357d..8d1f4f5 100644
--- a/quickstep/src/com/android/launcher3/taskbar/ManageWindowsTaskbarShortcut.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/ManageWindowsTaskbarShortcut.kt
@@ -34,7 +34,7 @@
import com.android.quickstep.SystemUiProxy
import com.android.quickstep.util.GroupTask
import com.android.systemui.shared.recents.model.ThumbnailData
-import com.android.wm.shell.shared.desktopmode.ManageWindowsViewContainer
+import com.android.wm.shell.shared.multiinstance.ManageWindowsViewContainer
import java.util.Collections
import java.util.function.Predicate
@@ -46,7 +46,7 @@
class ManageWindowsTaskbarShortcut<T>(
private val target: T,
private val itemInfo: ItemInfo?,
- private val originalView: View?,
+ private val originalView: View,
private val controllers: TaskbarControllers,
) :
SystemShortcut<T>(
@@ -123,13 +123,29 @@
taskbarShortcutAllWindowsView =
TaskbarShortcutManageWindowsView(
- originalView!!,
+ originalView,
controllers.taskbarOverlayController.requestWindow(),
taskList,
onIconClickListener,
onOutsideClickListener,
controllers,
)
+
+ // If the view is removed from elsewhere, reset the state to allow the taskbar to auto-stash
+ taskbarShortcutAllWindowsView.menuView.rootView.addOnAttachStateChangeListener(
+ object : View.OnAttachStateChangeListener {
+ override fun onViewAttachedToWindow(v: View) {
+ return
+ }
+
+ override fun onViewDetachedFromWindow(v: View) {
+ controllers.taskbarAutohideSuspendController.updateFlag(
+ FLAG_AUTOHIDE_SUSPEND_MULTI_INSTANCE_MENU_OPEN,
+ false,
+ )
+ }
+ }
+ )
}
/**
@@ -160,7 +176,7 @@
/** Adds the carousel menu to the taskbar overlay drag layer */
override fun addToContainer(menuView: ManageWindowsView) {
- taskbarOverlayContext.dragLayer.post { positionCarouselMenu() }
+ positionCarouselMenu()
controllers.taskbarAutohideSuspendController.updateFlag(
FLAG_AUTOHIDE_SUSPEND_MULTI_INSTANCE_MENU_OPEN,
@@ -184,28 +200,28 @@
* align with the calling app while ensuring it doesn't go beyond the screen edge.
*/
private fun positionCarouselMenu() {
+ val deviceProfile = taskbarActivityContext.deviceProfile
val margin =
context.resources.getDimension(
R.dimen.taskbar_multi_instance_menu_min_padding_from_screen_edge
)
// Calculate the Y position to place the carousel above the taskbar
- val availableHeight = taskbarOverlayContext.dragLayer.height
menuView.rootView.y =
- availableHeight -
+ deviceProfile.availableHeightPx -
menuView.menuHeight -
controllers.taskbarStashController.touchableHeight -
margin
// Calculate the X position to align with the calling app,
// but avoid clashing with the screen edge
- val availableWidth = taskbarOverlayContext.dragLayer.width
- if (Utilities.isRtl(context.resources)) {
- menuView.rootView.translationX = -(availableWidth - menuView.menuWidth) / 2f
- } else {
- val maxX = availableWidth - menuView.menuWidth - margin
- menuView.rootView.translationX = minOf(originalView.x, maxX)
- }
+ menuView.rootView.translationX =
+ if (Utilities.isRtl(context.resources)) {
+ -(deviceProfile.availableWidthPx - menuView.menuWidth) / 2f
+ } else {
+ val maxX = deviceProfile.availableWidthPx - menuView.menuWidth - margin
+ minOf(originalView.x, maxX)
+ }
}
/** Closes the carousel menu and removes it from the taskbar overlay drag layer */
@@ -214,7 +230,6 @@
FLAG_AUTOHIDE_SUSPEND_MULTI_INSTANCE_MENU_OPEN,
false,
)
- controllers.taskbarStashController.updateAndAnimateTransientTaskbar(true)
taskbarOverlayContext.dragLayer?.removeView(menuView.rootView)
taskbarOverlayContext.dragLayer.removeTouchController(this)
}
@@ -227,8 +242,8 @@
override fun onControllerInterceptTouchEvent(ev: MotionEvent?): Boolean {
ev?.let {
if (
- ev.action == MotionEvent.ACTION_DOWN &&
- !taskbarOverlayContext.dragLayer.isEventOverView(menuView.rootView, ev)
+ it.action == MotionEvent.ACTION_DOWN &&
+ !taskbarOverlayContext.dragLayer.isEventOverView(menuView.rootView, it)
) {
removeFromContainer()
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
index f9e7cf0..f346e19 100644
--- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
@@ -66,6 +66,7 @@
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.Region.Op;
import android.graphics.drawable.Drawable;
@@ -75,6 +76,7 @@
import android.os.Handler;
import android.util.Property;
import android.view.Gravity;
+import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
@@ -862,15 +864,21 @@
private void setBackButtonTouchListener(View buttonView,
TaskbarNavButtonController navButtonController) {
+ final RectF rect = new RectF();
buttonView.setOnTouchListener((v, event) -> {
- if (event.getAction() == MotionEvent.ACTION_MOVE) return false;
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ rect.set(0, 0, v.getWidth(), v.getHeight());
+ }
+ boolean isCancelled = event.getAction() == MotionEvent.ACTION_CANCEL
+ || !rect.contains(event.getX(), event.getY());
+ if (event.getAction() == MotionEvent.ACTION_MOVE && !isCancelled) return false;
int motionEventAction = event.getAction();
int keyEventAction = motionEventAction == MotionEvent.ACTION_DOWN
? KeyEvent.ACTION_DOWN : ACTION_UP;
- boolean isCancelled = event.getAction() == MotionEvent.ACTION_CANCEL;
navButtonController.sendBackKeyEvent(keyEventAction, isCancelled);
- if (motionEventAction == MotionEvent.ACTION_UP) {
+ if (motionEventAction == MotionEvent.ACTION_UP && !isCancelled) {
buttonView.performClick();
+ buttonView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
return false;
});
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
index f33666a..2db7961 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
@@ -40,6 +40,7 @@
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
+import android.content.Context;
import android.os.SystemClock;
import android.util.Log;
import android.view.animation.Interpolator;
@@ -581,7 +582,7 @@
float backgroundAlpha = isInLauncher && isTaskbarAlignedWithHotseat() ? 0 : 1;
AnimatedFloat taskbarBgOffset =
mControllers.taskbarDragLayerController.getTaskbarBackgroundOffset();
- boolean showTaskbar = !isInLauncher || isInOverview;
+ boolean showTaskbar = shouldShowTaskbar(mLauncher, isInLauncher, isInOverview);
float taskbarBgOffsetEnd = showTaskbar ? 0f : 1f;
float taskbarBgOffsetStart = showTaskbar ? 1f : 0f;
@@ -714,6 +715,14 @@
return animatorSet;
}
+ private static boolean shouldShowTaskbar(Context context, boolean isInLauncher,
+ boolean isInOverview) {
+ if (DisplayController.showLockedTaskbarOnHome(context) && isInLauncher) {
+ return true;
+ }
+ return !isInLauncher || isInOverview;
+ }
+
private void setupPinnedTaskbarAnimation(AnimatorSet animatorSet, boolean showTaskbar,
AnimatedFloat taskbarBgOffset, float taskbarBgOffsetStart, float taskbarBgOffsetEnd,
long duration, Animator taskbarBackgroundAlpha) {
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
index 7ab9ef3..4498fea 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
@@ -46,6 +46,7 @@
import android.os.Trace;
import android.provider.Settings;
import android.util.Log;
+import android.util.SparseArray;
import android.view.Display;
import android.view.MotionEvent;
import android.view.WindowManager;
@@ -115,13 +116,12 @@
private final Context mContext;
private final @Nullable Context mNavigationBarPanelContext;
private WindowManager mWindowManager;
- private FrameLayout mTaskbarRootLayout;
private boolean mAddedWindow;
- private final TaskbarNavButtonController mNavButtonController;
- private final ComponentCallbacks mComponentCallbacks;
+ private final TaskbarNavButtonController mDefaultNavButtonController;
+ private final ComponentCallbacks mDefaultComponentCallbacks;
private final SimpleBroadcastReceiver mShutdownReceiver =
- new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, i -> destroyExistingTaskbar());
+ new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, i -> destroyAllTaskbars());
// The source for this provider is set when Launcher is available
// We use 'non-destroyable' version here so the original provider won't be destroyed
@@ -129,8 +129,10 @@
// It's destruction/creation will be managed by the activity.
private final ScopedUnfoldTransitionProgressProvider mUnfoldProgressProvider =
new NonDestroyableScopedUnfoldTransitionProgressProvider();
-
- private TaskbarActivityContext mTaskbarActivityContext;
+ /** DisplayId - {@link TaskbarActivityContext} map for Connected Display. */
+ private final SparseArray<TaskbarActivityContext> mTaskbars = new SparseArray<>();
+ /** DisplayId - {@link FrameLayout} map for Connected Display. */
+ private final SparseArray<FrameLayout> mRootLayouts = new SparseArray<>();
private StatefulActivity mActivity;
private RecentsViewContainer mRecentsViewContainer;
@@ -167,7 +169,9 @@
private final Runnable mActivityOnDestroyCallback = new Runnable() {
@Override
public void run() {
+ int displayId = getDefaultDisplayId();
if (mActivity != null) {
+ displayId = mActivity.getDisplayId();
mActivity.removeOnDeviceProfileChangeListener(
mDebugActivityDeviceProfileChanged);
Log.d(TASKBAR_NOT_DESTROYED_TAG,
@@ -180,8 +184,9 @@
}
mActivity = null;
debugWhyTaskbarNotDestroyed("clearActivity");
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.setUIController(TaskbarUIController.DEFAULT);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (taskbar != null) {
+ taskbar.setUIController(TaskbarUIController.DEFAULT);
}
mUnfoldProgressProvider.setSourceProvider(null);
}
@@ -236,27 +241,28 @@
mDesktopVisibilityController = desktopVisibilityController;
if (enableTaskbarNoRecreate()) {
mWindowManager = mContext.getSystemService(WindowManager.class);
- mTaskbarRootLayout = new FrameLayout(mContext) {
+ FrameLayout taskbarRootLayout = new FrameLayout(mContext) {
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// The motion events can be outside the view bounds of task bar, and hence
// manually dispatching them to the drag layer here.
- if (mTaskbarActivityContext != null
- && mTaskbarActivityContext.getDragLayer().isAttachedToWindow()) {
- return mTaskbarActivityContext.getDragLayer().dispatchTouchEvent(ev);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar != null && taskbar.getDragLayer().isAttachedToWindow()) {
+ return taskbar.getDragLayer().dispatchTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);
}
};
+ addTaskbarRootLayoutToMap(getDefaultDisplayId(), taskbarRootLayout);
}
- mNavButtonController = new TaskbarNavButtonController(
+ mDefaultNavButtonController = new TaskbarNavButtonController(
context,
navCallbacks,
SystemUiProxy.INSTANCE.get(mContext),
ContextualEduStatsManager.INSTANCE.get(mContext),
new Handler(),
ContextualSearchInvoker.newInstance(mContext));
- mComponentCallbacks = new ComponentCallbacks() {
+ mDefaultComponentCallbacks = new ComponentCallbacks() {
private Configuration mOldConfig = mContext.getResources().getConfiguration();
@Override
@@ -265,6 +271,7 @@
"onConfigurationChanged: " + newConfig);
debugWhyTaskbarNotDestroyed(
"TaskbarManager#mComponentCallbacks.onConfigurationChanged: " + newConfig);
+ // TODO: adapt this logic to be specific to different displays.
DeviceProfile dp = mUserUnlocked
? LauncherAppState.getIDP(mContext).getDeviceProfile(mContext)
: null;
@@ -281,12 +288,12 @@
debugWhyTaskbarNotDestroyed("ComponentCallbacks#onConfigurationChanged() "
+ "configDiff=" + Configuration.configurationDiffToString(configDiff));
- if (configDiff != 0 || mTaskbarActivityContext == null) {
+ if (configDiff != 0 || getCurrentActivityContext() == null) {
recreateTaskbar();
} else {
// Config change might be handled without re-creating the taskbar
if (dp != null && !isTaskbarEnabled(dp)) {
- destroyExistingTaskbar();
+ destroyDefaultTaskbar();
} else {
if (dp != null && isTaskbarEnabled(dp)) {
if (ENABLE_TASKBAR_NAVBAR_UNIFICATION) {
@@ -295,10 +302,10 @@
// block above?
recreateTaskbar();
} else {
- mTaskbarActivityContext.updateDeviceProfile(dp);
+ getCurrentActivityContext().updateDeviceProfile(dp);
}
}
- mTaskbarActivityContext.onConfigurationChanged(configDiff);
+ getCurrentActivityContext().onConfigurationChanged(configDiff);
}
}
mOldConfig = new Configuration(newConfig);
@@ -315,7 +322,7 @@
SettingsCache.INSTANCE.get(mContext)
.register(NAV_BAR_KIDS_MODE, mOnSettingsChangeListener);
Log.d(TASKBAR_NOT_DESTROYED_TAG, "registering component callbacks from constructor.");
- mContext.registerComponentCallbacks(mComponentCallbacks);
+ mContext.registerComponentCallbacks(mDefaultComponentCallbacks);
mShutdownReceiver.register(mContext, Intent.ACTION_SHUTDOWN);
UI_HELPER_EXECUTOR.execute(() -> {
mSharedState.taskbarSystemActionPendingIntent = PendingIntent.getBroadcast(
@@ -331,18 +338,31 @@
recreateTaskbar();
}
- private void destroyExistingTaskbar() {
- debugWhyTaskbarNotDestroyed("destroyExistingTaskbar: " + mTaskbarActivityContext);
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.onDestroy();
- if (!ENABLE_TASKBAR_NAVBAR_UNIFICATION || enableTaskbarNoRecreate()) {
- mTaskbarActivityContext = null;
- }
+ private void destroyAllTaskbars() {
+ for (int i = 0; i < mTaskbars.size(); i++) {
+ int displayId = mTaskbars.keyAt(i);
+ destroyTaskbarForDisplay(displayId);
+ removeTaskbarRootViewFromWindow(displayId);
+ }
+ }
+
+ private void destroyDefaultTaskbar() {
+ destroyTaskbarForDisplay(getDefaultDisplayId());
+ }
+
+ private void destroyTaskbarForDisplay(int displayId) {
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ debugWhyTaskbarNotDestroyed(
+ "destroyTaskbarForDisplay: " + taskbar + " displayId=" + displayId);
+ if (taskbar != null) {
+ taskbar.onDestroy();
+ // remove all defaults that we store
+ removeTaskbarFromMap(displayId);
}
DeviceProfile dp = mUserUnlocked ?
LauncherAppState.getIDP(mContext).getDeviceProfile(mContext) : null;
if (dp == null || !isTaskbarEnabled(dp)) {
- removeTaskbarRootViewFromWindow();
+ removeTaskbarRootViewFromWindow(displayId);
}
}
@@ -350,8 +370,10 @@
* Show Taskbar upon receiving broadcast
*/
private void showTaskbarFromBroadcast(Intent intent) {
- if (ACTION_SHOW_TASKBAR.equals(intent.getAction()) && mTaskbarActivityContext != null) {
- mTaskbarActivityContext.showTaskbarFromBroadcast();
+ // TODO: make this code displayId specific
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (ACTION_SHOW_TASKBAR.equals(intent.getAction()) && taskbar != null) {
+ taskbar.showTaskbarFromBroadcast();
}
}
@@ -359,12 +381,13 @@
* Toggles All Apps for Taskbar or Launcher depending on the current state.
*/
public void toggleAllApps() {
- if (mTaskbarActivityContext == null || mTaskbarActivityContext.canToggleHomeAllApps()) {
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar == null || taskbar.canToggleHomeAllApps()) {
// Home All Apps should be toggled from this class, because the controllers are not
// initialized when Taskbar is disabled (i.e. TaskbarActivityContext is null).
if (mActivity instanceof Launcher l) l.toggleAllAppsSearch();
} else {
- mTaskbarActivityContext.toggleAllAppsSearch();
+ taskbar.toggleAllAppsSearch();
}
}
@@ -375,8 +398,8 @@
* progress.
*/
public AnimatorPlaybackController createLauncherStartFromSuwAnim(int duration) {
- return mTaskbarActivityContext == null
- ? null : mTaskbarActivityContext.createLauncherStartFromSuwAnim(duration);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ return taskbar == null ? null : taskbar.createLauncherStartFromSuwAnim(duration);
}
/**
@@ -386,7 +409,7 @@
mUserUnlocked = true;
DisplayController.INSTANCE.get(mContext).addChangeListener(mRecreationListener);
recreateTaskbar();
- addTaskbarRootViewToWindow();
+ addTaskbarRootViewToWindow(getDefaultDisplayId());
}
/**
@@ -429,8 +452,9 @@
mActivityOnDestroyCallback.run();
}
mRecentsViewContainer = recentsViewContainer;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.setUIController(
+ TaskbarActivityContext taskbar = getCurrentActivityContext();
+ if (taskbar != null) {
+ taskbar.setUIController(
createTaskbarUIControllerForRecentsViewContainer(mRecentsViewContainer));
}
}
@@ -472,11 +496,21 @@
/**
* This method is called multiple times (ex. initial init, then when user unlocks) in which case
- * we fully want to destroy an existing taskbar and create a new one.
+ * we fully want to destroy the existing default display's taskbar and create a new one.
* In other case (folding/unfolding) we don't need to remove and add window.
*/
@VisibleForTesting
public synchronized void recreateTaskbar() {
+ // TODO: make this recreate all taskbars in map.
+ recreateTaskbarForDisplay(getDefaultDisplayId());
+ }
+
+ /**
+ * This method is called multiple times (ex. initial init, then when user unlocks) in which case
+ * we fully want to destroy an existing taskbar for a specified display and create a new one.
+ * In other case (folding/unfolding) we don't need to remove and add window.
+ */
+ private void recreateTaskbarForDisplay(int displayId) {
Trace.beginSection("recreateTaskbar");
try {
DeviceProfile dp = mUserUnlocked ?
@@ -486,7 +520,7 @@
final boolean isLargeScreenTaskbar = dp != null && dp.isTaskbarPresent;
mAllAppsActionManager.setTaskbarPresent(isLargeScreenTaskbar);
- destroyExistingTaskbar();
+ destroyTaskbarForDisplay(displayId);
boolean isTaskbarEnabled = dp != null && isTaskbarEnabled(dp);
debugWhyTaskbarNotDestroyed("recreateTaskbar: isTaskbarEnabled=" + isTaskbarEnabled
@@ -501,29 +535,32 @@
}
}
- if (enableTaskbarNoRecreate() || mTaskbarActivityContext == null) {
- mTaskbarActivityContext = new TaskbarActivityContext(mContext,
- mNavigationBarPanelContext, dp, mNavButtonController,
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (enableTaskbarNoRecreate() || taskbar == null) {
+ taskbar = new TaskbarActivityContext(mContext,
+ mNavigationBarPanelContext, dp, mDefaultNavButtonController,
mUnfoldProgressProvider, mDesktopVisibilityController);
} else {
- mTaskbarActivityContext.updateDeviceProfile(dp);
+ taskbar.updateDeviceProfile(dp);
}
mSharedState.startTaskbarVariantIsTransient =
- DisplayController.isTransientTaskbar(mTaskbarActivityContext);
+ DisplayController.isTransientTaskbar(taskbar);
mSharedState.allAppsVisible = mSharedState.allAppsVisible && isLargeScreenTaskbar;
- mTaskbarActivityContext.init(mSharedState);
+ taskbar.init(mSharedState);
if (mRecentsViewContainer != null) {
- mTaskbarActivityContext.setUIController(
+ taskbar.setUIController(
createTaskbarUIControllerForRecentsViewContainer(mRecentsViewContainer));
}
if (enableTaskbarNoRecreate()) {
- addTaskbarRootViewToWindow();
- mTaskbarRootLayout.removeAllViews();
- mTaskbarRootLayout.addView(mTaskbarActivityContext.getDragLayer());
- mTaskbarActivityContext.notifyUpdateLayoutParams();
+ addTaskbarRootViewToWindow(displayId);
+ FrameLayout taskbarRootLayout = getTaskbarRootLayoutForDisplay(displayId);
+ taskbarRootLayout.removeAllViews();
+ taskbarRootLayout.addView(taskbar.getDragLayer());
+ taskbar.notifyUpdateLayoutParams();
}
+ addTaskbarToMap(displayId, taskbar);
} finally {
Trace.endSection();
}
@@ -535,14 +572,15 @@
mSharedState.sysuiStateFlags, QuickStepContract::getSystemUiStateString));
}
mSharedState.sysuiStateFlags = systemUiStateFlags;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.updateSysuiStateFlags(systemUiStateFlags, false /* fromInit */);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar != null) {
+ taskbar.updateSysuiStateFlags(systemUiStateFlags, false /* fromInit */);
}
}
public void onLongPressHomeEnabled(boolean assistantLongPressEnabled) {
- if (mNavButtonController != null) {
- mNavButtonController.setAssistantLongPressEnabled(assistantLongPressEnabled);
+ if (mDefaultNavButtonController != null) {
+ mDefaultNavButtonController.setAssistantLongPressEnabled(assistantLongPressEnabled);
}
}
@@ -551,46 +589,53 @@
*/
public void setSetupUIVisible(boolean isVisible) {
mSharedState.setupUIVisible = isVisible;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.setSetupUIVisible(isVisible);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar != null) {
+ taskbar.setSetupUIVisible(isVisible);
}
}
public void setWallpaperVisible(boolean isVisible) {
mSharedState.wallpaperVisible = isVisible;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.setWallpaperVisible(isVisible);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar != null) {
+ taskbar.setWallpaperVisible(isVisible);
}
}
public void checkNavBarModes(int displayId) {
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.checkNavBarModes();
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (taskbar != null) {
+ taskbar.checkNavBarModes();
}
}
public void finishBarAnimations(int displayId) {
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.finishBarAnimations();
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (taskbar != null) {
+ taskbar.finishBarAnimations();
}
}
public void touchAutoDim(int displayId, boolean reset) {
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.touchAutoDim(reset);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (taskbar != null) {
+ taskbar.touchAutoDim(reset);
}
}
public void transitionTo(int displayId, @BarTransitions.TransitionMode int barMode,
boolean animate) {
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.transitionTo(barMode, animate);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (taskbar != null) {
+ taskbar.transitionTo(barMode, animate);
}
}
public void appTransitionPending(boolean pending) {
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.appTransitionPending(pending);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar != null) {
+ taskbar.appTransitionPending(pending);
}
}
@@ -599,8 +644,9 @@
}
public void onRotationProposal(int rotation, boolean isValid) {
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.onRotationProposal(rotation, isValid);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar != null) {
+ taskbar.onRotationProposal(rotation, isValid);
}
}
@@ -608,38 +654,43 @@
mSharedState.disableNavBarDisplayId = displayId;
mSharedState.disableNavBarState1 = state1;
mSharedState.disableNavBarState2 = state2;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.disableNavBarElements(displayId, state1, state2, animate);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (taskbar != null) {
+ taskbar.disableNavBarElements(displayId, state1, state2, animate);
}
}
public void onSystemBarAttributesChanged(int displayId, int behavior) {
mSharedState.systemBarAttrsDisplayId = displayId;
mSharedState.systemBarAttrsBehavior = behavior;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.onSystemBarAttributesChanged(displayId, behavior);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (taskbar != null) {
+ taskbar.onSystemBarAttributesChanged(displayId, behavior);
}
}
public void onTransitionModeUpdated(int barMode, boolean checkBarModes) {
mSharedState.barMode = barMode;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.onTransitionModeUpdated(barMode, checkBarModes);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar != null) {
+ taskbar.onTransitionModeUpdated(barMode, checkBarModes);
}
}
public void onNavButtonsDarkIntensityChanged(float darkIntensity) {
mSharedState.navButtonsDarkIntensity = darkIntensity;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.onNavButtonsDarkIntensityChanged(darkIntensity);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar != null) {
+ taskbar.onNavButtonsDarkIntensityChanged(darkIntensity);
}
}
public void onNavigationBarLumaSamplingEnabled(int displayId, boolean enable) {
mSharedState.mLumaSamplingDisplayId = displayId;
mSharedState.mIsLumaSamplingEnabled = enable;
- if (mTaskbarActivityContext != null) {
- mTaskbarActivityContext.onNavigationBarLumaSamplingEnabled(displayId, enable);
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (taskbar != null) {
+ taskbar.onNavigationBarLumaSamplingEnabled(displayId, enable);
}
}
@@ -666,8 +717,7 @@
debugWhyTaskbarNotDestroyed("TaskbarManager#destroy()");
removeActivityCallbacksAndListeners();
mTaskbarBroadcastReceiver.unregisterReceiverSafely(mContext);
- destroyExistingTaskbar();
- removeTaskbarRootViewFromWindow();
+ destroyAllTaskbars();
if (mUserUnlocked) {
DisplayController.INSTANCE.get(mContext).removeChangeListener(mRecreationListener);
}
@@ -676,38 +726,112 @@
SettingsCache.INSTANCE.get(mContext)
.unregister(NAV_BAR_KIDS_MODE, mOnSettingsChangeListener);
Log.d(TASKBAR_NOT_DESTROYED_TAG, "unregistering component callbacks from destroy().");
- mContext.unregisterComponentCallbacks(mComponentCallbacks);
+ mContext.unregisterComponentCallbacks(mDefaultComponentCallbacks);
mShutdownReceiver.unregisterReceiverSafely(mContext);
}
public @Nullable TaskbarActivityContext getCurrentActivityContext() {
- return mTaskbarActivityContext;
+ return getTaskbarForDisplay(mContext.getDisplayId());
}
public void dumpLogs(String prefix, PrintWriter pw) {
pw.println(prefix + "TaskbarManager:");
- if (mTaskbarActivityContext == null) {
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId());
+ if (taskbar == null) {
pw.println(prefix + "\tTaskbarActivityContext: null");
} else {
- mTaskbarActivityContext.dumpLogs(prefix + "\t", pw);
+ taskbar.dumpLogs(prefix + "\t", pw);
}
}
- private void addTaskbarRootViewToWindow() {
- if (enableTaskbarNoRecreate() && !mAddedWindow && mTaskbarActivityContext != null) {
- mWindowManager.addView(mTaskbarRootLayout,
- mTaskbarActivityContext.getWindowLayoutParams());
+ private void addTaskbarRootViewToWindow(int displayId) {
+ TaskbarActivityContext taskbar = getTaskbarForDisplay(displayId);
+ if (enableTaskbarNoRecreate() && !mAddedWindow && taskbar != null) {
+ mWindowManager.addView(getTaskbarRootLayoutForDisplay(displayId),
+ taskbar.getWindowLayoutParams());
mAddedWindow = true;
}
}
- private void removeTaskbarRootViewFromWindow() {
- if (enableTaskbarNoRecreate() && mAddedWindow) {
- mWindowManager.removeViewImmediate(mTaskbarRootLayout);
+ private void removeTaskbarRootViewFromWindow(int displayId) {
+ FrameLayout rootLayout = getTaskbarRootLayoutForDisplay(displayId);
+ if (enableTaskbarNoRecreate() && mAddedWindow && rootLayout != null) {
+ mWindowManager.removeViewImmediate(rootLayout);
mAddedWindow = false;
+ removeTaskbarRootLayoutFromMap(displayId);
}
}
+ /**
+ * Returns the {@link TaskbarActivityContext} associated with the given display ID.
+ *
+ * @param displayId The ID of the display to retrieve the taskbar for.
+ * @return The {@link TaskbarActivityContext} for the specified display, or
+ * {@code null} if no taskbar is associated with that display.
+ */
+ private TaskbarActivityContext getTaskbarForDisplay(int displayId) {
+ return mTaskbars.get(displayId);
+ }
+
+ /**
+ * Adds the {@link TaskbarActivityContext} associated with the given display ID to taskbar
+ * map if there is not already a taskbar mapped to that displayId.
+ *
+ * @param displayId The ID of the display to retrieve the taskbar for.
+ * @param newTaskbar The new {@link TaskbarActivityContext} to add to the map.
+ */
+ private void addTaskbarToMap(int displayId, TaskbarActivityContext newTaskbar) {
+ if (!mTaskbars.contains(displayId)) {
+ mTaskbars.put(displayId, newTaskbar);
+ }
+ }
+
+ /**
+ * Removes the taskbar associated with the given display ID from the taskbar map.
+ *
+ * @param displayId The ID of the display for which to remove the taskbar.
+ */
+ private void removeTaskbarFromMap(int displayId) {
+ mTaskbars.delete(displayId);
+ }
+
+ /**
+ * Retrieves the root layout of the taskbar for the specified display.
+ *
+ * @param displayId The ID of the display for which to retrieve the taskbar root layout.
+ * @return The taskbar root layout {@link FrameLayout} for a given display or {@code null}.
+ */
+ private FrameLayout getTaskbarRootLayoutForDisplay(int displayId) {
+ return mRootLayouts.get(displayId);
+ }
+
+ /**
+ * Adds the taskbar root layout {@link FrameLayout} to taskbar map, mapped to display ID.
+ *
+ * @param displayId The ID of the display to associate with the taskbar root layout.
+ * @param rootLayout The taskbar root layout {@link FrameLayout} to add to the map.
+ */
+ private void addTaskbarRootLayoutToMap(int displayId, FrameLayout rootLayout) {
+ if (!mRootLayouts.contains(displayId)) {
+ mRootLayouts.put(displayId, rootLayout);
+ }
+ }
+
+ /**
+ * Removes taskbar root layout {@link FrameLayout} for given display ID from the taskbar map.
+ *
+ * @param displayId The ID of the display for which to remove the taskbar root layout.
+ */
+ private void removeTaskbarRootLayoutFromMap(int displayId) {
+ if (mRootLayouts.contains(displayId)) {
+ mRootLayouts.delete(displayId);
+ }
+ }
+
+ private int getDefaultDisplayId() {
+ return mContext.getDisplayId();
+ }
+
/** Temp logs for b/254119092. */
public void debugWhyTaskbarNotDestroyed(String debugReason) {
StringJoiner log = new StringJoiner("\n");
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarModelCallbacks.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarModelCallbacks.java
index c20617d..f905c5f 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarModelCallbacks.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarModelCallbacks.java
@@ -208,7 +208,7 @@
private void commitHotseatItemUpdates(
ItemInfo[] hotseatItemInfos, List<GroupTask> recentTasks) {
- mContainer.updateHotseatItems(hotseatItemInfos, recentTasks);
+ mContainer.updateItems(hotseatItemInfos, recentTasks);
mControllers.taskbarViewController.updateIconViewsRunningStates();
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
index 756ab0b..ad1a44d 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
@@ -20,11 +20,14 @@
import static com.android.launcher3.BubbleTextView.DISPLAY_TASKBAR;
import static com.android.launcher3.Flags.enableCursorHoverStates;
import static com.android.launcher3.Flags.enableRecentsInTaskbar;
+import static com.android.launcher3.Flags.taskbarRecentsLayoutTransition;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APP_PAIR;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_FOLDER;
import static com.android.launcher3.config.FeatureFlags.enableTaskbarPinning;
import static com.android.launcher3.icons.IconNormalizer.ICON_VISIBLE_AREA_FACTOR;
+import static java.util.function.Predicate.not;
+
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
@@ -70,7 +73,9 @@
import com.android.wm.shell.shared.bubbles.BubbleBarLocation;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.function.Predicate;
/**
@@ -108,6 +113,8 @@
// Only non-null when device supports having a Taskbar Overflow button.
@Nullable private TaskbarOverflowView mTaskbarOverflowView;
+ private int mNextViewIndex;
+
/**
* Whether the divider is between Hotseat icons and Recents,
* instead of between All Apps button and Hotseat.
@@ -125,6 +132,8 @@
private final int mAllAppsButtonTranslationOffset;
+ private final int mNumStaticViews;
+
public TaskbarView(@NonNull Context context) {
this(context, null);
}
@@ -189,6 +198,9 @@
// TODO: Disable touch events on QSB otherwise it can crash.
mQsb = LayoutInflater.from(context).inflate(R.layout.search_container_hotseat, this, false);
+
+ mNumStaticViews = taskbarRecentsLayoutTransition() && !mActivityContext.isPhoneMode()
+ ? addStaticViews() : 0;
}
/**
@@ -249,6 +261,24 @@
&& (mIdealNumIcons > oldMaxNumIcons || mIdealNumIcons > mMaxNumIcons);
}
+ /**
+ * Pre-adds views that are always children of this view for LayoutTransition support.
+ * <p>
+ * Normally these views are removed and re-added when updating hotseat and recents. This
+ * approach does not behave well with LayoutTransition, so we instead need to add them
+ * initially and avoid removing them during updates.
+ */
+ private int addStaticViews() {
+ int numStaticViews = 1;
+ addView(mAllAppsButtonContainer);
+ if (mActivityContext.getDeviceProfile().isQsbInline) {
+ addView(mQsb, mIsRtl ? 1 : 0);
+ mQsb.setVisibility(View.INVISIBLE);
+ numStaticViews++;
+ }
+ return numStaticViews;
+ }
+
@Override
public void setVisibility(int visibility) {
boolean changed = getVisibility() != visibility;
@@ -359,15 +389,33 @@
if (!(view.getTag() instanceof CollectionInfo)) {
mActivityContext.getViewCache().recycleView(view.getSourceLayoutResId(), view);
}
+ if (view instanceof FolderIcon fi) {
+ // We should clear FolderInfo's Folder and FolderIcon to avoid memory leak.
+ fi.removeListeners();
+ }
view.setTag(null);
}
- /**
- * Inflates/binds the Hotseat views to show in the Taskbar given their ItemInfos.
- */
- protected void updateHotseatItems(ItemInfo[] hotseatItemInfos, List<GroupTask> recentTasks) {
- int nextViewIndex = 0;
- int numViewsAnimated = 0;
+ /** Inflates/binds the hotseat items and recent tasks to the view. */
+ protected void updateItems(ItemInfo[] hotseatItemInfos, List<GroupTask> recentTasks) {
+ // Filter out unsupported items.
+ hotseatItemInfos = Arrays.stream(hotseatItemInfos)
+ .filter(Objects::nonNull)
+ .toArray(ItemInfo[]::new);
+ // TODO(b/343289567 and b/316004172): support app pairs and desktop mode.
+ recentTasks = recentTasks.stream().filter(not(GroupTask::supportsMultipleTasks)).toList();
+
+ if (taskbarRecentsLayoutTransition()) {
+ updateItemsWithLayoutTransition(hotseatItemInfos, recentTasks);
+ } else {
+ updateItemsWithoutLayoutTransition(hotseatItemInfos, recentTasks);
+ }
+ }
+
+ private void updateItemsWithoutLayoutTransition(
+ ItemInfo[] hotseatItemInfos, List<GroupTask> recentTasks) {
+
+ mNextViewIndex = 0;
mAddedDividerForRecents = false;
removeView(mAllAppsButtonContainer);
@@ -380,12 +428,105 @@
}
removeView(mQsb);
- // Add Hotseat icons.
- for (ItemInfo hotseatItemInfo : hotseatItemInfos) {
- if (hotseatItemInfo == null) {
- continue;
- }
+ updateHotseatItems(hotseatItemInfos);
+ if (mTaskbarDividerContainer != null && !recentTasks.isEmpty()) {
+ addView(mTaskbarDividerContainer, mNextViewIndex++);
+ mAddedDividerForRecents = true;
+ }
+
+ updateRecents(recentTasks);
+
+ addView(mAllAppsButtonContainer, mIsRtl ? hotseatItemInfos.length : 0);
+
+ // If there are no recent tasks, add divider after All Apps (unless it's the only view).
+ if (!mAddedDividerForRecents
+ && mTaskbarDividerContainer != null
+ && getChildCount() > 1) {
+ addView(mTaskbarDividerContainer, mIsRtl ? (getChildCount() - 1) : 1);
+ }
+
+ if (mActivityContext.getDeviceProfile().isQsbInline) {
+ addView(mQsb, mIsRtl ? getChildCount() : 0);
+ // Always set QSB to invisible after re-adding.
+ mQsb.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ private void updateItemsWithLayoutTransition(
+ ItemInfo[] hotseatItemInfos, List<GroupTask> recentTasks) {
+
+ // Skip static views and potential All Apps divider, if they are on the left.
+ mNextViewIndex = mIsRtl ? 0 : mNumStaticViews;
+ if (getChildAt(mNextViewIndex) == mTaskbarDividerContainer) {
+ mNextViewIndex++;
+ }
+
+ // Update left section.
+ if (mIsRtl) {
+ updateRecents(recentTasks.reversed());
+ } else {
+ updateHotseatItems(hotseatItemInfos);
+ }
+
+ // Now at theoretical position for recent apps divider.
+ updateRecentsDivider(!recentTasks.isEmpty());
+ if (getChildAt(mNextViewIndex) == mTaskbarDividerContainer) {
+ mNextViewIndex++;
+ }
+
+ // Update right section.
+ if (mIsRtl) {
+ updateHotseatItems(hotseatItemInfos);
+ } else {
+ updateRecents(recentTasks);
+ }
+
+ // Recents divider takes priority.
+ if (!mAddedDividerForRecents) {
+ updateAllAppsDivider();
+ }
+ }
+
+ private void updateRecentsDivider(boolean hasRecents) {
+ if (hasRecents && !mAddedDividerForRecents) {
+ mAddedDividerForRecents = true;
+
+ // Remove possible All Apps divider.
+ if (getChildAt(mNumStaticViews) == mTaskbarDividerContainer) {
+ mNextViewIndex--; // All Apps divider on the left. Need to account for removing it.
+ }
+ removeView(mTaskbarDividerContainer);
+
+ addView(mTaskbarDividerContainer, mNextViewIndex);
+ } else if (!hasRecents && mAddedDividerForRecents) {
+ mAddedDividerForRecents = false;
+ removeViewAt(mNextViewIndex);
+ }
+ }
+
+ private void updateAllAppsDivider() {
+ // Index where All Apps divider would be if it is already in Taskbar.
+ final int expectedAllAppsDividerIndex =
+ mIsRtl ? getChildCount() - mNumStaticViews - 1 : mNumStaticViews;
+ if (getChildAt(expectedAllAppsDividerIndex) == mTaskbarDividerContainer
+ && getChildCount() == mNumStaticViews + 1) {
+ // Only static views with divider so remove divider.
+ removeView(mTaskbarDividerContainer);
+ } else if (getChildAt(expectedAllAppsDividerIndex) != mTaskbarDividerContainer
+ && getChildCount() >= mNumStaticViews + 1) {
+ // Static views with at least one app icon so add divider. For RTL, add it after the
+ // icon that is at the expected index.
+ addView(
+ mTaskbarDividerContainer,
+ mIsRtl ? expectedAllAppsDividerIndex + 1 : expectedAllAppsDividerIndex);
+ }
+ }
+
+ private void updateHotseatItems(ItemInfo[] hotseatItemInfos) {
+ int numViewsAnimated = 0;
+
+ for (ItemInfo hotseatItemInfo : hotseatItemInfos) {
// Replace any Hotseat views with the appropriate type if it's not already that type.
final int expectedLayoutResId;
boolean isCollection = false;
@@ -401,8 +542,8 @@
}
View hotseatView = null;
- while (nextViewIndex < getChildCount()) {
- hotseatView = getChildAt(nextViewIndex);
+ while (isNextViewInSection(ItemInfo.class)) {
+ hotseatView = getChildAt(mNextViewIndex);
// see if the view can be reused
if ((hotseatView.getSourceLayoutResId() != expectedLayoutResId)
@@ -443,7 +584,7 @@
}
LayoutParams lp = new LayoutParams(mIconTouchSize, mIconTouchSize);
hotseatView.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding);
- addView(hotseatView, nextViewIndex, lp);
+ addView(hotseatView, mNextViewIndex, lp);
}
// Apply the Hotseat ItemInfos, or hide the view if there is none for a given index.
@@ -459,34 +600,27 @@
if (enableCursorHoverStates()) {
setHoverListenerForIcon(hotseatView);
}
- nextViewIndex++;
+ mNextViewIndex++;
}
- if (mTaskbarDividerContainer != null && !recentTasks.isEmpty()) {
- addView(mTaskbarDividerContainer, nextViewIndex++);
- mAddedDividerForRecents = true;
+ while (isNextViewInSection(ItemInfo.class)) {
+ removeAndRecycle(getChildAt(mNextViewIndex));
}
+ }
+ private void updateRecents(List<GroupTask> recentTasks) {
// At this point, the all apps button has not been added as a child view, but needs to be
// accounted for when comparing current icon count to max number of icons.
int nonTaskIconsToBeAdded = 1;
boolean supportsOverflow = Flags.taskbarOverflow();
int overflowSize = 0;
- int numberOfSupportedRecents = 0;
if (supportsOverflow) {
- for (GroupTask task : recentTasks) {
- // TODO(b/343289567 and b/316004172): support app pairs and desktop mode.
- if (!task.supportsMultipleTasks()) {
- ++numberOfSupportedRecents;
- }
- }
-
- mIdealNumIcons = nextViewIndex + numberOfSupportedRecents + nonTaskIconsToBeAdded;
+ mIdealNumIcons = mNextViewIndex + recentTasks.size() + nonTaskIconsToBeAdded;
overflowSize = mIdealNumIcons - mMaxNumIcons;
if (overflowSize > 0 && mTaskbarOverflowView != null) {
- addView(mTaskbarOverflowView, nextViewIndex++);
+ addView(mTaskbarOverflowView, mNextViewIndex++);
} else if (mTaskbarOverflowView != null) {
mTaskbarOverflowView.clearItems();
}
@@ -496,9 +630,9 @@
// An extra item needs to be added to overflow button to account for the space taken up by
// the overflow button.
final int itemsToAddToOverflow =
- (overflowSize > 0) ? Math.min(overflowSize + 1, numberOfSupportedRecents) : 0;
+ (overflowSize > 0) ? Math.min(overflowSize + 1, recentTasks.size()) : 0;
if (overflowSize > 0) {
- overflownTasks = new ArrayList<Task>(itemsToAddToOverflow);
+ overflownTasks = new ArrayList<>(itemsToAddToOverflow);
}
// Add Recent/Running icons.
@@ -506,10 +640,6 @@
if (mTaskbarOverflowView != null && overflownTasks != null
&& overflownTasks.size() < itemsToAddToOverflow) {
// TODO(b/343289567 and b/316004172): support app pairs and desktop mode.
- if (task.supportsMultipleTasks()) {
- continue;
- }
-
overflownTasks.add(task.task1);
if (overflownTasks.size() == itemsToAddToOverflow) {
mTaskbarOverflowView.setItems(overflownTasks);
@@ -534,8 +664,8 @@
}
View recentIcon = null;
- while (nextViewIndex < getChildCount()) {
- recentIcon = getChildAt(nextViewIndex);
+ while (isNextViewInSection(GroupTask.class)) {
+ recentIcon = getChildAt(mNextViewIndex);
// see if the view can be reused
if ((recentIcon.getSourceLayoutResId() != expectedLayoutResId)
@@ -549,15 +679,11 @@
}
if (recentIcon == null) {
- if (isCollection) {
- // TODO(b/343289567 and b/316004172): support app pairs and desktop mode.
- continue;
- }
-
+ // TODO(b/343289567 and b/316004172): support app pairs and desktop mode.
recentIcon = inflate(expectedLayoutResId);
LayoutParams lp = new LayoutParams(mIconTouchSize, mIconTouchSize);
recentIcon.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding);
- addView(recentIcon, nextViewIndex, lp);
+ addView(recentIcon, mNextViewIndex, lp);
}
if (recentIcon instanceof BubbleTextView btv) {
@@ -567,29 +693,17 @@
if (enableCursorHoverStates()) {
setHoverListenerForIcon(recentIcon);
}
- nextViewIndex++;
+ mNextViewIndex++;
}
- // Remove remaining views
- while (nextViewIndex < getChildCount()) {
- removeAndRecycle(getChildAt(nextViewIndex));
+ while (isNextViewInSection(GroupTask.class)) {
+ removeAndRecycle(getChildAt(mNextViewIndex));
}
+ }
- addView(mAllAppsButtonContainer, mIsRtl ? hotseatItemInfos.length : 0);
-
- // If there are no recent tasks, add divider after All Apps (unless it's the only view).
- if (!mAddedDividerForRecents
- && mTaskbarDividerContainer != null
- && getChildCount() > 1) {
- addView(mTaskbarDividerContainer, mIsRtl ? (getChildCount() - 1) : 1);
- }
-
-
- if (mActivityContext.getDeviceProfile().isQsbInline) {
- addView(mQsb, mIsRtl ? getChildCount() : 0);
- // Always set QSB to invisible after re-adding.
- mQsb.setVisibility(View.INVISIBLE);
- }
+ private boolean isNextViewInSection(Class<?> tagClass) {
+ return mNextViewIndex < getChildCount()
+ && tagClass.isInstance(getChildAt(mNextViewIndex).getTag());
}
/** Binds the GroupTask to the BubbleTextView to be ready to present to the user. */
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimator.kt b/quickstep/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimator.kt
index 89e4210..447dad1 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimator.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimator.kt
@@ -473,8 +473,8 @@
ObjectAnimator.ofFloat(bubbleBarView, View.TRANSLATION_Y, ty - bubbleBarBounceDistanceInPx)
.withDuration(BUBBLE_BAR_BOUNCE_ANIMATION_DURATION_MS)
.withEndAction {
- if (animatingBubble?.expand == true) expandBubbleBar()
springBackAnimation.start()
+ if (animatingBubble?.expand == true) expandBubbleBar()
}
.start()
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarAllAppsButtonContainer.kt b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarAllAppsButtonContainer.kt
index 7e3b362..4932654 100644
--- a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarAllAppsButtonContainer.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarAllAppsButtonContainer.kt
@@ -32,6 +32,7 @@
import com.android.launcher3.config.FeatureFlags.enableTaskbarPinning
import com.android.launcher3.taskbar.TaskbarActivityContext
import com.android.launcher3.taskbar.TaskbarViewCallbacks
+import com.android.launcher3.util.DisplayController
import com.android.launcher3.util.Executors.MAIN_EXECUTOR
import com.android.launcher3.views.ActivityContext
import com.android.launcher3.views.IconButtonView
@@ -68,7 +69,9 @@
)
backgroundTintList = ColorStateList.valueOf(TRANSPARENT)
setIconDrawable(drawable)
- setPadding(dpToPx(activityContext.taskbarSpecsEvaluator.taskbarIconPadding.toFloat()))
+ if (!DisplayController.isTransientTaskbar(context)) {
+ setPadding(dpToPx(activityContext.taskbarSpecsEvaluator.taskbarIconPadding.toFloat()))
+ }
setForegroundTint(activityContext.getColor(R.color.all_apps_button_color))
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarDividerContainer.kt b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarDividerContainer.kt
index 344f163..d5f72d5 100644
--- a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarDividerContainer.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarDividerContainer.kt
@@ -26,6 +26,7 @@
import com.android.launcher3.Utilities.dpToPx
import com.android.launcher3.taskbar.TaskbarActivityContext
import com.android.launcher3.taskbar.TaskbarViewCallbacks
+import com.android.launcher3.util.DisplayController
import com.android.launcher3.views.ActivityContext
import com.android.launcher3.views.IconButtonView
@@ -51,7 +52,9 @@
backgroundTintList = ColorStateList.valueOf(TRANSPARENT)
val drawable = resources.getDrawable(R.drawable.taskbar_divider_button)
setIconDrawable(drawable)
- setPadding(dpToPx(activityContext.taskbarSpecsEvaluator.taskbarIconPadding.toFloat()))
+ if (!DisplayController.isTransientTaskbar(context)) {
+ setPadding(dpToPx(activityContext.taskbarSpecsEvaluator.taskbarIconPadding.toFloat()))
+ }
}
@SuppressLint("ClickableViewAccessibility")
diff --git a/quickstep/src/com/android/launcher3/uioverrides/PredictedAppIcon.java b/quickstep/src/com/android/launcher3/uioverrides/PredictedAppIcon.java
index 4590efe..535ae1c 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/PredictedAppIcon.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/PredictedAppIcon.java
@@ -418,7 +418,9 @@
mIconRingPaint.setColor(RING_SHADOW_COLOR);
mIconRingPaint.setMaskFilter(mShadowFilter);
int count = canvas.save();
- canvas.scale(mRingScale, mRingScale, canvas.getWidth() / 2f, canvas.getHeight() / 2f);
+ if (Float.compare(1, mRingScale) != 0) {
+ canvas.scale(mRingScale, mRingScale, canvas.getWidth() / 2f, canvas.getHeight() / 2f);
+ }
canvas.drawPath(mRingPath, mIconRingPaint);
mIconRingPaint.setColor(mPlateColor);
mIconRingPaint.setMaskFilter(null);
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 1baba74..cc51adc 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -264,6 +264,8 @@
private boolean mIsOverlayVisible;
+ private final Runnable mOverviewTargetChangeRunnable = this::onOverviewTargetChanged;
+
public static QuickstepLauncher getLauncher(Context context) {
return fromContext(context);
}
@@ -550,6 +552,10 @@
mUnfoldTransitionProgressProvider.destroy();
}
+ TISBinder binder = mTISBindHelper.getBinder();
+ if (binder != null) {
+ binder.unregisterOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
+ }
mTISBindHelper.onDestroy();
if (mLauncherUnfoldAnimationController != null) {
@@ -1025,12 +1031,20 @@
}
}
+ private void onOverviewTargetChanged() {
+ QuickstepTransitionManager transitionManager = getAppTransitionManager();
+ if (transitionManager != null) {
+ transitionManager.onOverviewTargetChange();
+ }
+ }
+
private void onTISConnected(TISBinder binder) {
TaskbarManager taskbarManager = mTISBindHelper.getTaskbarManager();
if (taskbarManager != null) {
taskbarManager.setActivity(this);
}
mTISBindHelper.setPredictiveBackToHomeInProgress(mIsPredictiveBackToHomeInProgress);
+ binder.registerOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
}
@Override
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index 5648dad..a006198 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -784,7 +784,7 @@
&& recentsAttachedToAppWindow) {
// Only move running task if RecentsView has never been attached before, to avoid
// TaskView jumping to new position as we move the tasks.
- mRecentsView.moveRunningTaskToFront();
+ mRecentsView.moveRunningTaskToExpectedPosition();
}
mAnimationFactory.setRecentsAttachedToAppWindow(
recentsAttachedToAppWindow, animate, updateRunningTaskAlpha);
@@ -1453,8 +1453,21 @@
onPageTransitionEnd.run();
}
}
+ long finalDuration = duration;
+ runOnRecentsAnimationAndLauncherBound(() -> animateGestureEnd(
+ startShift, endShift, finalDuration, interpolator, endTarget, velocityPxPerMs));
+ }
- animateToProgress(startShift, endShift, duration, interpolator, endTarget, velocityPxPerMs);
+ @UiThread
+ protected void animateGestureEnd(
+ float startShift,
+ float endShift,
+ long duration,
+ @NonNull Interpolator interpolator,
+ @NonNull GestureEndTarget endTarget,
+ @NonNull PointF velocityPxPerMs) {
+ animateToProgressInternal(
+ startShift, endShift, duration, interpolator, endTarget, velocityPxPerMs);
}
private void doLogGesture(GestureEndTarget endTarget, @Nullable TaskView targetTask) {
@@ -1497,14 +1510,6 @@
logger.log(event);
}
- /** Animates to the given progress, where 0 is the current app and 1 is overview. */
- @UiThread
- private void animateToProgress(float start, float end, long duration, Interpolator interpolator,
- GestureEndTarget target, PointF velocityPxPerMs) {
- runOnRecentsAnimationAndLauncherBound(() -> animateToProgressInternal(start, end, duration,
- interpolator, target, velocityPxPerMs));
- }
-
protected abstract HomeAnimationFactory createHomeAnimationFactory(
List<IBinder> launchCookies,
long duration,
diff --git a/quickstep/src/com/android/quickstep/FallbackSwipeHandler.java b/quickstep/src/com/android/quickstep/FallbackSwipeHandler.java
index 7abcfb8..9b56fd4 100644
--- a/quickstep/src/com/android/quickstep/FallbackSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/FallbackSwipeHandler.java
@@ -64,8 +64,6 @@
import com.android.launcher3.util.DisplayController;
import com.android.quickstep.fallback.FallbackRecentsView;
import com.android.quickstep.fallback.RecentsState;
-import com.android.quickstep.fallback.window.RecentsWindowManager;
-import com.android.quickstep.util.ActiveGestureLog;
import com.android.quickstep.util.RectFSpringAnim;
import com.android.quickstep.util.SurfaceTransaction.SurfaceProperties;
import com.android.quickstep.util.TransformParams;
@@ -172,16 +170,14 @@
}
@Override
- protected boolean handleTaskAppeared(@NonNull RemoteAnimationTarget[] appearedTaskTarget,
- @NonNull ActiveGestureLog.CompoundString failureReason) {
- if (mActiveAnimationFactory != null
- && mActiveAnimationFactory.handleHomeTaskAppeared(appearedTaskTarget)) {
+ public void onTasksAppeared(@NonNull RemoteAnimationTarget[] appearedTaskTargets) {
+ if (mActiveAnimationFactory != null && mActiveAnimationFactory.handleHomeTaskAppeared(
+ appearedTaskTargets)) {
mActiveAnimationFactory = null;
- failureReason.append("(FallbackSwipeHandler) should be handled as home task appeared");
- return false;
+ return;
}
- return super.handleTaskAppeared(appearedTaskTarget, failureReason);
+ super.onTasksAppeared(appearedTaskTargets);
}
@Override
diff --git a/quickstep/src/com/android/quickstep/OrientationTouchTransformer.java b/quickstep/src/com/android/quickstep/OrientationTouchTransformer.java
index a03c0f8..ef103c4 100644
--- a/quickstep/src/com/android/quickstep/OrientationTouchTransformer.java
+++ b/quickstep/src/com/android/quickstep/OrientationTouchTransformer.java
@@ -37,6 +37,7 @@
import com.android.launcher3.util.DisplayController.Info;
import com.android.launcher3.util.NavigationMode;
import com.android.launcher3.util.window.CachedDisplayInfo;
+import com.android.quickstep.util.ActiveGestureProtoLogProxy;
import com.android.systemui.shared.Flags;
import java.io.PrintWriter;
@@ -111,13 +112,13 @@
mNavBarGesturalHeight);
}
- private void refreshTouchRegion(Info info, Resources newRes) {
+ private void refreshTouchRegion(Info info, Resources newRes, String reason) {
// Swipe touch regions are independent of nav mode, so we have to clear them explicitly
// here to avoid, for ex, a nav region for 2-button rotation 0 being used for 3-button mode
// It tries to cache and reuse swipe regions whenever possible based only on rotation
mResources = newRes;
mSwipeTouchRegions.clear();
- resetSwipeRegions(info);
+ resetSwipeRegions(info, reason);
}
void setNavigationMode(NavigationMode newMode, Info info, Resources newRes) {
@@ -128,7 +129,7 @@
return;
}
this.mMode = newMode;
- refreshTouchRegion(info, newRes);
+ refreshTouchRegion(info, newRes, "setNavigationMode");
}
void setGesturalHeight(int newGesturalHeight, Info info, Resources newRes) {
@@ -136,7 +137,7 @@
return;
}
mNavBarGesturalHeight = newGesturalHeight;
- refreshTouchRegion(info, newRes);
+ refreshTouchRegion(info, newRes, "setGesturalHeight");
}
/**
@@ -147,14 +148,14 @@
*
* @see #enableMultipleRegions(boolean, Info)
*/
- void createOrAddTouchRegion(Info info) {
+ void createOrAddTouchRegion(Info info, String reason) {
mCachedDisplayInfo = new CachedDisplayInfo(info.currentSize, info.rotation);
if (mQuickStepStartingRotation > QUICKSTEP_ROTATION_UNINITIALIZED
&& mCachedDisplayInfo.rotation == mQuickStepStartingRotation) {
// User already was swiping and the current screen is same rotation as the starting one
// Remove active nav bars in other rotations except for the one we started out in
- resetSwipeRegions(info);
+ resetSwipeRegions(info, reason);
return;
}
OrientationRectF region = mSwipeTouchRegions.get(mCachedDisplayInfo);
@@ -163,9 +164,9 @@
}
if (mEnableMultipleRegions) {
- mSwipeTouchRegions.put(mCachedDisplayInfo, createRegionForDisplay(info));
+ mSwipeTouchRegions.put(mCachedDisplayInfo, createRegionForDisplay(info, reason));
} else {
- resetSwipeRegions(info);
+ resetSwipeRegions(info, reason);
}
}
@@ -184,7 +185,7 @@
mActiveTouchRotation = 0;
mQuickStepStartingRotation = QUICKSTEP_ROTATION_UNINITIALIZED;
}
- resetSwipeRegions(info);
+ resetSwipeRegions(info, "enableMultipleRegions");
}
/**
@@ -198,7 +199,7 @@
*/
void setSingleActiveRegion(Info displayInfo) {
mActiveTouchRotation = displayInfo.rotation;
- resetSwipeRegions(displayInfo);
+ resetSwipeRegions(displayInfo, "setSingleActiveRegion");
}
/**
@@ -207,19 +208,21 @@
* To be called whenever we want to stop tracking more than one swipe region.
* Ok to call multiple times.
*/
- private void resetSwipeRegions(Info region) {
+ private void resetSwipeRegions(Info region, String reason) {
if (enableLog()) {
- Log.d(TAG, "clearing all regions except rotation: " + mCachedDisplayInfo.rotation);
+ Log.d(TAG, "clearing all regions except rotation: " + mCachedDisplayInfo.rotation
+ + " reason=" + reason);
}
mCachedDisplayInfo = new CachedDisplayInfo(region.currentSize, region.rotation);
OrientationRectF regionToKeep = mSwipeTouchRegions.get(mCachedDisplayInfo);
if (regionToKeep == null) {
- regionToKeep = createRegionForDisplay(region);
+ regionToKeep = createRegionForDisplay(region, reason);
}
mSwipeTouchRegions.clear();
mSwipeTouchRegions.put(mCachedDisplayInfo, regionToKeep);
updateAssistantRegions(regionToKeep);
+ updateOneHandedRegions(regionToKeep);
}
private void resetSwipeRegions() {
@@ -228,15 +231,17 @@
if (regionToKeep != null) {
mSwipeTouchRegions.put(mCachedDisplayInfo, regionToKeep);
updateAssistantRegions(regionToKeep);
+ updateOneHandedRegions(regionToKeep);
}
}
- private OrientationRectF createRegionForDisplay(Info display) {
+ private OrientationRectF createRegionForDisplay(Info display, String reason) {
if (enableLog()) {
Log.d(TAG, "creating rotation region for: " + mCachedDisplayInfo.rotation
+ " with mode: " + mMode + " displayRotation: " + display.rotation +
" displaySize: " + display.currentSize +
- " navBarHeight: " + mNavBarGesturalHeight);
+ " navBarHeight: " + mNavBarGesturalHeight +
+ " reason: " + reason);
}
Point size = display.currentSize;
@@ -264,9 +269,10 @@
orientationRectF.top = orientationRectF.bottom - touchHeight;
}
}
- // One handed gestural only active on portrait mode
- mOneHandedModeRegion.set(0, orientationRectF.bottom - mNavBarLargerGesturalHeight,
- size.x, size.y);
+ updateOneHandedRegions(orientationRectF);
+ ActiveGestureProtoLogProxy.logCreateTouchRegionForDisplay(rotation, size, orientationRectF,
+ mOneHandedModeRegion, mNavBarGesturalHeight, mNavBarLargerGesturalHeight,
+ reason);
return orientationRectF;
}
@@ -286,6 +292,12 @@
mAssistantRightRegion.left = orientationRectF.right - assistantWidth;
}
+ private void updateOneHandedRegions(OrientationRectF orientationRectF) {
+ // One handed gestural only active on portrait mode
+ mOneHandedModeRegion.set(0, orientationRectF.bottom - mNavBarLargerGesturalHeight,
+ orientationRectF.right, orientationRectF.bottom);
+ }
+
boolean touchInAssistantRegion(MotionEvent ev) {
return mAssistantLeftRegion.contains(ev.getX(), ev.getY())
|| mAssistantRightRegion.contains(ev.getX(), ev.getY());
@@ -411,9 +423,11 @@
OrientationRectF rectF = mSwipeTouchRegions.get(key);
regions.append(rectF).append(" ");
}
- pw.println(regions.toString());
+ pw.println(regions);
pw.println(" mNavBarGesturalHeight=" + mNavBarGesturalHeight);
pw.println(" mNavBarLargerGesturalHeight=" + mNavBarLargerGesturalHeight);
+ pw.println(" mAssistantLeftRegion=" + mAssistantLeftRegion);
+ pw.println(" mAssistantRightRegion=" + mAssistantRightRegion);
pw.println(" mOneHandedModeRegion=" + mOneHandedModeRegion);
}
}
diff --git a/quickstep/src/com/android/quickstep/RotationTouchHelper.java b/quickstep/src/com/android/quickstep/RotationTouchHelper.java
index 79abc0f..909cc35 100644
--- a/quickstep/src/com/android/quickstep/RotationTouchHelper.java
+++ b/quickstep/src/com/android/quickstep/RotationTouchHelper.java
@@ -236,7 +236,8 @@
return;
}
- mOrientationTouchTransformer.createOrAddTouchRegion(mDisplayController.getInfo());
+ mOrientationTouchTransformer.createOrAddTouchRegion(mDisplayController.getInfo(),
+ "RTH.updateGestureTouchRegions");
}
/**
@@ -273,7 +274,8 @@
if (hasGestures(mMode)) {
updateGestureTouchRegions();
- mOrientationTouchTransformer.createOrAddTouchRegion(info);
+ mOrientationTouchTransformer.createOrAddTouchRegion(info,
+ "RTH.onDisplayInfoChanged");
mCurrentAppRotation = mDisplayRotation;
/* Update nav bars on the following:
diff --git a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
index fef4c30..ff9c9f6 100644
--- a/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
+++ b/quickstep/src/com/android/quickstep/TaskOverlayFactory.java
@@ -353,6 +353,9 @@
/** Sets visibility for the overlay associated elements. */
public void setVisibility(int visibility) {}
+ /** See {@link View#addChildrenForAccessibility(ArrayList)} */
+ public void addChildForAccessibility(ArrayList<View> outChildren) {}
+
private class ScreenshotSystemShortcut extends SystemShortcut {
private final RecentsViewContainer mContainer;
diff --git a/quickstep/src/com/android/quickstep/TopTaskTracker.java b/quickstep/src/com/android/quickstep/TopTaskTracker.java
index 7065f37..210065a 100644
--- a/quickstep/src/com/android/quickstep/TopTaskTracker.java
+++ b/quickstep/src/com/android/quickstep/TopTaskTracker.java
@@ -134,6 +134,22 @@
mOrderedTaskList.removeIf(rto -> rto.taskId == taskInfo.taskId);
mOrderedTaskList.addFirst(taskInfo);
+ // Workaround for b/372067617, if the home task is being brought to front, then it will
+ // occlude all other tasks, so mark them as not-visible
+ if (taskInfo.getActivityType() == ACTIVITY_TYPE_HOME) {
+ // We've moved the task to the front of the list above, so only iterate the tasks after
+ for (int i = 1; i < mOrderedTaskList.size(); i++) {
+ final TaskInfo info = mOrderedTaskList.get(i);
+ if (info.displayId != taskInfo.displayId) {
+ // Only fall through to reset visibility for tasks on the same display as the
+ // home task being brought forward
+ continue;
+ }
+ info.isVisible = false;
+ info.isVisibleRequested = false;
+ }
+ }
+
// Keep the home display's top running task in the first while adding a non-home
// display's task to the list, to avoid showing non-home display's task upon going to
// Recents animation.
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index d38eaf3..8edb16f 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -137,6 +137,7 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
+import java.util.HashSet;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -163,7 +164,7 @@
private final WeakReference<TouchInteractionService> mTis;
- @Nullable private Runnable mOnOverviewTargetChangeListener = null;
+ private final Set<Runnable> mOnOverviewTargetChangeListeners = new HashSet<>();
private TISBinder(TouchInteractionService tis) {
mTis = new WeakReference<>(tis);
@@ -512,15 +513,19 @@
tis -> tis.mDeviceState.setGestureBlockingTaskId(taskId));
}
- /** Sets a listener to be run on Overview Target updates. */
- public void setOverviewTargetChangeListener(@Nullable Runnable listener) {
- mOnOverviewTargetChangeListener = listener;
+ /** Registers a listener to be run on Overview Target updates. */
+ public void registerOverviewTargetChangeListener(@NonNull Runnable listener) {
+ mOnOverviewTargetChangeListeners.add(listener);
+ }
+
+ /** Unregisters an OverviewTargetChange listener. */
+ public void unregisterOverviewTargetChangeListener(@NonNull Runnable listener) {
+ mOnOverviewTargetChangeListeners.remove(listener);
}
protected void onOverviewTargetChange() {
- if (mOnOverviewTargetChangeListener != null) {
- mOnOverviewTargetChangeListener.run();
- mOnOverviewTargetChangeListener = null;
+ for (Runnable listener : mOnOverviewTargetChangeListeners) {
+ listener.run();
}
}
diff --git a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt
index 843ef6c..e158975 100644
--- a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt
+++ b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt
@@ -163,9 +163,19 @@
}
override fun startHome() {
+ startHome(/* finishRecentsAnimation= */ true)
+ }
+
+ fun startHome(finishRecentsAnimation: Boolean) {
val recentsView: RecentsView<*, *> = getOverviewPanel()
+
+ if (!finishRecentsAnimation) {
+ recentsView.switchToScreenshot(/* onFinishRunnable= */ null)
+ startHomeInternal()
+ return
+ }
recentsView.switchToScreenshot {
- recentsView.finishRecentsAnimation(true) { startHomeInternal() }
+ recentsView.finishRecentsAnimation(/* toRecents= */ true) { startHomeInternal() }
}
}
diff --git a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowSwipeHandler.java b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowSwipeHandler.java
index c1d3f6e..be71385 100644
--- a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowSwipeHandler.java
@@ -31,6 +31,7 @@
import android.content.Context;
import android.content.Intent;
import android.graphics.Matrix;
+import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
@@ -47,9 +48,11 @@
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
+import android.view.animation.Interpolator;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.UiThread;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Utilities;
@@ -144,6 +147,29 @@
}
}
+ @UiThread
+ @Override
+ protected void animateGestureEnd(
+ float startShift,
+ float endShift,
+ long duration,
+ @NonNull Interpolator interpolator,
+ @NonNull GestureState.GestureEndTarget endTarget,
+ @NonNull PointF velocityPxPerMs) {
+ boolean fromHomeToHome = mRunningOverHome
+ && endTarget == GestureState.GestureEndTarget.HOME;
+ if (fromHomeToHome) {
+ mRecentsWindowManager.startHome(/* finishRecentsAnimation= */ false);
+ }
+ super.animateGestureEnd(
+ startShift,
+ endShift,
+ fromHomeToHome ? 0 : duration,
+ interpolator,
+ endTarget,
+ velocityPxPerMs);
+ }
+
private void updateHomeActivityTransformDuringSwipeUp(SurfaceProperties builder,
RemoteAnimationTarget app, TransformParams params) {
if (mActiveAnimationFactory != null) {
diff --git a/quickstep/src/com/android/quickstep/interaction/AllSetActivity.java b/quickstep/src/com/android/quickstep/interaction/AllSetActivity.java
index f7f3157..3eba9c0 100644
--- a/quickstep/src/com/android/quickstep/interaction/AllSetActivity.java
+++ b/quickstep/src/com/android/quickstep/interaction/AllSetActivity.java
@@ -121,6 +121,8 @@
private TextView mHintView;
+ private final Runnable mOverviewTargetChangeRunnable = this::onOverviewTargetChanged;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -285,7 +287,7 @@
private void onTISConnected(TISBinder binder) {
setSetupUIVisible(isResumed());
binder.setSwipeUpProxy(isResumed() ? this::createSwipeUpProxy : null);
- binder.setOverviewTargetChangeListener(binder::preloadOverviewForSUWAllSet);
+ binder.registerOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
binder.preloadOverviewForSUWAllSet();
TaskbarManager taskbarManager = binder.getTaskbarManager();
if (taskbarManager != null) {
@@ -293,6 +295,14 @@
}
}
+ private void onOverviewTargetChanged() {
+ TISBinder binder = mTISBindHelper.getBinder();
+ if (binder != null) {
+ binder.preloadOverviewForSUWAllSet();
+ binder.unregisterOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
+ }
+ }
+
@Override
protected void onPause() {
super.onPause();
@@ -309,7 +319,7 @@
if (binder != null) {
setSetupUIVisible(false);
binder.setSwipeUpProxy(null);
- binder.setOverviewTargetChangeListener(null);
+ binder.unregisterOverviewTargetChangeListener(mOverviewTargetChangeRunnable);
}
}
diff --git a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
index 2daaaf9..9bfe71f 100644
--- a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
+++ b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
@@ -733,48 +733,40 @@
.getQueryLength() : -1;
}
default:
- return info.getFolderIcon().getCardinality();
+ return switch (info.getItemCase()) {
+ case FOLDER_ICON -> info.getFolderIcon().getCardinality();
+ case TASK_VIEW -> info.getTaskView().getCardinality();
+ default -> 0;
+ };
}
}
private static String getPackageName(LauncherAtom.ItemInfo info) {
- switch (info.getItemCase()) {
- case APPLICATION:
- return info.getApplication().getPackageName();
- case SHORTCUT:
- return info.getShortcut().getShortcutName();
- case WIDGET:
- return info.getWidget().getPackageName();
- case TASK:
- return info.getTask().getPackageName();
- case SEARCH_ACTION_ITEM:
- return info.getSearchActionItem().getPackageName();
- default:
- return null;
- }
+ return switch (info.getItemCase()) {
+ case APPLICATION -> info.getApplication().getPackageName();
+ case SHORTCUT -> info.getShortcut().getShortcutName();
+ case WIDGET -> info.getWidget().getPackageName();
+ case TASK -> info.getTask().getPackageName();
+ case SEARCH_ACTION_ITEM -> info.getSearchActionItem().getPackageName();
+ default -> null;
+ };
}
private static String getComponentName(LauncherAtom.ItemInfo info) {
- switch (info.getItemCase()) {
- case APPLICATION:
- return info.getApplication().getComponentName();
- case SHORTCUT:
- return info.getShortcut().getShortcutName();
- case WIDGET:
- return info.getWidget().getComponentName();
- case TASK:
- return info.getTask().getComponentName();
- case SEARCH_ACTION_ITEM:
- return info.getSearchActionItem().getTitle();
- case SLICE:
- return info.getSlice().getUri();
- default:
- return null;
- }
+ return switch (info.getItemCase()) {
+ case APPLICATION -> info.getApplication().getComponentName();
+ case SHORTCUT -> info.getShortcut().getShortcutName();
+ case WIDGET -> info.getWidget().getComponentName();
+ case TASK -> info.getTask().getComponentName();
+ case TASK_VIEW -> info.getTaskView().getComponentName();
+ case SEARCH_ACTION_ITEM -> info.getSearchActionItem().getTitle();
+ case SLICE -> info.getSlice().getUri();
+ default -> null;
+ };
}
private static int getGridX(LauncherAtom.ItemInfo info, boolean parent) {
- LauncherAtom.ContainerInfo containerInfo = info.getContainerInfo();
+ ContainerInfo containerInfo = info.getContainerInfo();
if (containerInfo.getContainerCase() == FOLDER) {
if (parent) {
return containerInfo.getFolder().getWorkspace().getGridX();
@@ -802,37 +794,38 @@
}
private static int getPageId(LauncherAtom.ItemInfo info) {
- if (info.hasTask()) {
- return info.getTask().getIndex();
- }
- switch (info.getContainerInfo().getContainerCase()) {
- case FOLDER:
- return info.getContainerInfo().getFolder().getPageIndex();
- case HOTSEAT:
- return info.getContainerInfo().getHotseat().getIndex();
- case PREDICTED_HOTSEAT_CONTAINER:
- return info.getContainerInfo().getPredictedHotseatContainer().getIndex();
- case TASK_BAR_CONTAINER:
- return info.getContainerInfo().getTaskBarContainer().getIndex();
- default:
- return info.getContainerInfo().getWorkspace().getPageIndex();
- }
+ return switch (info.getItemCase()) {
+ case TASK -> info.getTask().getIndex();
+ case TASK_VIEW -> info.getTaskView().getIndex();
+ default -> getPageIdFromContainerInfo(info.getContainerInfo());
+ };
+ }
+
+ private static int getPageIdFromContainerInfo(LauncherAtom.ContainerInfo containerInfo) {
+ return switch (containerInfo.getContainerCase()) {
+ case FOLDER -> containerInfo.getFolder().getPageIndex();
+ case HOTSEAT -> containerInfo.getHotseat().getIndex();
+ case PREDICTED_HOTSEAT_CONTAINER ->
+ containerInfo.getPredictedHotseatContainer().getIndex();
+ case TASK_BAR_CONTAINER -> containerInfo.getTaskBarContainer().getIndex();
+ default -> containerInfo.getWorkspace().getPageIndex();
+ };
}
private static int getParentPageId(LauncherAtom.ItemInfo info) {
- switch (info.getContainerInfo().getContainerCase()) {
- case FOLDER:
+ return switch (info.getContainerInfo().getContainerCase()) {
+ case FOLDER -> {
if (info.getContainerInfo().getFolder().getParentContainerCase()
== ParentContainerCase.HOTSEAT) {
- return info.getContainerInfo().getFolder().getHotseat().getIndex();
+ yield info.getContainerInfo().getFolder().getHotseat().getIndex();
}
- return info.getContainerInfo().getFolder().getWorkspace().getPageIndex();
- case SEARCH_RESULT_CONTAINER:
- return info.getContainerInfo().getSearchResultContainer().getWorkspace()
- .getPageIndex();
- default:
- return info.getContainerInfo().getWorkspace().getPageIndex();
- }
+ yield info.getContainerInfo().getFolder().getWorkspace().getPageIndex();
+ }
+ case SEARCH_RESULT_CONTAINER ->
+ info.getContainerInfo().getSearchResultContainer().getWorkspace()
+ .getPageIndex();
+ default -> info.getContainerInfo().getWorkspace().getPageIndex();
+ };
}
private static int getHierarchy(LauncherAtom.ItemInfo info) {
@@ -857,25 +850,21 @@
}
private static String getStateString(int state) {
- switch (state) {
- case LAUNCHER_UICHANGED__DST_STATE__BACKGROUND:
- return "BACKGROUND";
- case LAUNCHER_UICHANGED__DST_STATE__HOME:
- return "HOME";
- case LAUNCHER_UICHANGED__DST_STATE__OVERVIEW:
- return "OVERVIEW";
- case LAUNCHER_UICHANGED__DST_STATE__ALLAPPS:
- return "ALLAPPS";
- default:
- return "INVALID";
- }
+ return switch (state) {
+ case LAUNCHER_UICHANGED__DST_STATE__BACKGROUND -> "BACKGROUND";
+ case LAUNCHER_UICHANGED__DST_STATE__HOME -> "HOME";
+ case LAUNCHER_UICHANGED__DST_STATE__OVERVIEW -> "OVERVIEW";
+ case LAUNCHER_UICHANGED__DST_STATE__ALLAPPS -> "ALLAPPS";
+ default -> "INVALID";
+ };
}
private static int getFeatures(LauncherAtom.ItemInfo info) {
- if (info.getItemCase().equals(LauncherAtom.ItemInfo.ItemCase.WIDGET)) {
- return info.getWidget().getWidgetFeatures();
- }
- return 0;
+ return switch (info.getItemCase()) {
+ case WIDGET -> info.getWidget().getWidgetFeatures();
+ case TASK_VIEW -> info.getTaskView().getType();
+ default -> 0;
+ };
}
private static int getSearchAttributes(LauncherAtom.ItemInfo info) {
diff --git a/quickstep/src/com/android/quickstep/util/ContextualSearchStateManager.java b/quickstep/src/com/android/quickstep/util/ContextualSearchStateManager.java
index 083f192..334ff06 100644
--- a/quickstep/src/com/android/quickstep/util/ContextualSearchStateManager.java
+++ b/quickstep/src/com/android/quickstep/util/ContextualSearchStateManager.java
@@ -24,7 +24,6 @@
import static com.android.launcher3.util.MainThreadInitializedObject.forOverride;
import static com.android.quickstep.util.SystemActionConstants.SYSTEM_ACTION_ID_SEARCH_SCREEN;
-import android.annotation.Nullable;
import android.app.PendingIntent;
import android.app.RemoteAction;
import android.content.Context;
@@ -78,7 +77,6 @@
this::onContextualSearchSettingChanged;
protected final EventLogArray mEventLogArray = new EventLogArray(TAG, MAX_DEBUG_EVENT_SIZE);
- @Nullable private SettingsCache mSettingsCache;
// Cached value whether the ContextualSearch intent filter matched any enabled components.
private boolean mIsContextualSearchIntentAvailable;
private boolean mIsContextualSearchSettingEnabled;
@@ -108,11 +106,10 @@
context, mContextualSearchPackage, Intent.ACTION_PACKAGE_ADDED,
Intent.ACTION_PACKAGE_CHANGED, Intent.ACTION_PACKAGE_REMOVED);
- mSettingsCache = SettingsCache.INSTANCE.get(context);
- mSettingsCache.register(SEARCH_ALL_ENTRYPOINTS_ENABLED_URI,
+ SettingsCache.INSTANCE.get(context).register(SEARCH_ALL_ENTRYPOINTS_ENABLED_URI,
mContextualSearchSettingChangedListener);
onContextualSearchSettingChanged(
- mSettingsCache.getValue(SEARCH_ALL_ENTRYPOINTS_ENABLED_URI));
+ SettingsCache.INSTANCE.get(context).getValue(SEARCH_ALL_ENTRYPOINTS_ENABLED_URI));
SystemUiProxy.INSTANCE.get(mContext).addOnStateChangeListener(mSysUiStateChangeListener);
}
@@ -266,11 +263,8 @@
public void close() {
mContextualSearchPackageReceiver.unregisterReceiverSafely(mContext);
unregisterSearchScreenSystemAction();
-
- if (mSettingsCache != null) {
- mSettingsCache.unregister(SEARCH_ALL_ENTRYPOINTS_ENABLED_URI,
- mContextualSearchSettingChangedListener);
- }
+ SettingsCache.INSTANCE.get(mContext).unregister(SEARCH_ALL_ENTRYPOINTS_ENABLED_URI,
+ mContextualSearchSettingChangedListener);
SystemUiProxy.INSTANCE.get(mContext).removeOnStateChangeListener(mSysUiStateChangeListener);
}
diff --git a/quickstep/src/com/android/quickstep/util/SplitAnimationTimings.java b/quickstep/src/com/android/quickstep/util/SplitAnimationTimings.java
index 90569b4..3a6d9b0 100644
--- a/quickstep/src/com/android/quickstep/util/SplitAnimationTimings.java
+++ b/quickstep/src/com/android/quickstep/util/SplitAnimationTimings.java
@@ -17,6 +17,7 @@
package com.android.quickstep.util;
import static com.android.app.animation.Interpolators.LINEAR;
+import static com.android.app.animation.Interpolators.STANDARD;
import android.view.animation.Interpolator;
@@ -38,6 +39,8 @@
int TABLET_APP_PAIR_LAUNCH_DURATION = 998;
/** Total duration (ms) for launching an app pair from its icon on phones. */
int PHONE_APP_PAIR_LAUNCH_DURATION = 915;
+ /** Total duration (ms) for fading out desktop tasks in split mode. */
+ int DESKTOP_FADE_OUT_DURATION = 200;
// Initialize timing classes so they can be accessed statically
SplitAnimationTimings TABLET_OVERVIEW_TO_SPLIT = new TabletOverviewToSplitTimings();
@@ -83,6 +86,10 @@
return (float) getStagedRectSlideEnd() / getDuration();
}
+ default float getDesktopFadeSplitAnimationEndOffset() {
+ return (float) DESKTOP_FADE_OUT_DURATION / getDuration();
+ }
+
// DEFAULT VALUES: We define default values here so that SplitAnimationTimings can be used
// flexibly in animation-running functions, e.g. a single function that handles 2 types of split
// animations. The values are not intended to be used, and can safely be removed if refactoring
@@ -124,5 +131,9 @@
default float getAppRevealEndOffset() { return 0; }
default Interpolator getCellSplitInterpolator() { return LINEAR; }
default Interpolator getIconFadeInterpolator() { return LINEAR; }
+
+ default Interpolator getDesktopTaskScaleInterpolator() {
+ return STANDARD;
+ }
}
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index cfadc35..ec169a8 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -29,7 +29,7 @@
import static com.android.app.animation.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.app.animation.Interpolators.FINAL_FRAME;
import static com.android.app.animation.Interpolators.LINEAR;
-import static com.android.app.animation.Interpolators.OVERSHOOT_0_75;
+import static com.android.app.animation.Interpolators.EMPHASIZED;
import static com.android.app.animation.Interpolators.clampToProgress;
import static com.android.launcher3.AbstractFloatingView.TYPE_REBIND_SAFE;
import static com.android.launcher3.AbstractFloatingView.TYPE_TASK_MENU;
@@ -689,8 +689,6 @@
protected int mRunningTaskViewId = -1;
private int mTaskViewIdCount;
protected boolean mRunningTaskTileHidden;
- @Nullable
- private Task[] mTmpRunningTasks;
protected int mFocusedTaskViewId = INVALID_TASK_ID;
private boolean mTaskIconScaledDown = false;
@@ -1563,9 +1561,6 @@
updateTaskStackListenerState();
mOrientationState.setRotationWatcherEnabled(enabled);
if (!enabled) {
- // Reset the running task when leaving overview since it can still have a reference to
- // its thumbnail
- mTmpRunningTasks = null;
mSplitBoundsConfig = null;
mTaskOverlayFactory.clearAllActiveState();
}
@@ -1773,26 +1768,17 @@
}
/**
- * Moves the running task to the front of the carousel in tablets, to minimize animation
- * required to move the running task in grid.
+ * Moves the running task to the expected position in the carousel. In tablets, this minimize
+ * animation required to move the running task into focused task position.
*/
- public void moveRunningTaskToFront() {
- if (!mContainer.getDeviceProfile().isTablet) {
- return;
- }
-
+ public void moveRunningTaskToExpectedPosition() {
TaskView runningTaskView = getRunningTaskView();
- if (runningTaskView == null) {
+ if (runningTaskView == null || mCurrentPage != indexOfChild(runningTaskView)) {
return;
}
- if (indexOfChild(runningTaskView) != mCurrentPage) {
- return;
- }
-
- int frontIndex = enableLargeDesktopWindowingTile() ? getDesktopTaskViewCount() : 0;
-
- if (mCurrentPage <= frontIndex) {
+ int runningTaskExpectedIndex = getRunningTaskExpectedIndex(runningTaskView);
+ if (mCurrentPage == runningTaskExpectedIndex) {
return;
}
@@ -1805,12 +1791,31 @@
mMovingTaskView = null;
runningTaskView.resetPersistentViewTransforms();
- addView(runningTaskView, frontIndex);
- setCurrentPage(frontIndex);
+ addView(runningTaskView, runningTaskExpectedIndex);
+ setCurrentPage(runningTaskExpectedIndex);
updateTaskSize();
}
+ private int getRunningTaskExpectedIndex(TaskView runningTaskView) {
+ if (mContainer.getDeviceProfile().isTablet) {
+ if (runningTaskView instanceof DesktopTaskView) {
+ return 0; // Desktop running task is always in front.
+ } else if (enableLargeDesktopWindowingTile()) {
+ return getDesktopTaskViewCount(); // Other running task is behind desktop tasks.
+ } else {
+ return 0;
+ }
+ } else {
+ int currentIndex = indexOfChild(runningTaskView);
+ if (currentIndex != -1) {
+ return currentIndex; // Keep the position if running task already in layout.
+ } else {
+ return 0; // New running task are added to the front to begin with.
+ }
+ }
+ }
+
@Override
protected void onScrollerAnimationAborted() {
ActiveGestureProtoLogProxy.logOnScrollerAnimationAborted();
@@ -2493,13 +2498,6 @@
List<Task> tasksToUpdate = containers.stream()
.map(TaskContainer::getTask)
.collect(Collectors.toCollection(ArrayList::new));
- if (mTmpRunningTasks != null) {
- for (Task t : mTmpRunningTasks) {
- // Skip loading if this is the task that we are animating into
- // TODO(b/280812109) change this equality check to use A.equals(B)
- tasksToUpdate.removeIf(task -> task == t);
- }
- }
if (enableRefactorTaskThumbnail()) {
visibleTaskIds.addAll(
tasksToUpdate.stream().map((task) -> task.key.id).toList());
@@ -2507,6 +2505,7 @@
if (tasksToUpdate.isEmpty()) {
continue;
}
+ int visibilityChanges = 0;
for (Task task : tasksToUpdate) {
if (!mHasVisibleTaskData.get(task.key.id)) {
// Ignore thumbnail update if it's current running task during the gesture
@@ -2515,21 +2514,28 @@
if (taskView == getRunningTaskView() && isGestureActive()) {
changes &= ~TaskView.FLAG_UPDATE_THUMBNAIL;
}
- taskView.onTaskListVisibilityChanged(true /* visible */, changes);
+ visibilityChanges |= changes;
}
mHasVisibleTaskData.put(task.key.id, true);
}
+ if (visibilityChanges != 0) {
+ taskView.onTaskListVisibilityChanged(true /* visible */, visibilityChanges);
+ }
} else {
+ int visibilityChanges = 0;
for (TaskContainer container : containers) {
if (container == null) {
continue;
}
if (mHasVisibleTaskData.get(container.getTask().key.id)) {
- taskView.onTaskListVisibilityChanged(false /* visible */, dataChanges);
+ visibilityChanges = dataChanges;
}
mHasVisibleTaskData.delete(container.getTask().key.id);
}
+ if (visibilityChanges != 0) {
+ taskView.onTaskListVisibilityChanged(false /* visible */, visibilityChanges);
+ }
}
}
if (enableRefactorTaskThumbnail()) {
@@ -2962,25 +2968,20 @@
final TaskView taskView;
if (needDesktopTask) {
taskView = getTaskViewFromPool(TaskViewType.DESKTOP);
- mTmpRunningTasks = Arrays.copyOf(runningTasks, runningTasks.length);
- ((DesktopTaskView) taskView).bind(Arrays.asList(mTmpRunningTasks),
+ ((DesktopTaskView) taskView).bind(Arrays.asList(runningTasks),
mOrientationState, mTaskOverlayFactory);
} else if (needGroupTaskView) {
taskView = getTaskViewFromPool(TaskViewType.GROUPED);
- mTmpRunningTasks = new Task[]{runningTasks[0], runningTasks[1]};
// When we create a placeholder task view mSplitBoundsConfig will be null, but with
// the actual app running we won't need to show the thumbnail until all the tasks
// load later anyways
- ((GroupedTaskView) taskView).bind(mTmpRunningTasks[0], mTmpRunningTasks[1],
+ ((GroupedTaskView) taskView).bind(runningTasks[0], runningTasks[1],
mOrientationState, mTaskOverlayFactory, mSplitBoundsConfig);
} else {
taskView = getTaskViewFromPool(TaskViewType.SINGLE);
- // The temporary running task is only used for the duration between the start of the
- // gesture and the task list is loaded and applied
- mTmpRunningTasks = new Task[]{runningTasks[0]};
- taskView.bind(mTmpRunningTasks[0], mOrientationState, mTaskOverlayFactory);
+ taskView.bind(runningTasks[0], mOrientationState, mTaskOverlayFactory);
}
- addView(taskView, 0);
+ addView(taskView, getRunningTaskExpectedIndex(taskView));
runningTaskViewId = taskView.getTaskViewId();
if (wasEmpty) {
addView(mClearAllButton);
@@ -3646,6 +3647,7 @@
// Grid specific properties.
boolean isFocusedTaskDismissed = false;
boolean isStagingFocusedTask = false;
+ boolean isSlidingTasks = false;
TaskView nextFocusedTaskView = null;
boolean nextFocusedTaskFromTop = false;
float dismissedTaskWidth = 0;
@@ -3701,6 +3703,7 @@
scrollDiffPerPage = Math.abs(oldScroll[1] - oldScroll[0]);
}
+ isSlidingTasks = isStagingFocusedTask || areAllDesktopTasksDismissed;
float dismissTranslationInterpolationEnd = 1;
boolean closeGapBetweenClearAll = false;
boolean isClearAllHidden = isClearAllHidden();
@@ -3841,14 +3844,14 @@
AnimUtils.getDeviceOverviewToSplitTimings(mContainer.getDeviceProfile().isTablet);
int distanceFromDismissedTask = 1;
- int stagingTranslation = 0;
- if (isStagingFocusedTask || areAllDesktopTasksDismissed) {
+ int slidingTranslation = 0;
+ if (isSlidingTasks) {
int nextSnappedPage = isStagingFocusedTask
? indexOfChild(mUtils.getFirstSmallTaskView(getTaskViews()))
: mUtils.getDesktopTaskViewCount(getTaskViews());
- stagingTranslation = getPagedOrientationHandler().getPrimaryScroll(this)
+ slidingTranslation = getPagedOrientationHandler().getPrimaryScroll(this)
- getScrollForPage(nextSnappedPage);
- stagingTranslation += mIsRtl ? newClearAllShortTotalWidthTranslation
+ slidingTranslation += mIsRtl ? newClearAllShortTotalWidthTranslation
: -newClearAllShortTotalWidthTranslation;
}
mDismissPrimaryTranslations = new int[taskCount];
@@ -3876,12 +3879,12 @@
// Animate task with index >= dismissed index and in the same row as the
// dismissed index or next focused index. Offset successive task dismissal
// durations for a staggered effect.
- int staggerColumn = isStagingFocusedTask
+ int staggerColumn = isSlidingTasks
? (int) Math.ceil(distanceFromDismissedTask / 2f)
: distanceFromDismissedTask;
// Set timings based on if user is initiating splitscreen on the focused task,
// or splitting/dismissing some other task.
- float animationStartProgress = isStagingFocusedTask
+ float animationStartProgress = isSlidingTasks
? Utilities.boundToRange(
splitTimings.getGridSlideStartOffset()
+ (splitTimings.getGridSlideStaggerOffset()
@@ -3892,7 +3895,7 @@
INITIAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
+ ADDITIONAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
* staggerColumn, 0f, dismissTranslationInterpolationEnd);
- float animationEndProgress = isStagingFocusedTask
+ float animationEndProgress = isSlidingTasks
? Utilities.boundToRange(
splitTimings.getGridSlideStartOffset()
+ (splitTimings.getGridSlideStaggerOffset() * staggerColumn)
@@ -3900,7 +3903,8 @@
0f,
dismissTranslationInterpolationEnd)
: dismissTranslationInterpolationEnd;
- Interpolator dismissInterpolator = isStagingFocusedTask ? OVERSHOOT_0_75 : LINEAR;
+
+ Interpolator dismissInterpolator = isSlidingTasks ? EMPHASIZED : LINEAR;
float primaryTranslation = 0;
if (taskView == nextFocusedTaskView) {
@@ -3927,14 +3931,30 @@
primaryTranslation +=
nextFocusedTaskView != null ? nextFocusedTaskWidth : dismissedTaskWidth;
}
- primaryTranslation += mIsRtl ? stagingTranslation : -stagingTranslation;
+ if (!(taskView instanceof DesktopTaskView)) {
+ primaryTranslation += mIsRtl ? slidingTranslation : -slidingTranslation;
+ }
if (primaryTranslation != 0) {
float finalTranslation = mIsRtl ? primaryTranslation : -primaryTranslation;
- anim.setFloat(taskView, taskView.getPrimaryDismissTranslationProperty(),
- finalTranslation,
+ float startTranslation = 0;
+ if (!(taskView instanceof DesktopTaskView) && slidingTranslation != 0) {
+ startTranslation = isTaskViewVisible(taskView) ? 0
+ : finalTranslation + (mIsRtl ? -mLastComputedTaskSize.right
+ : mLastComputedTaskSize.right);
+ animationStartProgress = Utilities.boundToRange(
+ animationStartProgress
+ + splitTimings.getDesktopFadeSplitAnimationEndOffset(),
+ 0f,
+ dismissTranslationInterpolationEnd);
+ }
+ Animator dismissAnimator = ObjectAnimator.ofFloat(taskView,
+ taskView.getPrimaryDismissTranslationProperty(),
+ startTranslation, finalTranslation);
+ dismissAnimator.setInterpolator(
clampToProgress(dismissInterpolator, animationStartProgress,
animationEndProgress));
+ anim.add(dismissAnimator);
mDismissPrimaryTranslations[i] = (int) finalTranslation;
distanceFromDismissedTask++;
}
@@ -4697,6 +4717,7 @@
return;
}
setContentDescription(isEmpty ? mEmptyMessage : "");
+ setFocusable(isEmpty);
mShowEmptyMessage = isEmpty;
updateEmptyStateUi(hasSizeChanged);
invalidate();
@@ -5111,13 +5132,37 @@
*/
public void handleDesktopTaskInSplitSelectState(PendingAnimation builder,
Interpolator deskTopFadeInterPolator) {
+ SplitAnimationTimings timings = AnimUtils.getDeviceOverviewToSplitTimings(
+ mContainer.getDeviceProfile().isTablet);
if (enableLargeDesktopWindowingTile()) {
- for (TaskView taskView : getTaskViews()) {
+ for (int i = 0; i < getTaskViewCount(); i++) {
+ TaskView taskView = requireTaskViewAt(i);
if (taskView instanceof DesktopTaskView) {
- // Correcting the animation for split mode since we hide DW in split.
+ // Setting pivot to scale down from screen centre.
+ if (i >= mCurrentPage - 1 && i <= mCurrentPage + 1) {
+ float pivotX;
+ if (i == mCurrentPage - 1) {
+ pivotX = mIsRtl ? taskView.getWidth() / 2f - mPageSpacing
+ - taskView.getWidth()
+ : taskView.getWidth() / 2f + mPageSpacing + taskView.getWidth();
+ } else if (i == mCurrentPage) {
+ pivotX = taskView.getWidth() / 2f;
+ } else {
+ pivotX = mIsRtl ? taskView.getWidth() + mPageSpacing
+ + taskView.getWidth()
+ : taskView.getWidth() - mPageSpacing - taskView.getWidth();
+ }
+ taskView.setPivotX(pivotX);
+ taskView.setPivotY(taskView.getHeight() / 2f);
+ builder.add(ObjectAnimator
+ .ofFloat(taskView, TaskView.DISMISS_SCALE, 0.95f),
+ clampToProgress(timings.getDesktopTaskScaleInterpolator(), 0f,
+ timings.getDesktopFadeSplitAnimationEndOffset()));
+ }
builder.addFloat(taskView.getSplitAlphaProperty(),
MULTI_PROPERTY_VALUE, 1f, 0f,
- clampToProgress(deskTopFadeInterPolator, 0f, 0.1f));
+ clampToProgress(deskTopFadeInterPolator, 0f,
+ timings.getDesktopFadeSplitAnimationEndOffset()));
}
}
}
@@ -5698,43 +5743,6 @@
updateCurrentTaskActionsVisibility();
loadVisibleTaskData(TaskView.FLAG_UPDATE_ALL);
updateEnabledOverlays();
-
- if (enableRefactorTaskThumbnail()) {
- int screenStart = 0;
- int screenEnd = 0;
- int centerPageIndex = 0;
- if (showAsGrid()) {
- screenStart = getPagedOrientationHandler().getPrimaryScroll(this);
- int pageOrientedSize = getPagedOrientationHandler().getMeasuredSize(this);
- screenEnd = screenStart + pageOrientedSize;
- } else {
- centerPageIndex = getPageNearestToCenterOfScreen();
- }
-
- Set<Integer> fullyVisibleTaskIds = new HashSet<>();
-
- // Update the task data for the in/visible children
- for (int i = 0; i < getTaskViewCount(); i++) {
- TaskView taskView = requireTaskViewAt(i);
- List<TaskContainer> containers = taskView.getTaskContainers();
- if (containers.isEmpty()) {
- continue;
- }
- boolean isFullyVisible;
- if (showAsGrid()) {
- isFullyVisible = isTaskViewFullyWithinBounds(taskView, screenStart,
- screenEnd);
- } else {
- isFullyVisible = i == centerPageIndex;
- }
- if (isFullyVisible) {
- List<Integer> taskIds = containers.stream().map(
- taskContainer -> taskContainer.getTask().key.id).toList();
- fullyVisibleTaskIds.addAll(taskIds);
- }
- }
- mRecentsViewModel.updateTasksFullyVisible(fullyVisibleTaskIds);
- }
}
@Override
@@ -6293,17 +6301,27 @@
}
private void updateEnabledOverlays() {
- TaskView focusedTaskView = getFocusedTaskView();
- for (TaskView taskView : getTaskViews()) {
- if (taskView == focusedTaskView) {
- continue;
+ if (enableRefactorTaskThumbnail()) {
+ Set<Integer> fullyVisibleTaskIds = new HashSet<>();
+ for (TaskView taskView : getTaskViews()) {
+ if (isTaskViewFullyVisible(taskView)) {
+ fullyVisibleTaskIds.addAll(taskView.getTaskIdSet());
+ }
}
- taskView.setOverlayEnabled(mOverlayEnabled && isTaskViewFullyVisible(taskView));
- }
- // Focus task overlay should be enabled and refreshed at last
- if (focusedTaskView != null) {
- focusedTaskView.setOverlayEnabled(
- mOverlayEnabled && isTaskViewFullyVisible(focusedTaskView));
+ mRecentsViewModel.updateTasksFullyVisible(fullyVisibleTaskIds);
+ } else {
+ TaskView focusedTaskView = getFocusedTaskView();
+ for (TaskView taskView : getTaskViews()) {
+ if (taskView == focusedTaskView) {
+ continue;
+ }
+ taskView.setOverlayEnabled(mOverlayEnabled && isTaskViewFullyVisible(taskView));
+ }
+ // Focus task overlay should be enabled and refreshed at last
+ if (focusedTaskView != null) {
+ focusedTaskView.setOverlayEnabled(
+ mOverlayEnabled && isTaskViewFullyVisible(focusedTaskView));
+ }
}
}
diff --git a/quickstep/src/com/android/quickstep/views/TaskContainer.kt b/quickstep/src/com/android/quickstep/views/TaskContainer.kt
index c940fb4..5de8d1c 100644
--- a/quickstep/src/com/android/quickstep/views/TaskContainer.kt
+++ b/quickstep/src/com/android/quickstep/views/TaskContainer.kt
@@ -16,19 +16,13 @@
package com.android.quickstep.views
-import android.content.Intent
import android.graphics.Bitmap
import android.view.View
import com.android.launcher3.Flags.enableRefactorTaskThumbnail
-import com.android.launcher3.Flags.privateSpaceRestrictAccessibilityDrag
-import com.android.launcher3.LauncherSettings
-import com.android.launcher3.model.data.ItemInfoWithIcon
-import com.android.launcher3.model.data.WorkspaceItemInfo
-import com.android.launcher3.pm.UserCache
+import com.android.launcher3.model.data.TaskViewItemInfo
import com.android.launcher3.util.SplitConfigurationOptions
import com.android.launcher3.util.TransformingTouchDelegate
import com.android.quickstep.TaskOverlayFactory
-import com.android.quickstep.TaskUtils
import com.android.quickstep.ViewUtils.addAccessibleChildToList
import com.android.quickstep.recents.di.RecentsDependencies
import com.android.quickstep.recents.di.get
@@ -123,27 +117,8 @@
else thumbnailViewDeprecated.sysUiStatusNavFlags
/** Builds proto for logging */
- val itemInfo: WorkspaceItemInfo
- get() =
- WorkspaceItemInfo().apply {
- itemType = LauncherSettings.Favorites.ITEM_TYPE_TASK
- container = LauncherSettings.Favorites.CONTAINER_TASKSWITCHER
- val componentKey = TaskUtils.getLaunchComponentKeyForTask(task.key)
- user = componentKey.user
- intent = Intent().setComponent(componentKey.componentName)
- title = task.title
- taskView.recentsView?.let { screenId = it.indexOfChild(taskView) }
- if (privateSpaceRestrictAccessibilityDrag()) {
- if (
- UserCache.getInstance(taskView.context)
- .getUserInfo(componentKey.user)
- .isPrivate
- ) {
- runtimeStatusFlags =
- runtimeStatusFlags or ItemInfoWithIcon.FLAG_NOT_PINNABLE
- }
- }
- }
+ val itemInfo: TaskViewItemInfo
+ get() = TaskViewItemInfo(this)
fun bind() {
digitalWellBeingToast?.bind(task, taskView, snapshotView, stagePosition)
@@ -181,5 +156,6 @@
addAccessibleChildToList(snapshotView, outChildren)
showWindowsView?.let { addAccessibleChildToList(it, outChildren) }
digitalWellBeingToast?.let { addAccessibleChildToList(it, outChildren) }
+ overlay.addChildForAccessibility(outChildren)
}
}
diff --git a/quickstep/src/com/android/quickstep/views/TaskView.kt b/quickstep/src/com/android/quickstep/views/TaskView.kt
index 819ab05..3586dfb 100644
--- a/quickstep/src/com/android/quickstep/views/TaskView.kt
+++ b/quickstep/src/com/android/quickstep/views/TaskView.kt
@@ -101,7 +101,7 @@
defStyleRes: Int = 0,
focusBorderAnimator: BorderAnimator? = null,
hoverBorderAnimator: BorderAnimator? = null,
- private val type: TaskViewType = TaskViewType.SINGLE,
+ val type: TaskViewType = TaskViewType.SINGLE,
protected val thumbnailFullscreenParams: FullscreenDrawParams = FullscreenDrawParams(context),
) : FrameLayout(context, attrs), ViewPool.Reusable {
/**
@@ -147,11 +147,6 @@
get() = taskContainers[0].task
@get:Deprecated("Use [taskContainers] instead.")
- val firstSnapshotView: View
- /** Returns the first snapshotView of the TaskView. */
- get() = taskContainers[0].snapshotView
-
- @get:Deprecated("Use [taskContainers] instead.")
val firstItemInfo: ItemInfo
get() = taskContainers[0].itemInfo
diff --git a/quickstep/src_protolog/com/android/quickstep/util/ActiveGestureProtoLogProxy.java b/quickstep/src_protolog/com/android/quickstep/util/ActiveGestureProtoLogProxy.java
index 0091036..f25f6f4 100644
--- a/quickstep/src_protolog/com/android/quickstep/util/ActiveGestureProtoLogProxy.java
+++ b/quickstep/src_protolog/com/android/quickstep/util/ActiveGestureProtoLogProxy.java
@@ -38,6 +38,8 @@
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.START_RECENTS_ANIMATION;
import static com.android.quickstep.util.QuickstepProtoLogGroup.ACTIVE_GESTURE_LOG;
+import android.graphics.Point;
+import android.graphics.RectF;
import android.view.MotionEvent;
import androidx.annotation.NonNull;
@@ -505,4 +507,16 @@
taskId,
packageName);
}
+
+ public static void logCreateTouchRegionForDisplay(int displayRotation,
+ @NonNull Point displaySize, @NonNull RectF swipeRegion, @NonNull RectF ohmRegion,
+ int gesturalHeight, int largerGesturalHeight, @NonNull String reason) {
+ if (!enableActiveGestureProtoLog()) return;
+ ProtoLog.d(ACTIVE_GESTURE_LOG,
+ "OrientationTouchTransformer.createRegionForDisplay: "
+ + "dispRot=%d, dispSize=%s, swipeRegion=%s, ohmRegion=%s, "
+ + "gesturalHeight=%d, largerGesturalHeight=%d, reason=%s",
+ displayRotation, displaySize.flattenToString(), swipeRegion.toShortString(),
+ ohmRegion.toShortString(), gesturalHeight, largerGesturalHeight, reason);
+ }
}
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/model/data/TaskViewItemInfoTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/model/data/TaskViewItemInfoTest.kt
new file mode 100644
index 0000000..0103e7e
--- /dev/null
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/model/data/TaskViewItemInfoTest.kt
@@ -0,0 +1,154 @@
+/*
+ * 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.data
+
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.platform.app.InstrumentationRegistry
+import com.android.launcher3.Flags.enableRefactorTaskThumbnail
+import com.android.launcher3.model.data.TaskViewItemInfo.Companion.createTaskViewAtom
+import com.android.launcher3.util.SplitConfigurationOptions
+import com.android.launcher3.util.TransformingTouchDelegate
+import com.android.quickstep.TaskOverlayFactory
+import com.android.quickstep.TaskOverlayFactory.TaskOverlay
+import com.android.quickstep.recents.di.RecentsDependencies
+import com.android.quickstep.task.thumbnail.TaskThumbnailView
+import com.android.quickstep.views.RecentsView
+import com.android.quickstep.views.TaskContainer
+import com.android.quickstep.views.TaskThumbnailViewDeprecated
+import com.android.quickstep.views.TaskView
+import com.android.quickstep.views.TaskViewIcon
+import com.android.quickstep.views.TaskViewType
+import com.android.systemui.shared.recents.model.Task
+import com.android.systemui.shared.recents.model.Task.TaskKey
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.kotlin.any
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.whenever
+
+/** Test for [TaskViewItemInfo] */
+@RunWith(AndroidJUnit4::class)
+class TaskViewItemInfoTest {
+ private val context = mock<Context>()
+ private val taskView = mock<TaskView>()
+ private val recentsView = mock<RecentsView<*, *>>()
+ private val overlayFactory = mock<TaskOverlayFactory>()
+
+ @Before
+ fun setUp() {
+ whenever(overlayFactory.createOverlay(any())).thenReturn(mock<TaskOverlay<*>>())
+ whenever(taskView.context).thenReturn(context)
+ whenever(taskView.recentsView).thenReturn(recentsView)
+ whenever(recentsView.indexOfChild(taskView)).thenReturn(TASK_VIEW_INDEX)
+ RecentsDependencies.initialize(InstrumentationRegistry.getInstrumentation().targetContext)
+ }
+
+ @Test
+ fun singleTask() {
+ val taskContainers = listOf(createTaskContainer(createTask(1)))
+ whenever(taskView.type).thenReturn(TaskViewType.SINGLE)
+ whenever(taskView.taskContainers).thenReturn(taskContainers)
+
+ val taskViewItemInfo = TaskViewItemInfo(taskContainers[0])
+ val taskViewAtom = taskViewItemInfo.taskViewAtom
+
+ assertThat(taskViewAtom)
+ .isEqualTo(
+ createTaskViewAtom(
+ type = 0,
+ index = TASK_VIEW_INDEX,
+ componentName = "${PACKAGE}/${CLASS}",
+ cardinality = 1,
+ )
+ )
+ }
+
+ @Test
+ fun splitTask() {
+ val taskContainers =
+ listOf(createTaskContainer(createTask(1)), createTaskContainer(createTask(2)))
+ whenever(taskView.type).thenReturn(TaskViewType.GROUPED)
+ whenever(taskView.taskContainers).thenReturn(taskContainers)
+
+ val taskViewItemInfo = TaskViewItemInfo(taskContainers[0])
+ val taskViewAtom = taskViewItemInfo.taskViewAtom
+
+ assertThat(taskViewAtom)
+ .isEqualTo(
+ createTaskViewAtom(
+ type = 1,
+ index = TASK_VIEW_INDEX,
+ componentName = "${PACKAGE}/${CLASS}",
+ cardinality = 2,
+ )
+ )
+ }
+
+ @Test
+ fun desktopTask() {
+ val taskContainers =
+ listOf(
+ createTaskContainer(createTask(1)),
+ createTaskContainer(createTask(2)),
+ createTaskContainer(createTask(3)),
+ )
+ whenever(taskView.type).thenReturn(TaskViewType.DESKTOP)
+ whenever(taskView.taskContainers).thenReturn(taskContainers)
+
+ val taskViewItemInfo = TaskViewItemInfo(taskContainers[0])
+ val taskViewAtom = taskViewItemInfo.taskViewAtom
+
+ assertThat(taskViewAtom)
+ .isEqualTo(
+ createTaskViewAtom(
+ type = 2,
+ index = TASK_VIEW_INDEX,
+ componentName = "${PACKAGE}/${CLASS}",
+ cardinality = 3,
+ )
+ )
+ }
+
+ private fun createTask(id: Int) =
+ Task(TaskKey(id, 0, Intent(), ComponentName(PACKAGE, CLASS), 0, 2000))
+
+ private fun createTaskContainer(task: Task): TaskContainer {
+ return TaskContainer(
+ taskView,
+ task,
+ if (enableRefactorTaskThumbnail()) mock<TaskThumbnailView>()
+ else mock<TaskThumbnailViewDeprecated>(),
+ mock<TaskViewIcon>(),
+ mock<TransformingTouchDelegate>(),
+ SplitConfigurationOptions.STAGE_POSITION_UNDEFINED,
+ digitalWellBeingToast = null,
+ showWindowsView = null,
+ overlayFactory,
+ )
+ }
+
+ companion object {
+ const val PACKAGE = "package"
+ const val CLASS = "class"
+ const val TASK_VIEW_INDEX = 4
+ }
+}
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewTest.kt
new file mode 100644
index 0000000..0bb404b
--- /dev/null
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewTest.kt
@@ -0,0 +1,157 @@
+/*
+ * 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.taskbar
+
+import android.platform.test.flag.junit.FlagsParameterization
+import android.platform.test.flag.junit.FlagsParameterization.allCombinationsOf
+import android.platform.test.flag.junit.SetFlagsRule
+import com.android.launcher3.Flags.FLAG_TASKBAR_RECENTS_LAYOUT_TRANSITION
+import com.android.launcher3.R
+import com.android.launcher3.taskbar.TaskbarControllerTestUtil.runOnMainSync
+import com.android.launcher3.taskbar.TaskbarIconType.ALL_APPS
+import com.android.launcher3.taskbar.TaskbarIconType.DIVIDER
+import com.android.launcher3.taskbar.TaskbarIconType.HOTSEAT
+import com.android.launcher3.taskbar.TaskbarIconType.RECENT
+import com.android.launcher3.taskbar.TaskbarViewTestUtil.assertThat
+import com.android.launcher3.taskbar.TaskbarViewTestUtil.createHotseatItems
+import com.android.launcher3.taskbar.TaskbarViewTestUtil.createRecents
+import com.android.launcher3.taskbar.rules.TaskbarDeviceEmulationRule
+import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule
+import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule.ForceRtl
+import com.android.launcher3.taskbar.rules.TaskbarWindowSandboxContext
+import com.android.launcher3.util.LauncherMultivalentJUnit.Companion.isRunningInRobolectric
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4
+import platform.test.runner.parameterized.Parameters
+
+@RunWith(ParameterizedAndroidJunit4::class)
+class TaskbarViewTest(deviceName: String, flags: FlagsParameterization) {
+
+ companion object {
+ @JvmStatic
+ @Parameters(name = "{0},{1}")
+ fun getParams(): List<Array<Any>> {
+ val devices =
+ if (isRunningInRobolectric) {
+ listOf("pixelFoldable2023", "pixelTablet2023")
+ } else {
+ listOf("onDevice") // Unused.
+ }
+ val flags = allCombinationsOf(FLAG_TASKBAR_RECENTS_LAYOUT_TRANSITION)
+ return devices.flatMap { d -> flags.map { f -> arrayOf(d, f) } } // Cartesian product.
+ }
+ }
+
+ @get:Rule(order = 0) val setFlagsRule = SetFlagsRule(flags)
+ @get:Rule(order = 1) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 2) val deviceEmulationRule = TaskbarDeviceEmulationRule(context, deviceName)
+ @get:Rule(order = 3) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+
+ private lateinit var taskbarView: TaskbarView
+
+ @Before
+ fun obtainView() {
+ taskbarView = taskbarUnitTestRule.activityContext.dragLayer.findViewById(R.id.taskbar_view)
+ }
+
+ @Test
+ fun testUpdateItems_noItems_hasOnlyAllApps() {
+ runOnMainSync { taskbarView.updateItems(emptyArray(), emptyList()) }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS)
+ }
+
+ @Test
+ fun testUpdateItems_hotseatItems_hasDividerBetweenAllAppsAndHotseat() {
+ runOnMainSync { taskbarView.updateItems(createHotseatItems(2), emptyList()) }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS, DIVIDER, HOTSEAT, HOTSEAT)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtlWithHotseatItems_hasDividerBetweenHotseatAndAllApps() {
+ runOnMainSync { taskbarView.updateItems(createHotseatItems(2), emptyList()) }
+ assertThat(taskbarView).hasIconTypes(HOTSEAT, HOTSEAT, DIVIDER, ALL_APPS)
+ }
+
+ @Test
+ fun testUpdateItems_withNullHotseatItem_filtersNullItem() {
+ runOnMainSync {
+ taskbarView.updateItems(arrayOf(*createHotseatItems(2), null), emptyList())
+ }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS, DIVIDER, HOTSEAT, HOTSEAT)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtlWithNullHotseatItem_filtersNullItem() {
+ runOnMainSync {
+ taskbarView.updateItems(arrayOf(*createHotseatItems(2), null), emptyList())
+ }
+ assertThat(taskbarView).hasIconTypes(HOTSEAT, HOTSEAT, DIVIDER, ALL_APPS)
+ }
+
+ @Test
+ fun testUpdateItems_recentsItems_hasDividerBetweenAllAppsAndRecents() {
+ runOnMainSync { taskbarView.updateItems(emptyArray(), createRecents(4)) }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS, DIVIDER, *RECENT * 4)
+ }
+
+ @Test
+ fun testUpdateItems_hotseatItemsAndRecents_hasDividerBetweenHotseatAndRecents() {
+ runOnMainSync { taskbarView.updateItems(createHotseatItems(3), createRecents(2)) }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS, *HOTSEAT * 3, DIVIDER, *RECENT * 2)
+ }
+
+ @Test
+ fun testUpdateItems_addHotseatItem_updatesHotseat() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(1), createRecents(1))
+ taskbarView.updateItems(createHotseatItems(2), createRecents(1))
+ }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS, *HOTSEAT * 2, DIVIDER, RECENT)
+ }
+
+ @Test
+ fun testUpdateItems_removeHotseatItem_updatesHotseat() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(2), createRecents(1))
+ taskbarView.updateItems(createHotseatItems(1), createRecents(1))
+ }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS, HOTSEAT, DIVIDER, RECENT)
+ }
+
+ @Test
+ fun testUpdateItems_addRecentsItem_updatesRecents() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(1), createRecents(1))
+ taskbarView.updateItems(createHotseatItems(1), createRecents(2))
+ }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS, HOTSEAT, DIVIDER, *RECENT * 2)
+ }
+
+ @Test
+ fun testUpdateItems_removeRecentsItem_updatesRecents() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(1), createRecents(2))
+ taskbarView.updateItems(createHotseatItems(1), createRecents(1))
+ }
+ assertThat(taskbarView).hasIconTypes(ALL_APPS, HOTSEAT, DIVIDER, RECENT)
+ }
+}
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewTestUtil.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewTestUtil.kt
new file mode 100644
index 0000000..a6bdbb0
--- /dev/null
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewTestUtil.kt
@@ -0,0 +1,123 @@
+/*
+ * 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.taskbar
+
+import android.content.ComponentName
+import android.content.Intent
+import android.os.Process
+import com.android.launcher3.model.data.AppInfo
+import com.android.launcher3.model.data.ItemInfo
+import com.android.launcher3.model.data.WorkspaceItemInfo
+import com.android.launcher3.taskbar.TaskbarIconType.ALL_APPS
+import com.android.launcher3.taskbar.TaskbarIconType.DIVIDER
+import com.android.launcher3.taskbar.TaskbarIconType.HOTSEAT
+import com.android.launcher3.taskbar.TaskbarIconType.OVERFLOW
+import com.android.launcher3.taskbar.TaskbarIconType.RECENT
+import com.android.quickstep.util.GroupTask
+import com.android.systemui.shared.recents.model.Task
+import com.android.systemui.shared.recents.model.Task.TaskKey
+import com.google.common.truth.FailureMetadata
+import com.google.common.truth.Subject
+import com.google.common.truth.Truth.assertAbout
+import com.google.common.truth.Truth.assertThat
+
+/** Common utilities for testing [TaskbarView]. */
+object TaskbarViewTestUtil {
+
+ /** Begins an assertion about a [TaskbarView]. */
+ fun assertThat(view: TaskbarView): TaskbarViewSubject {
+ return assertAbout(::TaskbarViewSubject).that(view)
+ }
+
+ /** Creates an array of fake hotseat items. */
+ fun createHotseatItems(size: Int): Array<ItemInfo> {
+ return Array(size) {
+ WorkspaceItemInfo(
+ AppInfo(TEST_COMPONENT, "Test App $it", Process.myUserHandle(), Intent())
+ )
+ .apply { id = it }
+ }
+ }
+
+ /** Creates a list of fake recent tasks. */
+ fun createRecents(size: Int): List<GroupTask> {
+ return List(size) {
+ GroupTask(
+ Task().apply {
+ key =
+ TaskKey(
+ it,
+ 5,
+ TEST_INTENT,
+ TEST_COMPONENT,
+ Process.myUserHandle().identifier,
+ System.currentTimeMillis(),
+ )
+ }
+ )
+ }
+ }
+}
+
+/** A `Truth` [Subject] with extensions for verifying [TaskbarView]. */
+class TaskbarViewSubject(failureMetadata: FailureMetadata, private val view: TaskbarView) :
+ Subject(failureMetadata, view) {
+
+ /** Verifies that the types of icons match [expectedTypes] in order. */
+ fun hasIconTypes(vararg expectedTypes: TaskbarIconType) {
+ val actualTypes =
+ view.iconViews.map {
+ when (it) {
+ view.allAppsButtonContainer -> ALL_APPS
+ view.taskbarDividerViewContainer -> DIVIDER
+ view.taskbarOverflowView -> OVERFLOW
+ else ->
+ when (it.tag) {
+ is ItemInfo -> HOTSEAT
+ is GroupTask -> RECENT
+ else -> throw IllegalStateException("Unknown type for $it")
+ }
+ }
+ }
+ assertThat(actualTypes).containsExactly(*expectedTypes).inOrder()
+ }
+
+ /** Verifies that recents from [startIndex] have IDs that match [expectedIds] in order. */
+ fun hasRecentsOrder(startIndex: Int, expectedIds: List<Int>) {
+ val actualIds =
+ view.iconViews.slice(startIndex..<expectedIds.size).map {
+ assertThat(it.tag).isInstanceOf(GroupTask::class.java)
+ (it.tag as? GroupTask)?.task1?.key?.id
+ }
+ assertThat(actualIds).containsExactlyElementsIn(expectedIds).inOrder()
+ }
+}
+
+/** Types of icons in the [TaskbarView]. */
+enum class TaskbarIconType {
+ ALL_APPS,
+ DIVIDER,
+ HOTSEAT,
+ RECENT,
+ OVERFLOW;
+
+ operator fun times(size: Int) = Array(size) { this }
+}
+
+private const val TEST_PACKAGE = "com.android.launcher3.taskbar"
+private val TEST_COMPONENT = ComponentName(TEST_PACKAGE, "Activity")
+private val TEST_INTENT = Intent().apply { `package` = TEST_PACKAGE }
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewWithLayoutTransitionTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewWithLayoutTransitionTest.kt
new file mode 100644
index 0000000..78d8e5d
--- /dev/null
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewWithLayoutTransitionTest.kt
@@ -0,0 +1,134 @@
+/*
+ * 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.taskbar
+
+import android.platform.test.annotations.EnableFlags
+import android.platform.test.flag.junit.SetFlagsRule
+import com.android.launcher3.Flags.FLAG_TASKBAR_RECENTS_LAYOUT_TRANSITION
+import com.android.launcher3.R
+import com.android.launcher3.taskbar.TaskbarControllerTestUtil.runOnMainSync
+import com.android.launcher3.taskbar.TaskbarIconType.ALL_APPS
+import com.android.launcher3.taskbar.TaskbarIconType.DIVIDER
+import com.android.launcher3.taskbar.TaskbarIconType.HOTSEAT
+import com.android.launcher3.taskbar.TaskbarIconType.RECENT
+import com.android.launcher3.taskbar.TaskbarViewTestUtil.assertThat
+import com.android.launcher3.taskbar.TaskbarViewTestUtil.createHotseatItems
+import com.android.launcher3.taskbar.TaskbarViewTestUtil.createRecents
+import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule
+import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule.ForceRtl
+import com.android.launcher3.taskbar.rules.TaskbarWindowSandboxContext
+import com.android.launcher3.util.LauncherMultivalentJUnit
+import com.android.launcher3.util.LauncherMultivalentJUnit.EmulatedDevices
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(LauncherMultivalentJUnit::class)
+@EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
+@EnableFlags(FLAG_TASKBAR_RECENTS_LAYOUT_TRANSITION)
+class TaskbarViewWithLayoutTransitionTest {
+
+ @get:Rule(order = 0) val setFlagsRule = SetFlagsRule()
+ @get:Rule(order = 1) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 2) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+
+ private lateinit var taskbarView: TaskbarView
+
+ @Before
+ fun obtainView() {
+ taskbarView = taskbarUnitTestRule.activityContext.dragLayer.findViewById(R.id.taskbar_view)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_hotseatItems_hasDividerBetweenHotseatAndAllApps() {
+ runOnMainSync { taskbarView.updateItems(createHotseatItems(2), emptyList()) }
+ assertThat(taskbarView).hasIconTypes(*HOTSEAT * 2, DIVIDER, ALL_APPS)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_recentsItems_hasDividerBetweenRecentsAndAllApps() {
+ runOnMainSync { taskbarView.updateItems(emptyArray(), createRecents(4)) }
+ assertThat(taskbarView).hasIconTypes(*RECENT * 4, DIVIDER, ALL_APPS)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_recentsItems_recentsAreReversed() {
+ runOnMainSync { taskbarView.updateItems(emptyArray(), createRecents(4)) }
+ assertThat(taskbarView).hasRecentsOrder(startIndex = 0, expectedIds = listOf(3, 2, 1, 0))
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_hotseatItemsAndRecents_hasDividerBetweenRecentsAndHotseat() {
+ runOnMainSync { taskbarView.updateItems(createHotseatItems(3), createRecents(2)) }
+ assertThat(taskbarView).hasIconTypes(*RECENT * 2, DIVIDER, *HOTSEAT * 3, ALL_APPS)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_addHotseatItemWithoutRecents_updatesHotseat() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(1), emptyList())
+ taskbarView.updateItems(createHotseatItems(2), emptyList())
+ }
+ assertThat(taskbarView).hasIconTypes(*HOTSEAT * 2, DIVIDER, ALL_APPS)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_addHotseatItemWithRecents_updatesHotseat() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(1), createRecents(1))
+ taskbarView.updateItems(createHotseatItems(2), createRecents(1))
+ }
+ assertThat(taskbarView).hasIconTypes(RECENT, DIVIDER, *HOTSEAT * 2, ALL_APPS)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_removeHotseatItem_updatesHotseat() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(2), createRecents(1))
+ taskbarView.updateItems(createHotseatItems(1), createRecents(1))
+ }
+ assertThat(taskbarView).hasIconTypes(RECENT, DIVIDER, HOTSEAT, ALL_APPS)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_addRecentsItem_updatesRecents() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(1), createRecents(1))
+ taskbarView.updateItems(createHotseatItems(1), createRecents(2))
+ }
+ assertThat(taskbarView).hasIconTypes(*RECENT * 2, DIVIDER, HOTSEAT, ALL_APPS)
+ }
+
+ @Test
+ @ForceRtl
+ fun testUpdateItems_rtl_removeRecentsItem_updatesRecents() {
+ runOnMainSync {
+ taskbarView.updateItems(createHotseatItems(1), createRecents(2))
+ taskbarView.updateItems(createHotseatItems(1), createRecents(1))
+ }
+ assertThat(taskbarView).hasIconTypes(RECENT, DIVIDER, HOTSEAT, ALL_APPS)
+ }
+}
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimatorTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimatorTest.kt
index fe448f4..8beceb0 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimatorTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/bubbles/animation/BubbleBarViewAnimatorTest.kt
@@ -48,6 +48,8 @@
import com.android.wm.shell.shared.animation.PhysicsAnimatorTestUtils
import com.android.wm.shell.shared.bubbles.BubbleInfo
import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Semaphore
+import java.util.concurrent.TimeUnit
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -765,10 +767,12 @@
whenever(bubbleStashController.bubbleBarTranslationY)
.thenReturn(BAR_TRANSLATION_Y_FOR_HOTSEAT)
- val barAnimator = PhysicsAnimator.getInstance(bubbleBarView)
-
+ val semaphore = Semaphore(0)
var notifiedExpanded = false
- val onExpanded = Runnable { notifiedExpanded = true }
+ val onExpanded = Runnable {
+ notifiedExpanded = true
+ semaphore.release()
+ }
val animator =
BubbleBarViewAnimator(
bubbleBarView,
@@ -793,7 +797,12 @@
// the lift animation is complete; the spring back animation should start now
InstrumentationRegistry.getInstrumentation().runOnMainSync {}
- barAnimator.assertIsRunning()
+
+ InstrumentationRegistry.getInstrumentation().waitForIdleSync()
+
+ assertThat(semaphore.tryAcquire(5, TimeUnit.SECONDS)).isTrue()
+ // we should be expanded now
+ assertThat(bubbleBarView.isExpanded).isTrue()
PhysicsAnimatorTestUtils.blockUntilAnimationsEnd(DynamicAnimation.TRANSLATION_Y)
// verify there is no hide animation
@@ -801,7 +810,6 @@
assertThat(animator.isAnimating).isFalse()
assertThat(bubbleBarView.translationY).isEqualTo(BAR_TRANSLATION_Y_FOR_HOTSEAT)
- assertThat(bubbleBarView.isExpanded).isTrue()
verify(bubbleStashController).showBubbleBarImmediate()
assertThat(notifiedExpanded).isTrue()
}
@@ -813,10 +821,12 @@
whenever(bubbleStashController.bubbleBarTranslationY)
.thenReturn(BAR_TRANSLATION_Y_FOR_HOTSEAT)
- val barAnimator = PhysicsAnimator.getInstance(bubbleBarView)
-
+ val semaphore = Semaphore(0)
var notifiedExpanded = false
- val onExpanded = Runnable { notifiedExpanded = true }
+ val onExpanded = Runnable {
+ notifiedExpanded = true
+ semaphore.release()
+ }
val animator =
BubbleBarViewAnimator(
bubbleBarView,
@@ -839,6 +849,10 @@
animatorTestRule.advanceTimeBy(100)
}
+ // verify there is a pending hide animation
+ assertThat(animatorScheduler.delayedBlock).isNotNull()
+ assertThat(animator.isAnimating).isTrue()
+
// send the expand signal in the middle of the lift animation
InstrumentationRegistry.getInstrumentation().runOnMainSync {
animator.expandedWhileAnimating()
@@ -849,14 +863,11 @@
animatorTestRule.advanceTimeBy(150)
}
- // verify there is a pending hide animation
- assertThat(animatorScheduler.delayedBlock).isNotNull()
- assertThat(animator.isAnimating).isTrue()
-
// the lift animation is complete; the spring back animation should start now. wait for it
// to complete
InstrumentationRegistry.getInstrumentation().runOnMainSync {}
- barAnimator.assertIsRunning()
+
+ assertThat(semaphore.tryAcquire(5, TimeUnit.SECONDS)).isTrue()
PhysicsAnimatorTestUtils.blockUntilAnimationsEnd(DynamicAnimation.TRANSLATION_Y)
// verify that the hide animation was canceled
diff --git a/quickstep/tests/src/com/android/quickstep/DesktopSystemShortcutTest.kt b/quickstep/tests/src/com/android/quickstep/DesktopSystemShortcutTest.kt
index 231c113..94e7c2e 100644
--- a/quickstep/tests/src/com/android/quickstep/DesktopSystemShortcutTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/DesktopSystemShortcutTest.kt
@@ -18,8 +18,6 @@
import android.content.ComponentName
import android.content.Intent
-import android.platform.test.flag.junit.SetFlagsRule
-import com.android.dx.mockito.inline.extended.ExtendedMockito
import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
import com.android.dx.mockito.inline.extended.StaticMockitoSession
import com.android.launcher3.AbstractFloatingView
@@ -27,7 +25,7 @@
import com.android.launcher3.Flags.enableRefactorTaskThumbnail
import com.android.launcher3.logging.StatsLogManager
import com.android.launcher3.logging.StatsLogManager.LauncherEvent
-import com.android.launcher3.model.data.WorkspaceItemInfo
+import com.android.launcher3.model.data.TaskViewItemInfo
import com.android.launcher3.uioverrides.QuickstepLauncher
import com.android.launcher3.util.SplitConfigurationOptions
import com.android.launcher3.util.TransformingTouchDelegate
@@ -40,14 +38,13 @@
import com.android.quickstep.views.TaskViewIcon
import com.android.systemui.shared.recents.model.Task
import com.android.systemui.shared.recents.model.Task.TaskKey
-import com.android.window.flags.Flags
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
+import org.mockito.Mockito.`when`
import org.mockito.kotlin.any
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
@@ -57,24 +54,18 @@
import org.mockito.kotlin.whenever
import org.mockito.quality.Strictness
-/** Test for DesktopSystemShortcut */
+/** Test for [DesktopSystemShortcut] */
class DesktopSystemShortcutTest {
- @get:Rule val setFlagsRule = SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT)
-
private val launcher: QuickstepLauncher = mock()
private val statsLogManager: StatsLogManager = mock()
private val statsLogger: StatsLogManager.StatsLogger = mock()
private val recentsView: LauncherRecentsView = mock()
private val taskView: TaskView = mock()
- private val workspaceItemInfo: WorkspaceItemInfo = mock()
private val abstractFloatingViewHelper: AbstractFloatingViewHelper = mock()
- private val iconView: TaskViewIcon = mock()
- private val transformingTouchDelegate: TransformingTouchDelegate = mock()
+ private val overlayFactory: TaskOverlayFactory = mock()
private val factory: TaskShortcutFactory =
DesktopSystemShortcut.createFactory(abstractFloatingViewHelper)
- private val overlayFactory: TaskOverlayFactory = mock()
- private val overlay: TaskOverlay<*> = mock()
private lateinit var mockitoSession: StaticMockitoSession
@@ -83,11 +74,10 @@
mockitoSession =
mockitoSession()
.strictness(Strictness.LENIENT)
- .spyStatic(DesktopModeStatus::class.java)
+ .mockStatic(DesktopModeStatus::class.java)
.startMocking()
- ExtendedMockito.doReturn(true).`when` { DesktopModeStatus.enforceDeviceRestrictions() }
- ExtendedMockito.doReturn(true).`when` { DesktopModeStatus.isDesktopModeSupported(any()) }
- whenever(overlayFactory.createOverlay(any())).thenReturn(overlay)
+ whenever(DesktopModeStatus.canEnterDesktopMode(any())).thenReturn(true)
+ whenever(overlayFactory.createOverlay(any())).thenReturn(mock<TaskOverlay<*>>())
}
@After
@@ -97,22 +87,7 @@
@Test
fun createDesktopTaskShortcutFactory_desktopModeDisabled() {
- setFlagsRule.disableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
-
- val task =
- Task(TaskKey(1, 0, Intent(), ComponentName("", ""), 0, 2000)).apply {
- isDockable = true
- }
- val taskContainer = createTaskContainer(task)
-
- val shortcuts = factory.getShortcuts(launcher, taskContainer)
- assertThat(shortcuts).isNull()
- }
-
- @Test
- fun createDesktopTaskShortcutFactory_desktopModeEnabled_DeviceNotSupported() {
- setFlagsRule.enableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
- ExtendedMockito.doReturn(false).`when` { DesktopModeStatus.isDesktopModeSupported(any()) }
+ `when`(DesktopModeStatus.canEnterDesktopMode(any())).thenReturn(false)
val taskContainer = createTaskContainer(createTask())
@@ -121,22 +96,7 @@
}
@Test
- fun createDesktopTaskShortcutFactory_desktopModeEnabled_DeviceNotSupported_OverrideEnabled() {
- setFlagsRule.enableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
- ExtendedMockito.doReturn(false).`when` { DesktopModeStatus.isDesktopModeSupported(any()) }
- ExtendedMockito.doReturn(false).`when` { DesktopModeStatus.enforceDeviceRestrictions() }
-
- val taskContainer = spy(createTaskContainer(createTask()))
- doReturn(workspaceItemInfo).whenever(taskContainer).itemInfo
-
- val shortcuts = factory.getShortcuts(launcher, taskContainer)
- assertThat(shortcuts).isNotNull()
- }
-
- @Test
fun createDesktopTaskShortcutFactory_undockable() {
- setFlagsRule.enableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
-
val unDockableTask = createTask().apply { isDockable = false }
val taskContainer = createTaskContainer(unDockableTask)
@@ -146,8 +106,6 @@
@Test
fun desktopSystemShortcutClicked() {
- setFlagsRule.enableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
-
val task = createTask()
val taskContainer = spy(createTaskContainer(task))
@@ -159,13 +117,14 @@
val successCallback = it.getArgument<Runnable>(2)
successCallback.run()
}
- doReturn(workspaceItemInfo).whenever(taskContainer).itemInfo
+ val taskViewItemInfo = mock<TaskViewItemInfo>()
+ doReturn(taskViewItemInfo).whenever(taskContainer).itemInfo
val shortcuts = factory.getShortcuts(launcher, taskContainer)
- assertThat(shortcuts).hasSize(1)
- assertThat(shortcuts!!.first()).isInstanceOf(DesktopSystemShortcut::class.java)
+ assertThat(shortcuts).isNotNull()
+ assertThat(shortcuts!!.single()).isInstanceOf(DesktopSystemShortcut::class.java)
- val desktopShortcut = shortcuts.first() as DesktopSystemShortcut
+ val desktopShortcut = shortcuts.single() as DesktopSystemShortcut
desktopShortcut.onClick(taskView)
@@ -178,30 +137,24 @@
eq(DesktopModeTransitionSource.APP_FROM_OVERVIEW),
any(),
)
- verify(statsLogger).withItemInfo(workspaceItemInfo)
+ verify(statsLogger).withItemInfo(taskViewItemInfo)
verify(statsLogger).log(LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_DESKTOP_TAP)
}
- private fun createTask(): Task {
- return Task(TaskKey(1, 0, Intent(), ComponentName("", ""), 0, 2000)).apply {
- isDockable = true
- }
- }
+ private fun createTask() =
+ Task(TaskKey(1, 0, Intent(), ComponentName("", ""), 0, 2000)).apply { isDockable = true }
- private fun createTaskContainer(task: Task): TaskContainer {
- val snapshotView =
- if (enableRefactorTaskThumbnail()) mock<TaskThumbnailView>()
- else mock<TaskThumbnailViewDeprecated>()
- return TaskContainer(
+ private fun createTaskContainer(task: Task) =
+ TaskContainer(
taskView,
task,
- snapshotView,
- iconView,
- transformingTouchDelegate,
+ if (enableRefactorTaskThumbnail()) mock<TaskThumbnailView>()
+ else mock<TaskThumbnailViewDeprecated>(),
+ mock<TaskViewIcon>(),
+ mock<TransformingTouchDelegate>(),
SplitConfigurationOptions.STAGE_POSITION_UNDEFINED,
digitalWellBeingToast = null,
showWindowsView = null,
overlayFactory,
)
- }
}
diff --git a/quickstep/tests/src/com/android/quickstep/ExternalDisplaySystemShortcutTest.kt b/quickstep/tests/src/com/android/quickstep/ExternalDisplaySystemShortcutTest.kt
index 8968b9c..9c2c13c 100644
--- a/quickstep/tests/src/com/android/quickstep/ExternalDisplaySystemShortcutTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/ExternalDisplaySystemShortcutTest.kt
@@ -18,10 +18,8 @@
import android.content.ComponentName
import android.content.Intent
-import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.SetFlagsRule
-import com.android.dx.mockito.inline.extended.ExtendedMockito
import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
import com.android.dx.mockito.inline.extended.StaticMockitoSession
import com.android.launcher3.AbstractFloatingView
@@ -29,7 +27,7 @@
import com.android.launcher3.Flags.enableRefactorTaskThumbnail
import com.android.launcher3.logging.StatsLogManager
import com.android.launcher3.logging.StatsLogManager.LauncherEvent
-import com.android.launcher3.model.data.WorkspaceItemInfo
+import com.android.launcher3.model.data.TaskViewItemInfo
import com.android.launcher3.uioverrides.QuickstepLauncher
import com.android.launcher3.util.SplitConfigurationOptions
import com.android.launcher3.util.TransformingTouchDelegate
@@ -49,6 +47,7 @@
import org.junit.Before
import org.junit.Rule
import org.junit.Test
+import org.mockito.Mockito.`when`
import org.mockito.kotlin.any
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
@@ -58,7 +57,7 @@
import org.mockito.kotlin.whenever
import org.mockito.quality.Strictness
-/** Test for ExternalDisplaySystemShortcut */
+/** Test for [ExternalDisplaySystemShortcut] */
class ExternalDisplaySystemShortcutTest {
@get:Rule val setFlagsRule = SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT)
@@ -68,14 +67,10 @@
private val statsLogger: StatsLogManager.StatsLogger = mock()
private val recentsView: LauncherRecentsView = mock()
private val taskView: TaskView = mock()
- private val workspaceItemInfo: WorkspaceItemInfo = mock()
private val abstractFloatingViewHelper: AbstractFloatingViewHelper = mock()
- private val iconView: TaskViewIcon = mock()
- private val transformingTouchDelegate: TransformingTouchDelegate = mock()
+ private val overlayFactory: TaskOverlayFactory = mock()
private val factory: TaskShortcutFactory =
ExternalDisplaySystemShortcut.createFactory(abstractFloatingViewHelper)
- private val overlayFactory: TaskOverlayFactory = mock()
- private val overlay: TaskOverlay<*> = mock()
private lateinit var mockitoSession: StaticMockitoSession
@@ -84,11 +79,10 @@
mockitoSession =
mockitoSession()
.strictness(Strictness.LENIENT)
- .spyStatic(DesktopModeStatus::class.java)
+ .mockStatic(DesktopModeStatus::class.java)
.startMocking()
- ExtendedMockito.doReturn(true).`when` { DesktopModeStatus.enforceDeviceRestrictions() }
- ExtendedMockito.doReturn(true).`when` { DesktopModeStatus.isDesktopModeSupported(any()) }
- whenever(overlayFactory.createOverlay(any())).thenReturn(overlay)
+ whenever(DesktopModeStatus.canEnterDesktopMode(any())).thenReturn(true)
+ whenever(overlayFactory.createOverlay(any())).thenReturn(mock<TaskOverlay<*>>())
}
@After
@@ -97,23 +91,9 @@
}
@Test
- @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
@EnableFlags(Flags.FLAG_MOVE_TO_EXTERNAL_DISPLAY_SHORTCUT)
fun createExternalDisplayTaskShortcut_desktopModeDisabled() {
- val task = createTask()
- val taskContainer = createTaskContainer(task)
-
- val shortcuts = factory.getShortcuts(launcher, taskContainer)
- assertThat(shortcuts).isNull()
- }
-
- @Test
- @EnableFlags(
- Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
- Flags.FLAG_MOVE_TO_EXTERNAL_DISPLAY_SHORTCUT,
- )
- fun createExternalDisplayTaskShortcut_desktopModeEnabled_deviceNotSupported() {
- ExtendedMockito.doReturn(false).`when` { DesktopModeStatus.isDesktopModeSupported(any()) }
+ `when`(DesktopModeStatus.canEnterDesktopMode(any())).thenReturn(false)
val taskContainer = createTaskContainer(createTask())
@@ -122,26 +102,7 @@
}
@Test
- @EnableFlags(
- Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
- Flags.FLAG_MOVE_TO_EXTERNAL_DISPLAY_SHORTCUT,
- )
- fun createExternalDisplayTaskShortcut_desktopModeEnabled_deviceNotSupported_overrideEnabled() {
- ExtendedMockito.doReturn(false).`when` { DesktopModeStatus.isDesktopModeSupported(any()) }
- ExtendedMockito.doReturn(false).`when` { DesktopModeStatus.enforceDeviceRestrictions() }
-
- val taskContainer = spy(createTaskContainer(createTask()))
- doReturn(workspaceItemInfo).whenever(taskContainer).itemInfo
-
- val shortcuts = factory.getShortcuts(launcher, taskContainer)
- assertThat(shortcuts).isNotNull()
- }
-
- @Test
- @EnableFlags(
- Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE,
- Flags.FLAG_MOVE_TO_EXTERNAL_DISPLAY_SHORTCUT,
- )
+ @EnableFlags(Flags.FLAG_MOVE_TO_EXTERNAL_DISPLAY_SHORTCUT)
fun externalDisplaySystemShortcutClicked() {
val task = createTask()
val taskContainer = spy(createTaskContainer(task))
@@ -154,7 +115,8 @@
val successCallback = it.getArgument<Runnable>(1)
successCallback.run()
}
- doReturn(workspaceItemInfo).whenever(taskContainer).itemInfo
+ val taskViewItemInfo = mock<TaskViewItemInfo>()
+ doReturn(taskViewItemInfo).whenever(taskContainer).itemInfo
val shortcuts = factory.getShortcuts(launcher, taskContainer)
assertThat(shortcuts).hasSize(1)
@@ -168,26 +130,23 @@
AbstractFloatingView.TYPE_ALL and AbstractFloatingView.TYPE_REBIND_SAFE.inv()
verify(abstractFloatingViewHelper).closeOpenViews(launcher, true, allTypesExceptRebindSafe)
verify(recentsView).moveTaskToExternalDisplay(eq(taskContainer), any())
- verify(statsLogger).withItemInfo(workspaceItemInfo)
+ verify(statsLogger).withItemInfo(taskViewItemInfo)
verify(statsLogger).log(LauncherEvent.LAUNCHER_SYSTEM_SHORTCUT_EXTERNAL_DISPLAY_TAP)
}
- private fun createTask(): Task = Task(TaskKey(1, 0, Intent(), ComponentName("", ""), 0, 2000))
+ private fun createTask() = Task(TaskKey(1, 0, Intent(), ComponentName("", ""), 0, 2000))
- private fun createTaskContainer(task: Task): TaskContainer {
- val snapshotView =
- if (enableRefactorTaskThumbnail()) mock<TaskThumbnailView>()
- else mock<TaskThumbnailViewDeprecated>()
- return TaskContainer(
+ private fun createTaskContainer(task: Task) =
+ TaskContainer(
taskView,
task,
- snapshotView,
- iconView,
- transformingTouchDelegate,
+ if (enableRefactorTaskThumbnail()) mock<TaskThumbnailView>()
+ else mock<TaskThumbnailViewDeprecated>(),
+ mock<TaskViewIcon>(),
+ mock<TransformingTouchDelegate>(),
SplitConfigurationOptions.STAGE_POSITION_UNDEFINED,
digitalWellBeingToast = null,
showWindowsView = null,
overlayFactory,
)
- }
}
diff --git a/quickstep/tests/src/com/android/quickstep/OrientationTouchTransformerTest.java b/quickstep/tests/src/com/android/quickstep/OrientationTouchTransformerTest.java
index f5d082d..ff0ad53 100644
--- a/quickstep/tests/src/com/android/quickstep/OrientationTouchTransformerTest.java
+++ b/quickstep/tests/src/com/android/quickstep/OrientationTouchTransformerTest.java
@@ -90,7 +90,7 @@
float landscapeRegionY =
generateTouchRegionHeight(NORMAL_SCREEN_SIZE, Surface.ROTATION_90) + 1;
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
tapAndAssertTrue(100, portraitRegionY,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
tapAndAssertFalse(100, landscapeRegionY,
@@ -102,7 +102,8 @@
// Override region
mTouchTransformer
- .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90));
+ .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90),
+ "test");
tapAndAssertFalse(100, portraitRegionY,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
tapAndAssertTrue(100, landscapeRegionY,
@@ -113,7 +114,7 @@
event -> mTouchTransformer.touchInAssistantRegion(event));
// Override region again
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
tapAndAssertTrue(100, portraitRegionY,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
tapAndAssertFalse(100, landscapeRegionY,
@@ -132,7 +133,8 @@
generateTouchRegionHeight(NORMAL_SCREEN_SIZE, Surface.ROTATION_90) + 1;
mTouchTransformer
- .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90));
+ .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90),
+ "test");
tapAndAssertFalse(100, portraitRegionY,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
tapAndAssertTrue(100, landscapeRegionY,
@@ -144,7 +146,7 @@
// We have to add 0 rotation second so that gets set as the current rotation, otherwise
// matrix transform will fail (tests only work in Portrait at the moment)
mTouchTransformer.enableMultipleRegions(true, mInfo);
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
tapAndAssertTrue(100, portraitRegionY,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
@@ -165,8 +167,9 @@
mTouchTransformer.enableMultipleRegions(true, mInfo);
mTouchTransformer
- .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90));
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90),
+ "test");
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
tapAndAssertTrue(0, portraitRegionY,
event -> mTouchTransformer.touchInAssistantRegion(event));
tapAndAssertFalse(0, landscapeRegionY,
@@ -181,9 +184,10 @@
generateTouchRegionHeight(NORMAL_SCREEN_SIZE, Surface.ROTATION_90) + 1;
mTouchTransformer.enableMultipleRegions(true, mInfo);
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
mTouchTransformer
- .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90));
+ .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90),
+ "test");
mTouchTransformer.enableMultipleRegions(false, mInfo);
tapAndAssertTrue(0, portraitRegionY,
event -> mTouchTransformer.touchInAssistantRegion(event));
@@ -213,14 +217,14 @@
@Test
public void applyTransform_taskNotFrozen_notInRegion() {
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
tapAndAssertFalse(100, 100,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
}
@Test
public void applyTransform_taskFrozen_noRotate_outOfRegion() {
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
mTouchTransformer.enableMultipleRegions(true, mInfo);
tapAndAssertFalse(100, 100,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
@@ -228,7 +232,7 @@
@Test
public void applyTransform_taskFrozen_noRotate_inRegion() {
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
mTouchTransformer.enableMultipleRegions(true, mInfo);
float y = generateTouchRegionHeight(NORMAL_SCREEN_SIZE, Surface.ROTATION_0) + 1;
tapAndAssertTrue(100, y,
@@ -237,7 +241,7 @@
@Test
public void applyTransform_taskNotFrozen_noRotate_inDefaultRegion() {
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
float y = generateTouchRegionHeight(NORMAL_SCREEN_SIZE, Surface.ROTATION_0) + 1;
tapAndAssertTrue(100, y,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
@@ -246,7 +250,8 @@
@Test
public void applyTransform_taskNotFrozen_90Rotate_inRegion() {
mTouchTransformer
- .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90));
+ .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90),
+ "test");
float y = generateTouchRegionHeight(NORMAL_SCREEN_SIZE, Surface.ROTATION_90) + 1;
tapAndAssertTrue(100, y,
event -> mTouchTransformer.touchInValidSwipeRegions(event.getX(), event.getY()));
@@ -254,10 +259,11 @@
@Test
public void applyTransform_taskNotFrozen_90Rotate_withTwoRegions() {
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
mTouchTransformer.enableMultipleRegions(true, mInfo);
mTouchTransformer
- .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90));
+ .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90),
+ "test");
// Landscape point
float y1 = generateTouchRegionHeight(NORMAL_SCREEN_SIZE, Surface.ROTATION_90) + 1;
MotionEvent inRegion1_down = generateMotionEvent(MotionEvent.ACTION_DOWN, 10, y1);
@@ -278,10 +284,11 @@
@Test
public void applyTransform_90Rotate_inRotatedRegion() {
// Create regions for both 0 Rotation and 90 Rotation
- mTouchTransformer.createOrAddTouchRegion(mInfo);
+ mTouchTransformer.createOrAddTouchRegion(mInfo, "test");
mTouchTransformer.enableMultipleRegions(true, mInfo);
mTouchTransformer
- .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90));
+ .createOrAddTouchRegion(createDisplayInfo(NORMAL_SCREEN_SIZE, Surface.ROTATION_90),
+ "test");
// Portrait point in landscape orientation axis
float x1 = generateTouchRegionHeight(NORMAL_SCREEN_SIZE, Surface.ROTATION_0);
// bottom of screen, from landscape perspective right side of screen
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 0886f50..93759f9 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Programinligting vir %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Gebruikinstellings vir %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nuwe venster"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Bestuur vensters"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Stoor apppaar"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Hierdie apppaar word nie op hierdie toestel gesteun nie"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Verminder breedte"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Verminder hoogte"</string>
<string name="widget_resized" msgid="9130327887929620">"Legstukgrootte is verander na breedte <xliff:g id="NUMBER_0">%1$s</xliff:g> hoogte <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Kortpaaie"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Maak toe"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Maak toe"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Persoonlik"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 576fefc..5c130bc 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"የመተግበሪያ መረጃ ለ%1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"የ%1$s የአጠቃቀም ቅንብሮች"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"አዲስ መስኮት"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"መስኮቶችን ያስተዳድሩ"</string>
<string name="save_app_pair" msgid="5647523853662686243">"የመተግበሪያ ጥምረትን ያስቀምጡ"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ይህ የመተግበሪያ ጥምረት በዚህ መሣሪያ ላይ አይደገፍም"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"ስፋት ይቀንሱ"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ቁመት ይቀንሱ"</string>
<string name="widget_resized" msgid="9130327887929620">"የመግብር መጠን ወደ ስፋት <xliff:g id="NUMBER_0">%1$s</xliff:g> ቁመት <xliff:g id="NUMBER_1">%2$s</xliff:g> ተለውጧል"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"አቋራጮች"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"አሰናብት"</string>
<string name="accessibility_close" msgid="2277148124685870734">"ዝጋ"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"የግል"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index b902aca..cc7ece1 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"معلومات تطبيق %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"إعدادات استخدام \"%1$s\""</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"نافذة جديدة"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"إدارة النوافذ"</string>
<string name="save_app_pair" msgid="5647523853662686243">"حفظ استخدام التطبيقين معًا"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"لا يمكن استخدام هذين التطبيقَين في الوقت نفسه على هذا الجهاز"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"تقليل العرض"</string>
<string name="action_decrease_height" msgid="282377193880900022">"تقليل الارتفاع"</string>
<string name="widget_resized" msgid="9130327887929620">"تم تغيير حجم الأداة إلى العرض <xliff:g id="NUMBER_0">%1$s</xliff:g> والارتفاع <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"الاختصارات"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"تجاهل"</string>
<string name="accessibility_close" msgid="2277148124685870734">"إغلاق"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"شخصية"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 128c846..168d408 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$sৰ বাবে এপৰ তথ্য"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$sৰ বাবে ব্যৱহাৰৰ ছেটিং"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"নতুন ৱিণ্ড’"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Windows পৰিচালনা কৰক"</string>
<string name="save_app_pair" msgid="5647523853662686243">"এপৰ পেয়াৰ ছেভ কৰক"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"এই ডিভাইচটোত এই এপ্ পেয়াৰ কৰাৰ সুবিধাটো সমৰ্থিত নহয়"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"প্ৰস্থ হ্ৰাস কৰক"</string>
<string name="action_decrease_height" msgid="282377193880900022">"উচ্চতা হ্ৰাস কৰক"</string>
<string name="widget_resized" msgid="9130327887929620">"ৱিজেটৰ আকাৰ সলনি কৰি প্ৰস্থ <xliff:g id="NUMBER_0">%1$s</xliff:g> আৰু উচ্চতা <xliff:g id="NUMBER_1">%2$s</xliff:g> কৰা হ’ল"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"শ্বৰ্টকাটসমূহ"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"অগ্ৰাহ্য কৰক"</string>
<string name="accessibility_close" msgid="2277148124685870734">"বন্ধ কৰক"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ব্যক্তিগত"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 96447b4..9f2a435 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s ilə bağlı tətbiq məlumatı"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s üzrə istifadə ayarları"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Yeni Pəncərə"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Pəncərələri idarə edin"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Tətbiq cütünü saxlayın"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Bu tətbiq cütü bu cihazda dəstəklənmir"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Eni azaldın"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Hündürlüyü azaldın"</string>
<string name="widget_resized" msgid="9130327887929620">"Vidcetin eni <xliff:g id="NUMBER_0">%1$s</xliff:g> hündürlüyü <xliff:g id="NUMBER_1">%2$s</xliff:g> kimi ölçüləndirildi"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Qısa yollar"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Rədd edin"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Bağlayın"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Şəxsi"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 5408aaf..1cea1fc 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informacije o aplikaciji za: %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Podešavanja potrošnje za %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Novi prozor"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Upravljajte prozorima"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Sačuvaj par aplikacija"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ovaj par aplikacija nije podržan na ovom uređaju"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Smanji širinu"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Smanji visinu"</string>
<string name="widget_resized" msgid="9130327887929620">"Veličina vidžeta je promenjena na širinu <xliff:g id="NUMBER_0">%1$s</xliff:g> i visinu <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Prečice"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Odbaci"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Zatvori"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Lično"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index cf5e7f8..74f988d 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Інфармацыя пра праграму для: %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s: налады выкарыстання"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Новае акно"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Кіраваць вокнамі"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Захаваць спалучэнне праграм"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Дадзенае спалучэнне праграм не падтрымліваецца на гэтай прыладзе"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Паменшыць шырыню"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Паменшыць вышыню"</string>
<string name="widget_resized" msgid="9130327887929620">"Памеры віджэта зменены на: шырыня <xliff:g id="NUMBER_0">%1$s</xliff:g>, вышыня <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Ярлыкі"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Адхіліць"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Закрыць"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Асабістыя"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index fd4c983..7799a3b 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Информация за приложението за %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Настройки за използването на %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Нов прозорец"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Управление на прозорците"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Запазване на двойката приложения"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Тази двойка приложения не се поддържа на устройството"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Намаляване на ширината"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Намаляване на височината"</string>
<string name="widget_resized" msgid="9130327887929620">"Приспособлението е преоразмерено към ширина <xliff:g id="NUMBER_0">%1$s</xliff:g> и височина <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Преки пътища"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Отхвърляне"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Затваряне"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Лични"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 56461a3..88f92c3 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s-এর জন্য অ্যাপ সম্পর্কিত তথ্য"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s-এর জন্য ব্যবহারের সেটিংস"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"নতুন উইন্ডো"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"উইন্ডো ম্যানেজ করুন"</string>
<string name="save_app_pair" msgid="5647523853662686243">"অ্যাপ পেয়ার সেভ করুন"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"এই ডিভাইসে এই অ্যাপ পেয়ারটি কাজ করে না"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"প্রস্থ কমান"</string>
<string name="action_decrease_height" msgid="282377193880900022">"উচ্চতা কমান"</string>
<string name="widget_resized" msgid="9130327887929620">"উইজেটের আকার প্রস্থ <xliff:g id="NUMBER_0">%1$s</xliff:g> উচ্চতা <xliff:g id="NUMBER_1">%2$s</xliff:g> তে পরিবর্তন করা হয়েছে"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"শর্টকাট"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"খারিজ করুন"</string>
<string name="accessibility_close" msgid="2277148124685870734">"বন্ধ করুন"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ব্যক্তিগত"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 803c6c0..64ff0b6 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informacije o aplikaciji %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Postavke korištenja za: %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Novi prozor"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Upravljajte prozorima"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Sačuvaj par aplikacija"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Par aplikacija nije podržan na uređaju"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Smanji širinu"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Smanji visinu"</string>
<string name="widget_resized" msgid="9130327887929620">"Veličina vidžeta je promijenjena na širinu <xliff:g id="NUMBER_0">%1$s</xliff:g> visinu <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Prečice"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Odbaci"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Zatvaranje"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Lično"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 0414bb2..185788b 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informació de l\'aplicació %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Configuració d\'ús de %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Finestra nova"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Gestiona les finestres"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Desa la parella d\'aplicacions"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Aquesta parella d\'aplicacions no s\'admet en aquest dispositiu"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Redueix l\'amplada"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Redueix l\'alçada"</string>
<string name="widget_resized" msgid="9130327887929620">"S\'ha canviat la mida del widget a l\'amplada <xliff:g id="NUMBER_0">%1$s</xliff:g> i l\'alçada <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Dreceres"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Ignora"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Tanca"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personal"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index aa50a42..3caba23 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informace o aplikaci %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Nastavení využití pro aplikaci %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nové okno"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Spravovat okna"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Uložit dvojici aplikací"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Tento pár aplikací není na tomto zařízení podporován"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Snížit šířku"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Snížit výšku"</string>
<string name="widget_resized" msgid="9130327887929620">"Velikost widgetu upravena: šířka <xliff:g id="NUMBER_0">%1$s</xliff:g>, výška <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Zkratky"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Zavřít"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Zavřít"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Osobní"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 0410763..07595e8 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Appinfo for %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Indstillinger for brug af %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nyt vindue"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Administrer vinduer"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Gem appsammenknytning"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Denne appsammenknytning understøttes ikke på enheden"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Reducer bredden"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Reducer højden"</string>
<string name="widget_resized" msgid="9130327887929620">"Størrelsen for widgetten er ændret til bredde <xliff:g id="NUMBER_0">%1$s</xliff:g> og højde <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Genveje"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Afvis"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Luk"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personlig"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index cb63ff0..a9a1aa0 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"App-Info für %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Nutzungseinstellungen für %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Neues Fenster"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Fenster verwalten"</string>
<string name="save_app_pair" msgid="5647523853662686243">"App-Paar speichern"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Dieses App-Paar wird auf diesem Gerät nicht unterstützt"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Breite verringern"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Höhe verringern"</string>
<string name="widget_resized" msgid="9130327887929620">"Größe des Widgets zu Breite <xliff:g id="NUMBER_0">%1$s</xliff:g> und Höhe <xliff:g id="NUMBER_1">%2$s</xliff:g> geändert"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Verknüpfungen"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Schließen"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Schließen"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Privat"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 79d9f19..17ddee3 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Πληροφορίες εφαρμογής για %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Ρυθμίσεις χρήσης για %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Νέο παράθυρο"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Διαχείριση παραθύρων"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Αποθήκευση ζεύγους εφαρμογών"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Αυτό το ζεύγος εφαρμογών δεν υποστηρίζεται σε αυτή τη συσκευή"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"μείωση του πλάτους"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Μείωση του ύψους"</string>
<string name="widget_resized" msgid="9130327887929620">"Έγινε προσαρμογή του μεγέθους του γραφικού στοιχείου σε <xliff:g id="NUMBER_0">%1$s</xliff:g> πλάτος και <xliff:g id="NUMBER_1">%2$s</xliff:g> ύψος"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Συντομεύσεις"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Παράβλεψη"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Κλείσιμο"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Προσωπικές"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index a58ace8..faffd89 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"App info for %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Usage settings for %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"New window"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Manage windows"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Save app pair"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"This app pair isn\'t supported on this device"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Decrease width"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Decrease height"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget re-sized to width <xliff:g id="NUMBER_0">%1$s</xliff:g> height <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Short cuts"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Dismiss"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Close"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personal"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index e2d072b..1dc6d16 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -178,7 +178,7 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Decrease width"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Decrease height"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget resized to width <xliff:g id="NUMBER_0">%1$s</xliff:g> height <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Shortcuts"</string>
+ <string name="action_deep_shortcut" msgid="4766835855579976045">"Shortcut Menu"</string>
<string name="action_dismiss_notification" msgid="5909461085055959187">"Dismiss"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Close"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personal"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index a58ace8..faffd89 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"App info for %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Usage settings for %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"New window"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Manage windows"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Save app pair"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"This app pair isn\'t supported on this device"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Decrease width"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Decrease height"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget re-sized to width <xliff:g id="NUMBER_0">%1$s</xliff:g> height <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Short cuts"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Dismiss"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Close"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personal"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index a58ace8..faffd89 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"App info for %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Usage settings for %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"New window"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Manage windows"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Save app pair"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"This app pair isn\'t supported on this device"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Decrease width"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Decrease height"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget re-sized to width <xliff:g id="NUMBER_0">%1$s</xliff:g> height <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Short cuts"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Dismiss"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Close"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personal"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index b0b06b0..d08eb53 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -179,7 +179,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Reducir el ancho"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Reducir la altura"</string>
<string name="widget_resized" msgid="9130327887929620">"Se cambió la dimensión del widget a <xliff:g id="NUMBER_0">%1$s</xliff:g> de ancho y <xliff:g id="NUMBER_1">%2$s</xliff:g> de alto."</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Accesos directos"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Descartar"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Cerrar"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personal"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 0062b2f..1a71a0e 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Información de la aplicación %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Ajustes de uso para %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Ventana nueva"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Gestionar ventanas"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Guardar apps emparejadas"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"El dispositivo no admite esta aplicación emparejada"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Reducir ancho"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Reducir altura"</string>
<string name="widget_resized" msgid="9130327887929620">"Se ha modificado el tamaño del widget a <xliff:g id="NUMBER_0">%1$s</xliff:g> de ancho y <xliff:g id="NUMBER_1">%2$s</xliff:g> de alto"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Accesos directos"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Cerrar"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Cerrar"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personal"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 5eccca9..70d2f8b 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Rakenduse teave: %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Kasutuse seaded: %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Uus aken"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Akende haldamine"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Salvesta rakendusepaar"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"See rakendusepaar ei ole selles seadmes toetatud"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Vähenda laiust"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Vähenda kõrgust"</string>
<string name="widget_resized" msgid="9130327887929620">"Vidina suurust muudeti. Laius: <xliff:g id="NUMBER_0">%1$s</xliff:g>. Kõrgus: <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Otseteed"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Loobu"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Sule"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Isiklik"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 8d0499c..ec63b18 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s aplikazioari buruzko informazioa"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s aplikazioaren erabilera-ezarpenak"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Leiho berria"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Kudeatu leihoak"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Gorde aplikazio parea"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Aplikazio pare hori ez da gailu honekin bateragarria"</string>
@@ -125,7 +124,7 @@
<string name="app_pair_name_format" msgid="8134106404716224054">"Aplikazio parea: <xliff:g id="APP1">%1$s</xliff:g> eta <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="styles_wallpaper_button_text" msgid="8216961355289236794">"Horma-papera eta estiloa"</string>
<string name="edit_home_screen" msgid="8947858375782098427">"Editatu orri nagusia"</string>
- <string name="settings_button_text" msgid="8873672322605444408">"Orri nagusiko ezarpenak"</string>
+ <string name="settings_button_text" msgid="8873672322605444408">"Orri nagusiaren ezarpenak"</string>
<string name="msg_disabled_by_admin" msgid="6898038085516271325">"Administratzaileak desgaitu du"</string>
<string name="allow_rotation_title" msgid="7222049633713050106">"Eman orri nagusia biratzeko baimena"</string>
<string name="allow_rotation_desc" msgid="8662546029078692509">"Telefonoa biratzean"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Txikitu zabalera"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Txikitu altuera"</string>
<string name="widget_resized" msgid="9130327887929620">"Aldatu da widgetaren tamaina. Zabalera: <xliff:g id="NUMBER_0">%1$s</xliff:g>. Altuera: <xliff:g id="NUMBER_1">%2$s</xliff:g>."</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Lasterbideak"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Baztertu"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Itxi"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Pertsonalak"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 18a2038..5930f22 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"اطلاعات برنامه %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"تنظیمات مصرف برای %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"پنجره جدید"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"مدیریت کردن پنجرهها"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ذخیره جفت برنامه"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"از این جفت برنامه در این دستگاه پشتیبانی نمیشود"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"کاهش عرض"</string>
<string name="action_decrease_height" msgid="282377193880900022">"کاهش ارتفاع"</string>
<string name="widget_resized" msgid="9130327887929620">"اندازه ابزاره به عرض <xliff:g id="NUMBER_0">%1$s</xliff:g> ارتفاع <xliff:g id="NUMBER_1">%2$s</xliff:g> تغییر کرد"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"میانبرها"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"رد کردن"</string>
<string name="accessibility_close" msgid="2277148124685870734">"بستن"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"شخصی"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index f04fa62..0e2eb3f 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Sovellustiedot: %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Käyttöasetus tälle: %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Uusi ikkuna"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Hallinnoi ikkunoita"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Tallenna sovelluspari"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Sovellusparia ei tueta tällä laitteella"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Vähennä leveyttä"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Vähennä korkeutta"</string>
<string name="widget_resized" msgid="9130327887929620">"Widgetin kokoa muutettiin. Sen leveys on nyt <xliff:g id="NUMBER_0">%1$s</xliff:g> ja korkeus <xliff:g id="NUMBER_1">%2$s</xliff:g>."</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Pikakuvakkeet"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Hylkää"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Sulje"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Henkilökohtaiset"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 6f26dae..93bdcb5 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Renseignements sur l\'appli pour %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Paramètres d\'utilisation pour %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nouvelle fenêtre"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Gérer les fenêtres"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Enr. paire d\'applis"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Cette paire d\'applis n\'est pas prise en charge sur cet appareil"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Diminuer la largeur"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Diminuer la hauteur"</string>
<string name="widget_resized" msgid="9130327887929620">"Le widget a été redimensionné (largeur : <xliff:g id="NUMBER_0">%1$s</xliff:g>, hauteur : <xliff:g id="NUMBER_1">%2$s</xliff:g>)"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Raccourcis"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorer"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Fermer"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personnel"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index bd1f23c..5db4437 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Infos sur l\'appli pour %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Paramètres d\'utilisation pour %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nouvelle fenêtre"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Gérer les fenêtres"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Enregistrer une paire d\'applis"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Cette paire d\'applications n\'est pas prise en charge sur cet appareil"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Diminuer la largeur"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Diminuer la hauteur"</string>
<string name="widget_resized" msgid="9130327887929620">"Le widget a bien été redimensionné (largeur : <xliff:g id="NUMBER_0">%1$s</xliff:g>, hauteur : <xliff:g id="NUMBER_1">%2$s</xliff:g>)."</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Raccourcis"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorer"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Fermer"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personnel"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 9eae629..72fdd1b 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Información da aplicación para %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Configuración de uso para %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Ventá nova"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Xestionar ventás"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Gardar parella de apps"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"O dispositivo non admite este emparellamento de aplicacións"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Reducir ancho"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Reducir altura"</string>
<string name="widget_resized" msgid="9130327887929620">"Cambiouse o tamaño do widget polo ancho <xliff:g id="NUMBER_0">%1$s</xliff:g> e a altura <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Atallos"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Pechar"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Pechar"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Persoal"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 84f4ce6..58cbac8 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s માટે ઍપ માહિતી"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$sના વપરાશ સંબંધિત સેટિંગ"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"નવી વિન્ડો"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"વિન્ડો મેનેજ કરો"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ઍપની જોડી સાચવો"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"આ ડિવાઇસ પર, આ ઍપની જોડીને સપોર્ટ આપવામાં આવતો નથી"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"પહોળાઈ ઘટાડો"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ઊંચાઈ ઘટાડો"</string>
<string name="widget_resized" msgid="9130327887929620">"વિજેટનો આકાર બદલીને <xliff:g id="NUMBER_0">%1$s</xliff:g> પહોળાઈ <xliff:g id="NUMBER_1">%2$s</xliff:g> ઊંચાઈ કર્યો"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"શૉર્ટકટ્સ"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"છોડી દો"</string>
<string name="accessibility_close" msgid="2277148124685870734">"બંધ કરો"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"વ્યક્તિગત ઍપ"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 110e3af..e56e620 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s के लिए ऐप्लिकेशन की जानकारी"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s के लिए खर्च की सेटिंग"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"नई विंडो"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"विंडो मैनेज करें"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ऐप पेयर सेव करें"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"साथ में इस्तेमाल किए जा सकने वाले ये ऐप्लिकेशन, इस डिवाइस पर काम नहीं कर सकते"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"चौड़ाई घटाएं"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ऊंचाई घटाएं"</string>
<string name="widget_resized" msgid="9130327887929620">"विजेट का आकार बदलकर उसकी चौड़ाई <xliff:g id="NUMBER_0">%1$s</xliff:g> और ऊंचाई <xliff:g id="NUMBER_1">%2$s</xliff:g> कर दी गई"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"शॉर्टकट"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"खारिज करें"</string>
<string name="accessibility_close" msgid="2277148124685870734">"बंद करें"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"निजी ऐप्लिकेशन"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 06a8d06..8f0008f 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informacije o aplikaciji %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Postavke upotrebe za %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Novi prozor"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Upravljanje prozorima"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Spremi par aplikacija"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Taj par aplikacija nije podržan na ovom uređaju"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Smanjenje širine"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Smanjenje visine"</string>
<string name="widget_resized" msgid="9130327887929620">"Širina widgeta promijenjena je na <xliff:g id="NUMBER_0">%1$s</xliff:g>, a visina na <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Prečaci"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Odbaci"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Zatvori"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Osobno"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 6228678..91761d0 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Alkalmazásinformáció a következőhöz: %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"A(z) %1$s használati beállításai"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Új ablak"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Ablakok kezelése"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Alkalmazáspár mentése"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ezt az alkalmazáspárt nem támogatja az eszköz"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Szélesség csökkentése"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Magasság csökkentése"</string>
<string name="widget_resized" msgid="9130327887929620">"Modul átméretezve <xliff:g id="NUMBER_0">%1$s</xliff:g> szélességre és <xliff:g id="NUMBER_1">%2$s</xliff:g> magasságra"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Gyorsparancsok"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Elvetés"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Bezárás"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Személyes"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 010d259..91f9bca 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Տեղեկություններ %1$s հավելվածի մասին"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Օգտագործման կարգավորումներ (%1$s)"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Նոր պատուհան"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Կառավարել պատուհանները"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Պահել հավելվ. զույգը"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Հավելվածների զույգը չի աջակցվում այս սարքում"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Նվազեցնել լայնությունը"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Նվազեցնել բարձրությունը"</string>
<string name="widget_resized" msgid="9130327887929620">"Վիջեթի լայնությունը փոխվել է <xliff:g id="NUMBER_0">%1$s</xliff:g>-ի, իսկ բարձրությունը՝ <xliff:g id="NUMBER_1">%2$s</xliff:g>-ի"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Դյուրանցումներ"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Անտեսել"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Փակել"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Անձնական"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 027a111..69a52f7 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Info aplikasi untuk %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Setelan penggunaan untuk %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Jendela Baru"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Kelola Jendela"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Simpan pasangan aplikasi"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Pasangan aplikasi ini tidak didukung di perangkat ini"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Kurangi lebar"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Kurangi tinggi"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget diubah ukurannya menjadi lebar <xliff:g id="NUMBER_0">%1$s</xliff:g> tinggi <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Pintasan"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Tutup"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Tutup"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Pribadi"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index c2f8f5a..604e760 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Upplýsingar um forrit fyrir %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Notkunarstillingar fyrir %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nýr gluggi"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Stjórna gluggum"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Vista forritapar"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Þetta forritapar er ekki stutt í þessu tæki"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Minnka breidd"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Minnka hæð"</string>
<string name="widget_resized" msgid="9130327887929620">"Stærð græju breytt í <xliff:g id="NUMBER_0">%1$s</xliff:g> á breidd og <xliff:g id="NUMBER_1">%2$s</xliff:g> á hæð"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Flýtileiðir"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Hunsa"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Loka"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Persónulegt"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 34d2f57..66c4ddd 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informazioni sull\'app %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Impostazioni di utilizzo per %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nuova finestra"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Gestisci finestre"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Salva coppia di app"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Questa coppia di app non è supportata su questo dispositivo"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Riduci larghezza"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Riduci altezza"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget ridimensionato a larghezza <xliff:g id="NUMBER_0">%1$s</xliff:g>, altezza <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Scorciatoie"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Ignora"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Esci"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personali"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 4eb3e96..e5fb2a8 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"פרטים על האפליקציה %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"הגדרות שימוש ב-%1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"חלון חדש"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"ניהול החלונות"</string>
<string name="save_app_pair" msgid="5647523853662686243">"שמירת צמד אפליקציות"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"צמד האפליקציות הזה לא נתמך במכשיר הזה"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"הקטנת רוחב"</string>
<string name="action_decrease_height" msgid="282377193880900022">"הקטנת גובה"</string>
<string name="widget_resized" msgid="9130327887929620">"גודל הווידג\'ט שונה - רוחב <xliff:g id="NUMBER_0">%1$s</xliff:g> גובה <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"קיצורי דרך"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"סגירה"</string>
<string name="accessibility_close" msgid="2277148124685870734">"סגירה"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"אישי"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index e11a22c..1a9fff1 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s のアプリ情報"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s の使用設定"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"新しいウィンドウ"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"ウィンドウを管理"</string>
<string name="save_app_pair" msgid="5647523853662686243">"アプリのペア設定を保存"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"このデバイスは、このアプリのペア設定に対応していません"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"幅を狭くする"</string>
<string name="action_decrease_height" msgid="282377193880900022">"高さを低くする"</string>
<string name="widget_resized" msgid="9130327887929620">"ウィジェットのサイズを幅<xliff:g id="NUMBER_0">%1$s</xliff:g>、高さ<xliff:g id="NUMBER_1">%2$s</xliff:g>に変更しました"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ショートカット"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"表示しない"</string>
<string name="accessibility_close" msgid="2277148124685870734">"閉じる"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"個人用"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index c702c62..2c8d484 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s-ის აპის ინფო"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"გამოყენების პარამეტრები %1$s-ისთვის"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"ახალი ფანჯარა"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"ფანჯრების მართვა"</string>
<string name="save_app_pair" msgid="5647523853662686243">"აპთა წყვილის შენახვა"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ამ მოწყობილობაზე აღნიშნული აპთა წყვილი არ არის მხარდაჭერილი"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"სიგანის შემცირება"</string>
<string name="action_decrease_height" msgid="282377193880900022">"სიმაღლის შემცირება"</string>
<string name="widget_resized" msgid="9130327887929620">"ვიჯეტის ზომები შეიცვალა: სიგანე <xliff:g id="NUMBER_0">%1$s</xliff:g> სიმაღლე <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"მალსახმობები"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"დახურვა"</string>
<string name="accessibility_close" msgid="2277148124685870734">"დახურვა"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"პირადი"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 605a602..f3035c5 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s қолданбасы туралы ақпарат"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s пайдалану параметрлері"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Жаңа терезе"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Терезелерді басқару"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Қолданбаларды жұптау әрекетін сақтау"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Бұл құрылғы қолданбаларды жұптау функциясын қолдамайды."</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Енін азайту"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Биіктігін азайту"</string>
<string name="widget_resized" msgid="9130327887929620">"Виджет өлшемінің ені <xliff:g id="NUMBER_0">%1$s</xliff:g>, биіктігі <xliff:g id="NUMBER_1">%2$s</xliff:g> болып өзгертілді"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Жылдам пәрмендер"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Бас тарту"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Жабу"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Жеке"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index f6d0f37..7566781 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"ព័ត៌មានកម្មវិធីសម្រាប់ %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"ការកំណត់ការប្រើប្រាស់សម្រាប់ %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"វិនដូថ្មី"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"គ្រប់គ្រងវិនដូ"</string>
<string name="save_app_pair" msgid="5647523853662686243">"រក្សាទុកគូកម្មវិធី"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"មិនអាចប្រើគូកម្មវិធីនេះនៅលើឧបករណ៍នេះបានទេ"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"បន្ថយទទឹង"</string>
<string name="action_decrease_height" msgid="282377193880900022">"បន្ថយកម្ពស់"</string>
<string name="widget_resized" msgid="9130327887929620">"ធាតុក្រាហ្វិកដែលបានប្តូរទំហំទៅទទឹងប្រវែង <xliff:g id="NUMBER_0">%1$s</xliff:g> កម្ពស់ប្រវែង <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ផ្លូវកាត់"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"ច្រានចោល"</string>
<string name="accessibility_close" msgid="2277148124685870734">"បិទ"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ផ្ទាល់ខ្លួន"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index bc9f293..d4682c4 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s ಗಾಗಿ ಆ್ಯಪ್ ಮಾಹಿತಿ"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s ಗೆ ಸಂಬಂಧಿಸಿದ ಬಳಕೆಯ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"ಹೊಸ ವಿಂಡೋ"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"ವಿಂಡೋಗಳನ್ನು ನಿರ್ವಹಿಸಿ"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ಆ್ಯಪ್ ಪೇರ್ ಸೇವ್ ಮಾಡಿ"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ಈ ಆ್ಯಪ್ ಜೋಡಿಯು ಈ ಸಾಧನದಲ್ಲಿ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ"</string>
@@ -113,8 +112,8 @@
<string name="disabled_app_label" msgid="6673129024321402780">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="dotted_app_label" msgid="1865617679843363410">"{count,plural, =1{{app_name} ಆ್ಯಪ್ # ಅಧಿಸೂಚನೆಯನ್ನು ಹೊಂದಿದೆ}one{{app_name} ಆ್ಯಪ್ # ಅಧಿಸೂಚನೆಗಳನ್ನು ಹೊಂದಿದೆ}other{{app_name} ಆ್ಯಪ್ # ಅಧಿಸೂಚನೆಗಳನ್ನು ಹೊಂದಿದೆ}}"</string>
<string name="default_scroll_format" msgid="7475544710230993317">"%2$d ರಲ್ಲಿ %1$d ಪುಟ"</string>
- <string name="workspace_scroll_format" msgid="8458889198184077399">"%2$d ರಲ್ಲಿ %1$d ಮುಖಪುಟದ ಪರದೆ"</string>
- <string name="workspace_new_page" msgid="257366611030256142">"ಹೊಸ ಮುಖಪುಟ ಪರದೆ"</string>
+ <string name="workspace_scroll_format" msgid="8458889198184077399">"%2$d ರಲ್ಲಿ %1$d ಮುಖಪುಟದ ಸ್ಕ್ರೀನ್"</string>
+ <string name="workspace_new_page" msgid="257366611030256142">"ಹೊಸ ಮುಖಪುಟ ಸ್ಕ್ರೀನ್"</string>
<string name="folder_opened" msgid="94695026776264709">"ಫೋಲ್ಡರ್ ತೆರೆಯಲಾಗಿದೆ, <xliff:g id="WIDTH">%1$d</xliff:g> ಬೈ <xliff:g id="HEIGHT">%2$d</xliff:g>"</string>
<string name="folder_tap_to_close" msgid="4625795376335528256">"ಫೋಲ್ಡರ್ ಮುಚ್ಚಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="folder_tap_to_rename" msgid="4017685068016979677">"ಮರುಹೆಸರನ್ನು ಉಳಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"ಅಗಲವನ್ನು ಕಡಿಮೆ ಮಾಡಿ"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ಎತ್ತರವನ್ನು ಕಡಿಮೆ ಮಾಡಿ"</string>
<string name="widget_resized" msgid="9130327887929620">"ವಿಜೆಟ್ ಅನ್ನು <xliff:g id="NUMBER_0">%1$s</xliff:g> ಅಗಲ <xliff:g id="NUMBER_1">%2$s</xliff:g> ಎತ್ತರಕ್ಕೆ ಮರುಗಾತ್ರಗೊಳಿಸಲಾಗಿದೆ"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ಶಾರ್ಟ್ಕಟ್ಗಳು"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"ವಜಾಗೊಳಿಸಿ"</string>
<string name="accessibility_close" msgid="2277148124685870734">"ಮುಚ್ಚಿರಿ"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ವೈಯಕ್ತಿಕ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 7748a32..13aaaa2 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s 앱 정보"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s의 사용량 설정"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"새 창"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"창 관리"</string>
<string name="save_app_pair" msgid="5647523853662686243">"앱 페어링 저장"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"이 앱 페어링은 이 기기에서 지원되지 않습니다"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"폭 줄이기"</string>
<string name="action_decrease_height" msgid="282377193880900022">"높이 줄이기"</string>
<string name="widget_resized" msgid="9130327887929620">"폭 <xliff:g id="NUMBER_0">%1$s</xliff:g>, 높이 <xliff:g id="NUMBER_1">%2$s</xliff:g>로 위젯 크기 조정됨"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"바로가기"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"닫기"</string>
<string name="accessibility_close" msgid="2277148124685870734">"닫기"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"개인"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index d3cf7e4..d41ffe8 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s колдонмосу жөнүндө маалымат"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s колдонмосун пайдалануу параметрлери"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Жаңы терезе"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Терезелерди тескөө"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Колдонмолорду сактап коюу"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Бул эки колдонмону бул түзмөктө бир маалда пайдаланууга болбойт"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Ичкертүү"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Жапыздатуу"</string>
<string name="widget_resized" msgid="9130327887929620">"Виджеттин кеңдиги <xliff:g id="NUMBER_0">%1$s</xliff:g> бийиктиги <xliff:g id="NUMBER_1">%2$s</xliff:g> болду"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Кыска жолдор"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Этибарга албоо"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Жабуу"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Жеке колдонмолор"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 10611c1..ace3225 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"ຂໍ້ມູນແອັບສຳລັບ %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"ການຕັ້ງຄ່າການນຳໃຊ້ສຳລັບ %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"ໜ້າຈໍໃໝ່"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"ຈັດການໜ້າຈໍ"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ບັນທຶກຈັບຄູ່ແອັບ"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ການຈັບຄູ່ແອັບນີ້ບໍ່ຮອງຮັບຢູ່ອຸປະກອນນີ້"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"ຫຼຸດລວງກ້ວາງລົງ"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ຫຼຸດລວງສູງລົງ"</string>
<string name="widget_resized" msgid="9130327887929620">"ປ່ຽນຂະໜາດວິດເຈັດເປັນລວງກ້ວາງ <xliff:g id="NUMBER_0">%1$s</xliff:g> ລວງສູງ <xliff:g id="NUMBER_1">%2$s</xliff:g> ແລ້ວ"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ທາງລັດ"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"ປິດໄວ້"</string>
<string name="accessibility_close" msgid="2277148124685870734">"ປິດ"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ສ່ວນຕົວ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index c6c379a..b298d8e 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Programos „%1$s“ informacija"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"„%1$s“ naudojimo nustatymai"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Naujas langas"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Tvarkyti langus"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Išsaugoti programų porą"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ši programų pora šiame įrenginyje nepalaikoma"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Sumažinti plotį"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Sumažinti aukštį"</string>
<string name="widget_resized" msgid="9130327887929620">"Valdiklio dydis pakeistas: plotis – <xliff:g id="NUMBER_0">%1$s</xliff:g>, aukštis – <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Spartieji klavišai"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Atsisakyti"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Uždaryti"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Asmeninės"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 0dc7445..e3e4c57 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s: informācija par lietotni"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Lietojuma iestatījumi: %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Jauns logs"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Pārvaldīt logus"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Saglabāt lietotņu pāri"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Šis lietotņu pāris netiek atbalstīts šajā ierīcē"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Samazināt platumu"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Samazināt augstumu"</string>
<string name="widget_resized" msgid="9130327887929620">"Logrīka lielums mainīts — platums: <xliff:g id="NUMBER_0">%1$s</xliff:g>, augstums: <xliff:g id="NUMBER_1">%2$s</xliff:g>."</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Saīsnes"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Nerādīt"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Aizvērt"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personīgās lietotnes"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index c5518bc..b16a135 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Податоци за апликација за %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Поставки за користење за %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Нов прозорец"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Управувајте со прозорците"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Зачувај го парот апликации"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Паров апликации не е поддржан на уредов"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Намали ширина"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Намали висина"</string>
<string name="widget_resized" msgid="9130327887929620">"Големината на виџетот е променета на ширина <xliff:g id="NUMBER_0">%1$s</xliff:g> висина <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Кратенки"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Отфрли"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Затвори"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Лично"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 756c065..2fd018e 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s എന്നതിന്റെ ആപ്പ് വിവരങ്ങൾ"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s എന്നതിനുള്ള ഉപയോഗ ക്രമീകരണം"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"പുതിയ വിന്ഡോ"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"വിൻഡോകൾ മാനേജ് ചെയ്യുക"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ആപ്പ് ജോടി സംരക്ഷിക്കുക"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ഈ ഉപകരണത്തിൽ ഈ ആപ്പ് ജോടിക്ക് പിന്തുണയില്ല"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"വീതി കുറയ്ക്കുക"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ഉയരം കുറയ്ക്കുക"</string>
<string name="widget_resized" msgid="9130327887929620">"വീതി <xliff:g id="NUMBER_0">%1$s</xliff:g> ഉയരം <xliff:g id="NUMBER_1">%2$s</xliff:g>-ലേക്ക് വിഡ്ജെറ്റിന്റെ വലുപ്പം മാറ്റി"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"കുറുക്കുവഴികൾ"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"നിരസിക്കുക"</string>
<string name="accessibility_close" msgid="2277148124685870734">"അടയ്ക്കൂ"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"വ്യക്തിപരം"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index aad461b..6a051d5 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s-н аппын мэдээлэл"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s-н ашиглалтын тохиргоо"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Шинэ цонх"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Windows-г удирдах"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Апп хослуулалтыг хадгалах"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Энэ апп хослуулалтыг уг төхөөрөмж дээр дэмждэггүй"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Нарийсгах"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Намсгах"</string>
<string name="widget_resized" msgid="9130327887929620">"Виджэтийн өргөн <xliff:g id="NUMBER_0">%1$s</xliff:g>, өндөр <xliff:g id="NUMBER_1">%2$s</xliff:g> болсон"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Товчлол"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Хаах"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Хаах"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Хувийн"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index a089669..dba75d9 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s साठी ॲपशी संबंधित माहिती"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s साठी वापरासंबंधित सेटिंग्ज"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"नवीन विंडो"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"विंडो व्यवस्थापित करा"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ॲपची जोडी सेव्ह करा"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"या ॲपची जोडीला या डिव्हाइसवर सपोर्ट नाही"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"रुंदी कमी करा"</string>
<string name="action_decrease_height" msgid="282377193880900022">"उंची कमी करा"</string>
<string name="widget_resized" msgid="9130327887929620">"विजेटचा आकार रुंदी <xliff:g id="NUMBER_0">%1$s</xliff:g> उंची <xliff:g id="NUMBER_1">%2$s</xliff:g> मध्ये बदलला"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"शॉर्टकट"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"डिसमिस करा"</string>
<string name="accessibility_close" msgid="2277148124685870734">"बंद करा"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"वैयक्तिक"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 79a8c43..019fb49 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Maklumat apl untuk %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Tetapan penggunaan sebanyak %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Tetingkap Baharu"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Urus Tetingkap"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Simpan gandingan apl"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Gandingan apl ini tidak disokong pada peranti ini"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Kurangkan kelebaran"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Kurangkan ketinggian"</string>
<string name="widget_resized" msgid="9130327887929620">"Saiz widget diubah menjadi <xliff:g id="NUMBER_0">%1$s</xliff:g> lebar <xliff:g id="NUMBER_1">%2$s</xliff:g> tinggi"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Pintasan"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Ketepikan"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Tutup"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Peribadi"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 340d7a8..4b907b4 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s အတွက် အက်ပ်အချက်အလက်"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s အတွက် အသုံးပြုမှုဆက်တင်များ"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"ဝင်းဒိုးအသစ်"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"ဝင်းဒိုးများ စီမံရန်"</string>
<string name="save_app_pair" msgid="5647523853662686243">"အက်ပ်တွဲချိတ်ခြင်း သိမ်းရန်"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ဤအက်ပ်တွဲချိတ်ခြင်းကို ဤစက်တွင် ပံ့ပိုးမထားပါ"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"အကျယ်အား လျှော့ပါ"</string>
<string name="action_decrease_height" msgid="282377193880900022">"အမြင့်အား လျှော့ပါ"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget အား အကျယ် <xliff:g id="NUMBER_0">%1$s</xliff:g> အမြင့် <xliff:g id="NUMBER_1">%2$s</xliff:g> အရွယ်အစားပြန်လည်ချိန်ညှိပြီး၏"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ဖြတ်လမ်းများ"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"ပယ်ရန်"</string>
<string name="accessibility_close" msgid="2277148124685870734">"ပိတ်ရန်"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ကိုယ်ပိုင်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 004e100..0a94172 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Appinformasjon for %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Bruksinnstillinger for %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nytt vindu"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Administrer vinduene"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Lagre app-paret"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Denne apptilkoblingen støttes ikke på denne enheten"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Reduser bredden"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Reduser høyden"</string>
<string name="widget_resized" msgid="9130327887929620">"Størrelsen på modulen er endret til bredde <xliff:g id="NUMBER_0">%1$s</xliff:g> og høyde <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Snarveier"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Avvis"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Lukk"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personlig"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 0940743..bf3d798 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s का हकमा एपसम्बन्धी जानकारी"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s को प्रयोगसम्बन्धी सेटिङ"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"नयाँ विन्डो"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"विन्डोहरू व्यवस्थापन गर्नुहोस्"</string>
<string name="save_app_pair" msgid="5647523853662686243">"एपको पेयर सेभ गर्नुहोस्"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"यस डिभाइसमा यो एप पेयर प्रयोग गर्न मिल्दैन"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"चौडाइ घटाउनुहोस्"</string>
<string name="action_decrease_height" msgid="282377193880900022">"उँचाइ घटाउनुहोस्"</string>
<string name="widget_resized" msgid="9130327887929620">"विजेट चौडाइ <xliff:g id="NUMBER_0">%1$s</xliff:g> उचाइ <xliff:g id="NUMBER_1">%2$s</xliff:g> मा पुनः आकार मिलाइयो"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"सर्टकटहरू"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"खारेज गर्नुहोस्"</string>
<string name="accessibility_close" msgid="2277148124685870734">"बन्द गर्नुहोस्"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"व्यक्तिगत"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index f6d3e0f..b275b7c 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"App-info voor %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Gebruiksinstellingen voor %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nieuw venster"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Vensters beheren"</string>
<string name="save_app_pair" msgid="5647523853662686243">"App-paar opslaan"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Dit app-paar wordt niet ondersteund op dit apparaat"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Breedte verkleinen"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Hoogte verkleinen"</string>
<string name="widget_resized" msgid="9130327887929620">"Formaat van widget gewijzigd in breedte <xliff:g id="NUMBER_0">%1$s</xliff:g> en hoogte <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Snelkoppelingen"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Sluiten"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Sluiten"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Privé"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 7b48ad0..ab9bd61 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s ପାଇଁ ଆପ ସୂଚନା"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s ପାଇଁ ବ୍ୟବହାର ସେଟିଂସ"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"ନୂଆ ୱିଣ୍ଡୋ"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ପରିଚାଳନା କରନ୍ତୁ"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ଆପ ପେୟାର ସେଭ କରନ୍ତୁ"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ଏହି ଆପ ପେୟାର ଏ ଡିଭାଇସରେ ସମର୍ଥିତ ନୁହେଁ"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"ଚଉଡ଼ା କମ୍ କରନ୍ତୁ"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ଉଚ୍ଚତା କମ୍ କରନ୍ତୁ"</string>
<string name="widget_resized" msgid="9130327887929620">"ୱିଜେଟକୁ <xliff:g id="NUMBER_0">%1$s</xliff:g> ଓସାର ଓ <xliff:g id="NUMBER_1">%2$s</xliff:g> ଉଚ୍ଚରେ ପୁନଃଆକାର ଦିଆଗଲା"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ଶର୍ଟକଟ୍"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"ଖାରଜ କରନ୍ତୁ"</string>
<string name="accessibility_close" msgid="2277148124685870734">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ବ୍ୟକ୍ତିଗତ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 6ea5848..440c504 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s ਲਈ ਐਪ ਜਾਣਕਾਰੀ"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s ਲਈ ਵਰਤੋਂ ਸੈਟਿੰਗਾਂ"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"ਨਵੀਂ ਵਿੰਡੋ"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"ਵਿੰਡੋਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ਐਪ ਜੋੜਾਬੱਧ ਰੱਖਿਅਤ ਕਰੋ"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ਇਸ ਐਪ ਜੋੜਾਬੱਧ ਦਾ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਸਮਰਥਨ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"ਚੌੜਾਈ ਘਟਾਓ"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ਉਂਚਾਈ ਘਟਾਓ"</string>
<string name="widget_resized" msgid="9130327887929620">"ਵਿਜੈਟ ਨੂੰ ਚੌੜਾਈ <xliff:g id="NUMBER_0">%1$s</xliff:g> ਉਂਚਾਈ <xliff:g id="NUMBER_1">%2$s</xliff:g> ਨੂੰ ਮੁੜ ਆਕਾਰ ਦਿੱਤਾ"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ਸ਼ਾਰਟਕੱਟ"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"ਖਾਰਜ ਕਰੋ"</string>
<string name="accessibility_close" msgid="2277148124685870734">"ਬੰਦ ਕਰੋ"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ਨਿੱਜੀ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index bde1d2f..ca00d6c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informacje o aplikacji: %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s – ustawienia użycia"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nowe okno"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Zarządzaj oknami"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Zapisz parę aplikacji"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ta para aplikacji nie jest obsługiwana na tym urządzeniu"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Zmniejsz szerokość"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Zmniejsz wysokość"</string>
<string name="widget_resized" msgid="9130327887929620">"Szerokość i wysokość widżetu zmieniła się na <xliff:g id="NUMBER_0">%1$s</xliff:g> x <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Skróty"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Zamknij"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Zamknij"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Osobiste"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 1fadfdd..a6b2929 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informações da app para %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Definições de utilização para %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nova janela"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Gerir janelas"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Guardar par de apps"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Este par de apps não é suportado neste dispositivo"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Diminuir largura"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Diminuir altura"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget redimensionado para a largura <xliff:g id="NUMBER_0">%1$s</xliff:g>, altura <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Atalhos"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorar"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Fechar"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Pessoal"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index e2cf070..606e1d7 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informações do app %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Configurações de uso de %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nova janela"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Gerenciar janelas"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Salvar par de apps"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Este Par de apps não está disponível no dispositivo"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Diminuir largura"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Diminuir altura"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget redimensionado para a largura <xliff:g id="NUMBER_0">%1$s</xliff:g>, altura <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Atalhos"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Dispensar"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Fechar"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Pessoais"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 71d16cb..092c89e 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informații despre aplicație pentru %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Setări de utilizare pentru %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Fereastră nouă"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Gestionează ferestrele"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Salvează perechea de aplicații"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Perechea de aplicații nu este acceptată pe acest dispozitiv"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Redu lățimea"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Redu înălțimea"</string>
<string name="widget_resized" msgid="9130327887929620">"Widgetul a fost redimensionat la lățimea <xliff:g id="NUMBER_0">%1$s</xliff:g> și înălțimea <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Comenzi rapide"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Închide"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Închide"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personale"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 10af874..0c8ec40 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Сведения о приложении \"%1$s\""</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Настройки использования приложения \"%1$s\""</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Новое окно"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Управление окнами"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Сохранить приложения"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Одновременно использовать эти два приложения на устройстве нельзя."</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Уменьшить ширину"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Уменьшить высоту"</string>
<string name="widget_resized" msgid="9130327887929620">"Изменен размер виджета: до <xliff:g id="NUMBER_0">%1$s</xliff:g> в ширину и <xliff:g id="NUMBER_1">%2$s</xliff:g> в высоту"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Ярлыки"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Закрыть"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Закрыть"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Личные"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 44fc1da..6e2fc2a 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s සඳහා යෙදුම් තතු"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s සඳහා භාවිත සැකසීම්"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"නව කවුළුව"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"කවුළු කළමනාකරණය කරන්න"</string>
<string name="save_app_pair" msgid="5647523853662686243">"යෙදුම් යුගල සුරකින්න"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"මෙම යෙදුම් යුගලය මෙම උපාංගයෙහි සහාය නොදක්වයි"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"පළල අඩු කරන්න"</string>
<string name="action_decrease_height" msgid="282377193880900022">"උස අඩු කරන්න"</string>
<string name="widget_resized" msgid="9130327887929620">"විජට් පළල <xliff:g id="NUMBER_0">%1$s</xliff:g> උස <xliff:g id="NUMBER_1">%2$s</xliff:g> වෙත ප්රමාණකරණය කරන ලදි"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"කෙටිමං"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"ඉවතලන්න"</string>
<string name="accessibility_close" msgid="2277148124685870734">"වසන්න"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"පුද්ගලික"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 8eb4e38..b8de977 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informácie o aplikácii pre %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Nastavenia používania pre %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nové okno"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Spravovať okná"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Uložiť pár aplikácií"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Tento pár aplikácií nie je v tomto zariadení podporovaný"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Znížiť šírku"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Znížiť výšku"</string>
<string name="widget_resized" msgid="9130327887929620">"Veľkosť miniaplikácie bola zmenená na <xliff:g id="NUMBER_0">%1$s</xliff:g> x <xliff:g id="NUMBER_1">%2$s</xliff:g> (šírka x výška)"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Skratky"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Zavrieť"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Zavrieť"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Osobné"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 9c2221b..70e8e2e 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Podatki o aplikaciji za: %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Nastavitve uporabe za »%1$s«"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Novo okno"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Upravljanje oken"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Shrani par aplikacij"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ta par aplikacij ni podprt v tej napravi"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Zmanjšanje širine"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Zmanjšanje višine"</string>
<string name="widget_resized" msgid="9130327887929620">"Velikost pripomočka je bila spremenjena na <xliff:g id="NUMBER_0">%1$s</xliff:g> širine in <xliff:g id="NUMBER_1">%2$s</xliff:g> višine"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Bližnjice"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Opusti"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Zapri"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Osebno"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index ced2c8c..3fb73e6 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Informacioni i aplikacionit për %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Cilësimet e përdorimit për \"%1$s\""</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Dritare e re"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Menaxho dritaret"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Ruaj çiftin e aplikacioneve"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ky çift aplikacionesh nuk mbështetet në këtë pajisje"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Zvogëlo gjerësinë"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Zvogëlo lartësinë"</string>
<string name="widget_resized" msgid="9130327887929620">"Madhësia e miniaplikacionit u ndryshua me gjerësinë <xliff:g id="NUMBER_0">%1$s</xliff:g> dhe lartësinë <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Shkurtoret"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Hiqe"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Mbyll"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personale"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index b4cc0e5..1997f54 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Информације о апликацији за: %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Подешавања потрошње за %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Нови прозор"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Управљајте прозорима"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Сачувај пар апликација"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Овај пар апликација није подржан на овом уређају"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Смањи ширину"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Смањи висину"</string>
<string name="widget_resized" msgid="9130327887929620">"Величина виџета је промењена на ширину <xliff:g id="NUMBER_0">%1$s</xliff:g> и висину <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Пречице"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Одбаци"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Затвори"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Лично"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 52b8108..2d34ee9 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Appinformation för %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Användningsinställningar för %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Nytt fönster"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Hantera fönster"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Spara app-par"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"De här apparna som ska användas tillsammans stöds inte på den här enheten"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Minska bredden"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Minska höjden"</string>
<string name="widget_resized" msgid="9130327887929620">"Widgetens storlek har ändrats till: bredd <xliff:g id="NUMBER_0">%1$s</xliff:g>, höjd <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Genvägar"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Ignorera"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Stäng"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Privat"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 5acef91..e258b0e 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Maelezo ya programu ya %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Mipangilio ya matumizi ya %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Dirisha Jipya"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Dhibiti Windows"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Hifadhi jozi ya programu"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Jozi hii ya programu haitumiki kwenye kifaa hiki"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Punguza upana"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Punguza urefu"</string>
<string name="widget_resized" msgid="9130327887929620">"Wijeti imepunguzwa hadi upana <xliff:g id="NUMBER_0">%1$s</xliff:g> urefu <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Njia za mkato"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Ondoa"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Funga"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Binafsi"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index ea84963..643bad3 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$sக்கான ஆப்ஸ் தகவல்கள்"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$sக்கான உபயோக அமைப்புகள்"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"புதிய சாளரம்"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"சாளரங்களை நிர்வகியுங்கள்"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ஆப்ஸ் ஜோடியைச் சேமி"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"இந்தச் சாதனத்தில் இந்த ஆப்ஸ் ஜோடி ஆதரிக்கப்படவில்லை"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"அகலத்தைக் குறை"</string>
<string name="action_decrease_height" msgid="282377193880900022">"உயரத்தைக் குறை"</string>
<string name="widget_resized" msgid="9130327887929620">"அகலம் <xliff:g id="NUMBER_0">%1$s</xliff:g> மற்றும் உயரம் <xliff:g id="NUMBER_1">%2$s</xliff:g>க்கு விட்ஜெட் அளவு மாற்றப்பட்டது"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ஷார்ட்கட்கள்"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"நிராகரி"</string>
<string name="accessibility_close" msgid="2277148124685870734">"மூடும் பட்டன்"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"தனிப்பட்டவை"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index f445d77..ddd988d 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s కోసం యాప్ సమాచారం"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$sకు సంబంధించిన వినియోగ సెట్టింగ్లు"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"కొత్త విండో"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"విండోలను మేనేజ్ చేయండి"</string>
<string name="save_app_pair" msgid="5647523853662686243">"యాప్ పెయిర్ను సేవ్ చేయండి"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ఈ పరికరంలో ఈ యాప్ పెయిర్ సపోర్ట్ చేయదు"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"వెడల్పును తగ్గించు"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ఎత్తును తగ్గించు"</string>
<string name="widget_resized" msgid="9130327887929620">"విడ్జెట్ సైజ్ వెడల్పు <xliff:g id="NUMBER_0">%1$s</xliff:g>కి, ఎత్తు <xliff:g id="NUMBER_1">%2$s</xliff:g>కి మార్చబడింది"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"షార్ట్కట్స్"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"తీసివేయండి"</string>
<string name="accessibility_close" msgid="2277148124685870734">"మూసివేస్తుంది"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"వ్యక్తిగతం"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 6acf390..13cd092 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"ข้อมูลแอปสำหรับ %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"การตั้งค่าการใช้งานสำหรับ %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"หน้าต่างใหม่"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"จัดการหน้าต่าง"</string>
<string name="save_app_pair" msgid="5647523853662686243">"บันทึกคู่แอป"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ไม่รองรับคู่แอปนี้ในอุปกรณ์เครื่องนี้"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"ลดความกว้าง"</string>
<string name="action_decrease_height" msgid="282377193880900022">"ลดความสูง"</string>
<string name="widget_resized" msgid="9130327887929620">"ปรับขนาดของวิดเจ็ตเป็นกว้าง <xliff:g id="NUMBER_0">%1$s</xliff:g> สูง <xliff:g id="NUMBER_1">%2$s</xliff:g> แล้ว"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"ทางลัด"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"ปิด"</string>
<string name="accessibility_close" msgid="2277148124685870734">"ปิด"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ส่วนตัว"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 0cef73a..58030f0 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Impormasyon ng app para sa %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Mga setting ng paggamit para sa %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Bagong Window"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Pamahalaan ang Mga Window"</string>
<string name="save_app_pair" msgid="5647523853662686243">"I-save ang app pair"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Hindi sinusuportahan sa device na ito ang pares ng app na ito"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Bawasan ang lapad"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Bawasan ang taas"</string>
<string name="widget_resized" msgid="9130327887929620">"Na-resize ang widget sa lapad <xliff:g id="NUMBER_0">%1$s</xliff:g> taas <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Mga Shortcut"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"I-dismiss"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Isara"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Personal"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 8dbcc49..2def2ac 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s uygulama bilgileri"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s ile ilgili kullanım ayarları"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Yeni Pencere"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Pencereleri yönet"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Uygulama çiftini kaydedin"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Bu uygulama çifti bu cihazda desteklenmiyor"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Genişliği azalt"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Yüksekliği azalt"</string>
<string name="widget_resized" msgid="9130327887929620">"Widget, <xliff:g id="NUMBER_0">%1$s</xliff:g> genişlik ve <xliff:g id="NUMBER_1">%2$s</xliff:g> yükseklik değerine yeniden boyutlandırıldı"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Kısayollar"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Kapat"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Kapat"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Kişisel"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 069277d..0f0752c 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Інформація про додаток для %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Параметри використання (%1$s)"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Нове вікно"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Керувати вікнами"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Зберегти пару додатків"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Ці два додатки не можна одночасно використовувати на цьому пристрої"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Зменшити ширину"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Зменшити висоту"</string>
<string name="widget_resized" msgid="9130327887929620">"Розміри віджета змінено на <xliff:g id="NUMBER_0">%1$s</xliff:g> завширшки та <xliff:g id="NUMBER_1">%2$s</xliff:g> заввишки"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Ярлики"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Закрити"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Закрити"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Особисті додатки"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 3cbfd1b..260ae25 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s کے لیے ایپ کی معلومات"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s کیلئے استعمال کی ترتیبات"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"نئی ونڈو"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Windows کا نظم کریں"</string>
<string name="save_app_pair" msgid="5647523853662686243">"ایپس کے جوڑے کو محفوظ کریں"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"ایپس کا یہ جوڑا اس آلے پر تعاون یافتہ نہیں ہے"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"چوڑائی کم کریں"</string>
<string name="action_decrease_height" msgid="282377193880900022">"اونچائی کم کریں"</string>
<string name="widget_resized" msgid="9130327887929620">"ویجیٹ کے سائز کو چوڑائی <xliff:g id="NUMBER_0">%1$s</xliff:g> اونچائی <xliff:g id="NUMBER_1">%2$s</xliff:g> میں تبدیل کر دیا گیا"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"شارٹ کٹس"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"برخاست کریں"</string>
<string name="accessibility_close" msgid="2277148124685870734">"بند کریں"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"ذاتی"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 2b77321..ecd72f6 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s ilovasi axboroti"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s uchun sarf sozlamalari"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Yangi oyna"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Oynalarni boshqarish"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Ilova juftini saqlash"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Bu ilova jufti ushbu qurilmada ishlamaydi"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Enini kichraytirish"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Bo‘yini kichraytirish"</string>
<string name="widget_resized" msgid="9130327887929620">"Vidjetning eni <xliff:g id="NUMBER_0">%1$s</xliff:g>, bo‘yi <xliff:g id="NUMBER_1">%2$s</xliff:g> qilib o‘zgartirildi"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Tezkor tugmalar"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Yopish"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Yopish"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Shaxsiy"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index ae49356..03e048e0 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Thông tin ứng dụng cho %1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Chế độ cài đặt mức sử dụng %1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Cửa sổ mới"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Quản lý cửa sổ"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Lưu cặp ứng dụng"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Cặp ứng dụng này không hoạt động được trên thiết bị này"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Giảm chiều rộng"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Giảm chiều cao"</string>
<string name="widget_resized" msgid="9130327887929620">"Đã đổi kích thước tiện ích thành chiều rộng <xliff:g id="NUMBER_0">%1$s</xliff:g> chiều cao <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Lối tắt"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Loại bỏ"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Đóng"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Cá nhân"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 69d92f8..356e6e5 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s 的应用信息"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"%1$s的使用设置"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"新窗口"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"管理窗口"</string>
<string name="save_app_pair" msgid="5647523853662686243">"保存应用组合"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"在该设备上无法使用此应用对"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"减小宽度"</string>
<string name="action_decrease_height" msgid="282377193880900022">"减小高度"</string>
<string name="widget_resized" msgid="9130327887929620">"微件尺寸已调整为:宽度 <xliff:g id="NUMBER_0">%1$s</xliff:g>,高度 <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"快捷方式"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"关闭"</string>
<string name="accessibility_close" msgid="2277148124685870734">"关闭"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"个人"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 3589167..b9e31dc 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"%1$s 的應用程式資料"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"「%1$s」的用量設定"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"新視窗"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"管理視窗"</string>
<string name="save_app_pair" msgid="5647523853662686243">"儲存應用程式配對"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"此裝置不支援此應用程式配對"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"減少闊度"</string>
<string name="action_decrease_height" msgid="282377193880900022">"減少高度"</string>
<string name="widget_resized" msgid="9130327887929620">"已調整小工具的大小至闊 <xliff:g id="NUMBER_0">%1$s</xliff:g> 高 <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"捷徑"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"關閉"</string>
<string name="accessibility_close" msgid="2277148124685870734">"關閉"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"個人"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 3f16360..2db315b 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"「%1$s」的應用程式資訊"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"「%1$s」的用量設定"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"新視窗"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"管理視窗"</string>
<string name="save_app_pair" msgid="5647523853662686243">"儲存應用程式配對"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"這部裝置不支援這組應用程式配對"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"減少寬度"</string>
<string name="action_decrease_height" msgid="282377193880900022">"減少高度"</string>
<string name="widget_resized" msgid="9130327887929620">"已將小工具的寬度和高度分別調整為 <xliff:g id="NUMBER_0">%1$s</xliff:g> 和 <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"捷徑"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"關閉"</string>
<string name="accessibility_close" msgid="2277148124685870734">"關閉"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"個人"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 63fd982..10f425d 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -32,8 +32,7 @@
<string name="split_app_info_accessibility" msgid="5475288491241414932">"Ulwazi lwe-App ye-%1$s"</string>
<string name="split_app_usage_settings" msgid="7214375263347964093">"Amasethingi okusetshenziswa ka-%1$s"</string>
<string name="new_window_option_taskbar" msgid="6448780542727767211">"Iwindi Elisha"</string>
- <!-- no translation found for manage_windows_option_taskbar (2294109489960654212) -->
- <skip />
+ <string name="manage_windows_option_taskbar" msgid="2294109489960654212">"Phatha Amawindi"</string>
<string name="save_app_pair" msgid="5647523853662686243">"Londoloza i-app ebhangqiwe"</string>
<string name="app_pair_default_title" msgid="4045241727446873529">"<xliff:g id="APP1">%1$s</xliff:g> | <xliff:g id="APP2">%2$s</xliff:g>"</string>
<string name="app_pair_unlaunchable_at_screen_size" msgid="3446551575502685376">"Lokhu kubhanqwa kwe-app akusekelwa kule divayisi"</string>
@@ -179,7 +178,8 @@
<string name="action_decrease_width" msgid="1374549771083094654">"Nciphisa ububanzi"</string>
<string name="action_decrease_height" msgid="282377193880900022">"Nciphisa ubude"</string>
<string name="widget_resized" msgid="9130327887929620">"Iwijethi inikezwe usayizi omusha ngobubanzi obungu-<xliff:g id="NUMBER_0">%1$s</xliff:g> ubude obungu-<xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
- <string name="action_deep_shortcut" msgid="2864038805849372848">"Izinqamuleli"</string>
+ <!-- no translation found for action_deep_shortcut (4766835855579976045) -->
+ <skip />
<string name="action_dismiss_notification" msgid="5909461085055959187">"Cashisa"</string>
<string name="accessibility_close" msgid="2277148124685870734">"Vala"</string>
<string name="all_apps_personal_tab" msgid="4190252696685155002">"Okomuntu siqu"</string>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 0d4e79b..326ee06 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -568,4 +568,8 @@
<!-- WindowManagerProxy -->
<dimen name="max_width_and_height_of_small_display_cutout">136px</dimen>
+
+ <!-- App Title Pill -->
+ <dimen name="app_title_pill_horizontal_padding">4dp</dimen>
+ <dimen name="app_title_pill_round_rect_padding">2dp</dimen>
</resources>
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java
index 817cc40..eaa720e 100644
--- a/src/com/android/launcher3/BubbleTextView.java
+++ b/src/com/android/launcher3/BubbleTextView.java
@@ -127,8 +127,6 @@
private static final int[] STATE_PRESSED = new int[]{android.R.attr.state_pressed};
- private static final int APP_PILL_TITLE_PADDING = 8;
-
private float mScaleForReorderBounce = 1f;
private IntArray mBreakPointsIntArray;
@@ -734,12 +732,18 @@
getDrawingRect(tmpRect);
CharSequence text = getText();
+ int mAppTitleHorizontalPadding = getResources().getDimensionPixelSize(
+ R.dimen.app_title_pill_horizontal_padding);
+ int mRoundRectPadding = getResources().getDimensionPixelSize(
+ R.dimen.app_title_pill_round_rect_padding);
+
float titleLength = (getPaint().measureText(text, 0, text.length())
- + APP_PILL_TITLE_PADDING * 2);
+ + (mAppTitleHorizontalPadding + mRoundRectPadding) * 2);
titleLength = Math.min(titleLength, tmpRect.width());
appTitleBounds = new RectF((tmpRect.width() - titleLength) / 2.f - getCompoundPaddingLeft(),
0, (tmpRect.width() + titleLength) / 2.f + getCompoundPaddingRight(),
(int) Math.ceil(fm.bottom - fm.top));
+ appTitleBounds.inset(mRoundRectPadding * 2, 0);
if (mIcon != null) {
@@ -859,8 +863,13 @@
getPaddingBottom());
}
if (shouldDrawAppContrastTile()) {
- setPadding(getPaddingLeft() + APP_PILL_TITLE_PADDING, getPaddingTop(),
- getPaddingRight() + APP_PILL_TITLE_PADDING,
+ int mAppTitleHorizontalPadding = getResources().getDimensionPixelSize(
+ R.dimen.app_title_pill_horizontal_padding);
+ int mRoundRectPadding = getResources().getDimensionPixelSize(
+ R.dimen.app_title_pill_round_rect_padding);
+
+ setPadding(mAppTitleHorizontalPadding + mRoundRectPadding, getPaddingTop(),
+ mAppTitleHorizontalPadding + mRoundRectPadding,
getPaddingBottom());
}
// Only apply two line for all_apps and device search only if necessary.
@@ -971,7 +980,7 @@
public boolean shouldDrawAppContrastTile() {
return mDisplay == DISPLAY_WORKSPACE && shouldTextBeVisible()
&& PillColorProvider.getInstance(getContext()).isMatchaEnabled()
- && enableContrastTiles();
+ && enableContrastTiles() && TextUtils.isEmpty(getText());
}
public void setTextVisibility(boolean visible) {
diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java
index 867bf98..18619f5 100644
--- a/src/com/android/launcher3/ButtonDropTarget.java
+++ b/src/com/android/launcher3/ButtonDropTarget.java
@@ -65,7 +65,7 @@
protected final ActivityContext mActivityContext;
protected final DropTargetHandler mDropTargetHandler;
protected DropTargetBar mDropTargetBar;
- private final MSDLPlayerWrapper mMSDLPlayerWrapper;
+ private MSDLPlayerWrapper mMSDLPlayerWrapper;
/** Whether this drop target is active for the current drag */
protected boolean mActive;
@@ -438,6 +438,11 @@
return textHeight + getPaddingTop() + getPaddingBottom() >= availableHeight;
}
+ @VisibleForTesting
+ public void setMSDLPlayerWrapper(MSDLPlayerWrapper wrapper) {
+ mMSDLPlayerWrapper = wrapper;
+ }
+
/**
* Reduce the size of the text until it fits the measured width or reaches a minimum.
*
diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java
index 58789fd..425f277 100644
--- a/src/com/android/launcher3/DeleteDropTarget.java
+++ b/src/com/android/launcher3/DeleteDropTarget.java
@@ -130,7 +130,6 @@
public void completeDrop(DragObject d) {
ItemInfo item = d.dragInfo;
if (canRemove(item)) {
- onAccessibilityDrop(null, item);
mDropTargetHandler.onDeleteComplete(item);
}
}
diff --git a/src/com/android/launcher3/DropTargetHandler.kt b/src/com/android/launcher3/DropTargetHandler.kt
index f1029b1..4d3fe52 100644
--- a/src/com/android/launcher3/DropTargetHandler.kt
+++ b/src/com/android/launcher3/DropTargetHandler.kt
@@ -65,6 +65,7 @@
}
fun onDeleteComplete(item: ItemInfo) {
+ removeItemAndStripEmptyScreens(null /* view */, item)
var pageItem: ItemInfo = item
if (item.container <= 0) {
val v = mLauncher.workspace.getHomescreenIconByItemId(item.container)
@@ -90,11 +91,7 @@
}
fun onAccessibilityDelete(view: View?, item: ItemInfo, announcement: CharSequence) {
- // Remove the item from launcher and the db, we can ignore the containerInfo in this call
- // because we already remove the drag view from the folder (if the drag originated from
- // a folder) in Folder.beginDrag()
- mLauncher.removeItem(view, item, true /* deleteFromDb */, "removed by accessibility drop")
- mLauncher.workspace.stripEmptyScreens()
+ removeItemAndStripEmptyScreens(view, item)
mLauncher.dragLayer.announceForAccessibility(announcement)
}
@@ -105,4 +102,12 @@
fun onClick(buttonDropTarget: ButtonDropTarget) {
mLauncher.accessibilityDelegate.handleAccessibleDrop(buttonDropTarget, null, null)
}
+
+ private fun removeItemAndStripEmptyScreens(view: View?, item: ItemInfo) {
+ // Remove the item from launcher and the db, we can ignore the containerInfo in this call
+ // because we already remove the drag view from the folder (if the drag originated from
+ // a folder) in Folder.beginDrag()
+ mLauncher.removeItem(view, item, true /* deleteFromDb */, "removed by accessibility drop")
+ mLauncher.workspace.stripEmptyScreens()
+ }
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index f61d3f0..8981024 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -785,7 +785,7 @@
}
// When the flag oneGridSpecs is on we want to disable ALLOW_ROTATION which is replaced
// by FIXED_LANDSCAPE_MODE, ALLOW_ROTATION will only be used on Tablets afterwards.
- if (!getDeviceProfile().isTablet) {
+ if (getDeviceProfile().isPhone || getDeviceProfile().isTwoPanels) {
LauncherPrefs.get(this).put(LauncherPrefs.ALLOW_ROTATION, false);
}
getRotationHelper().setFixedLandscape(
diff --git a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
index 7e3e392..fe11ee2 100644
--- a/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
+++ b/src/com/android/launcher3/allapps/search/AllAppsSearchBarController.java
@@ -150,6 +150,7 @@
mCallback.clearSearchResult();
mInput.reset();
mInput.clearFocus();
+ mInput.hideKeyboard();
mQuery = null;
}
diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java
index 2550ebb..dbab52a 100644
--- a/src/com/android/launcher3/logging/StatsLogManager.java
+++ b/src/com/android/launcher3/logging/StatsLogManager.java
@@ -843,6 +843,13 @@
@UiEvent(doc = "User long press nav handle and a long press runnable was created.")
LAUNCHER_OMNI_GET_LONG_PRESS_RUNNABLE(1545),
+
+ // One Grid Flags
+ @UiEvent(doc = "User sets the device in Fixed Landscape")
+ FIXED_LANDSCAPE_TOGGLE_ENABLE(2014),
+
+ @UiEvent(doc = "User sets the device in Fixed Landscape")
+ FIXED_LANDSCAPE_TOGGLE_DISABLED(2020),
// ADD MORE
;
diff --git a/src/com/android/launcher3/model/GridSizeMigrationLogic.kt b/src/com/android/launcher3/model/GridSizeMigrationLogic.kt
index 3f52d8a..75fd31e 100644
--- a/src/com/android/launcher3/model/GridSizeMigrationLogic.kt
+++ b/src/com/android/launcher3/model/GridSizeMigrationLogic.kt
@@ -58,12 +58,17 @@
}
val isFirstLoad = get(context).get(LauncherPrefs.IS_FIRST_LOAD_AFTER_RESTORE)
- Log.d(TAG, "Begin grid migration. First load: $isFirstLoad")
+ Log.d(
+ TAG,
+ "Begin grid migration. First load: $isFirstLoad\n srcDeviceState: " +
+ "$srcDeviceState\ndestDeviceState: $destDeviceState\nisDestNewDb: $isDestNewDb",
+ )
// This is a special case where if the grid is the same amount of columns but a larger
// amount of rows we simply copy over the source grid to the destination grid, rather
// than undergoing the general grid migration.
if (shouldMigrateToStrictlyTallerGrid(isDestNewDb, srcDeviceState, destDeviceState)) {
+ Log.d(TAG, "Migrating to strictly taller grid")
copyTable(source, TABLE_NAME, target.writableDatabase, TABLE_NAME, context)
if (oneGridSpecs()) {
val destReader = DbReader(target.writableDatabase, TABLE_NAME, context)
diff --git a/src/com/android/launcher3/popup/PopupPopulator.java b/src/com/android/launcher3/popup/PopupPopulator.java
index 755c3eb..b748011 100644
--- a/src/com/android/launcher3/popup/PopupPopulator.java
+++ b/src/com/android/launcher3/popup/PopupPopulator.java
@@ -116,7 +116,7 @@
final UserHandle user = originalInfo.user;
return () -> {
ApplicationInfoWrapper infoWrapper =
- new ApplicationInfoWrapper(context, activity.getPackageName(), user);
+ new ApplicationInfoWrapper(context, originalInfo.getTargetPackage(), user);
List<ShortcutInfo> shortcuts = new ShortcutRequest(context, user)
.withContainer(activity)
.query(ShortcutRequest.PUBLISHED);
diff --git a/src/com/android/launcher3/util/MSDLPlayerWrapper.java b/src/com/android/launcher3/util/MSDLPlayerWrapper.java
index eccccc7..8a1d923 100644
--- a/src/com/android/launcher3/util/MSDLPlayerWrapper.java
+++ b/src/com/android/launcher3/util/MSDLPlayerWrapper.java
@@ -69,6 +69,7 @@
/** Print the latest history of MSDL tokens played */
public void dump(String prefix, PrintWriter writer) {
+ writer.println(prefix + mMSDLPlayer.toString());
writer.println(prefix + "MSDLPlayerWrapper history of latest events:");
List<MSDLEvent> events = getHistory();
for (MSDLEvent event: events) {
diff --git a/tests/assets/databases/GridMigrationTest/result5x5to3x3.db b/tests/assets/databases/GridMigrationTest/result5x5to3x3.db
index 686056d..6050251 100644
--- a/tests/assets/databases/GridMigrationTest/result5x5to3x3.db
+++ b/tests/assets/databases/GridMigrationTest/result5x5to3x3.db
Binary files differ
diff --git a/tests/assets/databases/GridMigrationTest/result5x5to4x7.db b/tests/assets/databases/GridMigrationTest/result5x5to4x7.db
index cd105c5..e6cd6f0 100644
--- a/tests/assets/databases/GridMigrationTest/result5x5to4x7.db
+++ b/tests/assets/databases/GridMigrationTest/result5x5to4x7.db
Binary files differ
diff --git a/tests/assets/databases/GridMigrationTest/result5x5to5x8.db b/tests/assets/databases/GridMigrationTest/result5x5to5x8.db
index 4b46969..311a112 100644
--- a/tests/assets/databases/GridMigrationTest/result5x5to5x8.db
+++ b/tests/assets/databases/GridMigrationTest/result5x5to5x8.db
Binary files differ
diff --git a/tests/assets/databases/GridMigrationTest/flagged_result5x5to5x8.db b/tests/assets/databases/GridMigrationTest/result5x5to5x8WithShift.db
similarity index 92%
rename from tests/assets/databases/GridMigrationTest/flagged_result5x5to5x8.db
rename to tests/assets/databases/GridMigrationTest/result5x5to5x8WithShift.db
index 8bea3ce..d750774 100644
--- a/tests/assets/databases/GridMigrationTest/flagged_result5x5to5x8.db
+++ b/tests/assets/databases/GridMigrationTest/result5x5to5x8WithShift.db
Binary files differ
diff --git a/tests/assets/databases/GridMigrationTest/test_launcher_2.db b/tests/assets/databases/GridMigrationTest/test_launcher_2.db
new file mode 100644
index 0000000..b538e26
--- /dev/null
+++ b/tests/assets/databases/GridMigrationTest/test_launcher_2.db
Binary files differ
diff --git a/tests/multivalentTests/src/com/android/launcher3/DeleteDropTargetTest.kt b/tests/multivalentTests/src/com/android/launcher3/DeleteDropTargetTest.kt
index 42374a5..fa368e5 100644
--- a/tests/multivalentTests/src/com/android/launcher3/DeleteDropTargetTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/DeleteDropTargetTest.kt
@@ -16,7 +16,12 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.verifyNoMoreInteractions
@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -24,6 +29,8 @@
@get:Rule val mSetFlagsRule = SetFlagsRule()
+ @Mock private val msdlPlayerWrapper = mock<MSDLPlayerWrapper>()
+
private var mContext: Context = ActivityContextWrapper(getApplicationContext())
// Use a non-abstract class implementation
@@ -50,13 +57,12 @@
@Test
@EnableFlags(Flags.FLAG_MSDL_FEEDBACK)
fun onDragEnter_performsMSDLSwipeThresholdFeedback() {
+ buttonDropTarget.setMSDLPlayerWrapper(msdlPlayerWrapper)
val target = DropTarget.DragObject(mContext)
target.dragView = mock<DragView<*>>()
buttonDropTarget.onDragEnter(target)
- val wrapper = MSDLPlayerWrapper.INSTANCE.get(mContext)
- val history = wrapper.history
- assertThat(history.size).isEqualTo(1)
- assertThat(history[0].tokenName).isEqualTo(MSDLToken.SWIPE_THRESHOLD_INDICATOR.name)
+ verify(msdlPlayerWrapper, times(1)).playToken(eq(MSDLToken.SWIPE_THRESHOLD_INDICATOR))
+ verifyNoMoreInteractions(msdlPlayerWrapper)
}
}
diff --git a/tests/src/com/android/launcher3/model/GridMigrationTest.kt b/tests/src/com/android/launcher3/model/GridMigrationTest.kt
index 379e98d..b8ffe74 100644
--- a/tests/src/com/android/launcher3/model/GridMigrationTest.kt
+++ b/tests/src/com/android/launcher3/model/GridMigrationTest.kt
@@ -17,6 +17,7 @@
package com.android.launcher3.model
import android.platform.test.flag.junit.SetFlagsRule
+import android.util.Log
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.platform.app.InstrumentationRegistry
@@ -34,7 +35,14 @@
private val phoneContext = InstrumentationRegistry.getInstrumentation().targetContext
-data class EntryData(val x: Int, val y: Int, val spanX: Int, val spanY: Int, val rank: Int)
+data class EntryData(
+ val x: Int,
+ val y: Int,
+ val screenId: Int,
+ val spanX: Int,
+ val spanY: Int,
+ val rank: Int,
+)
/**
* Holds the data needed to run a test in GridMigrationTest, usually we would have a src
@@ -72,24 +80,16 @@
@RunWith(AndroidJUnit4::class)
class GridMigrationTest {
private val DB_FILE = "test_launcher.db"
+ // This DB is used for testing the heuristic where we add an extra row at the bottom.
+ private val DB_FILE_NO_SHIFT = "test_launcher_2.db"
@JvmField
@Rule
val setFlagsRule = SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT)
- // Copying the src db for all tests.
- @JvmField
- @Rule
- val fileCopier =
- TestToPhoneFileCopier(
- src = "databases/GridMigrationTest/$DB_FILE",
- dest = "databases/$DB_FILE",
- removeOnFinish = true,
- )
-
@Before
fun setup() {
- setFlagsRule.setFlags(false, Flags.FLAG_ENABLE_GRID_MIGRATION_FIX)
+ setFlagsRule.setFlags(true, Flags.FLAG_ONE_GRID_SPECS)
}
private fun migrate(src: GridMigrationData, dst: GridMigrationData) {
@@ -101,7 +101,7 @@
dst.gridState,
dst.dbHelper,
src.dbHelper.readableDatabase,
- false,
+ true,
)
} else {
GridSizeMigrationDBController.migrateGridIfNeeded(
@@ -110,7 +110,7 @@
dst.gridState,
dst.dbHelper,
src.dbHelper.readableDatabase,
- false,
+ true,
)
}
}
@@ -131,12 +131,18 @@
}
}
- private fun compare(dst: GridMigrationData, target: GridMigrationData) {
- val sort = compareBy<DbEntry>({ it.cellX }, { it.cellY })
- val mapF = { it: DbEntry -> EntryData(it.cellX, it.cellY, it.spanX, it.spanY, it.rank) }
+ private fun compare(dst: GridMigrationData, target: GridMigrationData, src: GridMigrationData) {
+ val sort = compareBy<DbEntry>({ it.screenId }, { it.cellX }, { it.cellY })
+ val mapF = { it: DbEntry ->
+ EntryData(it.cellX, it.cellY, it.screenId, it.spanX, it.spanY, it.rank)
+ }
val entriesDst = dst.readEntries().sortedWith(sort).map(mapF)
val entriesTarget = target.readEntries().sortedWith(sort).map(mapF)
-
+ val entriesSrc = src.readEntries().sortedWith(sort).map(mapF)
+ Log.i(
+ TAG,
+ "entriesSrc: $entriesSrc\n entriesDst: $entriesDst\n entriesTarget: $entriesTarget",
+ )
assert(entriesDst == entriesTarget) {
"The elements on the dst database is not the same as in the target"
}
@@ -155,9 +161,19 @@
"Source db and destination db do not contain the same number of elements"
}
validateDb(dst)
- compare(dst, target)
+ compare(dst, target, src)
}
+ // Copying the src db for all tests.
+ @JvmField
+ @Rule
+ val fileCopier =
+ TestToPhoneFileCopier(
+ src = "databases/GridMigrationTest/$DB_FILE",
+ dest = "databases/$DB_FILE",
+ removeOnFinish = true,
+ )
+
@JvmField
@Rule
val result5x5to3x3 =
@@ -173,8 +189,8 @@
src = GridMigrationData(DB_FILE, DeviceGridState(5, 5, 5, TYPE_PHONE, DB_FILE)),
dst =
GridMigrationData(
- null, // in memory db, to download a new db change null for the filename of the
- // db name to store it. Do not use existing names.
+ null, // in memory db, to download a new db change null for
+ // the filename of the db name to store it. Do not use existing names.
DeviceGridState(3, 3, 3, TYPE_PHONE, ""),
),
target =
@@ -196,8 +212,8 @@
src = GridMigrationData(DB_FILE, DeviceGridState(5, 5, 5, TYPE_PHONE, DB_FILE)),
dst =
GridMigrationData(
- null, // in memory db, to download a new db change null for the filename of the
- // db name to store it. Do not use existing names.
+ null, // in memory db, to download a new db change null for
+ // the filename of the db name to store it. Do not use existing names.
DeviceGridState(4, 7, 4, TYPE_PHONE, ""),
),
target =
@@ -206,6 +222,42 @@
@JvmField
@Rule
+ val result5x5to5x8WithShift =
+ TestToPhoneFileCopier(
+ src = "databases/GridMigrationTest/result5x5to5x8WithShift.db",
+ dest = "databases/result5x5to5x8WithShift.db",
+ removeOnFinish = true,
+ )
+
+ @Test
+ fun `5x5 to 5x8 with cells shifting down`() =
+ runTest(
+ src = GridMigrationData(DB_FILE, DeviceGridState(5, 5, 5, TYPE_PHONE, DB_FILE)),
+ dst =
+ GridMigrationData(
+ null, // in memory db, to download a new db change null
+ // for
+ // the filename of the db name to store it. Do not use existing names.
+ DeviceGridState(5, 8, 5, TYPE_PHONE, ""),
+ ),
+ target =
+ GridMigrationData(
+ "result5x5to5x8WithShift.db",
+ DeviceGridState(5, 8, 5, TYPE_PHONE, ""),
+ ),
+ )
+
+ @JvmField
+ @Rule
+ val fileCopierNoShift =
+ TestToPhoneFileCopier(
+ src = "databases/GridMigrationTest/$DB_FILE_NO_SHIFT",
+ dest = "databases/$DB_FILE_NO_SHIFT",
+ removeOnFinish = true,
+ )
+
+ @JvmField
+ @Rule
val result5x5to5x8 =
TestToPhoneFileCopier(
src = "databases/GridMigrationTest/result5x5to5x8.db",
@@ -214,44 +266,24 @@
)
@Test
- fun `5x5 to 5x8`() =
+ fun `5x5 to 5x8 without cell shift`() =
runTest(
- src = GridMigrationData(DB_FILE, DeviceGridState(5, 5, 5, TYPE_PHONE, DB_FILE)),
+ src =
+ GridMigrationData(
+ DB_FILE_NO_SHIFT,
+ DeviceGridState(5, 5, 5, TYPE_PHONE, DB_FILE_NO_SHIFT),
+ ),
dst =
GridMigrationData(
- null, // in memory db, to download a new db change null for the filename of the
- // db name to store it. Do not use existing names.
+ null, // in memory db, to download a new db change null for
+ // the filename of the db name to store it. Do not use existing names.
DeviceGridState(5, 8, 5, TYPE_PHONE, ""),
),
target =
GridMigrationData("result5x5to5x8.db", DeviceGridState(5, 8, 5, TYPE_PHONE, "")),
)
- @JvmField
- @Rule
- val flaggedResult5x5to5x8 =
- TestToPhoneFileCopier(
- src = "databases/GridMigrationTest/flagged_result5x5to5x8.db",
- dest = "databases/flagged_result5x5to5x8.db",
- removeOnFinish = true,
- )
-
- @Test
- fun `flagged 5x5 to 5x8`() {
- setFlagsRule.setFlags(true, Flags.FLAG_ENABLE_GRID_MIGRATION_FIX)
- runTest(
- src = GridMigrationData(DB_FILE, DeviceGridState(5, 5, 5, TYPE_PHONE, DB_FILE)),
- dst =
- GridMigrationData(
- null, // in memory db, to download a new db change null for the filename of the
- // db name to store it. Do not use existing names.
- DeviceGridState(5, 8, 5, TYPE_PHONE, ""),
- ),
- target =
- GridMigrationData(
- "flagged_result5x5to5x8.db",
- DeviceGridState(5, 8, 5, TYPE_PHONE, ""),
- ),
- )
+ companion object {
+ private const val TAG = "GridMigrationTest"
}
}