diff options
Diffstat (limited to 'core/java/android/debug/AdbNotifications.java')
| -rw-r--r-- | core/java/android/debug/AdbNotifications.java | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/core/java/android/debug/AdbNotifications.java b/core/java/android/debug/AdbNotifications.java index fed5f5f9a0bf..9f1a5f80aa4d 100644 --- a/core/java/android/debug/AdbNotifications.java +++ b/core/java/android/debug/AdbNotifications.java @@ -17,11 +17,13 @@ package android.debug; import android.annotation.NonNull; +import android.annotation.Nullable; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.os.UserHandle; import android.provider.Settings; @@ -42,8 +44,9 @@ public final class AdbNotifications { * Builds a notification to show connected state for adb over a transport type. * @param context the context * @param transportType the adb transport type. - * @return a newly created Notification for the transport type. + * @return a newly created Notification for the transport type, or null on error. */ + @Nullable public static Notification createNotification(@NonNull Context context, byte transportType) { Resources resources = context.getResources(); @@ -66,10 +69,16 @@ public final class AdbNotifications { Intent intent = new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - intent.setPackage(context.getPackageManager().resolveActivity(intent, - PackageManager.MATCH_SYSTEM_ONLY).activityInfo.packageName); - PendingIntent pIntent = PendingIntent.getActivityAsUser(context, 0, intent, - PendingIntent.FLAG_IMMUTABLE, null, UserHandle.CURRENT); + ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, + PackageManager.MATCH_SYSTEM_ONLY); + // Settings app may not be available (e.g. device policy manager removes it) + PendingIntent pIntent = null; + if (resolveInfo != null) { + intent.setPackage(resolveInfo.activityInfo.packageName); + pIntent = PendingIntent.getActivityAsUser(context, 0, intent, + PendingIntent.FLAG_IMMUTABLE, null, UserHandle.CURRENT); + } + return new Notification.Builder(context, SystemNotificationChannels.DEVELOPER_IMPORTANT) .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) |
