Don't attach PendingIntent if settings app is hidden.

The settings app may not be available. In that case, just show the adb
notification without a PendingIntent.

Bug: 156453114

Test: atest AdbNotificationsTest
Test: With USB debugging enabled, install TestDPC, and use it to hide settings app.
Unplug and replug USB. USB debugging notification shows up and clicking
it does nothing.
Change-Id: Ie29d2c425c05bce9371600d76e4eb2eaba692fd7

Change-Id: Ie5f746cbc7b8a32fc280177bf281a9e973c8df12
This commit is contained in:
Joshua Duong
2020-05-15 09:56:26 -07:00
parent 0a1a911a5e
commit b381dfaf18
2 changed files with 24 additions and 9 deletions

View File

@@ -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)