Merge "Restricting Accessibility flows for Private Profile." into main
diff --git a/aconfig/launcher_search.aconfig b/aconfig/launcher_search.aconfig
index 97e56b7..b846604 100644
--- a/aconfig/launcher_search.aconfig
+++ b/aconfig/launcher_search.aconfig
@@ -26,4 +26,11 @@
namespace: "launcher_search"
description: "This flag enables addition of App Installer button in Private Space container."
bug: "308064949"
-}
\ No newline at end of file
+}
+
+flag {
+ name: "private_space_restrict_accessibility_drag"
+ namespace: "launcher_search"
+ description: "This flag disables accessibility drag for Private Space Apps."
+ bug: "289223923"
+}
diff --git a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java
index 667f784..0ce1cb8 100644
--- a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java
+++ b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java
@@ -68,6 +68,7 @@
import com.android.launcher3.model.data.FolderInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
+import com.android.launcher3.pm.UserCache;
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.util.Executors;
import com.android.launcher3.util.IntSparseArrayMap;
@@ -553,7 +554,10 @@
if (lai == null) {
return null;
}
- AppInfo info = new AppInfo(lai, user, mUMS.isUserQuiet(user));
+ AppInfo info = new AppInfo(
+ lai,
+ UserCache.INSTANCE.get(mAppState.getContext()).getUserInfo(user),
+ mUMS.isUserQuiet(user));
info.container = mContainer;
mAppState.getIconCache().getTitleAndIcon(info, lai, false);
mReadCount++;
diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
index ac5b528..0844275 100644
--- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
+++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
@@ -32,6 +32,7 @@
import com.android.launcher3.dragndrop.DragView;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.keyboard.KeyboardDragAndDropView;
+import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.FolderInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
@@ -126,7 +127,8 @@
}
private boolean supportAddToWorkSpace(ItemInfo item) {
- return (item instanceof WorkspaceItemFactory)
+ return ((item instanceof AppInfo)
+ && (((AppInfo) item).runtimeStatusFlags & FLAG_NOT_PINNABLE) == 0)
|| ((item instanceof WorkspaceItemInfo)
&& (((WorkspaceItemInfo) item).runtimeStatusFlags & FLAG_NOT_PINNABLE) == 0)
|| ((item instanceof PendingAddItemInfo)
diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java
index 1044dfb..2f678a8 100644
--- a/src/com/android/launcher3/model/LoaderCursor.java
+++ b/src/com/android/launcher3/model/LoaderCursor.java
@@ -50,11 +50,13 @@
import com.android.launcher3.model.data.IconRequestInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
+import com.android.launcher3.pm.UserCache;
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.util.ContentWriter;
import com.android.launcher3.util.GridOccupancy;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSparseArrayMap;
+import com.android.launcher3.util.UserIconInfo;
import java.net.URISyntaxException;
import java.security.InvalidParameterException;
@@ -353,6 +355,8 @@
final WorkspaceItemInfo info = new WorkspaceItemInfo();
info.user = user;
info.intent = newIntent;
+ UserCache userCache = UserCache.getInstance(mContext);
+ UserIconInfo userIconInfo = userCache.getUserInfo(user);
if (loadIcon) {
mIconCache.getTitleAndIcon(info, mActivityInfo, useLowResIcon);
@@ -362,7 +366,7 @@
}
if (mActivityInfo != null) {
- AppInfo.updateRuntimeFlagsForActivityTarget(info, mActivityInfo);
+ AppInfo.updateRuntimeFlagsForActivityTarget(info, mActivityInfo, userIconInfo);
}
// from the db
diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java
index d0a1f10..736b80a 100644
--- a/src/com/android/launcher3/model/LoaderTask.java
+++ b/src/com/android/launcher3/model/LoaderTask.java
@@ -655,7 +655,7 @@
// Create the ApplicationInfos
for (int i = 0; i < apps.size(); i++) {
LauncherActivityInfo app = apps.get(i);
- AppInfo appInfo = new AppInfo(app, user, quietMode);
+ AppInfo appInfo = new AppInfo(app, mUserCache.getUserInfo(user), quietMode);
if (enableSupportForArchiving() && app.getApplicationInfo().isArchived) {
// For archived apps, include progress info in case there is a pending
// install session post restart of device.
diff --git a/src/com/android/launcher3/model/data/AppInfo.java b/src/com/android/launcher3/model/data/AppInfo.java
index ea8a7a1..72eda6c 100644
--- a/src/com/android/launcher3/model/data/AppInfo.java
+++ b/src/com/android/launcher3/model/data/AppInfo.java
@@ -31,10 +31,13 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
+import com.android.launcher3.Flags;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.Utilities;
import com.android.launcher3.pm.PackageInstallInfo;
+import com.android.launcher3.pm.UserCache;
import com.android.launcher3.util.PackageManagerHelper;
+import com.android.launcher3.util.UserIconInfo;
import java.util.Comparator;
@@ -83,20 +86,21 @@
* Must not hold the Context.
*/
public AppInfo(Context context, LauncherActivityInfo info, UserHandle user) {
- this(info, user, context.getSystemService(UserManager.class).isQuietModeEnabled(user));
+ this(info, UserCache.INSTANCE.get(context).getUserInfo(user),
+ context.getSystemService(UserManager.class).isQuietModeEnabled(user));
}
- public AppInfo(LauncherActivityInfo info, UserHandle user, boolean quietModeEnabled) {
+ public AppInfo(LauncherActivityInfo info, UserIconInfo userIconInfo, boolean quietModeEnabled) {
this.componentName = info.getComponentName();
this.container = CONTAINER_ALL_APPS;
- this.user = user;
+ this.user = userIconInfo.user;
intent = makeLaunchIntent(info);
if (quietModeEnabled) {
runtimeStatusFlags |= FLAG_DISABLED_QUIET_USER;
}
uid = info.getApplicationInfo().uid;
- updateRuntimeFlagsForActivityTarget(this, info);
+ updateRuntimeFlagsForActivityTarget(this, info, userIconInfo);
}
public AppInfo(AppInfo info) {
@@ -170,7 +174,7 @@
}
public static void updateRuntimeFlagsForActivityTarget(
- ItemInfoWithIcon info, LauncherActivityInfo lai) {
+ ItemInfoWithIcon info, LauncherActivityInfo lai, UserIconInfo userIconInfo) {
ApplicationInfo appInfo = lai.getApplicationInfo();
if (PackageManagerHelper.isAppSuspended(appInfo)) {
info.runtimeStatusFlags |= FLAG_DISABLED_SUSPENDED;
@@ -181,6 +185,12 @@
info.runtimeStatusFlags |= (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0
? FLAG_SYSTEM_NO : FLAG_SYSTEM_YES;
+ if (Flags.privateSpaceRestrictAccessibilityDrag()) {
+ if (userIconInfo.isPrivate()) {
+ info.runtimeStatusFlags |= FLAG_NOT_PINNABLE;
+ }
+ }
+
// Sets the progress level, installation and incremental download flags.
info.setProgressLevel(
PackageManagerHelper.getLoadingProgress(lai),
diff --git a/src/com/android/launcher3/model/data/WorkspaceItemInfo.java b/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
index c67ec5a..9e169cf 100644
--- a/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
+++ b/src/com/android/launcher3/model/data/WorkspaceItemInfo.java
@@ -25,10 +25,12 @@
import androidx.annotation.NonNull;
+import com.android.launcher3.Flags;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherSettings.Favorites;
import com.android.launcher3.Utilities;
import com.android.launcher3.icons.IconCache;
+import com.android.launcher3.pm.UserCache;
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.uioverrides.ApiWrapper;
import com.android.launcher3.util.ContentWriter;
@@ -120,6 +122,11 @@
public WorkspaceItemInfo(ShortcutInfo shortcutInfo, Context context) {
user = shortcutInfo.getUserHandle();
itemType = Favorites.ITEM_TYPE_DEEP_SHORTCUT;
+ if (Flags.privateSpaceRestrictAccessibilityDrag()) {
+ if (UserCache.INSTANCE.get(context).getUserInfo(user).isPrivate()) {
+ runtimeStatusFlags |= FLAG_NOT_PINNABLE;
+ }
+ }
updateFromDeepShortcutInfo(shortcutInfo, context);
}
diff --git a/tests/src/com/android/launcher3/model/LoaderTaskTest.kt b/tests/src/com/android/launcher3/model/LoaderTaskTest.kt
index cb57918..e2ca31f 100644
--- a/tests/src/com/android/launcher3/model/LoaderTaskTest.kt
+++ b/tests/src/com/android/launcher3/model/LoaderTaskTest.kt
@@ -95,6 +95,10 @@
@Test
fun loadsDataProperly() =
with(BgDataModel()) {
+ val MAIN_HANDLE = UserHandle.of(0)
+ val mockUserHandles = arrayListOf<UserHandle>(MAIN_HANDLE)
+ `when`(userCache.userProfiles).thenReturn(mockUserHandles)
+ `when`(userCache.getUserInfo(MAIN_HANDLE)).thenReturn(UserIconInfo(MAIN_HANDLE, 1))
LoaderTask(app, bgAllAppsList, this, modelDelegate, launcherBinder)
.runSyncOnBackgroundThread()
Truth.assertThat(workspaceItems.size).isAtLeast(25)