Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b381dfaf authored by Joshua Duong's avatar Joshua Duong
Browse files

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
parent 0a1a911a
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -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,
        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)
+10 −4
Original line number Diff line number Diff line
@@ -56,9 +56,12 @@ 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).
        // 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
    public void testCreateNotification_WifiTransportType() throws Exception {
@@ -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).
        // 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()));
        }
    }
}