Launch other info in storage in correct user id.

Bug: 31592290
Change-Id: I816668c7ff9d1b443d4b49e17bdcfa39ef335aee
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 8edf16e..1eb409b 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -467,7 +467,7 @@
         // TODO: launch better intents for specific volume
 
         final int userId = (pref instanceof StorageItemPreference ?
-                ((StorageItemPreference)pref).userHandle : -1);
+                ((StorageItemPreference) pref).userHandle : -1);
         int itemTitleId;
         try {
             itemTitleId = Integer.parseInt(pref.getKey());
@@ -512,7 +512,7 @@
             }
             case R.string.storage_detail_other: {
                 OtherInfoFragment.show(this, mStorageManager.getBestVolumeDescription(mVolume),
-                        mSharedVolume);
+                        mSharedVolume, userId);
                 return true;
 
             }
@@ -536,15 +536,9 @@
         }
 
         if (intent != null) {
-            try {
-                if (userId == -1) {
-                    startActivity(intent);
-                } else {
-                    getActivity().startActivityAsUser(intent, new UserHandle(userId));
-                }
-            } catch (ActivityNotFoundException e) {
-                Log.w(TAG, "No activity found for " + intent);
-            }
+            intent.putExtra(Intent.EXTRA_USER_ID, userId);
+
+            launchIntent(this, intent);
             return true;
         }
         return super.onPreferenceTreeClick(pref);
@@ -682,6 +676,20 @@
         return total;
     }
 
+    private static void launchIntent(Fragment fragment, Intent intent) {
+        try {
+            final int userId = intent.getIntExtra(Intent.EXTRA_USER_ID, -1);
+
+            if (userId == -1) {
+                fragment.startActivity(intent);
+            } else {
+                fragment.getActivity().startActivityAsUser(intent, new UserHandle(userId));
+            }
+        } catch (ActivityNotFoundException e) {
+            Log.w(TAG, "No activity found for " + intent);
+        }
+    }
+
     private final StorageEventListener mStorageListener = new StorageEventListener() {
         @Override
         public void onVolumeStateChanged(VolumeInfo vol, int oldState, int newState) {
@@ -768,14 +776,17 @@
     }
 
     public static class OtherInfoFragment extends DialogFragment {
-        public static void show(Fragment parent, String title, VolumeInfo sharedVol) {
+        public static void show(Fragment parent, String title, VolumeInfo sharedVol, int userId) {
             if (!parent.isAdded()) return;
 
             final OtherInfoFragment dialog = new OtherInfoFragment();
             dialog.setTargetFragment(parent, 0);
             final Bundle args = new Bundle();
             args.putString(Intent.EXTRA_TITLE, title);
-            args.putParcelable(Intent.EXTRA_INTENT, sharedVol.buildBrowseIntent());
+
+            final Intent intent = sharedVol.buildBrowseIntent();
+            intent.putExtra(Intent.EXTRA_USER_ID, userId);
+            args.putParcelable(Intent.EXTRA_INTENT, intent);
             dialog.setArguments(args);
             dialog.show(parent.getFragmentManager(), TAG_OTHER_INFO);
         }
@@ -795,7 +806,7 @@
                     new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialog, int which) {
-                            startActivity(intent);
+                            launchIntent(OtherInfoFragment.this, intent);
                         }
                     });
             builder.setNegativeButton(android.R.string.cancel, null);