Merge "Import translations. DO NOT MERGE ANYWHERE" into main
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
index e30fe66..8cbf239 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java
@@ -96,7 +96,7 @@
return FeatureFlags.ENABLE_ALL_APPS_FROM_OVERVIEW.get()
? mLauncher.getStateManager().getLastState()
: NORMAL;
- } else if (fromState == NORMAL && isDragTowardPositive) {
+ } else if (fromState == NORMAL && shouldOpenAllApps(isDragTowardPositive)) {
return ALL_APPS;
}
return fromState;
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchController.java
index 26ab3d6..cda7855 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchController.java
@@ -21,6 +21,7 @@
import static android.view.MotionEvent.ACTION_UP;
import static android.view.WindowManager.LayoutParams.FLAG_SLIPPERY;
+import static com.android.launcher3.MotionEventsUtils.isTrackpadScroll;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_SWIPE_DOWN_WORKSPACE_NOTISHADE_OPEN;
import android.graphics.PointF;
@@ -57,6 +58,8 @@
/* If {@code false}, this controller should not handle the input {@link MotionEvent}.*/
private boolean mCanIntercept;
+ private boolean mIsTrackpadReverseScroll;
+
public StatusBarTouchController(Launcher l) {
mLauncher = l;
mSystemUiProxy = SystemUiProxy.INSTANCE.get(mLauncher);
@@ -92,6 +95,8 @@
}
mDownEvents.clear();
mDownEvents.put(pid, new PointF(ev.getX(), ev.getY()));
+ mIsTrackpadReverseScroll = !mLauncher.isNaturalScrollingEnabled()
+ && isTrackpadScroll(ev);
} else if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
// Check!! should only set it only when threshold is not entered.
mDownEvents.put(pid, new PointF(ev.getX(idx), ev.getY(idx)));
@@ -102,6 +107,9 @@
if (action == ACTION_MOVE) {
float dy = ev.getY(idx) - mDownEvents.get(pid).y;
float dx = ev.getX(idx) - mDownEvents.get(pid).x;
+ if (mIsTrackpadReverseScroll) {
+ dy = -dy;
+ }
// Currently input dispatcher will not do touch transfer if there are more than
// one touch pointer. Hence, even if slope passed, only set the slippery flag
// when there is single touch event. (context: InputDispatcher.cpp line 1445)
@@ -126,6 +134,7 @@
mLauncher.getStatsLogManager().logger()
.log(LAUNCHER_SWIPE_DOWN_WORKSPACE_NOTISHADE_OPEN);
setWindowSlippery(false);
+ mIsTrackpadReverseScroll = false;
return true;
}
return true;
diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
index db5ad82..179612b 100644
--- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
+++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
@@ -57,12 +57,14 @@
import android.provider.Settings;
import android.util.Log;
import android.view.ISystemGestureExclusionListener;
+import android.view.IWindowManager;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.view.WindowManagerGlobal;
import androidx.annotation.BinderThread;
import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
import com.android.launcher3.LauncherPrefs;
import com.android.launcher3.config.FeatureFlags;
@@ -98,20 +100,22 @@
private final Context mContext;
private final DisplayController mDisplayController;
- private final int mDisplayId;
- private final ISystemGestureExclusionListener mGestureExclusionListener =
+ private final IWindowManager mIWindowManager;
+
+ @VisibleForTesting
+ final ISystemGestureExclusionListener mGestureExclusionListener =
new ISystemGestureExclusionListener.Stub() {
@BinderThread
@Override
public void onSystemGestureExclusionChanged(int displayId,
Region systemGestureExclusionRegion, Region unrestrictedOrNull) {
- if (displayId != mDisplayId) {
+ if (displayId != DEFAULT_DISPLAY) {
return;
}
// Assignments are atomic, it should be safe on binder thread. Also we don't
- // think systemGestureExclusionRegion can be null but just in case, don't let
- // mExclusionRegion be null.
+ // think systemGestureExclusionRegion can be null but just in case, don't
+ // let mExclusionRegion be null.
mExclusionRegion = systemGestureExclusionRegion != null
? systemGestureExclusionRegion : new Region();
}
@@ -142,17 +146,28 @@
private boolean mExclusionListenerRegistered;
public RecentsAnimationDeviceState(Context context) {
- this(context, false);
+ this(context, false, WindowManagerGlobal.getWindowManagerService());
+ }
+
+ public RecentsAnimationDeviceState(Context context, boolean isInstanceForTouches) {
+ this(context, isInstanceForTouches, WindowManagerGlobal.getWindowManagerService());
+ }
+
+ @VisibleForTesting
+ RecentsAnimationDeviceState(Context context, IWindowManager windowManager) {
+ this(context, false, windowManager);
}
/**
* @param isInstanceForTouches {@code true} if this is the persistent instance being used for
* gesture touch handling
*/
- public RecentsAnimationDeviceState(Context context, boolean isInstanceForTouches) {
+ RecentsAnimationDeviceState(
+ Context context, boolean isInstanceForTouches,
+ IWindowManager windowManager) {
mContext = context;
mDisplayController = DisplayController.INSTANCE.get(context);
- mDisplayId = DEFAULT_DISPLAY;
+ mIWindowManager = windowManager;
mIsOneHandedModeSupported = SystemProperties.getBoolean(SUPPORT_ONE_HANDED_MODE, false);
mRotationTouchHelper = RotationTouchHelper.INSTANCE.get(context);
if (isInstanceForTouches) {
@@ -251,7 +266,7 @@
@Override
public void onDisplayInfoChanged(Context context, Info info, int flags) {
if ((flags & (CHANGE_ROTATION | CHANGE_NAVIGATION_MODE)) != 0) {
- mMode = info.navigationMode;
+ mMode = info.getNavigationMode();
ActiveGestureLog.INSTANCE.setIsFullyGesturalNavMode(isFullyGesturalNavMode());
mNavBarPosition = new NavBarPosition(mMode, info);
@@ -273,9 +288,8 @@
return;
}
try {
- WindowManagerGlobal.getWindowManagerService()
- .registerSystemGestureExclusionListener(
- mGestureExclusionListener, mDisplayId);
+ mIWindowManager.registerSystemGestureExclusionListener(
+ mGestureExclusionListener, DEFAULT_DISPLAY);
mExclusionListenerRegistered = true;
} catch (RemoteException e) {
Log.e(TAG, "Failed to register window manager callbacks", e);
@@ -294,9 +308,8 @@
return;
}
try {
- WindowManagerGlobal.getWindowManagerService()
- .unregisterSystemGestureExclusionListener(
- mGestureExclusionListener, mDisplayId);
+ mIWindowManager.unregisterSystemGestureExclusionListener(
+ mGestureExclusionListener, DEFAULT_DISPLAY);
mExclusionListenerRegistered = false;
} catch (RemoteException e) {
Log.e(TAG, "Failed to unregister window manager callbacks", e);
@@ -340,7 +353,7 @@
* @return the display id for the display that Launcher is running on.
*/
public int getDisplayId() {
- return mDisplayId;
+ return DEFAULT_DISPLAY;
}
/**
diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java
index 92aa9fa..0d7ca07 100644
--- a/quickstep/src/com/android/quickstep/SystemUiProxy.java
+++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java
@@ -178,9 +178,12 @@
mContext = context;
mAsyncHandler = new Handler(UI_HELPER_EXECUTOR.getLooper(), this::handleMessageAsync);
final Intent baseIntent = new Intent().setPackage(mContext.getPackageName());
+ final ActivityOptions options = ActivityOptions.makeBasic()
+ .setPendingIntentCreatorBackgroundActivityStartMode(
+ ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED);
mRecentsPendingIntent = PendingIntent.getActivity(mContext, 0, baseIntent,
PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_ALLOW_UNSAFE_IMPLICIT_INTENT
- | Intent.FILL_IN_COMPONENT);
+ | Intent.FILL_IN_COMPONENT, options.toBundle());
}
@Override
diff --git a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
index 96e39c4..2f84ac9 100644
--- a/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
+++ b/quickstep/src/com/android/quickstep/TaskShortcutFactory.java
@@ -190,7 +190,7 @@
}
if (options != null
&& ActivityManagerWrapper.getInstance().startActivityFromRecents(taskId,
- options)) {
+ options)) {
final Runnable animStartedListener = () -> {
// Hide the task view and wait for the window to be resized
// TODO: Consider animating in launcher and do an in-place start activity
@@ -216,12 +216,13 @@
AppTransitionAnimationSpecsFuture future =
new AppTransitionAnimationSpecsFuture(mHandler) {
- @Override
- public List<AppTransitionAnimationSpecCompat> composeSpecs() {
- return Collections.singletonList(new AppTransitionAnimationSpecCompat(
- taskId, thumbnail, taskBounds));
- }
- };
+ @Override
+ public List<AppTransitionAnimationSpecCompat> composeSpecs() {
+ return Collections.singletonList(
+ new AppTransitionAnimationSpecCompat(
+ taskId, thumbnail, taskBounds));
+ }
+ };
overridePendingAppTransitionMultiThumbFuture(
future, animStartedListener, mHandler, true /* scaleUp */,
taskKey.displayId);
@@ -264,38 +265,35 @@
/**
* Does NOT add split options in the following scenarios:
- * * The taskView to add split options is already showing split screen tasks
- * * There aren't at least 2 tasks in overview to show split options for
- * * Split isn't supported by the task itself (non resizable activity)
- * * We aren't currently in multi-window
- * * The taskView to show split options for is the focused task AND we haven't started
- * scrolling in overview (if we haven't scrolled, there's a split overview action button so
- * we don't need this menu option)
+ * * 1. Taskbar is not present AND aren't at least 2 tasks in overview to show split options for
+ * * 2. Split isn't supported by the task itself (non resizable activity)
+ * * 3. We aren't currently in multi-window
+ * * 4. The taskView to show split options for is the focused task AND we haven't started
+ * * scrolling in overview (if we haven't scrolled, there's a split overview action button so
+ * * we don't need this menu option)
*/
TaskShortcutFactory SPLIT_SELECT = new TaskShortcutFactory() {
@Override
public List<SystemShortcut> getShortcuts(BaseDraggingActivity activity,
TaskIdAttributeContainer taskContainer) {
DeviceProfile deviceProfile = activity.getDeviceProfile();
- final Task task = taskContainer.getTask();
+ final Task task = taskContainer.getTask();
final int intentFlags = task.key.baseIntent.getFlags();
final TaskView taskView = taskContainer.getTaskView();
final RecentsView recentsView = taskView.getRecentsView();
final PagedOrientationHandler orientationHandler =
recentsView.getPagedOrientationHandler();
- boolean notEnoughTasksToSplit = recentsView.getTaskViewCount() < 2;
- boolean isFocusedTask = deviceProfile.isTablet && taskView.isFocusedTask();
- boolean isTaskInExpectedScrollPosition =
- recentsView.isTaskInExpectedScrollPosition(recentsView.indexOfChild(taskView));
+ boolean notEnoughTasksToSplit =
+ !deviceProfile.isTaskbarPresent && recentsView.getTaskViewCount() < 2;
boolean isTaskSplitNotSupported = !task.isDockable ||
(intentFlags & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0;
boolean hideForExistingMultiWindow = activity.getDeviceProfile().isMultiWindowMode;
+ boolean isFocusedTask = deviceProfile.isTablet && taskView.isFocusedTask();
+ boolean isTaskInExpectedScrollPosition =
+ recentsView.isTaskInExpectedScrollPosition(recentsView.indexOfChild(taskView));
- if (taskView.containsMultipleTasks()
- || notEnoughTasksToSplit
- || isTaskSplitNotSupported
- || hideForExistingMultiWindow
+ if (notEnoughTasksToSplit || isTaskSplitNotSupported || hideForExistingMultiWindow
|| (isFocusedTask && isTaskInExpectedScrollPosition)) {
return null;
}
@@ -333,7 +331,7 @@
@Override
public List<SystemShortcut> getShortcuts(BaseDraggingActivity activity,
TaskIdAttributeContainer taskContainer) {
- final Task task = taskContainer.getTask();
+ final Task task = taskContainer.getTask();
if (!task.isDockable) {
return null;
}
@@ -349,8 +347,8 @@
private boolean isAvailable(BaseDraggingActivity activity, int displayId) {
return Settings.Global.getInt(
- activity.getContentResolver(),
- Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0
+ activity.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0
&& !isDesktopModeSupported();
}
};
@@ -389,7 +387,8 @@
@Override
public void onClick(View view) {
if (mTaskView.launchTaskAnimated() != null) {
- SystemUiProxy.INSTANCE.get(mTarget).startScreenPinning(mTaskView.getTask().key.id);
+ SystemUiProxy.INSTANCE.get(mTarget).startScreenPinning(
+ mTaskView.getTask().key.id);
}
dismissTaskMenuView(mTarget);
mTarget.getStatsLogManager().logger().withItemInfo(mTaskView.getItemInfo())
@@ -405,7 +404,7 @@
return InstantAppResolver.newInstance(activity).isInstantApp(
t.getTopComponent().getPackageName(), t.getKey().userId)
? Collections.singletonList(new SystemShortcut.Install(activity,
- taskContainer.getItemInfo(), taskContainer.getTaskView()))
+ taskContainer.getItemInfo(), taskContainer.getTaskView()))
: null;
}
};
@@ -425,9 +424,10 @@
@Override
public List<SystemShortcut> getShortcuts(BaseDraggingActivity activity,
TaskIdAttributeContainer taskContainer) {
- SystemShortcut screenshotShortcut = taskContainer.getThumbnailView().getTaskOverlay()
- .getScreenshotShortcut(activity, taskContainer.getItemInfo(),
- taskContainer.getTaskView());
+ SystemShortcut screenshotShortcut =
+ taskContainer.getThumbnailView().getTaskOverlay()
+ .getScreenshotShortcut(activity, taskContainer.getItemInfo(),
+ taskContainer.getTaskView());
return createSingletonShortcutList(screenshotShortcut);
}
};
diff --git a/quickstep/src/com/android/quickstep/util/SystemWindowManagerProxy.java b/quickstep/src/com/android/quickstep/util/SystemWindowManagerProxy.java
index c82cdb7..348e4dc 100644
--- a/quickstep/src/com/android/quickstep/util/SystemWindowManagerProxy.java
+++ b/quickstep/src/com/android/quickstep/util/SystemWindowManagerProxy.java
@@ -18,6 +18,7 @@
import static android.view.Display.DEFAULT_DISPLAY;
import android.content.Context;
+import android.graphics.Rect;
import android.util.ArrayMap;
import android.view.Surface;
import android.view.WindowManager;
@@ -41,6 +42,12 @@
}
@Override
+ public Rect getCurrentBounds(Context displayInfoContext) {
+ return displayInfoContext.getResources().getConfiguration().windowConfiguration
+ .getMaxBounds();
+ }
+
+ @Override
public int getRotation(Context displayInfoContext) {
return displayInfoContext.getResources().getConfiguration().windowConfiguration
.getRotation();
diff --git a/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java b/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
index 17fa253..eced5a9 100644
--- a/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
+++ b/quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java
@@ -104,7 +104,7 @@
Context context = instrumentation.getContext();
mDevice = UiDevice.getInstance(instrumentation);
mDevice.setOrientationNatural();
- mLauncher = new LauncherInstrumentation();
+ mLauncher = AbstractLauncherUiTest.createLauncherInstrumentation();
mLauncher.enableDebugTracing();
// b/143488140
//mLauncher.enableCheckEventsForSuccessfulGestures();
diff --git a/quickstep/tests/src/com/android/quickstep/RecentsAnimationDeviceStateTest.kt b/quickstep/tests/src/com/android/quickstep/RecentsAnimationDeviceStateTest.kt
new file mode 100644
index 0000000..53bc2a2
--- /dev/null
+++ b/quickstep/tests/src/com/android/quickstep/RecentsAnimationDeviceStateTest.kt
@@ -0,0 +1,144 @@
+package com.android.quickstep
+
+import android.content.Context
+import android.testing.AndroidTestingRunner
+import android.view.Display
+import android.view.IWindowManager
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.filters.SmallTest
+import com.android.launcher3.util.DisplayController.CHANGE_DENSITY
+import com.android.launcher3.util.DisplayController.CHANGE_NAVIGATION_MODE
+import com.android.launcher3.util.DisplayController.CHANGE_ROTATION
+import com.android.launcher3.util.DisplayController.Info
+import com.android.launcher3.util.Executors
+import com.android.launcher3.util.NavigationMode
+import com.android.launcher3.util.window.WindowManagerProxy
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.reset
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+import org.mockito.kotlin.verifyZeroInteractions
+import org.mockito.kotlin.whenever
+
+/** Unit test for [RecentsAnimationDeviceState]. */
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class RecentsAnimationDeviceStateTest {
+
+ @Mock private lateinit var windowManager: IWindowManager
+ @Mock private lateinit var windowManagerProxy: WindowManagerProxy
+ @Mock private lateinit var info: Info
+
+ private val context = ApplicationProvider.getApplicationContext() as Context
+ private lateinit var underTest: RecentsAnimationDeviceState
+
+ @Before
+ fun setup() {
+ MockitoAnnotations.initMocks(this)
+ underTest = RecentsAnimationDeviceState(context, windowManager)
+ }
+
+ @Test
+ fun registerExclusionListener_success() {
+ underTest.registerExclusionListener()
+
+ awaitTasksCompleted()
+ verify(windowManager)
+ .registerSystemGestureExclusionListener(
+ underTest.mGestureExclusionListener,
+ Display.DEFAULT_DISPLAY
+ )
+ }
+
+ @Test
+ fun registerExclusionListener_again_fail() {
+ underTest.registerExclusionListener()
+ awaitTasksCompleted()
+ reset(windowManager)
+
+ underTest.registerExclusionListener()
+
+ awaitTasksCompleted()
+ verifyZeroInteractions(windowManager)
+ }
+
+ @Test
+ fun unregisterExclusionListener_success() {
+ underTest.registerExclusionListener()
+ awaitTasksCompleted()
+ reset(windowManager)
+
+ underTest.unregisterExclusionListener()
+
+ awaitTasksCompleted()
+ verify(windowManager)
+ .unregisterSystemGestureExclusionListener(
+ underTest.mGestureExclusionListener,
+ Display.DEFAULT_DISPLAY
+ )
+ }
+
+ @Test
+ fun unregisterExclusionListener_again_fail() {
+ underTest.registerExclusionListener()
+ underTest.unregisterExclusionListener()
+ awaitTasksCompleted()
+ reset(windowManager)
+
+ underTest.unregisterExclusionListener()
+
+ awaitTasksCompleted()
+ verifyZeroInteractions(windowManager)
+ }
+
+ @Test
+ fun onDisplayInfoChanged_noButton_registerExclusionListener() {
+ whenever(windowManagerProxy.getNavigationMode(context)).thenReturn(NavigationMode.NO_BUTTON)
+
+ underTest.onDisplayInfoChanged(context, info, CHANGE_ROTATION or CHANGE_NAVIGATION_MODE)
+
+ awaitTasksCompleted()
+ verify(windowManager)
+ .registerSystemGestureExclusionListener(
+ underTest.mGestureExclusionListener,
+ Display.DEFAULT_DISPLAY
+ )
+ }
+
+ @Test
+ fun onDisplayInfoChanged_twoButton_unregisterExclusionListener() {
+ underTest.registerExclusionListener()
+ awaitTasksCompleted()
+ whenever(info.getNavigationMode()).thenReturn(NavigationMode.TWO_BUTTONS)
+ reset(windowManager)
+
+ underTest.onDisplayInfoChanged(context, info, CHANGE_ROTATION or CHANGE_NAVIGATION_MODE)
+
+ awaitTasksCompleted()
+ verify(windowManager)
+ .unregisterSystemGestureExclusionListener(
+ underTest.mGestureExclusionListener,
+ Display.DEFAULT_DISPLAY
+ )
+ }
+
+ @Test
+ fun onDisplayInfoChanged_changeDensity_noOp() {
+ underTest.registerExclusionListener()
+ awaitTasksCompleted()
+ whenever(info.getNavigationMode()).thenReturn(NavigationMode.NO_BUTTON)
+ reset(windowManager)
+
+ underTest.onDisplayInfoChanged(context, info, CHANGE_DENSITY)
+
+ awaitTasksCompleted()
+ verifyZeroInteractions(windowManager)
+ }
+
+ private fun awaitTasksCompleted() {
+ Executors.UI_HELPER_EXECUTOR.submit<Any> { null }.get()
+ }
+}
diff --git a/quickstep/tests/src/com/android/quickstep/TaplOverviewIconAppChipMenuTest.java b/quickstep/tests/src/com/android/quickstep/TaplOverviewIconAppChipMenuTest.java
deleted file mode 100644
index 969da68..0000000
--- a/quickstep/tests/src/com/android/quickstep/TaplOverviewIconAppChipMenuTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.quickstep;
-
-import com.android.launcher3.Flags;
-import com.android.launcher3.InvariantDeviceProfile;
-
-import org.junit.After;
-import org.junit.Before;
-
-/**
- * Tests the Icon App Chip Menu in overview.
- *
- * <p>Same tests as TaplOverviewIconTest with the Flag FLAG_ENABLE_OVERVIEW_ICON_MENU enabled.
- * This class can be removed once FLAG_ENABLE_OVERVIEW_ICON_MENU is enabled by default.
- */
-public class TaplOverviewIconAppChipMenuTest extends TaplOverviewIconTest {
-
- @Before
- public void setUp() throws Exception {
- mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_OVERVIEW_ICON_MENU); // Call before super.setUp
- super.setUp();
- executeOnLauncher(launcher -> InvariantDeviceProfile.INSTANCE.get(launcher).onConfigChanged(
- launcher));
- }
-
- @After
- public void tearDown() {
- mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_OVERVIEW_ICON_MENU);
- executeOnLauncher(launcher -> InvariantDeviceProfile.INSTANCE.get(launcher).onConfigChanged(
- launcher));
- }
-}
diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsSplitscreen.java b/quickstep/tests/src/com/android/quickstep/TaplTestsSplitscreen.java
index d3bf56f..234fe63 100644
--- a/quickstep/tests/src/com/android/quickstep/TaplTestsSplitscreen.java
+++ b/quickstep/tests/src/com/android/quickstep/TaplTestsSplitscreen.java
@@ -29,6 +29,9 @@
import androidx.test.filters.LargeTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.launcher3.tapl.Overview;
+import com.android.launcher3.tapl.Taskbar;
+import com.android.launcher3.tapl.TaskbarAppIcon;
import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape;
import com.android.launcher3.ui.TaplTestsLauncher3;
import com.android.launcher3.util.rule.TestStabilityRule;
@@ -137,6 +140,31 @@
.hasMenuItem("Save app pair"));
}
+ @Test
+ public void testSplitSingleTaskFromTaskbar() {
+ // Currently only tablets have Taskbar in Overview, so test is only active on tablets
+ assumeTrue(mLauncher.isTablet());
+
+ if (!mLauncher.getRecentTasks().isEmpty()) {
+ // Clear all recent tasks
+ mLauncher.goHome().switchToOverview().dismissAllTasks();
+ }
+
+ startAppFast(getAppPackageName());
+
+ Overview overview = mLauncher.goHome().switchToOverview();
+ if (mLauncher.isGridOnlyOverviewEnabled()) {
+ overview.getCurrentTask().tapMenu().tapSplitMenuItem();
+ } else {
+ overview.getOverviewActions().clickSplit();
+ }
+
+ Taskbar taskbar = overview.getTaskbar();
+ String firstAppName = taskbar.getIconNames().get(0);
+ TaskbarAppIcon firstApp = taskbar.getAppIcon(firstAppName);
+ firstApp.launchIntoSplitScreen();
+ }
+
private void createAndLaunchASplitPair() {
startTestActivity(2);
startTestActivity(3);
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index dd966cc..a5983b9 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Deursoek jou tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Misluk: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privaat ruimte"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index bc2cc86..a6a1d24 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ጡባዊዎን ይፈልጉ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"አልተሳካም፦ <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"የግል ቦታ"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ትርፍ ፍሰት"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index a3e5889..95f6d10 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"البحث في جهازك اللوحي"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"تعذَّر <xliff:g id="WHAT">%1$s</xliff:g>."</string>
<string name="private_space_label" msgid="2359721649407947001">"مساحة خاصة"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index f7c1b40..9b2b341 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"আপোনাৰ টেবলেটৰ বস্তু সন্ধান কৰক"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"বিফল: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"ব্যক্তিগত স্পে’চ"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"অ’ভাৰফ্ল’"</string>
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 3b20be8..004d598 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Planşetinizi axtarın"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Alınmadı: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Şəxsi yer"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 4b7b663..8187b6e 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Pretražite tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nije uspelo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privatni prostor"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Preklopno"</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 4616b8e..31c5cd0 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Пошук на планшэце"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не ўдалося: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Прыватная вобласць"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index c4be1f4..4fb4848 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Търсене в таблета ви"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Неуспешно: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Лично пространство"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index a4dce63..324bfbc 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"আপনার ট্যাবলেটে সার্চ করুন"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"কাজটি করা যায়নি: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"ব্যক্তিগত স্পেস"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 9d7419f..2e90423 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Pretražite tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nije uspjelo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privatan prostor"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Preklopni meni"</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index fedea5d..7796a9f 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Cerca a la tauleta"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Error: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Espai privat"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index c721f56..ddb4cca 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Vyhledávání na tabletu"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Selhalo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Soukromý prostor"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Rozbalovací nabídka"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 5c0423a..5127abb 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Søg på din tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Mislykket: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privat rum"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 40f1c74..0050f2c 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Auf dem Tablet suchen"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Fehler: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privater Bereich"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Weitere Optionen"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index cc5d0bd..4a6338a 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Αναζήτηση στο tablet σας"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Αποτυχία: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Ιδιωτικός χώρος"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Υπερχείλιση"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 9b0cde6..6c5ef3d 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Search your tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Private space"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Overflow"</string>
</resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index c78355a..250de73 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Search your tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Private space"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Overflow"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 9b0cde6..6c5ef3d 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Search your tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Private space"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Overflow"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 9b0cde6..6c5ef3d 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Search your tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Private space"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Overflow"</string>
</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 9aaf4d2..d05c553 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Search your tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Failed: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Private space"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Overflow"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 3d830c4..f6c8a27 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Busca en tu tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Error: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Espacio privado"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Ampliada"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index cb35617..d607d45 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Buscar en tu tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Se ha producido un error: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Espacio privado"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 60a0a04..0946ba6 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Otsimine tahvelarvutist"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nurjus: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privaatne ruum"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 4f4645f..f0acbb8 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Bilatu tabletan"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Huts egin du: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Eremu pribatua"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 3129c10..18ebbfc 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"جستجوی رایانه لوحی"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ناموفق بود: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"فضای خصوصی"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"سرریز"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 9147b36..50d5af6 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Hae tabletilta"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Epäonnistui: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Yksityinen tila"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index b739c95..4791aa1 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Rechercher sur votre tablette"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Échec : <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Espace privé"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index eca5f51..62f9aa8 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Rechercher sur votre tablette"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Échec : <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Espace privé"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Dépassement"</string>
</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 82edb6d..346d46f 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Facer buscas na tableta"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Erro: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Espazo privado"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index ca79a3f..36cb129 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"તમારું ટૅબ્લેટ શોધો"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"નિષ્ફળ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"ખાનગી સ્પેસ"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ઓવરફ્લો"</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index d1ea837..ea53a5c 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"अपने टैबलेट में खोजें"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"पूरा नहीं हुआ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"प्राइवेट स्पेस"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ओवरफ़्लो"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 90f36b9..7dc7923 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Pretraživanje tableta"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nije uspjelo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privatni prostor"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Dodatni izbornik"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index bae2c81..afeb7c0 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Keresés a táblagépen"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Sikertelen: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privát terület"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Túlcsordulás"</string>
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 76857db..44be7e3 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Որոնում պլանշետում"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Չհաջողվեց կատարել գործողությունը (<xliff:g id="WHAT">%1$s</xliff:g>)"</string>
<string name="private_space_label" msgid="2359721649407947001">"Անձնական տարածք"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 8301a5d..3a8347c 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Telusuri di tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Gagal: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Ruang pribadi"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 5bd6356..cb493a8 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Leita í spjaldtölvunni"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Mistókst: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Einkarými"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index dd385c3..4bd1661 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Ricerche sul tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Operazione non riuscita: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Spazio privato"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 1eb4f4e..5c2fe1a 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"חיפוש בטאבלט"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"הפעולה נכשלה: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"מרחב פרטי"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 35d97a9..402d2b6 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"タブレットを探す"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"失敗: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"プライベート スペース"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"オーバーフロー"</string>
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index b4af601..17358b6 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ძიება თქვენს ტაბლეტში"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ვერ მოხერხდა: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"პირადი სივრცე"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 9c15ca4..bc9d3d7 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Планшеттен іздеу"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Қате шықты: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Жеке бөлме"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 363690c..004dbb5 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ស្វែងរកក្នុងថេប្លេតរបស់អ្នក"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"បានបរាជ័យ៖ <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"បន្ទប់ឯកជន"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ម៉ឺនុយបន្ថែម"</string>
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 88aeab5..2d8a04c 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಹುಡುಕಿ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ವಿಫಲವಾಗಿದೆ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"ಖಾಸಗಿ ಸ್ಪೇಸ್"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ಓವರ್ಫ್ಲೋ"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 1f92b4d..8fc3367 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"태블릿 속 항목 검색"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"실패: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"비공개 스페이스"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index aa24cdd..5a695bc 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Планшетте издөө"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Аткарылган жок: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Жеке чөйрө"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index dfa4d48..6ef6912 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ຊອກຫາແທັບເລັດຂອງທ່ານ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ບໍ່ສຳເລັດ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"ພື້ນທີ່ສ່ວນຕົວ"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index d8e4b0c..2066aca 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Paieška planšetiniame kompiuteryje"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Nepavyko: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privati erdvė"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index f2b63c2..a4e8f1c 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Meklēšana planšetdatorā"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Neizdevās: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privātā telpa"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 5b7973a..67f3597 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Пребарување низ таблетот"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не успеа: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Приватен простор"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 5507eb7..b0a3bee 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"നിങ്ങളുടെ ടാബ്ലെറ്റിലുള്ളവ തിരയുക"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"പരാജയപ്പെട്ടു: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"സ്വകാര്യ സ്പേസ്"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ഓവർഫ്ലോ"</string>
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 2cc2ae3..85e4671 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Таблетнаасаа хайх"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Амжилтгүй болсон: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Хувийн орон зай"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index c0beed2..baf8363 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"तुमच्या टॅबलेटमध्ये शोधा"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"हे करता आले नाही: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"खाजगी स्पेस"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ओव्हरफ्लो"</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 8ec5ba0..8aec20b 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Cari pada tablet anda"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Gagal: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Ruang peribadi"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Limpahan"</string>
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 1463620..1ff0027 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"သင့်တက်ဘလက်ကို ရှာခြင်း"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"မအောင်မြင်ပါ− <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"သီးသန့်ချတ်ခန်း"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 90ff503..05f52d9 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Søk på nettbrettet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Mislyktes: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privat område"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Overflyt"</string>
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index e02bf66..a88b53d 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"आफ्नो ट्याबलेटमा खोज्नुहोस्"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"कार्य पूरा गर्न सकिएन: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"निजी स्पेस"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ओभरफ्लो"</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index f143c1e..fc63880 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Zoeken op je tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Mislukt: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privéruimte"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Overloop"</string>
</resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 4bf50fa..7b69370 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ଆପଣଙ୍କ ଟାବଲେଟରେ ସନ୍ଧାନ କରନ୍ତୁ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ବିଫଳ ହୋଇଛି: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"ପ୍ରାଇଭେଟ ସ୍ପେସ"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ଓଭରଫ୍ଲୋ"</string>
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 0d9848e..e56f5a3 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ਆਪਣਾ ਟੈਬਲੈੱਟ ਖੋਜੋ"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ਇਹ ਕਾਰਵਾਈ ਅਸਫਲ ਹੋਈ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"ਨਿੱਜੀ ਸਪੇਸ"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"ਓਵਰਫ਼ਲੋ"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index faf5dfa..92eba6a 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Przeszukuj tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Niepowodzenie: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Obszar prywatny"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 1b3a8de..d7e3ded 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Pesquise no tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Falhou: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Espaço privado"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Menu adicional"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index ec0c02c..f14da2d 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Pesquisar no tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Falha: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Espaço particular"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Balão flutuante"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 648f7e9..a9d6cf2 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Caută pe tabletă"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Eșuare: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Spațiu privat"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 5918868..8ca058c 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Поиск на планшете"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не удалось выполнить действие (<xliff:g id="WHAT">%1$s</xliff:g>)."</string>
<string name="private_space_label" msgid="2359721649407947001">"Личное пространство"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index f7cd68b..f935dba 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ඔබගේ ටැබ්ලටය සොයන්න"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"අසාර්ථකයි: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"පෞද්ගලික ඉඩ"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index b519127..1fc9b7a 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Vyhľadávanie v tablete"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Zlyhalo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Súkromný priestor"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 78c8b55..a66367e 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Iskanje po tabličnem računalniku"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Ni uspelo: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Zasebni prostor"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 95ec874..b494b98 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Kërko në tabletin tënd"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Dështoi: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Hapësira private"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index d58af08..3788dff 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Претражите таблет"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Није успело: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Приватни простор"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Преклопно"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 9cf1001..729fadc 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Sök på surfplattan"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Misslyckades: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Privat rum"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 1797dd3..70988f3 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Tafuta kwenye kompyuta kibao yako"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Hitilafu: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Nafasi ya faragha"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Menyu ya vipengee vya ziada"</string>
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index c81f62a..1f34674 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"உங்கள் டேப்லெட்டில் தேடுதல்"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"தோல்வி: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"தனிப்பட்ட சேமிப்பிடம்"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 6cfdd0b..de2b023 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"మీ టాబ్లెట్లో సెర్చ్ చేయండి"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"విఫలమైంది: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"ప్రైవేట్ స్పేస్"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 4bfccaa..fbe6439 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"ค้นหาในแท็บเล็ต"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ไม่สำเร็จ: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"พื้นที่ส่วนตัว"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"การดำเนินการเพิ่มเติม"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 05af221..b23bcd5 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Maghanap sa iyong tablet"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Hindi nagawa: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Pribadong space"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Overflow"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ec24a9d..547fdbb 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Tabletinizde arama yapma"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Başarısız: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Gizli alan"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index c7b2f7f..85d0614 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Пошук на планшеті"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Не вдалося <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Приватний простір"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 857cf5b..7c437aa 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"اپنے ٹیبلیٹ پر تلاش کریں"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"ناکام ہو گيا: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"نجی اسپیس"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"اوورفلو"</string>
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 972a246..de822af 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Planshetingizni qidiring"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Xato: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Shaxsiy xona"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"Kengaytirish"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f720c8d..8d26f37 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Tìm kiếm trong máy tính bảng của bạn"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Không thực hiện được thao tác: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Không gian riêng tư"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 8c5bac0..add6a9b 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"平板电脑内搜索"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"失败:<xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"私密空间"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"菜单"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 02225a7..c21b8cb 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"搜尋平板電腦內容"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"操作失敗:<xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"私人空間"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"顯示更多"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 4483de4..b320715 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -176,6 +176,13 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"搜尋平板電腦內容"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"失敗:<xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"私人空間"</string>
- <!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
<skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
+ <string name="bubble_bar_overflow_description" msgid="7410995531938041192">"溢位"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 580a3be..b519ce6 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -176,6 +176,14 @@
<string name="search_pref_screen_title_tablet" msgid="5220319680451343959">"Sesha ithebulethi yakho"</string>
<string name="remote_action_failed" msgid="1383965239183576790">"Yehlulekile: <xliff:g id="WHAT">%1$s</xliff:g>"</string>
<string name="private_space_label" msgid="2359721649407947001">"Isikhala esiyimfihlo"</string>
+ <!-- no translation found for ps_container_title (4391796149519594205) -->
+ <skip />
+ <!-- no translation found for ps_container_settings (6059734123353320479) -->
+ <skip />
+ <!-- no translation found for ps_container_lock_unlock_button (7605602332253423755) -->
+ <skip />
+ <!-- no translation found for ps_container_transition (8667331812048014412) -->
+ <skip />
<!-- no translation found for bubble_bar_overflow_description (7410995531938041192) -->
<skip />
</resources>
diff --git a/src/com/android/launcher3/ExtendedEditText.java b/src/com/android/launcher3/ExtendedEditText.java
index 8eab3e3..ec26f58 100644
--- a/src/com/android/launcher3/ExtendedEditText.java
+++ b/src/com/android/launcher3/ExtendedEditText.java
@@ -162,6 +162,15 @@
}
}
+ @Override
+ public void setText(CharSequence text, BufferType type) {
+ super.setText(text, type);
+ // With hardware keyboard, there is a possibility that the user types before edit
+ // text is visible during the transition.
+ // So move the cursor to the end of the text.
+ setSelection(getText().length());
+ }
+
/**
* This method should be preferred to {@link #setOnFocusChangeListener(OnFocusChangeListener)},
* as it allows for multiple listeners from different sources.
diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java
index 75f4bb2..e5a6b2b 100644
--- a/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -27,12 +27,12 @@
import android.annotation.TargetApi;
import android.content.Context;
-import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.graphics.Point;
import android.graphics.PointF;
+import android.graphics.Rect;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
@@ -700,14 +700,11 @@
}
public DeviceProfile getDeviceProfile(Context context) {
- Resources res = context.getResources();
- Configuration config = context.getResources().getConfiguration();
+ WindowManagerProxy windowManagerProxy = WindowManagerProxy.INSTANCE.get(context);
+ Rect bounds = windowManagerProxy.getCurrentBounds(context);
+ int rotation = windowManagerProxy.getRotation(context);
- float screenWidth = config.screenWidthDp * res.getDisplayMetrics().density;
- float screenHeight = config.screenHeightDp * res.getDisplayMetrics().density;
- int rotation = WindowManagerProxy.INSTANCE.get(context).getRotation(context);
-
- return getBestMatch(screenWidth, screenHeight, rotation);
+ return getBestMatch(bounds.width(), bounds.height(), rotation);
}
/**
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 5a0cf9d..37b3e05 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -100,6 +100,7 @@
import static com.android.launcher3.states.RotationHelper.REQUEST_NONE;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.ItemInfoMatcher.forFolderMatch;
+import static com.android.launcher3.util.SettingsCache.TOUCHPAD_NATURAL_SCROLLING;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -232,6 +233,7 @@
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.util.ScreenOnTracker;
import com.android.launcher3.util.ScreenOnTracker.ScreenOnListener;
+import com.android.launcher3.util.SettingsCache;
import com.android.launcher3.util.SystemUiController;
import com.android.launcher3.util.Themes;
import com.android.launcher3.util.Thunk;
@@ -415,6 +417,11 @@
private final List<BackPressHandler> mBackPressedHandlers = new ArrayList<>();
private boolean mIsColdStartupAfterReboot;
+ private boolean mIsNaturalScrollingEnabled;
+
+ private final SettingsCache.OnChangeListener mNaturalScrollingChangedListener =
+ enabled -> mIsNaturalScrollingEnabled = enabled;
+
public static Launcher getLauncher(Context context) {
return fromContext(context);
}
@@ -563,6 +570,10 @@
}
getRootView().dispatchInsets();
+ final SettingsCache settingsCache = SettingsCache.INSTANCE.get(this);
+ settingsCache.register(TOUCHPAD_NATURAL_SCROLLING, mNaturalScrollingChangedListener);
+ mIsNaturalScrollingEnabled = settingsCache.getValue(TOUCHPAD_NATURAL_SCROLLING);
+
// Listen for screen turning off
ScreenOnTracker.INSTANCE.get(this).addListener(mScreenOnListener);
getSystemUiController().updateUiState(SystemUiController.UI_STATE_BASE_WINDOW,
@@ -1680,6 +1691,8 @@
super.onDestroy();
ACTIVITY_TRACKER.onActivityDestroyed(this);
+ SettingsCache.INSTANCE.get(this).unregister(TOUCHPAD_NATURAL_SCROLLING,
+ mNaturalScrollingChangedListener);
ScreenOnTracker.INSTANCE.get(this).removeListener(mScreenOnListener);
mWorkspace.removeFolderListeners();
PluginManagerWrapper.INSTANCE.get(this).removePluginListener(this);
@@ -3181,6 +3194,10 @@
return !isWorkspaceLoading();
}
+ public boolean isNaturalScrollingEnabled() {
+ return mIsNaturalScrollingEnabled;
+ }
+
public void setWaitingForResult(PendingRequestArgs args) {
mPendingRequestArgs = args;
}
diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java
index 34bfdb7..9a19526 100644
--- a/src/com/android/launcher3/LauncherAppState.java
+++ b/src/com/android/launcher3/LauncherAppState.java
@@ -25,6 +25,7 @@
import static com.android.launcher3.model.LoaderTask.SMARTSPACE_ON_HOME_SCREEN;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.SettingsCache.NOTIFICATION_BADGING_URI;
+import static com.android.launcher3.util.SettingsCache.PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI;
import android.content.ComponentName;
import android.content.Context;
@@ -166,6 +167,8 @@
onNotificationSettingsChanged(settingsCache.getValue(NOTIFICATION_BADGING_URI));
mOnTerminateCallback.add(() ->
settingsCache.unregister(NOTIFICATION_BADGING_URI, notificationLister));
+ // Register an observer to notify Launcher about Private Space settings toggle.
+ registerPrivateSpaceHideWhenLockListener(settingsCache);
}
public LauncherAppState(Context context, @Nullable String iconCacheFileName) {
@@ -188,6 +191,18 @@
}
}
+ private void registerPrivateSpaceHideWhenLockListener(SettingsCache settingsCache) {
+ SettingsCache.OnChangeListener psHideWhenLockChangedListener =
+ this::onPrivateSpaceHideWhenLockChanged;
+ settingsCache.register(PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI, psHideWhenLockChangedListener);
+ mOnTerminateCallback.add(() -> settingsCache.unregister(PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI,
+ psHideWhenLockChangedListener));
+ }
+
+ private void onPrivateSpaceHideWhenLockChanged(boolean isPrivateSpaceHideOnLockEnabled) {
+ mModel.forceReload();
+ }
+
private void refreshAndReloadLauncher() {
LauncherIcons.clearPool();
mIconCache.updateIconParams(
diff --git a/src/com/android/launcher3/LauncherPrefs.kt b/src/com/android/launcher3/LauncherPrefs.kt
index aa06089..fb58cbe 100644
--- a/src/com/android/launcher3/LauncherPrefs.kt
+++ b/src/com/android/launcher3/LauncherPrefs.kt
@@ -24,6 +24,10 @@
import com.android.launcher3.BuildConfig.WIDGET_ON_FIRST_SCREEN
import com.android.launcher3.LauncherFiles.DEVICE_PREFERENCES_KEY
import com.android.launcher3.LauncherFiles.SHARED_PREFERENCES_KEY
+import com.android.launcher3.config.FeatureFlags.LPNH_HAPTIC_HINT_END_SCALE_PERCENT
+import com.android.launcher3.config.FeatureFlags.LPNH_HAPTIC_HINT_ITERATIONS
+import com.android.launcher3.config.FeatureFlags.LPNH_HAPTIC_HINT_SCALE_EXPONENT
+import com.android.launcher3.config.FeatureFlags.LPNH_HAPTIC_HINT_START_SCALE_PERCENT
import com.android.launcher3.config.FeatureFlags.LPNH_SLOP_PERCENTAGE
import com.android.launcher3.config.FeatureFlags.LPNH_TIMEOUT_MS
import com.android.launcher3.model.DeviceGridState
@@ -327,28 +331,28 @@
val LONG_PRESS_NAV_HANDLE_HAPTIC_HINT_START_SCALE_PERCENT =
nonRestorableItem(
"pref_long_press_nav_handle_haptic_hint_start_scale_percent",
- 0,
+ LPNH_HAPTIC_HINT_START_SCALE_PERCENT.get(),
EncryptionType.MOVE_TO_DEVICE_PROTECTED
)
@JvmField
val LONG_PRESS_NAV_HANDLE_HAPTIC_HINT_END_SCALE_PERCENT =
nonRestorableItem(
"pref_long_press_nav_handle_haptic_hint_end_scale_percent",
- 100,
+ LPNH_HAPTIC_HINT_END_SCALE_PERCENT.get(),
EncryptionType.MOVE_TO_DEVICE_PROTECTED
)
@JvmField
val LONG_PRESS_NAV_HANDLE_HAPTIC_HINT_SCALE_EXPONENT =
nonRestorableItem(
"pref_long_press_nav_handle_haptic_hint_scale_exponent",
- 1,
+ LPNH_HAPTIC_HINT_SCALE_EXPONENT.get(),
EncryptionType.MOVE_TO_DEVICE_PROTECTED
)
@JvmField
val LONG_PRESS_NAV_HANDLE_HAPTIC_HINT_ITERATIONS =
nonRestorableItem(
"pref_long_press_nav_handle_haptic_hint_iterations",
- 50,
+ LPNH_HAPTIC_HINT_ITERATIONS.get(),
EncryptionType.MOVE_TO_DEVICE_PROTECTED
)
@JvmField
diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
index 7d52cbb..bd3740c 100644
--- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
@@ -16,6 +16,7 @@
package com.android.launcher3.allapps;
import static com.android.launcher3.Flags.enableExpandingPauseWorkButton;
+import static com.android.launcher3.allapps.ActivityAllAppsContainerView.AdapterHolder.MAIN;
import static com.android.launcher3.allapps.ActivityAllAppsContainerView.AdapterHolder.SEARCH;
import static com.android.launcher3.allapps.BaseAllAppsAdapter.VIEW_TYPE_WORK_DISABLED_CARD;
import static com.android.launcher3.allapps.BaseAllAppsAdapter.VIEW_TYPE_WORK_EDU_CARD;
@@ -69,6 +70,7 @@
import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener;
import com.android.launcher3.DragSource;
import com.android.launcher3.DropTarget.DragObject;
+import com.android.launcher3.Flags;
import com.android.launcher3.Insettable;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.R;
@@ -95,6 +97,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
+import java.util.stream.Stream;
/**
* All apps container view with search support for use in a dragging activity.
@@ -133,6 +136,7 @@
protected final Predicate<ItemInfo> mPersonalMatcher = ItemInfoMatcher.ofUser(
Process.myUserHandle());
protected WorkProfileManager mWorkManager;
+ protected final PrivateProfileManager mPrivateProfileManager;
protected final Point mFastScrollerOffset = new Point();
protected final int mScrimColor;
protected final float mHeaderThreshold;
@@ -175,6 +179,7 @@
protected SearchAdapterProvider<?> mMainAdapterProvider;
private View mBottomSheetHandleArea;
private boolean mHasWorkApps;
+ private boolean mHasPrivateApps;
private float[] mBottomSheetCornerRadii;
private ScrimView mScrimView;
private int mHeaderColor;
@@ -184,6 +189,8 @@
private int mTabsProtectionAlpha;
@Nullable private AllAppsTransitionController mAllAppsTransitionController;
+ private PrivateSpaceHeaderViewController mPrivateSpaceHeaderViewController;
+
public ActivityAllAppsContainerView(Context context) {
this(context, null);
}
@@ -207,6 +214,11 @@
this,
mActivityContext.getStatsLogManager(),
UserCache.INSTANCE.get(mActivityContext));
+ mPrivateProfileManager = new PrivateProfileManager(
+ mActivityContext.getSystemService(UserManager.class),
+ this,
+ mActivityContext.getStatsLogManager(),
+ UserCache.INSTANCE.get(mActivityContext));
mAH = Arrays.asList(null, null, null);
mNavBarScrimPaint = new Paint();
mNavBarScrimPaint.setColor(Themes.getNavBarScrimColor(mActivityContext));
@@ -246,13 +258,20 @@
*/
protected void initContent() {
mMainAdapterProvider = mSearchUiDelegate.createMainAdapterProvider();
+ if (Flags.enablePrivateSpace()) {
+ mPrivateSpaceHeaderViewController =
+ new PrivateSpaceHeaderViewController(mPrivateProfileManager);
+ }
mAH.set(AdapterHolder.MAIN, new AdapterHolder(AdapterHolder.MAIN,
- new AlphabeticalAppsList<>(mActivityContext, mAllAppsStore, null)));
+ new AlphabeticalAppsList<>(mActivityContext,
+ mAllAppsStore,
+ null,
+ mPrivateProfileManager)));
mAH.set(AdapterHolder.WORK, new AdapterHolder(AdapterHolder.WORK,
- new AlphabeticalAppsList<>(mActivityContext, mAllAppsStore, mWorkManager)));
+ new AlphabeticalAppsList<>(mActivityContext, mAllAppsStore, mWorkManager, null)));
mAH.set(SEARCH, new AdapterHolder(SEARCH,
- new AlphabeticalAppsList<>(mActivityContext, null, null)));
+ new AlphabeticalAppsList<>(mActivityContext, null, null, null)));
getLayoutInflater().inflate(R.layout.all_apps_content, this);
mHeader = findViewById(R.id.all_apps_header);
@@ -592,7 +611,7 @@
} else {
mainRecyclerView = findViewById(R.id.apps_list_view);
workRecyclerView = null;
- mAH.get(AdapterHolder.MAIN).setup(mainRecyclerView, null);
+ mAH.get(AdapterHolder.MAIN).setup(mainRecyclerView, mPersonalMatcher);
mAH.get(AdapterHolder.WORK).mRecyclerView = null;
}
setUpCustomRecyclerViewPool(
@@ -860,7 +879,7 @@
protected BaseAllAppsAdapter<T> createAdapter(AlphabeticalAppsList<T> appsList) {
return new AllAppsGridAdapter<>(mActivityContext, getLayoutInflater(), appsList,
- mMainAdapterProvider);
+ mMainAdapterProvider, mPrivateSpaceHeaderViewController);
}
// TODO(b/216683257): Remove when Taskbar All Apps supports search.
@@ -973,13 +992,19 @@
@VisibleForTesting
public void onAppsUpdated() {
- mHasWorkApps = mWorkManager.hasWorkApps();
+ mHasWorkApps = Stream.of(mAllAppsStore.getApps())
+ .anyMatch(mWorkManager.getItemInfoMatcher());
+ mHasPrivateApps = Stream.of(mAllAppsStore.getApps())
+ .anyMatch(mPrivateProfileManager.getItemInfoMatcher());
if (!isSearching()) {
rebindAdapters();
}
if (mHasWorkApps) {
mWorkManager.reset();
}
+ if (mHasPrivateApps) {
+ mPrivateProfileManager.reset();
+ }
mActivityContext.getStatsLogManager().logger()
.withCardinality(mAllAppsStore.getApps().length)
@@ -1245,6 +1270,10 @@
return mAH.get(SEARCH).mAppsList;
}
+ public AlphabeticalAppsList<T> getPersonalAppList() {
+ return mAH.get(MAIN).mAppsList;
+ }
+
public FloatingHeaderView getFloatingHeaderView() {
return mHeader;
}
diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
index df383bf..5f002b5 100644
--- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
+++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
@@ -73,8 +73,9 @@
public AllAppsGridAdapter(T activityContext, LayoutInflater inflater,
- AlphabeticalAppsList apps, SearchAdapterProvider<?> adapterProvider) {
- super(activityContext, inflater, apps, adapterProvider);
+ AlphabeticalAppsList apps, SearchAdapterProvider<?> adapterProvider,
+ PrivateSpaceHeaderViewController privateSpaceHeaderViewController) {
+ super(activityContext, inflater, apps, adapterProvider, privateSpaceHeaderViewController);
mGridLayoutMgr = new AppsGridLayoutManager(mActivityContext);
mGridLayoutMgr.setSpanSizeLookup(new GridSpanSizer());
setAppsPerRow(activityContext.getDeviceProfile().numShownAllAppsColumns);
diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
index ee4b5bc..328516e 100644
--- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
+++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
@@ -20,6 +20,7 @@
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DiffUtil;
+import com.android.launcher3.Flags;
import com.android.launcher3.allapps.BaseAllAppsAdapter.AdapterItem;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.ItemInfo;
@@ -47,6 +48,8 @@
private final WorkProfileManager mWorkProviderManager;
+ private final PrivateProfileManager mPrivateProviderManager;
+
/**
* Info about a fast scroller section, depending if sections are merged, the fast scroller
* sections will not be the same set as the section headers.
@@ -68,6 +71,7 @@
// The set of apps from the system
private final List<AppInfo> mApps = new ArrayList<>();
+ private final List<AppInfo> mPrivateApps = new ArrayList<>();
@Nullable
private final AllAppsStore<T> mAllAppsStore;
@@ -87,11 +91,12 @@
private Predicate<ItemInfo> mItemFilter;
public AlphabeticalAppsList(Context context, @Nullable AllAppsStore<T> appsStore,
- WorkProfileManager workProfileManager) {
+ WorkProfileManager workProfileManager, PrivateProfileManager privateProfileManager) {
mAllAppsStore = appsStore;
mActivityContext = ActivityContext.lookupContext(context);
mAppNameComparator = new AppInfoComparator(context);
mWorkProviderManager = workProfileManager;
+ mPrivateProviderManager = privateProfileManager;
mNumAppsPerRowAllApps = mActivityContext.getDeviceProfile().numShownAllAppsColumns;
if (mAllAppsStore != null) {
mAllAppsStore.addUpdateListener(this);
@@ -197,12 +202,20 @@
}
// Sort the list of apps
mApps.clear();
+ mPrivateApps.clear();
Stream<AppInfo> appSteam = Stream.of(mAllAppsStore.getApps());
+ Stream<AppInfo> privateAppStream = Stream.of(mAllAppsStore.getApps());
+
if (!hasSearchResults() && mItemFilter != null) {
appSteam = appSteam.filter(mItemFilter);
+ if (mPrivateProviderManager != null) {
+ privateAppStream = privateAppStream
+ .filter(mPrivateProviderManager.getItemInfoMatcher());
+ }
}
appSteam = appSteam.sorted(mAppNameComparator);
+ privateAppStream = privateAppStream.sorted(mAppNameComparator);
// As a special case for some languages (currently only Simplified Chinese), we may need to
// coalesce sections
@@ -221,6 +234,7 @@
}
appSteam.forEachOrdered(mApps::add);
+ privateAppStream.forEachOrdered(mPrivateApps::add);
// Recompose the set of adapter items from the current set of apps
if (mSearchResults.isEmpty()) {
updateAdapterItems();
@@ -250,18 +264,10 @@
addApps = mWorkProviderManager.shouldShowWorkApps();
}
if (addApps) {
- String lastSectionName = null;
- for (AppInfo info : mApps) {
- mAdapterItems.add(AdapterItem.asApp(info));
-
- String sectionName = info.sectionName;
- // Create a new section if the section names do not match
- if (!sectionName.equals(lastSectionName)) {
- lastSectionName = sectionName;
- mFastScrollerSections.add(new FastScrollSectionInfo(sectionName, position));
- }
- position++;
- }
+ addAppsWithSections(mApps, position);
+ }
+ if (Flags.enablePrivateSpace()) {
+ addPrivateSpaceItems(position);
}
}
mAccessibilityResultsCount = (int) mAdapterItems.stream()
@@ -275,7 +281,8 @@
int rowIndex = -1;
for (AdapterItem item : mAdapterItems) {
item.rowIndex = 0;
- if (BaseAllAppsAdapter.isDividerViewType(item.viewType)) {
+ if (BaseAllAppsAdapter.isDividerViewType(item.viewType)
+ || BaseAllAppsAdapter.isPrivateSpaceHeaderView(item.viewType)) {
numAppsInSection = 0;
} else if (BaseAllAppsAdapter.isIconViewType(item.viewType)) {
if (numAppsInSection % mNumAppsPerRowAllApps == 0) {
@@ -297,6 +304,40 @@
}
}
+ void addPrivateSpaceItems(int position) {
+ if (mPrivateProviderManager != null
+ && !mPrivateProviderManager.isPrivateSpaceHidden()
+ && !mPrivateApps.isEmpty()) {
+ // Always add PS Header if Space is present and visible.
+ position += mPrivateProviderManager.addPrivateSpaceHeader(mAdapterItems);
+ int privateSpaceState = mPrivateProviderManager.getCurrentState();
+ switch (privateSpaceState) {
+ case PrivateProfileManager.STATE_DISABLED:
+ case PrivateProfileManager.STATE_TRANSITION:
+ break;
+ case PrivateProfileManager.STATE_ENABLED:
+ // Add PS Apps only in Enabled State.
+ addAppsWithSections(mPrivateApps, position);
+ break;
+ }
+ }
+ }
+
+ private void addAppsWithSections(List<AppInfo> appList, int startPosition) {
+ String lastSectionName = null;
+ for (AppInfo info : appList) {
+ mAdapterItems.add(AdapterItem.asApp(info));
+
+ String sectionName = info.sectionName;
+ // Create a new section if the section names do not match
+ if (!sectionName.equals(lastSectionName)) {
+ lastSectionName = sectionName;
+ mFastScrollerSections.add(new FastScrollSectionInfo(sectionName, startPosition));
+ }
+ startPosition++;
+ }
+ }
+
private static class MyDiffCallback extends DiffUtil.Callback {
private final List<AdapterItem> mOldList;
@@ -328,4 +369,4 @@
}
}
-}
+}
\ No newline at end of file
diff --git a/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java b/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java
index bce38a3..5e26ea5 100644
--- a/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java
+++ b/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java
@@ -22,6 +22,7 @@
import android.view.View.OnFocusChangeListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
+import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
@@ -139,9 +140,16 @@
protected final OnClickListener mOnIconClickListener;
protected final OnLongClickListener mOnIconLongClickListener;
protected OnFocusChangeListener mIconFocusListener;
+ private final PrivateSpaceHeaderViewController mPrivateSpaceHeaderViewController;
public BaseAllAppsAdapter(T activityContext, LayoutInflater inflater,
AlphabeticalAppsList<T> apps, SearchAdapterProvider<?> adapterProvider) {
+ this(activityContext, inflater, apps, adapterProvider, null);
+ }
+
+ public BaseAllAppsAdapter(T activityContext, LayoutInflater inflater,
+ AlphabeticalAppsList<T> apps, SearchAdapterProvider<?> adapterProvider,
+ PrivateSpaceHeaderViewController privateSpaceHeaderViewController) {
mActivityContext = activityContext;
mApps = apps;
mLayoutInflater = inflater;
@@ -150,6 +158,7 @@
mOnIconLongClickListener = mActivityContext.getAllAppsItemLongClickListener();
mAdapterProvider = adapterProvider;
+ mPrivateSpaceHeaderViewController = privateSpaceHeaderViewController;
}
/** Checks if the passed viewType represents all apps divider. */
@@ -162,6 +171,11 @@
return isViewType(viewType, VIEW_TYPE_MASK_ICON);
}
+ /** Checks if the passed viewType represents private space header. */
+ public static boolean isPrivateSpaceHeaderView(int viewType) {
+ return isViewType(viewType, VIEW_TYPE_MASK_PRIVATE_SPACE_HEADER);
+ }
+
public void setIconFocusListener(OnFocusChangeListener focusListener) {
mIconFocusListener = focusListener;
}
@@ -230,6 +244,12 @@
break;
}
case VIEW_TYPE_PRIVATE_SPACE_HEADER:
+ RelativeLayout psHeaderLayout = holder.itemView.findViewById(
+ R.id.ps_header_layout);
+ assert mPrivateSpaceHeaderViewController != null;
+ assert psHeaderLayout != null;
+ mPrivateSpaceHeaderViewController.addPrivateSpaceHeaderViewElements(psHeaderLayout);
+ break;
case VIEW_TYPE_ALL_APPS_DIVIDER:
case VIEW_TYPE_WORK_DISABLED_CARD:
// nothing to do
diff --git a/src/com/android/launcher3/allapps/PrivateAppsSectionDecorator.java b/src/com/android/launcher3/allapps/PrivateAppsSectionDecorator.java
index f7c9058..f4ed754 100644
--- a/src/com/android/launcher3/allapps/PrivateAppsSectionDecorator.java
+++ b/src/com/android/launcher3/allapps/PrivateAppsSectionDecorator.java
@@ -42,20 +42,19 @@
private final RectF mTmpRect = new RectF();
private final Context mContext;
private final AlphabeticalAppsList<?> mAppsList;
- private final PrivateProfileManager mPrivateProfileManager;
private final UserCache mUserCache;
private final Paint mPaint;
+ private final int mCornerRadius;
- public PrivateAppsSectionDecorator(ActivityAllAppsContainerView<?> appsContainerView,
- AlphabeticalAppsList<?> appsList,
- PrivateProfileManager privateProfileManager) {
+ public PrivateAppsSectionDecorator(Context context, AlphabeticalAppsList<?> appsList) {
+ mContext = context;
mAppsList = appsList;
- mPrivateProfileManager = privateProfileManager;
- mContext = appsContainerView.mActivityContext;
- mUserCache = UserCache.getInstance(appsContainerView.mActivityContext);
+ mUserCache = UserCache.getInstance(context);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- mPaint.setColor(ContextCompat.getColor(mContext,
+ mPaint.setColor(ContextCompat.getColor(context,
R.color.material_color_surface_container_high));
+ mCornerRadius = context.getResources().getDimensionPixelSize(
+ R.dimen.ps_container_corner_radius);
}
/** Decorates Private Space Header and Icon Rows to give the shape of a container. */
@@ -70,9 +69,7 @@
int position = parent.getChildAdapterPosition(view);
BaseAllAppsAdapter.AdapterItem adapterItem = mAppsList.getAdapterItems().get(position);
// Rectangle that covers the bottom half of the PS Header View when Space is unlocked.
- if (adapterItem.viewType == VIEW_TYPE_PRIVATE_SPACE_HEADER
- && mPrivateProfileManager
- .getCurrentState() == PrivateProfileManager.STATE_ENABLED) {
+ if (adapterItem.viewType == VIEW_TYPE_PRIVATE_SPACE_HEADER) {
// We flatten the bottom corners of the rectangle, so that it merges with
// the private space app row decorator.
mTmpRect.set(
@@ -103,9 +100,8 @@
iconView.getBottom());
// Decorates last app row with rounded bottom corners.
if (adapterPosition + numCol >= mAppsList.getAdapterItems().size()) {
- int corner = mContext.getResources().getDimensionPixelSize(
- R.dimen.ps_container_corner_radius);
- float[] mCornersBot = new float[]{0, 0, 0, 0, corner, corner, corner, corner};
+ float[] mCornersBot = new float[]{0, 0, 0, 0, mCornerRadius, mCornerRadius,
+ mCornerRadius, mCornerRadius};
mTmpPath.addRoundRect(mTmpRect, mCornersBot, Path.Direction.CW);
} else {
// Decorate other rows as a plain rectangle
diff --git a/src/com/android/launcher3/allapps/PrivateProfileManager.java b/src/com/android/launcher3/allapps/PrivateProfileManager.java
index ec01aee..3e73c6a 100644
--- a/src/com/android/launcher3/allapps/PrivateProfileManager.java
+++ b/src/com/android/launcher3/allapps/PrivateProfileManager.java
@@ -19,6 +19,7 @@
import static com.android.launcher3.allapps.ActivityAllAppsContainerView.AdapterHolder.MAIN;
import static com.android.launcher3.allapps.BaseAllAppsAdapter.VIEW_TYPE_PRIVATE_SPACE_HEADER;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_PRIVATE_PROFILE_QUIET_MODE_ENABLED;
+import static com.android.launcher3.util.SettingsCache.PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -29,6 +30,7 @@
import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.pm.UserCache;
import com.android.launcher3.util.Preconditions;
+import com.android.launcher3.util.SettingsCache;
import java.util.ArrayList;
import java.util.function.Predicate;
@@ -44,11 +46,12 @@
private static final String PS_SETTINGS_FRAGMENT_VALUE = "AndroidPrivateSpace_personal";
private final ActivityAllAppsContainerView<?> mAllApps;
private final Predicate<UserHandle> mPrivateProfileMatcher;
+ private PrivateAppsSectionDecorator mPrivateAppsSectionDecorator;
public PrivateProfileManager(UserManager userManager,
- UserCache userCache,
- ActivityAllAppsContainerView allApps,
- StatsLogManager statsLogManager) {
+ ActivityAllAppsContainerView<?> allApps,
+ StatsLogManager statsLogManager,
+ UserCache userCache) {
super(userManager, statsLogManager, userCache);
mAllApps = allApps;
mPrivateProfileMatcher = (user) -> userCache.getUserInfo(user).isPrivate();
@@ -75,9 +78,8 @@
/** Whether private profile should be hidden on Launcher. */
public boolean isPrivateSpaceHidden() {
- // TODO (b/289223923): Update this when we are able to read PsSettingsFlag
- // from SettingsProvider.
- return false;
+ return getCurrentState() == STATE_DISABLED && SettingsCache.INSTANCE
+ .get(mAllApps.mActivityContext).getValue(PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI, 0);
}
/** Resets the current state of Private Profile, w.r.t. to Launcher. */
@@ -86,6 +88,7 @@
.hasModelFlag(FLAG_PRIVATE_PROFILE_QUIET_MODE_ENABLED);
int updatedState = isEnabled ? STATE_ENABLED : STATE_DISABLED;
setCurrentState(updatedState);
+ resetPrivateSpaceDecorator(updatedState);
}
/** Opens the Private Space Settings Entry Point. */
@@ -102,11 +105,29 @@
Preconditions.assertNonUiThread();
Intent psSettingsIntent = new Intent(SAFETY_CENTER_INTENT);
psSettingsIntent.putExtra(PS_SETTINGS_FRAGMENT_KEY, PS_SETTINGS_FRAGMENT_VALUE);
- ResolveInfo resolveInfo = mAllApps.getContext().getPackageManager()
+ ResolveInfo resolveInfo = mAllApps.mActivityContext.getPackageManager()
.resolveActivity(psSettingsIntent, PackageManager.MATCH_SYSTEM_ONLY);
return resolveInfo != null;
}
+ void resetPrivateSpaceDecorator(int updatedState) {
+ if (updatedState == STATE_ENABLED) {
+ // Add Private Space Decorator to the Recycler view.
+ if (mPrivateAppsSectionDecorator == null) {
+ mPrivateAppsSectionDecorator = new PrivateAppsSectionDecorator(
+ mAllApps.mActivityContext,
+ mAllApps.mAH.get(MAIN).mAppsList);
+ }
+ mAllApps.mAH.get(MAIN).mRecyclerView.addItemDecoration(mPrivateAppsSectionDecorator);
+ } else {
+ // Remove Private Space Decorator from the Recycler view.
+ if (mPrivateAppsSectionDecorator != null) {
+ mAllApps.mAH.get(MAIN).mRecyclerView
+ .removeItemDecoration(mPrivateAppsSectionDecorator);
+ }
+ }
+ }
+
/** Posts quiet mode enable/disable call for private profile. */
private void enableQuietMode(boolean enable) {
setQuietMode(enable);
diff --git a/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewController.java b/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewController.java
index 9420b4c..c49d0b1 100644
--- a/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewController.java
+++ b/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewController.java
@@ -19,6 +19,7 @@
import static com.android.launcher3.allapps.PrivateProfileManager.STATE_DISABLED;
import static com.android.launcher3.allapps.PrivateProfileManager.STATE_ENABLED;
import static com.android.launcher3.allapps.PrivateProfileManager.STATE_TRANSITION;
+import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import android.view.View;
import android.widget.ImageButton;
@@ -49,7 +50,7 @@
//Add image and action for private space settings button
ImageButton settingsButton = parent.findViewById(R.id.ps_settings_button);
assert settingsButton != null;
- addPrivateSpaceSettingsButton(settingsButton);
+ UI_HELPER_EXECUTOR.post(() -> addPrivateSpaceSettingsButton(settingsButton));
//Add image for private space transitioning view
ImageView transitionView = parent.findViewById(R.id.ps_transition_image);
diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java
index 51eb363..7d9f709 100644
--- a/src/com/android/launcher3/config/FeatureFlags.java
+++ b/src/com/android/launcher3/config/FeatureFlags.java
@@ -286,6 +286,22 @@
getReleaseFlag(303023676, "ENABLE_SEARCH_HAPTIC_HINT", ENABLED,
"Enables haptic hint when long pressing on the bottom bar nav handle.");
+ public static final IntFlag LPNH_HAPTIC_HINT_START_SCALE_PERCENT =
+ getIntFlag(309972570, "FLAG_LPNH_HAPTIC_HINT_START_SCALE_PERCENT", 0,
+ "Haptic hint start scale.");
+
+ public static final IntFlag LPNH_HAPTIC_HINT_END_SCALE_PERCENT =
+ getIntFlag(309972570, "FLAG_LPNH_HAPTIC_HINT_END_SCALE_PERCENT", 100,
+ "Haptic hint end scale.");
+
+ public static final IntFlag LPNH_HAPTIC_HINT_SCALE_EXPONENT =
+ getIntFlag(309972570, "FLAG_LPNH_HAPTIC_HINT_SCALE_EXPONENT", 1,
+ "Haptic hint scale exponent.");
+
+ public static final IntFlag LPNH_HAPTIC_HINT_ITERATIONS =
+ getIntFlag(309972570, "FLAG_LPNH_HAPTIC_HINT_ITERATIONS", 50,
+ "Haptic hint number of iterations.");
+
// TODO(Block 17): Clean up flags
// Aconfig migration complete for ENABLE_TASKBAR_PINNING.
private static final BooleanFlag ENABLE_TASKBAR_PINNING = getDebugFlag(270396583,
diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java
index cec4574..9aed4eb 100644
--- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java
+++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java
@@ -22,6 +22,7 @@
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
+import static com.android.launcher3.MotionEventsUtils.isTrackpadScroll;
import static com.android.launcher3.anim.AnimatorListeners.forEndCallback;
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_ALLAPPS;
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME;
@@ -68,6 +69,7 @@
protected boolean mGoingBetweenStates = true;
// Ratio of transition process [0, 1] to drag displacement (px)
protected float mProgressMultiplier;
+ protected boolean mIsTrackpadReverseScroll;
private boolean mNoIntercept;
private boolean mIsLogContainerSet;
@@ -92,6 +94,9 @@
return false;
}
+ mIsTrackpadReverseScroll = !mLauncher.isNaturalScrollingEnabled()
+ && isTrackpadScroll(ev);
+
// Now figure out which direction scroll events the controller will start
// calling the callbacks.
final int directionsToDetectScroll;
@@ -248,6 +253,11 @@
}
mIsLogContainerSet = true;
}
+ // Only reverse the gesture to open all apps (not close) when trackpad reverse scrolling is
+ // on.
+ if (mIsTrackpadReverseScroll && mStartState == NORMAL) {
+ displacement = -displacement;
+ }
return onDrag(displacement);
}
@@ -274,6 +284,11 @@
return;
}
+ // Only reverse the gesture to open all apps (not close) when trackpad reverse scrolling is
+ // on.
+ if (mIsTrackpadReverseScroll && mStartState == NORMAL) {
+ velocity = -velocity;
+ }
boolean fling = mDetector.isFling(velocity);
boolean blockedFling = fling && mFlingBlockCheck.isBlocked();
@@ -412,9 +427,15 @@
mGoingBetweenStates = true;
mDetector.finishedScrolling();
mDetector.setDetectableScrollConditions(0, false);
+ mIsTrackpadReverseScroll = false;
}
private void cancelAnimationControllers() {
mCurrentAnimation = null;
}
+
+ protected boolean shouldOpenAllApps(boolean isDragTowardPositive) {
+ return (isDragTowardPositive && !mIsTrackpadReverseScroll)
+ || (!isDragTowardPositive && mIsTrackpadReverseScroll);
+ }
}
diff --git a/src/com/android/launcher3/touch/AllAppsSwipeController.java b/src/com/android/launcher3/touch/AllAppsSwipeController.java
index 447d22b..8b9bc19 100644
--- a/src/com/android/launcher3/touch/AllAppsSwipeController.java
+++ b/src/com/android/launcher3/touch/AllAppsSwipeController.java
@@ -166,7 +166,7 @@
@Override
protected LauncherState getTargetState(LauncherState fromState, boolean isDragTowardPositive) {
- if (fromState == NORMAL && isDragTowardPositive) {
+ if (fromState == NORMAL && shouldOpenAllApps(isDragTowardPositive)) {
return ALL_APPS;
} else if (fromState == ALL_APPS && !isDragTowardPositive) {
return NORMAL;
diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java
index 0470971..4c83668 100644
--- a/src/com/android/launcher3/util/DisplayController.java
+++ b/src/com/android/launcher3/util/DisplayController.java
@@ -431,6 +431,11 @@
return smallestSizeDp(bounds) >= MIN_TABLET_WIDTH;
}
+ /** Getter for {@link #navigationMode} to allow mocking. */
+ public NavigationMode getNavigationMode() {
+ return navigationMode;
+ }
+
/**
* Returns smallest size in dp for given bounds.
*/
diff --git a/src/com/android/launcher3/util/SettingsCache.java b/src/com/android/launcher3/util/SettingsCache.java
index 29ec5ab..ccd154a 100644
--- a/src/com/android/launcher3/util/SettingsCache.java
+++ b/src/com/android/launcher3/util/SettingsCache.java
@@ -55,8 +55,14 @@
/** Hidden field Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED */
public static final String ONE_HANDED_SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED =
"swipe_bottom_to_notification_enabled";
+ /** Hidden field Settings.Secure.HIDE_PRIVATESPACE_ENTRY_POINT */
+ public static final Uri PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI =
+ Settings.Secure.getUriFor("hide_privatespace_entry_point");
public static final Uri ROTATION_SETTING_URI =
Settings.System.getUriFor(ACCELEROMETER_ROTATION);
+ /** Hidden field {@link Settings.System#TOUCHPAD_NATURAL_SCROLLING}. */
+ public static final Uri TOUCHPAD_NATURAL_SCROLLING = Settings.System.getUriFor(
+ "touchpad_natural_scrolling");
private static final String SYSTEM_URI_PREFIX = Settings.System.CONTENT_URI.toString();
private static final String GLOBAL_URI_PREFIX = Settings.Global.CONTENT_URI.toString();
diff --git a/src/com/android/launcher3/util/WindowBounds.java b/src/com/android/launcher3/util/WindowBounds.java
index ec3b642..84a3e7a 100644
--- a/src/com/android/launcher3/util/WindowBounds.java
+++ b/src/com/android/launcher3/util/WindowBounds.java
@@ -85,7 +85,7 @@
* Returns true if the device is in landscape orientation
*/
public final boolean isLandscape() {
- return availableSize.x > availableSize.y;
+ return bounds.width() > bounds.height();
}
/**
diff --git a/src/com/android/launcher3/util/window/WindowManagerProxy.java b/src/com/android/launcher3/util/window/WindowManagerProxy.java
index 278a37e..51a96c4 100644
--- a/src/com/android/launcher3/util/window/WindowManagerProxy.java
+++ b/src/com/android/launcher3/util/window/WindowManagerProxy.java
@@ -338,6 +338,20 @@
}
/**
+ * Returns bounds of the display associated with the context, or bounds of DEFAULT_DISPLAY
+ * if the context isn't associated with a display.
+ */
+ public Rect getCurrentBounds(Context displayInfoContext) {
+ Resources res = displayInfoContext.getResources();
+ Configuration config = res.getConfiguration();
+
+ float screenWidth = config.screenWidthDp * res.getDisplayMetrics().density;
+ float screenHeight = config.screenHeightDp * res.getDisplayMetrics().density;
+
+ return new Rect(0, 0, (int) screenWidth, (int) screenHeight);
+ }
+
+ /**
* Returns rotation of the display associated with the context, or rotation of DEFAULT_DISPLAY
* if the context isn't associated with a display.
*/
diff --git a/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt b/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt
index 0b31469..e46726d 100644
--- a/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt
+++ b/tests/src/com/android/launcher3/AbstractDeviceProfileTest.kt
@@ -273,6 +273,7 @@
val realBounds = windowsBounds[rotation]
whenever(windowManagerProxy.getDisplayInfo(any())).thenReturn(displayInfo)
whenever(windowManagerProxy.getRealBounds(any(), any())).thenReturn(realBounds)
+ whenever(windowManagerProxy.getCurrentBounds(any())).thenReturn(realBounds.bounds)
whenever(windowManagerProxy.getRotation(any())).thenReturn(rotation)
whenever(windowManagerProxy.getNavigationMode(any()))
.thenReturn(
diff --git a/tests/src/com/android/launcher3/allapps/AlphabeticalAppsListTest.java b/tests/src/com/android/launcher3/allapps/AlphabeticalAppsListTest.java
new file mode 100644
index 0000000..259f519
--- /dev/null
+++ b/tests/src/com/android/launcher3/allapps/AlphabeticalAppsListTest.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2023 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.allapps;
+
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+
+import static com.android.launcher3.allapps.BaseAllAppsAdapter.VIEW_TYPE_PRIVATE_SPACE_HEADER;
+import static com.android.launcher3.allapps.UserProfileManager.STATE_DISABLED;
+import static com.android.launcher3.allapps.UserProfileManager.STATE_ENABLED;
+import static com.android.launcher3.allapps.UserProfileManager.STATE_TRANSITION;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.AdditionalAnswers.answer;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Process;
+import android.os.UserHandle;
+import android.platform.test.flag.junit.SetFlagsRule;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.launcher3.Flags;
+import com.android.launcher3.model.data.AppInfo;
+import com.android.launcher3.util.ActivityContextWrapper;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Stream;
+
+@RunWith(AndroidJUnit4.class)
+public class AlphabeticalAppsListTest {
+
+ private static final UserHandle MAIN_HANDLE = Process.myUserHandle();
+ private static final UserHandle PRIVATE_HANDLE = new UserHandle(11);
+
+ private static final int PRIVATE_SPACE_HEADER_ITEM_COUNT = 1;
+ private static final int MAIN_USER_APP_COUNT = 2;
+ private static final int PRIVATE_USER_APP_COUNT = 1;
+
+ private AlphabeticalAppsList<?> mAlphabeticalAppsList;
+ @Mock
+ private AllAppsStore<?> mAllAppsStore;
+ @Mock
+ private PrivateProfileManager mPrivateProfileManager;
+ private Context mContext;
+
+ @Rule
+ public final SetFlagsRule mSetFlagsRule =
+ new SetFlagsRule(SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT);
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = new ActivityContextWrapper(getApplicationContext());
+ when(mPrivateProfileManager.getItemInfoMatcher()).thenReturn(info ->
+ info != null && info.user.equals(PRIVATE_HANDLE));
+ mAlphabeticalAppsList = new AlphabeticalAppsList<>(mContext, mAllAppsStore,
+ null, mPrivateProfileManager);
+ }
+
+ @Test
+ public void privateProfileEnabled_allPrivateProfileViewsArePresent() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVATE_SPACE);
+ when(mAllAppsStore.getApps()).thenReturn(createAppInfoListForMainAndPrivateUser());
+ when(mPrivateProfileManager.addPrivateSpaceHeader(any()))
+ .thenAnswer(answer(this::addPrivateSpaceHeader));
+ when(mPrivateProfileManager.getCurrentState()).thenReturn(STATE_ENABLED);
+
+ mAlphabeticalAppsList.updateItemFilter(info -> info != null
+ && info.user.equals(MAIN_HANDLE));
+
+ assertEquals(MAIN_USER_APP_COUNT + PRIVATE_SPACE_HEADER_ITEM_COUNT
+ + PRIVATE_USER_APP_COUNT, mAlphabeticalAppsList.getAdapterItems().size());
+ assertEquals(PRIVATE_SPACE_HEADER_ITEM_COUNT,
+ mAlphabeticalAppsList.getAdapterItems().stream().filter(item ->
+ item.viewType == VIEW_TYPE_PRIVATE_SPACE_HEADER).toList().size());
+ assertEquals(PRIVATE_USER_APP_COUNT,
+ mAlphabeticalAppsList.getAdapterItems().stream().filter(item ->
+ item.itemInfo != null
+ && item.itemInfo.user.equals(PRIVATE_HANDLE)).toList().size());
+ }
+
+ @Test
+ public void privateProfileDisabled_onlyPrivateProfileHeaderViewIsPresent() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVATE_SPACE);
+ when(mAllAppsStore.getApps()).thenReturn(createAppInfoListForMainAndPrivateUser());
+ when(mPrivateProfileManager.addPrivateSpaceHeader(any()))
+ .thenAnswer(answer(this::addPrivateSpaceHeader));
+ when(mPrivateProfileManager.getCurrentState()).thenReturn(STATE_DISABLED);
+
+ mAlphabeticalAppsList.updateItemFilter(info -> info != null
+ && info.user.equals(MAIN_HANDLE));
+
+ assertEquals(MAIN_USER_APP_COUNT + PRIVATE_SPACE_HEADER_ITEM_COUNT,
+ mAlphabeticalAppsList.getAdapterItems().size());
+ assertEquals(PRIVATE_SPACE_HEADER_ITEM_COUNT, mAlphabeticalAppsList
+ .getAdapterItems().stream().filter(item ->
+ item.viewType == VIEW_TYPE_PRIVATE_SPACE_HEADER).toList().size());
+ assertEquals(0, mAlphabeticalAppsList.getAdapterItems().stream().filter(item ->
+ item.itemInfo != null
+ && item.itemInfo.user.equals(PRIVATE_HANDLE)).toList().size());
+ }
+
+ @Test
+ public void privateProfileTransitioning_onlyPrivateProfileHeaderViewIsPresent() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVATE_SPACE);
+ when(mAllAppsStore.getApps()).thenReturn(createAppInfoListForMainAndPrivateUser());
+ when(mPrivateProfileManager.addPrivateSpaceHeader(any()))
+ .thenAnswer(answer(this::addPrivateSpaceHeader));
+ when(mPrivateProfileManager.getCurrentState()).thenReturn(STATE_TRANSITION);
+
+ mAlphabeticalAppsList.updateItemFilter(info -> info != null
+ && info.user.equals(MAIN_HANDLE));
+
+ assertEquals(MAIN_USER_APP_COUNT + PRIVATE_SPACE_HEADER_ITEM_COUNT,
+ mAlphabeticalAppsList.getAdapterItems().size());
+ assertEquals(PRIVATE_SPACE_HEADER_ITEM_COUNT, mAlphabeticalAppsList
+ .getAdapterItems().stream().filter(item ->
+ item.viewType == VIEW_TYPE_PRIVATE_SPACE_HEADER).toList().size());
+ assertEquals(0, mAlphabeticalAppsList.getAdapterItems().stream().filter(item ->
+ item.itemInfo != null
+ && item.itemInfo.user.equals(PRIVATE_HANDLE)).toList().size());
+ }
+
+ @Test
+ public void privateProfileHidden_noPrivateProfileViewIsPresent() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVATE_SPACE);
+ when(mAllAppsStore.getApps()).thenReturn(createAppInfoListForMainAndPrivateUser());
+ when(mPrivateProfileManager.isPrivateSpaceHidden()).thenReturn(true);
+
+ mAlphabeticalAppsList.updateItemFilter(info -> info != null
+ && info.user.equals(MAIN_HANDLE));
+
+ assertEquals(MAIN_USER_APP_COUNT, mAlphabeticalAppsList.getAdapterItems().size());
+ assertEquals(0, mAlphabeticalAppsList.getAdapterItems().stream().filter(item ->
+ item.viewType == VIEW_TYPE_PRIVATE_SPACE_HEADER).toList().size());
+ assertEquals(0, mAlphabeticalAppsList.getAdapterItems().stream().filter(item ->
+ item.itemInfo != null
+ && item.itemInfo.user.equals(PRIVATE_HANDLE)).toList().size());
+ }
+
+ @Test
+ public void privateProfileNotPresent_onlyMainUserViewsArePresent() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVATE_SPACE);
+ when(mAllAppsStore.getApps()).thenReturn(createAppInfoListForMainUser());
+
+ mAlphabeticalAppsList.updateItemFilter(info -> info != null
+ && info.user.equals(MAIN_HANDLE));
+
+ assertEquals(2, mAlphabeticalAppsList.getAdapterItems().size());
+ assertEquals(0, mAlphabeticalAppsList.getAdapterItems().stream().filter(item ->
+ item.itemInfo != null
+ && item.itemInfo.itemType == VIEW_TYPE_PRIVATE_SPACE_HEADER)
+ .toList().size());
+ assertEquals(0, mAlphabeticalAppsList.getAdapterItems().stream().filter(item ->
+ item.itemInfo != null && item.itemInfo.user.equals(PRIVATE_HANDLE))
+ .toList().size());
+ }
+
+ private int addPrivateSpaceHeader(List<BaseAllAppsAdapter.AdapterItem> adapterItemList) {
+ adapterItemList.add(new BaseAllAppsAdapter.AdapterItem(VIEW_TYPE_PRIVATE_SPACE_HEADER));
+ return adapterItemList.size();
+ }
+
+ private AppInfo[] createAppInfoListForMainUser() {
+ ComponentName gmailComponentName = new ComponentName(mContext,
+ "com.android.launcher3.tests.Activity" + "Gmail");
+ AppInfo gmailAppInfo = new
+ AppInfo(gmailComponentName, "Gmail", MAIN_HANDLE, new Intent());
+ ComponentName driveComponentName = new ComponentName(mContext,
+ "com.android.launcher3.tests.Activity" + "Drive");
+ AppInfo driveAppInfo = new
+ AppInfo(driveComponentName, "Drive", MAIN_HANDLE, new Intent());
+ return new AppInfo[]{gmailAppInfo, driveAppInfo};
+ }
+
+ private AppInfo[] createAppInfoListForPrivateUser() {
+ ComponentName privateMessengercomponentName = new ComponentName(mContext,
+ "com.android.launcher3.tests.Activity" + "PrivateMessenger");
+ AppInfo privateMessengerAppInfo = new AppInfo(privateMessengercomponentName,
+ "Private Messenger", PRIVATE_HANDLE, new Intent());
+ return new AppInfo[]{privateMessengerAppInfo};
+ }
+
+ private AppInfo[] createAppInfoListForMainAndPrivateUser() {
+ return Stream.concat(Arrays.stream(createAppInfoListForMainUser()),
+ Arrays.stream(createAppInfoListForPrivateUser())).toArray(AppInfo[]::new);
+ }
+
+}
diff --git a/tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java b/tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java
index bfa9241..f461c8c 100644
--- a/tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java
+++ b/tests/src/com/android/launcher3/allapps/PrivateProfileManagerTest.java
@@ -22,6 +22,9 @@
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
@@ -82,8 +85,8 @@
when(mUserCache.getUserInfo(PRIVATE_HANDLE)).thenReturn(PRIVATE_ICON_INFO);
when(mActivityAllAppsContainerView.getContext()).thenReturn(mContext);
when(mActivityAllAppsContainerView.getAppsStore()).thenReturn(mAllAppsStore);
- mPrivateProfileManager = new PrivateProfileManager(mUserManager, mUserCache,
- mActivityAllAppsContainerView, mStatsLogManager);
+ mPrivateProfileManager = new PrivateProfileManager(mUserManager,
+ mActivityAllAppsContainerView, mStatsLogManager, mUserCache);
}
@Test
@@ -108,16 +111,18 @@
@Test
public void quietModeFlagPresent_privateSpaceIsResetToDisabled() {
+ PrivateProfileManager privateProfileManager = spy(mPrivateProfileManager);
+ doNothing().when(privateProfileManager).resetPrivateSpaceDecorator(anyInt());
when(mAllAppsStore.hasModelFlag(FLAG_PRIVATE_PROFILE_QUIET_MODE_ENABLED))
.thenReturn(false, true);
// In first call the state should be disabled.
- mPrivateProfileManager.reset();
- assertEquals(STATE_ENABLED, mPrivateProfileManager.getCurrentState());
+ privateProfileManager.reset();
+ assertEquals(STATE_ENABLED, privateProfileManager.getCurrentState());
// In the next call the state should be disabled.
- mPrivateProfileManager.reset();
- assertEquals(STATE_DISABLED, mPrivateProfileManager.getCurrentState());
+ privateProfileManager.reset();
+ assertEquals(STATE_DISABLED, privateProfileManager.getCurrentState());
}
@Test
diff --git a/tests/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewControllerTest.java b/tests/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewControllerTest.java
index 87adaa1..ea8be3f 100644
--- a/tests/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewControllerTest.java
+++ b/tests/src/com/android/launcher3/allapps/PrivateSpaceHeaderViewControllerTest.java
@@ -21,6 +21,7 @@
import static com.android.launcher3.allapps.UserProfileManager.STATE_DISABLED;
import static com.android.launcher3.allapps.UserProfileManager.STATE_ENABLED;
import static com.android.launcher3.allapps.UserProfileManager.STATE_TRANSITION;
+import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
@@ -75,11 +76,12 @@
}
@Test
- public void privateProfileDisabled_psHeaderContainsLockedView() {
+ public void privateProfileDisabled_psHeaderContainsLockedView() throws Exception {
Bitmap unlockButton = getBitmap(mContext.getDrawable(R.drawable.bg_ps_unlock_button));
when(mPrivateProfileManager.getCurrentState()).thenReturn(STATE_DISABLED);
mPsHeaderViewController.addPrivateSpaceHeaderViewElements(mPsHeaderLayout);
+ awaitTasksCompleted();
int totalContainerHeaderView = 0;
int totalLockUnlockButtonView = 0;
@@ -102,13 +104,14 @@
}
@Test
- public void privateProfileEnabled_psHeaderContainsUnlockedView() {
+ public void privateProfileEnabled_psHeaderContainsUnlockedView() throws Exception {
Bitmap lockImage = getBitmap(mContext.getDrawable(R.drawable.bg_ps_lock_button));
Bitmap settingsImage = getBitmap(mContext.getDrawable(R.drawable.bg_ps_settings_button));
when(mPrivateProfileManager.getCurrentState()).thenReturn(STATE_ENABLED);
when(mPrivateProfileManager.isPrivateSpaceSettingsButtonVisible()).thenReturn(true);
mPsHeaderViewController.addPrivateSpaceHeaderViewElements(mPsHeaderLayout);
+ awaitTasksCompleted();
int totalContainerHeaderView = 0;
int totalLockUnlockButtonView = 0;
@@ -138,12 +141,14 @@
}
@Test
- public void privateProfileEnabledAndNoSettingsIntent_psHeaderContainsUnlockedView() {
+ public void privateProfileEnabledAndNoSettingsIntent_psHeaderContainsUnlockedView()
+ throws Exception {
Bitmap lockImage = getBitmap(mContext.getDrawable(R.drawable.bg_ps_lock_button));
when(mPrivateProfileManager.getCurrentState()).thenReturn(STATE_ENABLED);
when(mPrivateProfileManager.isPrivateSpaceSettingsButtonVisible()).thenReturn(false);
mPsHeaderViewController.addPrivateSpaceHeaderViewElements(mPsHeaderLayout);
+ awaitTasksCompleted();
int totalContainerHeaderView = 0;
int totalLockUnlockButtonView = 0;
@@ -168,11 +173,12 @@
}
@Test
- public void privateProfileTransitioning_psHeaderContainsTransitionView() {
+ public void privateProfileTransitioning_psHeaderContainsTransitionView() throws Exception {
Bitmap transitionImage = getBitmap(mContext.getDrawable(R.drawable.bg_ps_transition_image));
when(mPrivateProfileManager.getCurrentState()).thenReturn(STATE_TRANSITION);
mPsHeaderViewController.addPrivateSpaceHeaderViewElements(mPsHeaderLayout);
+ awaitTasksCompleted();
int totalContainerHeaderView = 0;
int totalLockUnlockButtonView = 0;
@@ -216,4 +222,8 @@
}
return result;
}
+
+ private static void awaitTasksCompleted() throws Exception {
+ UI_HELPER_EXECUTOR.submit(() -> null).get();
+ }
}
diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
index 688f418..cb1102e 100644
--- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -114,9 +114,9 @@
protected final LauncherInstrumentation mLauncher = createLauncherInstrumentation();
@NonNull
- private static LauncherInstrumentation createLauncherInstrumentation() {
+ public static LauncherInstrumentation createLauncherInstrumentation() {
waitForSetupWizardDismissal(); // precondition for creating LauncherInstrumentation
- return new LauncherInstrumentation();
+ return new LauncherInstrumentation(true);
}
protected Context mTargetContext;
diff --git a/tests/tapl/com/android/launcher3/tapl/BaseOverview.java b/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
index 770fe14..fa5a7b3 100644
--- a/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
+++ b/tests/tapl/com/android/launcher3/tapl/BaseOverview.java
@@ -16,9 +16,12 @@
package com.android.launcher3.tapl;
+import static com.android.launcher3.tapl.LauncherInstrumentation.TASKBAR_RES_ID;
+
import android.graphics.Rect;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.test.uiautomator.By;
import androidx.test.uiautomator.BySelector;
import androidx.test.uiautomator.Direction;
@@ -322,6 +325,22 @@
mLauncher.getOverviewObjectSelector("clear_all"));
}
+ /**
+ * Returns the taskbar if it's a tablet, or {@code null} otherwise.
+ */
+ @Nullable
+ public Taskbar getTaskbar() {
+ if (!mLauncher.isTablet()) {
+ return null;
+ }
+ try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
+ "want to get the taskbar")) {
+ mLauncher.waitForSystemLauncherObject(TASKBAR_RES_ID);
+
+ return new Taskbar(mLauncher);
+ }
+ }
+
protected boolean isActionsViewVisible() {
if (!hasTasks() || isClearAllVisible()) {
return false;
diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index a60dba7..406de35 100644
--- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -215,15 +215,31 @@
* Constructs the root of TAPL hierarchy. You get all other objects from it.
*/
public LauncherInstrumentation() {
- this(InstrumentationRegistry.getInstrumentation());
+ this(InstrumentationRegistry.getInstrumentation(), false);
}
/**
* Constructs the root of TAPL hierarchy. You get all other objects from it.
- * Deprecated: use the constructor without parameters instead.
+ */
+ public LauncherInstrumentation(boolean isLauncherTest) {
+ this(InstrumentationRegistry.getInstrumentation(), isLauncherTest);
+ }
+
+ /**
+ * Constructs the root of TAPL hierarchy. You get all other objects from it.
+ * @deprecated use the constructor without Instrumentation parameter instead.
*/
@Deprecated
public LauncherInstrumentation(Instrumentation instrumentation) {
+ this(instrumentation, false);
+ }
+
+ /**
+ * Constructs the root of TAPL hierarchy. You get all other objects from it.
+ * @deprecated use the constructor without Instrumentation parameter instead.
+ */
+ @Deprecated
+ public LauncherInstrumentation(Instrumentation instrumentation, boolean isLauncherTest) {
mInstrumentation = instrumentation;
mDevice = UiDevice.getInstance(instrumentation);
@@ -272,12 +288,17 @@
.replaceAll("\\s", "");
mDevice.executeShellCommand(
"pm enable --user " + userId + " " + cn.flattenToString());
+
// Wait for Launcher restart after enabling test provider.
- for (int i = 0; i < 300; ++i) {
+ final int iterations = isLauncherTest ? 300 : 100;
+
+ for (int i = 0; i < iterations; ++i) {
final String currentPid = mDevice.executeShellCommand(launcherPidCommand)
.replaceAll("\\s", "");
if (!currentPid.isEmpty() && !currentPid.equals(initialPid)) break;
- if (i == 299) fail("Launcher didn't restart after enabling test provider");
+ if (i == iterations - 1) {
+ fail("Launcher didn't restart after enabling test provider");
+ }
SystemClock.sleep(100);
}
} catch (IOException e) {