diff options
| author | Daniel Sandler <dsandler@android.com> | 2016-04-14 13:53:18 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-04-14 13:53:19 +0000 |
| commit | 3af45bd2d06303bfaf8ba28324ca976e6f96ece3 (patch) | |
| tree | c77de979d92080491bf59dc2fddd824c0ddb8b1e /core/java/android | |
| parent | cd8f2737cc550ef1461c74a5c748777fa0c97379 (diff) | |
| parent | 732bd6cb2736c9ae091f2b5b136570fc5d579224 (diff) | |
Merge "Allow system apps to substitute a different app name in notifications." into nyc-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/Notification.java | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 052874f77ce6..bf72d7be263a 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -25,6 +25,8 @@ import android.annotation.SystemApi; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.ColorStateList; import android.graphics.Bitmap; @@ -960,6 +962,12 @@ public class Notification implements Parcelable */ public static final String EXTRA_CONTAINS_CUSTOM_VIEW = "android.contains.customView"; + /** + * @SystemApi + * @hide + */ + public static final String EXTRA_SUBSTITUTE_APP_NAME = "android.substName"; + private Icon mSmallIcon; private Icon mLargeIcon; @@ -3269,14 +3277,38 @@ public class Notification implements Parcelable } } - private void bindHeaderAppName(RemoteViews contentView) { - CharSequence appName = mContext.getPackageManager() - .getApplicationLabel(mContext.getApplicationInfo()); - - if (TextUtils.isEmpty(appName)) { - return; + private String loadHeaderAppName() { + CharSequence name = null; + final PackageManager pm = mContext.getPackageManager(); + if (mN.extras.containsKey(EXTRA_SUBSTITUTE_APP_NAME)) { + // only system packages which lump together a bunch of unrelated stuff + // may substitute a different name to make the purpose of the + // notification more clear. the correct package label should always + // be accessible via SystemUI. + final String pkg = mContext.getPackageName(); + final String subName = mN.extras.getString(EXTRA_SUBSTITUTE_APP_NAME); + if (PackageManager.PERMISSION_GRANTED == pm.checkPermission( + android.Manifest.permission.SUBSTITUTE_NOTIFICATION_APP_NAME, pkg)) { + name = subName; + } else { + Log.w(TAG, "warning: pkg " + + pkg + " attempting to substitute app name '" + subName + + "' without holding perm " + + android.Manifest.permission.SUBSTITUTE_NOTIFICATION_APP_NAME); + } + } + if (TextUtils.isEmpty(name)) { + name = pm.getApplicationLabel(mContext.getApplicationInfo()); + } + if (TextUtils.isEmpty(name)) { + // still nothing? + return null; } - contentView.setTextViewText(R.id.app_name_text, appName); + + return String.valueOf(name); + } + private void bindHeaderAppName(RemoteViews contentView) { + contentView.setTextViewText(R.id.app_name_text, loadHeaderAppName()); contentView.setTextColor(R.id.app_name_text, resolveContrastColor()); } |
