Merge "Fix QSTileImpl NPE on startup." into pi-dev
diff --git a/api/current.txt b/api/current.txt
index e0c45e0..414491c 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -13612,6 +13612,7 @@
method public void close();
method public static android.graphics.ImageDecoder.Source createSource(android.content.res.Resources, int);
method public static android.graphics.ImageDecoder.Source createSource(android.content.ContentResolver, android.net.Uri);
+ method public static android.graphics.ImageDecoder.Source createSource(android.content.res.AssetManager, java.lang.String);
method public static android.graphics.ImageDecoder.Source createSource(java.nio.ByteBuffer);
method public static android.graphics.ImageDecoder.Source createSource(java.io.File);
method public static android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, android.graphics.ImageDecoder.OnHeaderDecodedListener) throws java.io.IOException;
diff --git a/api/system-current.txt b/api/system-current.txt
index a6b70fd..0e33c17 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -276,8 +276,8 @@
field public static final java.lang.String OPSTR_AUDIO_NOTIFICATION_VOLUME = "android:audio_notification_volume";
field public static final java.lang.String OPSTR_AUDIO_RING_VOLUME = "android:audio_ring_volume";
field public static final java.lang.String OPSTR_AUDIO_VOICE_VOLUME = "android:audio_voice_volume";
- field public static final java.lang.String OPSTR_BIND_ACCESSIBILITY_SERVICE = "bind_accessibility_service";
- field public static final java.lang.String OPSTR_CHANGE_WIFI_STATE = "change_wifi_state";
+ field public static final java.lang.String OPSTR_BIND_ACCESSIBILITY_SERVICE = "android:bind_accessibility_service";
+ field public static final java.lang.String OPSTR_CHANGE_WIFI_STATE = "android:change_wifi_state";
field public static final java.lang.String OPSTR_GET_ACCOUNTS = "android:get_accounts";
field public static final java.lang.String OPSTR_GPS = "android:gps";
field public static final java.lang.String OPSTR_INSTANT_APP_START_FOREGROUND = "android:instant_app_start_foreground";
@@ -289,7 +289,7 @@
field public static final java.lang.String OPSTR_READ_CLIPBOARD = "android:read_clipboard";
field public static final java.lang.String OPSTR_READ_ICC_SMS = "android:read_icc_sms";
field public static final java.lang.String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast";
- field public static final java.lang.String OPSTR_REQUEST_DELETE_PACKAGES = "request_delete_packages";
+ field public static final java.lang.String OPSTR_REQUEST_DELETE_PACKAGES = "android:request_delete_packages";
field public static final java.lang.String OPSTR_REQUEST_INSTALL_PACKAGES = "android:request_install_packages";
field public static final java.lang.String OPSTR_RUN_ANY_IN_BACKGROUND = "android:run_any_in_background";
field public static final java.lang.String OPSTR_RUN_IN_BACKGROUND = "android:run_in_background";
diff --git a/api/test-current.txt b/api/test-current.txt
index e4caf9e..e8d27a1 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -74,8 +74,8 @@
field public static final java.lang.String OPSTR_AUDIO_NOTIFICATION_VOLUME = "android:audio_notification_volume";
field public static final java.lang.String OPSTR_AUDIO_RING_VOLUME = "android:audio_ring_volume";
field public static final java.lang.String OPSTR_AUDIO_VOICE_VOLUME = "android:audio_voice_volume";
- field public static final java.lang.String OPSTR_BIND_ACCESSIBILITY_SERVICE = "bind_accessibility_service";
- field public static final java.lang.String OPSTR_CHANGE_WIFI_STATE = "change_wifi_state";
+ field public static final java.lang.String OPSTR_BIND_ACCESSIBILITY_SERVICE = "android:bind_accessibility_service";
+ field public static final java.lang.String OPSTR_CHANGE_WIFI_STATE = "android:change_wifi_state";
field public static final java.lang.String OPSTR_GET_ACCOUNTS = "android:get_accounts";
field public static final java.lang.String OPSTR_GPS = "android:gps";
field public static final java.lang.String OPSTR_INSTANT_APP_START_FOREGROUND = "android:instant_app_start_foreground";
@@ -87,7 +87,7 @@
field public static final java.lang.String OPSTR_READ_CLIPBOARD = "android:read_clipboard";
field public static final java.lang.String OPSTR_READ_ICC_SMS = "android:read_icc_sms";
field public static final java.lang.String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast";
- field public static final java.lang.String OPSTR_REQUEST_DELETE_PACKAGES = "request_delete_packages";
+ field public static final java.lang.String OPSTR_REQUEST_DELETE_PACKAGES = "android:request_delete_packages";
field public static final java.lang.String OPSTR_REQUEST_INSTALL_PACKAGES = "android:request_install_packages";
field public static final java.lang.String OPSTR_RUN_ANY_IN_BACKGROUND = "android:run_any_in_background";
field public static final java.lang.String OPSTR_RUN_IN_BACKGROUND = "android:run_in_background";
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 14edd31..4690211 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -499,13 +499,14 @@
public static final String OPSTR_RUN_ANY_IN_BACKGROUND = "android:run_any_in_background";
/** @hide */
@SystemApi @TestApi
- public static final String OPSTR_CHANGE_WIFI_STATE = "change_wifi_state";
+ public static final String OPSTR_CHANGE_WIFI_STATE = "android:change_wifi_state";
/** @hide */
@SystemApi @TestApi
- public static final String OPSTR_REQUEST_DELETE_PACKAGES = "request_delete_packages";
+ public static final String OPSTR_REQUEST_DELETE_PACKAGES = "android:request_delete_packages";
/** @hide */
@SystemApi @TestApi
- public static final String OPSTR_BIND_ACCESSIBILITY_SERVICE = "bind_accessibility_service";
+ public static final String OPSTR_BIND_ACCESSIBILITY_SERVICE =
+ "android:bind_accessibility_service";
// Warning: If an permission is added here it also has to be added to
// com.android.packageinstaller.permission.utils.EventLogger
diff --git a/core/java/com/android/internal/notification/SystemNotificationChannels.java b/core/java/com/android/internal/notification/SystemNotificationChannels.java
index 5950436..21b7d25 100644
--- a/core/java/com/android/internal/notification/SystemNotificationChannels.java
+++ b/core/java/com/android/internal/notification/SystemNotificationChannels.java
@@ -55,10 +55,13 @@
public static void createAll(Context context) {
final NotificationManager nm = context.getSystemService(NotificationManager.class);
List<NotificationChannel> channelsList = new ArrayList<NotificationChannel>();
- channelsList.add(new NotificationChannel(
+ final NotificationChannel keyboard = new NotificationChannel(
VIRTUAL_KEYBOARD,
context.getString(R.string.notification_channel_virtual_keyboard),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ keyboard.setBypassDnd(true);
+ keyboard.setBlockableSystem(true);
+ channelsList.add(keyboard);
final NotificationChannel physicalKeyboardChannel = new NotificationChannel(
PHYSICAL_KEYBOARD,
@@ -66,81 +69,105 @@
NotificationManager.IMPORTANCE_DEFAULT);
physicalKeyboardChannel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI,
Notification.AUDIO_ATTRIBUTES_DEFAULT);
+ physicalKeyboardChannel.setBlockableSystem(true);
channelsList.add(physicalKeyboardChannel);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel security = new NotificationChannel(
SECURITY,
context.getString(R.string.notification_channel_security),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ security.setBypassDnd(true);
+ channelsList.add(security);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel car = new NotificationChannel(
CAR_MODE,
context.getString(R.string.notification_channel_car_mode),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ car.setBlockableSystem(true);
+ car.setBypassDnd(true);
+ channelsList.add(car);
channelsList.add(newAccountChannel(context));
- channelsList.add(new NotificationChannel(
+ final NotificationChannel developer = new NotificationChannel(
DEVELOPER,
context.getString(R.string.notification_channel_developer),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ developer.setBypassDnd(true);
+ developer.setBlockableSystem(true);
+ channelsList.add(developer);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel updates = new NotificationChannel(
UPDATES,
context.getString(R.string.notification_channel_updates),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ updates.setBypassDnd(true);
+ channelsList.add(updates);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel network = new NotificationChannel(
NETWORK_STATUS,
context.getString(R.string.notification_channel_network_status),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ network.setBypassDnd(true);
+ channelsList.add(network);
final NotificationChannel networkAlertsChannel = new NotificationChannel(
NETWORK_ALERTS,
context.getString(R.string.notification_channel_network_alerts),
NotificationManager.IMPORTANCE_HIGH);
- networkAlertsChannel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI,
- Notification.AUDIO_ATTRIBUTES_DEFAULT);
+ networkAlertsChannel.setBypassDnd(true);
+ networkAlertsChannel.setBlockableSystem(true);
channelsList.add(networkAlertsChannel);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel networkAvailable = new NotificationChannel(
NETWORK_AVAILABLE,
context.getString(R.string.notification_channel_network_available),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ networkAvailable.setBlockableSystem(true);
+ networkAvailable.setBypassDnd(true);
+ channelsList.add(networkAvailable);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel vpn = new NotificationChannel(
VPN,
context.getString(R.string.notification_channel_vpn),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ vpn.setBypassDnd(true);
+ channelsList.add(vpn);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel deviceAdmin = new NotificationChannel(
DEVICE_ADMIN,
context.getString(R.string.notification_channel_device_admin),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ deviceAdmin.setBypassDnd(true);
+ channelsList.add(deviceAdmin);
final NotificationChannel alertsChannel = new NotificationChannel(
ALERTS,
context.getString(R.string.notification_channel_alerts),
NotificationManager.IMPORTANCE_DEFAULT);
- alertsChannel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI,
- Notification.AUDIO_ATTRIBUTES_DEFAULT);
+ alertsChannel.setBypassDnd(true);
channelsList.add(alertsChannel);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel retail = new NotificationChannel(
RETAIL_MODE,
context.getString(R.string.notification_channel_retail_mode),
- NotificationManager.IMPORTANCE_LOW));
+ NotificationManager.IMPORTANCE_LOW);
+ retail.setBypassDnd(true);
+ channelsList.add(retail);
- channelsList.add(new NotificationChannel(
+ final NotificationChannel usb = new NotificationChannel(
USB,
context.getString(R.string.notification_channel_usb),
- NotificationManager.IMPORTANCE_MIN));
+ NotificationManager.IMPORTANCE_MIN);
+ usb.setBypassDnd(true);
+ channelsList.add(usb);
NotificationChannel foregroundChannel = new NotificationChannel(
FOREGROUND_SERVICE,
context.getString(R.string.notification_channel_foreground_service),
NotificationManager.IMPORTANCE_LOW);
foregroundChannel.setBlockableSystem(true);
+ foregroundChannel.setBypassDnd(true);
channelsList.add(foregroundChannel);
NotificationChannel heavyWeightChannel = new NotificationChannel(
@@ -152,16 +179,19 @@
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT)
.build());
+ heavyWeightChannel.setBypassDnd(true);
channelsList.add(heavyWeightChannel);
NotificationChannel systemChanges = new NotificationChannel(SYSTEM_CHANGES,
context.getString(R.string.notification_channel_system_changes),
NotificationManager.IMPORTANCE_LOW);
+ systemChanges.setBypassDnd(true);
channelsList.add(systemChanges);
NotificationChannel dndChanges = new NotificationChannel(DO_NOT_DISTURB,
context.getString(R.string.notification_channel_do_not_disturb),
NotificationManager.IMPORTANCE_LOW);
+ dndChanges.setBypassDnd(true);
channelsList.add(dndChanges);
nm.createNotificationChannels(channelsList);
@@ -178,10 +208,12 @@
}
private static NotificationChannel newAccountChannel(Context context) {
- return new NotificationChannel(
+ final NotificationChannel acct = new NotificationChannel(
ACCOUNT,
context.getString(R.string.notification_channel_account),
NotificationManager.IMPORTANCE_LOW);
+ acct.setBypassDnd(true);
+ return acct;
}
private SystemNotificationChannels() {}
diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java
index 8196d66..5e81c37 100644
--- a/graphics/java/android/graphics/ImageDecoder.java
+++ b/graphics/java/android/graphics/ImageDecoder.java
@@ -26,6 +26,7 @@
import android.annotation.Nullable;
import android.content.ContentResolver;
import android.content.res.AssetFileDescriptor;
+import android.content.res.AssetManager;
import android.content.res.AssetManager.AssetInputStream;
import android.content.res.Resources;
import android.graphics.drawable.AnimatedImageDrawable;
@@ -294,25 +295,13 @@
@Override
public ImageDecoder createImageDecoder() throws IOException {
- ImageDecoder decoder = null;
synchronized (this) {
if (mAssetInputStream == null) {
throw new IOException("Cannot reuse AssetInputStreamSource");
}
AssetInputStream ais = mAssetInputStream;
mAssetInputStream = null;
- try {
- long asset = ais.getNativeAsset();
- decoder = nCreate(asset);
- } finally {
- if (decoder == null) {
- IoUtils.closeQuietly(ais);
- } else {
- decoder.mInputStream = ais;
- decoder.mOwnsInputStream = true;
- }
- }
- return decoder;
+ return createFromAsset(ais);
}
}
}
@@ -336,31 +325,53 @@
@Override
public ImageDecoder createImageDecoder() throws IOException {
- // This is just used in order to access the underlying Asset and
- // keep it alive. FIXME: Can we skip creating this object?
- InputStream is = null;
- ImageDecoder decoder = null;
TypedValue value = new TypedValue();
- try {
- is = mResources.openRawResource(mResId, value);
+ // This is just used in order to access the underlying Asset and
+ // keep it alive.
+ InputStream is = mResources.openRawResource(mResId, value);
- if (value.density == TypedValue.DENSITY_DEFAULT) {
- mResDensity = DisplayMetrics.DENSITY_DEFAULT;
- } else if (value.density != TypedValue.DENSITY_NONE) {
- mResDensity = value.density;
- }
-
- long asset = ((AssetInputStream) is).getNativeAsset();
- decoder = nCreate(asset);
- } finally {
- if (decoder == null) {
- IoUtils.closeQuietly(is);
- } else {
- decoder.mInputStream = is;
- decoder.mOwnsInputStream = true;
- }
+ if (value.density == TypedValue.DENSITY_DEFAULT) {
+ mResDensity = DisplayMetrics.DENSITY_DEFAULT;
+ } else if (value.density != TypedValue.DENSITY_NONE) {
+ mResDensity = value.density;
}
- return decoder;
+
+ return createFromAsset((AssetInputStream) is);
+ }
+ }
+
+ /**
+ * ImageDecoder will own the AssetInputStream.
+ */
+ private static ImageDecoder createFromAsset(AssetInputStream ais) throws IOException {
+ ImageDecoder decoder = null;
+ try {
+ long asset = ais.getNativeAsset();
+ decoder = nCreate(asset);
+ } finally {
+ if (decoder == null) {
+ IoUtils.closeQuietly(ais);
+ } else {
+ decoder.mInputStream = ais;
+ decoder.mOwnsInputStream = true;
+ }
+ }
+ return decoder;
+ }
+
+ private static class AssetSource extends Source {
+ AssetSource(@NonNull AssetManager assets, @NonNull String fileName) {
+ mAssets = assets;
+ mFileName = fileName;
+ }
+
+ private final AssetManager mAssets;
+ private final String mFileName;
+
+ @Override
+ public ImageDecoder createImageDecoder() throws IOException {
+ InputStream is = mAssets.open(mFileName);
+ return createFromAsset((AssetInputStream) is);
}
}
@@ -581,6 +592,14 @@
}
/**
+ * Create a new {@link Source} from a file in the "assets" directory.
+ */
+ @NonNull
+ public static Source createSource(@NonNull AssetManager assets, @NonNull String fileName) {
+ return new AssetSource(assets, fileName);
+ }
+
+ /**
* Create a new {@link Source} from a byte array.
*
* @param data byte array of compressed image data.
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 6098e4e..9d5fb52 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -68,6 +68,7 @@
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.TelephonyManager;
import android.util.Log;
+import android.util.Slog;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
@@ -78,7 +79,6 @@
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.widget.LockPatternUtils;
import com.android.systemui.recents.misc.SysUiTaskStackChangeListener;
-import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.google.android.collect.Lists;
@@ -985,6 +985,15 @@
}
/**
+ * Determine whether the device is plugged in (USB, power).
+ * @return true if the device is plugged in wired (as opposed to wireless)
+ */
+ public boolean isPluggedInWired() {
+ return plugged == BatteryManager.BATTERY_PLUGGED_AC
+ || plugged == BatteryManager.BATTERY_PLUGGED_USB;
+ }
+
+ /**
* Whether or not the device is charged. Note that some devices never return 100% for
* battery level, so this allows either battery level or status to determine if the
* battery is charged.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
index 859dc39..795140e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
@@ -92,6 +92,7 @@
private boolean mVisible;
private boolean mPowerPluggedIn;
+ private boolean mPowerPluggedInWired;
private boolean mPowerCharged;
private int mChargingSpeed;
private int mChargingWattage;
@@ -476,6 +477,7 @@
pw.println("KeyguardIndicationController:");
pw.println(" mTransientTextColor: " + Integer.toHexString(mTransientTextColor));
pw.println(" mInitialTextColor: " + Integer.toHexString(mInitialTextColor));
+ pw.println(" mPowerPluggedInWired: " + mPowerPluggedInWired);
pw.println(" mPowerPluggedIn: " + mPowerPluggedIn);
pw.println(" mPowerCharged: " + mPowerCharged);
pw.println(" mChargingSpeed: " + mChargingSpeed);
@@ -496,12 +498,13 @@
boolean isChargingOrFull = status.status == BatteryManager.BATTERY_STATUS_CHARGING
|| status.status == BatteryManager.BATTERY_STATUS_FULL;
boolean wasPluggedIn = mPowerPluggedIn;
+ mPowerPluggedInWired = status.isPluggedInWired() && isChargingOrFull;
mPowerPluggedIn = status.isPluggedIn() && isChargingOrFull;
mPowerCharged = status.isCharged();
mChargingWattage = status.maxChargingWattage;
mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold);
mBatteryLevel = status.level;
- updateIndication(!wasPluggedIn && mPowerPluggedIn);
+ updateIndication(!wasPluggedIn && mPowerPluggedInWired);
if (mDozing) {
if (!wasPluggedIn && mPowerPluggedIn) {
showTransientIndication(computePowerIndication());
diff --git a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
index 14d5c6f5..fc932c3 100644
--- a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
+++ b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
@@ -41,7 +41,7 @@
@VisibleForTesting
static void createAll(Context context) {
final NotificationManager nm = context.getSystemService(NotificationManager.class);
- NotificationChannel batteryChannel = new NotificationChannel(BATTERY,
+ final NotificationChannel batteryChannel = new NotificationChannel(BATTERY,
context.getString(R.string.notification_channel_battery),
NotificationManager.IMPORTANCE_MAX);
final String soundPath = Settings.Global.getString(context.getContentResolver(),
@@ -50,22 +50,33 @@
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT)
.build());
+ batteryChannel.setBlockableSystem(true);
+ batteryChannel.setBypassDnd(true);
+
+ final NotificationChannel alerts = new NotificationChannel(
+ ALERTS,
+ context.getString(R.string.notification_channel_alerts),
+ NotificationManager.IMPORTANCE_HIGH);
+ alerts.setBypassDnd(true);
+
+ final NotificationChannel general = new NotificationChannel(
+ GENERAL,
+ context.getString(R.string.notification_channel_general),
+ NotificationManager.IMPORTANCE_MIN);
+ general.setBypassDnd(true);
+
+ final NotificationChannel storage = new NotificationChannel(
+ STORAGE,
+ context.getString(R.string.notification_channel_storage),
+ isTv(context)
+ ? NotificationManager.IMPORTANCE_DEFAULT
+ : NotificationManager.IMPORTANCE_LOW);
+ storage.setBypassDnd(true);
nm.createNotificationChannels(Arrays.asList(
- new NotificationChannel(
- ALERTS,
- context.getString(R.string.notification_channel_alerts),
- NotificationManager.IMPORTANCE_HIGH),
- new NotificationChannel(
- GENERAL,
- context.getString(R.string.notification_channel_general),
- NotificationManager.IMPORTANCE_MIN),
- new NotificationChannel(
- STORAGE,
- context.getString(R.string.notification_channel_storage),
- isTv(context)
- ? NotificationManager.IMPORTANCE_DEFAULT
- : NotificationManager.IMPORTANCE_LOW),
+ alerts,
+ general,
+ storage,
createScreenshotChannel(
context.getString(R.string.notification_channel_screenshot),
nm.getNotificationChannel(SCREENSHOTS_LEGACY)),
@@ -101,6 +112,8 @@
screenshotChannel.setSound(Uri.parse(""), // silent
new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build());
+ screenshotChannel.setBypassDnd(true);
+ screenshotChannel.setBlockableSystem(true);
if (legacySS != null) {
// Respect any user modified fields from the old channel.
diff --git a/services/core/java/com/android/server/wm/AlertWindowNotification.java b/services/core/java/com/android/server/wm/AlertWindowNotification.java
index b00e595..9b787de 100644
--- a/services/core/java/com/android/server/wm/AlertWindowNotification.java
+++ b/services/core/java/com/android/server/wm/AlertWindowNotification.java
@@ -159,6 +159,7 @@
channel.enableVibration(false);
channel.setBlockableSystem(true);
channel.setGroup(sChannelGroup.getId());
+ channel.setBypassDnd(true);
mNotificationManager.createNotificationChannel(channel);
}