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
This commit is contained in:
Sudheer Shanka
2016-04-21 12:51:43 -07:00
parent 40c228d989
commit c3eb16ed18
2 changed files with 41 additions and 16 deletions

View File

@@ -1124,5 +1124,18 @@ public final class Utils extends com.android.settingslib.Utils {
}
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;
}
}

View File

@@ -913,25 +913,37 @@ public class InstalledAppDetails extends AppInfoBase
}
}
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) {