Allow passing a user handle to AppPermissionsFragment.

Instead of always defaulting to the current user, allow passing a specific UserHandle to AppPermissionsFragment to control which user to show.

Fixes: 126726013
Test: Click on normal and work profile app icon in SysUI and see
correctly-labeled page.
Test: Open AppPermissionsFragment from app info for normal and work
apps and see the right one.

Change-Id: I499a49d87c65d18cf4754841c055f57bbdfb3295
diff --git a/PermissionController/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java b/PermissionController/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
index 8ff73b3..2b87507 100644
--- a/PermissionController/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
+++ b/PermissionController/src/com/android/packageinstaller/permission/ui/ManagePermissionsActivity.java
@@ -118,8 +118,12 @@
                         androidXFragment = com.android.packageinstaller.permission.ui.handheld
                                 .AllAppPermissionsFragment.newInstance(packageName);
                     } else {
+                        UserHandle userHandle = getIntent().getParcelableExtra(Intent.EXTRA_USER);
+                        if (userHandle == null) {
+                            userHandle = UserHandle.of(UserHandle.myUserId());
+                        }
                         androidXFragment = com.android.packageinstaller.permission.ui.handheld
-                                .AppPermissionsFragment.newInstance(packageName);
+                                .AppPermissionsFragment.newInstance(packageName, userHandle);
                     }
                 }
             } break;
diff --git a/PermissionController/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java b/PermissionController/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
index 6e4542c..e9d98ae 100644
--- a/PermissionController/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
+++ b/PermissionController/src/com/android/packageinstaller/permission/ui/handheld/AppPermissionsFragment.java
@@ -33,6 +33,7 @@
 import android.view.View;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
@@ -64,13 +65,19 @@
 
     private Collator mCollator;
 
-    public static AppPermissionsFragment newInstance(String packageName) {
-        return setPackageName(new AppPermissionsFragment(), packageName);
+    /**
+     * @return A new fragment
+     */
+    public static AppPermissionsFragment newInstance(@NonNull String packageName,
+            @NonNull UserHandle userHandle) {
+        return setPackageNameAndUserHandle(new AppPermissionsFragment(), packageName, userHandle);
     }
 
-    private static <T extends Fragment> T setPackageName(T fragment, String packageName) {
+    private static <T extends Fragment> T setPackageNameAndUserHandle(@NonNull T fragment,
+            @NonNull String packageName, @NonNull UserHandle userHandle) {
         Bundle arguments = new Bundle();
         arguments.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
+        arguments.putParcelable(Intent.EXTRA_USER, userHandle);
         fragment.setArguments(arguments);
         return fragment;
     }
@@ -86,8 +93,9 @@
         }
 
         String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
+        UserHandle userHandle = getArguments().getParcelable(Intent.EXTRA_USER);
         Activity activity = getActivity();
-        PackageInfo packageInfo = getPackageInfo(activity, packageName);
+        PackageInfo packageInfo = getPackageInfo(activity, packageName, userHandle);
         if (packageInfo == null) {
             Toast.makeText(activity, R.string.app_not_found_dlg_title, Toast.LENGTH_LONG).show();
             activity.finish();
@@ -252,7 +260,9 @@
         if (mExtraScreen != null) {
             extraPerms.setOnPreferenceClickListener(preference -> {
                 AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
-                setPackageName(frag, getArguments().getString(Intent.EXTRA_PACKAGE_NAME));
+                setPackageNameAndUserHandle(frag,
+                        getArguments().getString(Intent.EXTRA_PACKAGE_NAME),
+                        getArguments().getParcelable(Intent.EXTRA_USER));
                 frag.setTargetFragment(AppPermissionsFragment.this, 0);
                 getFragmentManager().beginTransaction()
                         .replace(android.R.id.content, frag)
@@ -298,10 +308,12 @@
         setLoading(false /* loading */, true /* animate */);
     }
 
-    private static PackageInfo getPackageInfo(Activity activity, String packageName) {
+    private static PackageInfo getPackageInfo(Activity activity, @NonNull String packageName,
+            @NonNull UserHandle userHandle) {
         try {
-            return activity.getPackageManager().getPackageInfo(
-                    packageName, PackageManager.GET_PERMISSIONS);
+            return activity.createPackageContextAsUser(packageName, 0,
+                    userHandle).getPackageManager().getPackageInfo(packageName,
+                    PackageManager.GET_PERMISSIONS);
         } catch (PackageManager.NameNotFoundException e) {
             Log.i(LOG_TAG, "No package:" + activity.getCallingPackage(), e);
             return null;
@@ -327,7 +339,8 @@
         public void onViewCreated(View view, Bundle savedInstanceState) {
             super.onViewCreated(view, savedInstanceState);
             String packageName = getArguments().getString(Intent.EXTRA_PACKAGE_NAME);
-            bindUi(this, getPackageInfo(getActivity(), packageName));
+            UserHandle userHandle = getArguments().getParcelable(Intent.EXTRA_USER);
+            bindUi(this, getPackageInfo(getActivity(), packageName, userHandle));
         }
 
         @Override