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)