From a8e18ef9110329bc3d3634d02845686de167afd0 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Thu, 26 May 2016 17:17:02 -0700 Subject: [PATCH] Fix spurious crashes in StatusBarIconView Fixes a crash that happens when we cannot look up a package's resources for reasons. Change-Id: I4884536a3eefa8fe82bd274925241f4c798e08e3 Fixes: 28982204 --- .../systemui/statusbar/StatusBarIconView.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index bc33b305432eb..cdfdad4640650 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -18,6 +18,7 @@ package com.android.systemui.statusbar; import android.app.Notification; import android.content.Context; +import android.content.pm.ApplicationInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Canvas; @@ -25,6 +26,7 @@ import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; +import android.os.Parcelable; import android.os.UserHandle; import android.text.TextUtils; import android.util.AttributeSet; @@ -325,8 +327,20 @@ public class StatusBarIconView extends AnimatedImageView { public static String contentDescForNotification(Context c, Notification n) { - Notification.Builder builder = Notification.Builder.recoverBuilder(c, n); - String appName = builder.loadHeaderAppName(); + String appName = ""; + try { + Notification.Builder builder = Notification.Builder.recoverBuilder(c, n); + appName = builder.loadHeaderAppName(); + } catch (RuntimeException e) { + Log.e(TAG, "Unable to recover builder", e); + // Trying to get the app name from the app info instead. + Parcelable appInfo = n.extras.getParcelable( + Notification.EXTRA_BUILDER_APPLICATION_INFO); + if (appInfo instanceof ApplicationInfo) { + appName = String.valueOf(((ApplicationInfo) appInfo).loadLabel( + c.getPackageManager())); + } + } CharSequence title = n.extras.getCharSequence(Notification.EXTRA_TITLE); CharSequence ticker = n.tickerText;