Launcher3: fix cloned apps not appearing in app drawer
Change-Id: I21e54ed73dc2ce35131af64fbc039b0a0da22bd0
Signed-off-by: rmp22 <195054967+rmp22@users.noreply.github.com>
Signed-off-by: Jackeagle <jackeagle102@gmail.com>
diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml
index 22993fa..9684407 100644
--- a/AndroidManifest-common.xml
+++ b/AndroidManifest-common.xml
@@ -60,6 +60,7 @@
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.REGISTER_STATS_PULL_ATOM"/>
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
+ <uses-permission android:name="android.permission.QUERY_USERS" />
<!-- Floating window -->
<uses-permission android:name="com.libremobileos.permission.START_FREEFORM" />
diff --git a/privapp_whitelist_com.android.launcher3-ext.xml b/privapp_whitelist_com.android.launcher3-ext.xml
index 0e7a004..36c783f 100644
--- a/privapp_whitelist_com.android.launcher3-ext.xml
+++ b/privapp_whitelist_com.android.launcher3-ext.xml
@@ -28,5 +28,6 @@
<permission name="com.android.alarm.permission.SET_ALARM"/>
<permission name="android.permission.REGISTER_STATS_PULL_ATOM"/>
<permission name="android.permission.PACKAGE_USAGE_STATS"/>
+ <permission name="android.permission.QUERY_USERS"/>
</privapp-permissions>
</permissions>
diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
index 047cdf8..c8b6801 100644
--- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java
@@ -127,8 +127,7 @@
protected final T mActivityContext;
protected final List<AdapterHolder> mAH;
- protected final Predicate<ItemInfo> mPersonalMatcher = ItemInfoMatcher.ofUser(
- Process.myUserHandle());
+ protected final Predicate<ItemInfo> mPersonalMatcher;
protected WorkProfileManager mWorkManager;
protected final PrivateProfileManager mPrivateProfileManager;
protected final Point mFastScrollerOffset = new Point();
@@ -194,6 +193,8 @@
public ActivityAllAppsContainerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mActivityContext = ActivityContext.lookupContext(context);
+ UserManager userManager = mActivityContext.getSystemService(UserManager.class);
+ mPersonalMatcher = ItemInfoMatcher.ofCurrentOrDualUser(userManager, Process.myUserHandle());
mAllAppsStore = new AllAppsStore<>(mActivityContext);
mHeaderThreshold = getResources().getDimensionPixelSize(
@@ -201,12 +202,12 @@
mHeaderProtectionColor = Themes.getAttrColor(context, R.attr.allappsHeaderProtectionColor);
mWorkManager = new WorkProfileManager(
- mActivityContext.getSystemService(UserManager.class),
+ userManager,
this,
mActivityContext.getStatsLogManager(),
UserCache.INSTANCE.get(mActivityContext));
mPrivateProfileManager = new PrivateProfileManager(
- mActivityContext.getSystemService(UserManager.class),
+ userManager,
this,
mActivityContext.getStatsLogManager(),
UserCache.INSTANCE.get(mActivityContext));
diff --git a/src/com/android/launcher3/util/ItemInfoMatcher.java b/src/com/android/launcher3/util/ItemInfoMatcher.java
index 063313a..3ecc4d7 100644
--- a/src/com/android/launcher3/util/ItemInfoMatcher.java
+++ b/src/com/android/launcher3/util/ItemInfoMatcher.java
@@ -18,6 +18,7 @@
import android.content.ComponentName;
import android.os.UserHandle;
+import android.os.UserManager;
import androidx.annotation.NonNull;
@@ -45,6 +46,25 @@
return info -> info != null && info.user.equals(user);
}
+ public static Predicate<ItemInfo> ofCurrentOrDualUser(UserManager userManager, UserHandle user) {
+ return itemInfo -> itemInfo != null && (
+ isDualAppUser(userManager, itemInfo.user) || itemInfo.user.equals(user)
+ );
+ }
+
+ private static boolean isDualAppUser(UserManager userManager, UserHandle user) {
+ return user.getIdentifier() == getCloneUserId(userManager);
+ }
+
+ public static int getCloneUserId(UserManager userManager) {
+ for (UserHandle userHandle : userManager.getUserProfiles()) {
+ if (userManager.getUserInfo(userHandle.getIdentifier()).isCloneProfile()) {
+ return userHandle.getIdentifier();
+ }
+ }
+ return -1;
+ }
+
public static Predicate<ItemInfo> ofComponents(
HashSet<ComponentName> components, UserHandle user) {
return info -> info != null && info.user.equals(user)