Merge "Don't attach PendingIntent if settings app is hidden." into rvc-dev

This commit is contained in:
Joshua Duong
2020-05-15 21:14:39 +00:00
committed by Android (Google) Code Review
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)

View File

@@ -56,8 +56,11 @@ public final class AdbNotificationsTest {
// Verify that the adb notification for usb connections has the correct text.
assertEquals(title, notification.extras.getCharSequence(Notification.EXTRA_TITLE, ""));
assertEquals(message, notification.extras.getCharSequence(Notification.EXTRA_TEXT, ""));
// Verify the PendingIntent has an explicit intent (b/153356209).
assertFalse(TextUtils.isEmpty(notification.contentIntent.getIntent().getPackage()));
// Verify the PendingIntent has an explicit intent (b/153356209), if there is a
// PendingIntent attached.
if (notification.contentIntent != null) {
assertFalse(TextUtils.isEmpty(notification.contentIntent.getIntent().getPackage()));
}
}
@Test
@@ -73,7 +76,10 @@ public final class AdbNotificationsTest {
// Verify that the adb notification for usb connections has the correct text.
assertEquals(title, notification.extras.getCharSequence(Notification.EXTRA_TITLE, ""));
assertEquals(message, notification.extras.getCharSequence(Notification.EXTRA_TEXT, ""));
// Verify the PendingIntent has an explicit intent (b/153356209).
assertFalse(TextUtils.isEmpty(notification.contentIntent.getIntent().getPackage()));
// Verify the PendingIntent has an explicit intent (b/153356209), if there is a
// PendingIntent attached.
if (notification.contentIntent != null) {
assertFalse(TextUtils.isEmpty(notification.contentIntent.getIntent().getPackage()));
}
}
}