src.android.debug.AdbNotifications Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of android-all Show documentation
Show all versions of android-all Show documentation
A library jar that provides APIs for Applications written for the Google Android Platform.
/*
* 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();
}
}