File: AdbNotifications.java

package info (click to toggle)
android-platform-frameworks-base 1%3A14~beta1-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 326,092 kB
  • sloc: java: 2,032,373; xml: 343,016; cpp: 304,181; python: 3,683; ansic: 2,090; sh: 1,871; makefile: 117; sed: 19
file content (99 lines) | stat: -rw-r--r-- 4,108 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

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;

import com.android.internal.notification.SystemNotificationChannels;

/**
 * Utility class for building adb notifications.
 * @hide
 */
public final class AdbNotifications {
    /**
     * Notification channel for tv types.
     */
    private static final String ADB_NOTIFICATION_CHANNEL_ID_TV = "usbdevicemanager.adb.tv";

    /**
     * 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, or null on error.
     */
    @Nullable
    public static Notification createNotification(@NonNull Context context,
            byte transportType) {
        Resources resources = context.getResources();
        int titleId;
        int messageId;

        if (transportType == AdbTransportType.USB) {
            titleId = com.android.internal.R.string.adb_active_notification_title;
            messageId = com.android.internal.R.string.adb_active_notification_message;
        } else if (transportType == AdbTransportType.WIFI) {
            titleId = com.android.internal.R.string.adbwifi_active_notification_title;
            messageId = com.android.internal.R.string.adbwifi_active_notification_message;
        } else {
            throw new IllegalArgumentException(
                    "createNotification called with unknown transport type=" + transportType);
        }

        CharSequence title = resources.getText(titleId);
        CharSequence message = resources.getText(messageId);

        Intent intent = new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        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)
                .setWhen(0)
                .setOngoing(true)
                .setTicker(title)
                .setDefaults(0)  // please be quiet
                .setColor(context.getColor(
                            com.android.internal.R.color.system_notification_accent_color))
                .setContentTitle(title)
                .setContentText(message)
                .setContentIntent(pIntent)
                .setVisibility(Notification.VISIBILITY_PUBLIC)
                .extend(new Notification.TvExtender()
                        .setChannelId(ADB_NOTIFICATION_CHANNEL_ID_TV))
                .build();
    }
}