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

Commit fd80cff8 authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Update system notification channels

Allow some channels to be blocked, and most to
bypass DND.

Test: make
Change-Id: I135ef6f32a15bb2fc9c859ab087b2dc7477d67e1
Fixes: 75429403
parent 037d8088
Loading
Loading
Loading
Loading
+59 −27
Original line number Diff line number Diff line
@@ -55,10 +55,13 @@ public class SystemNotificationChannels {
    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 @@ public class SystemNotificationChannels {
                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 @@ public class SystemNotificationChannels {
                .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 @@ public class SystemNotificationChannels {
    }

    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() {}
+28 −15
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ public class NotificationChannels extends SystemUI {
    @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 @@ public class NotificationChannels extends SystemUI {
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT)
                .build());
        batteryChannel.setBlockableSystem(true);
        batteryChannel.setBypassDnd(true);

        nm.createNotificationChannels(Arrays.asList(
                new NotificationChannel(
        final NotificationChannel alerts = new NotificationChannel(
                ALERTS,
                context.getString(R.string.notification_channel_alerts),
                        NotificationManager.IMPORTANCE_HIGH),
                new NotificationChannel(
                NotificationManager.IMPORTANCE_HIGH);
        alerts.setBypassDnd(true);

        final NotificationChannel general = new NotificationChannel(
                GENERAL,
                context.getString(R.string.notification_channel_general),
                        NotificationManager.IMPORTANCE_MIN),
                new NotificationChannel(
                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),
                        : NotificationManager.IMPORTANCE_LOW);
        storage.setBypassDnd(true);

        nm.createNotificationChannels(Arrays.asList(
                alerts,
                general,
                storage,
                createScreenshotChannel(
                        context.getString(R.string.notification_channel_screenshot),
                        nm.getNotificationChannel(SCREENSHOTS_LEGACY)),
@@ -101,6 +112,8 @@ public class NotificationChannels extends SystemUI {

        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.
+1 −0
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ class AlertWindowNotification {
        channel.enableVibration(false);
        channel.setBlockableSystem(true);
        channel.setGroup(sChannelGroup.getId());
        channel.setBypassDnd(true);
        mNotificationManager.createNotificationChannel(channel);
    }