Show app installer info even if it doesn't handle ACTION.APP_SHOW_INFO.

- Also fix an issue where we are showing the app name instead of it's
  installer name.

Bug: 28301883
Change-Id: I392f7d01f5ec4d1ba5b5030e33ebe8260ff5aa31
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index e439bed..d972e07 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1124,5 +1124,18 @@
         }
         return false;
     }
+
+    public static CharSequence getApplicationLabel(Context context, String packageName) {
+        try {
+            final ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(
+                    packageName,
+                    PackageManager.MATCH_DISABLED_COMPONENTS
+                    | PackageManager.MATCH_UNINSTALLED_PACKAGES);
+            return appInfo.loadLabel(context.getPackageManager());
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.w(TAG, "Unable to find info for package: " + packageName);
+        }
+        return null;
+    }
 }
 
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 14277c9..b6be227 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -913,25 +913,37 @@
             }
         }
 
+        addAppInstallerInfoPref(screen);
+    }
+
+    private void addAppInstallerInfoPref(PreferenceScreen screen) {
         final String installerPackageName =
                 getContext().getPackageManager().getInstallerPackageName(mPackageName);
-        if (installerPackageName != null) {
-            final Intent intent = new Intent(Intent.ACTION_SHOW_APP_INFO)
-                    .setPackage(installerPackageName);
-            final Intent result = resolveIntent(intent);
-            if (result != null) {
-                result.putExtra(Intent.EXTRA_PACKAGE_NAME, mPackageName);
-                PreferenceCategory category = new PreferenceCategory(getPrefContext());
-                category.setTitle(R.string.app_install_details_group_title);
-                screen.addPreference(category);
-                Preference pref = new Preference(getPrefContext());
-                pref.setTitle(R.string.app_install_details_title);
-                pref.setKey("app_info_store");
-                pref.setSummary(getString(R.string.app_install_details_summary, mAppEntry.label));
-                pref.setIntent(result);
-                category.addPreference(pref);
-            }
+        if (installerPackageName == null) {
+            return;
         }
+        final CharSequence installerLabel = Utils.getApplicationLabel(getContext(),
+                installerPackageName);
+        if (installerLabel == null) {
+            return;
+        }
+        PreferenceCategory category = new PreferenceCategory(getPrefContext());
+        category.setTitle(R.string.app_install_details_group_title);
+        screen.addPreference(category);
+        Preference pref = new Preference(getPrefContext());
+        pref.setTitle(R.string.app_install_details_title);
+        pref.setKey("app_info_store");
+        pref.setSummary(getString(R.string.app_install_details_summary, installerLabel));
+        final Intent intent = new Intent(Intent.ACTION_SHOW_APP_INFO)
+                .setPackage(installerPackageName);
+        final Intent result = resolveIntent(intent);
+        if (result != null) {
+            result.putExtra(Intent.EXTRA_PACKAGE_NAME, mPackageName);
+            pref.setIntent(result);
+        } else {
+            pref.setEnabled(false);
+        }
+        category.addPreference(pref);
     }
 
     private boolean hasPermission(String permission) {