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

Commit 1f178a9e authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Notification settings updates

- Add 'show badge' for apps
- disable deleted channel rows
- Add an importance reset for pre-O apps

Test: manual
Change-Id: Ic32415497fe48a17f6cdb9aace37e35f9388195a
parent 37d64387
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6229,6 +6229,9 @@
    <!-- [CHAR LIMIT=100] Notification Importance slider: unset importance level description -->
    <string name="notification_importance_none">Not set</string>
    <!-- [CHAR LIMIT=100] Notification Importance slider: unspecified importance level description -->
    <string name="notification_importance_unspecified">Let the app decide</string>
    <!-- [CHAR LIMIT=100] Notification Importance slider: blocked importance level description -->
    <string name="notification_importance_blocked">Never show notifications</string>
@@ -7634,6 +7637,8 @@
    <string name="notification_log_details_importance">importance</string>
    <!-- Notification log debug tool: header: notification importance explanation -->
    <string name="notification_log_details_explanation">explanation</string>
    <!-- Notification log debug tool: header: notification importance -->
    <string name="notification_log_details_badge">can show badge</string>
    <!-- Notification log debug tool: header: notification contentIntent field -->
    <string name="notification_log_details_content_intent">intent</string>
    <!-- Notification log debug tool: header: notification deleteIntent field -->
+9 −0
Original line number Diff line number Diff line
@@ -23,6 +23,15 @@
        android:key="block"
        android:title="@string/app_notification_block_title"
        android:summary="@string/app_notification_block_summary"
        android:order="1"
        settings:useAdditionalSummary="true"
        settings:restrictedSwitchSummary="@string/enabled_by_admin" />

    <!-- Show badge -->
    <com.android.settingslib.RestrictedSwitchPreference
        android:key="badge"
        android:title="@string/notification_badge_title"
        android:summary="@string/notification_badge_summary"
        android:order="2"
        settings:useAdditionalSummary="true"
        settings:restrictedSwitchSummary="@string/enabled_by_admin" />
+29 −28
Original line number Diff line number Diff line
@@ -27,54 +27,55 @@
        settings:useAdditionalSummary="true"
        settings:restrictedSwitchSummary="@string/enabled_by_admin" />

    <!-- Importance -->
    <com.android.settings.notification.RestrictedDropDownPreference
        android:key="importance"
        android:title="@string/notification_importance_title"
        android:order="2"/>

    <!-- Default ringtone -->
    <com.android.settings.notification.DefaultNotificationTonePreference
        android:key="ringtone"
        android:title="@string/notification_ringtone_title"
        android:dialogTitle="@string/notification_ringtone_title"
        android:order="3"
        android:ringtoneType="notification" />

    <!-- Vibration -->
    <com.android.settingslib.RestrictedSwitchPreference
        android:key="vibrate"
        android:title="@string/notification_vibrate_title"
        android:order="4"
        settings:useAdditionalSummary="true" />

    <!-- Show badge -->
    <com.android.settingslib.RestrictedSwitchPreference
        android:key="badge"
        android:title="@string/notification_badge_title"
        android:summary="@string/notification_badge_summary"
        android:order="3"
        android:order="5"
        settings:useAdditionalSummary="true"
        settings:restrictedSwitchSummary="@string/enabled_by_admin" />

    <!-- Importance -->
    <com.android.settings.notification.RestrictedDropDownPreference
            android:key="importance"
            android:title="@string/notification_importance_title"
            android:order="4"/>
    <!-- Lights -->
    <com.android.settingslib.RestrictedSwitchPreference
        android:key="lights"
        android:title="@string/notification_show_lights_title"
        android:order="6"
        settings:useAdditionalSummary="true" />

    <!-- Visibility Override -->
    <com.android.settings.notification.RestrictedDropDownPreference
            android:key="visibility_override"
            android:title="@string/app_notification_visibility_override_title"
            android:order="5" />
            android:order="7" />

    <!-- Bypass DND -->
    <com.android.settingslib.RestrictedSwitchPreference
            android:key="bypass_dnd"
            android:title="@string/app_notification_override_dnd_title"
            android:summary="@string/app_notification_override_dnd_summary"
            android:order="6"
            settings:useAdditionalSummary="true" />

    <!-- Lights -->
    <com.android.settingslib.RestrictedSwitchPreference
            android:key="lights"
            android:title="@string/notification_show_lights_title"
            android:order="7"
            settings:useAdditionalSummary="true" />

    <!-- Vibration -->
    <com.android.settingslib.RestrictedSwitchPreference
            android:key="vibrate"
            android:title="@string/notification_vibrate_title"
            android:order="8"
            settings:useAdditionalSummary="true" />

    <!-- Default ringtone -->
    <com.android.settings.notification.DefaultNotificationTonePreference
            android:key="ringtone"
            android:title="@string/notification_ringtone_title"
            android:dialogTitle="@string/notification_ringtone_title"
            android:order="9"
            android:ringtoneType="notification" />
</PreferenceScreen>
+25 −7
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.notification;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
@@ -35,11 +36,13 @@ import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.applications.AppHeaderController;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.notification.NotificationBackend.AppRow;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.drawer.CategoryKey;

import java.text.Collator;
import java.util.Collections;
@@ -88,10 +91,12 @@ public class AppNotificationSettings extends NotificationSettingsBase {
        addPreferencesFromResource(R.xml.app_notification_settings);

        mBlock = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BLOCK);
        mBadge = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BADGE);
        mChannels = (PreferenceCategory) findPreference(KEY_CHANNELS);

        if (mPkgInfo != null) {
            setupBlock(mAppRow.systemApp, mAppRow.banned);
            setupBlock();
            setupBadge();
            // load settings intent
            ArrayMap<String, AppRow> rows = new ArrayMap<String, AppRow>();
            rows.put(mAppRow.pkg, mAppRow);
@@ -113,6 +118,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {
                    if (channel.isDeleted()) {
                        channelPref.setTitle(
                                getString(R.string.deleted_channel_name, channel.getName()));
                        channelPref.setEnabled(false);
                    } else {
                        Bundle channelArgs = new Bundle();
                        channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
@@ -153,16 +159,27 @@ public class AppNotificationSettings extends NotificationSettingsBase {
            finish();
            return;
        }
        if (mBlock != null) {
            mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
    }

    private void setupBadge() {
        mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
        mBadge.setChecked(mAppRow.showBadge);
        mBadge.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                final boolean value = (Boolean) newValue;
                mBackend.setShowBadge(mPkg, mUid, value);
                return true;
            }
        });
    }

    private void setupBlock(boolean notBlockable, boolean banned) {
        if (notBlockable) {
    private void setupBlock() {
        if (mAppRow.systemApp) {
            setVisible(mBlock, false);
        } else {
            mBlock.setChecked(banned);
            mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
            mBlock.setChecked(mAppRow.banned);
            mBlock.setOnPreferenceChangeListener(
                    new Preference.OnPreferenceChangeListener() {
                        @Override
@@ -180,6 +197,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {

    private void updateDependents(boolean banned) {
        setVisible(mChannels, !(mChannelList.isEmpty() || banned));
        setVisible(mBadge, !banned);
    }

    private List<ResolveInfo> queryNotificationConfigActivities() {
+20 −11
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.net.Uri;
@@ -47,15 +48,17 @@ import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedSwitchPreference;

import java.util.ArrayList;
import java.util.List;

public class ChannelNotificationSettings extends NotificationSettingsBase {
    private static final String TAG = "ChannelSettings";

    protected static final String KEY_BYPASS_DND = "bypass_dnd";
    protected static final String KEY_VISIBILITY_OVERRIDE = "visibility_override";
    protected static final String KEY_IMPORTANCE = "importance";
    protected static final String KEY_LIGHTS = "lights";
    protected static final String KEY_VIBRATE = "vibrate";
    protected static final String KEY_RINGTONE = "ringtone";
    protected static final String KEY_BADGE = "badge";

    protected RestrictedSwitchPreference mLights;
    protected RestrictedSwitchPreference mVibrate;
@@ -114,8 +117,8 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
                    .getApplicationFeatureProvider(activity)
                    .newAppHeaderController(this /* fragment */, null /* appHeader */)
                    .setIcon(mAppRow.icon)
                    .setLabel(mAppRow.label)
                    .setSummary(mChannel.getName())
                    .setLabel(mChannel.getName())
                    .setSummary(mAppRow.label)
                    .setPackageName(mAppRow.pkg)
                    .setUid(mAppRow.uid)
                    .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
@@ -138,8 +141,6 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
        mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
        mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
        mVisibilityOverride.setDisabledByAdmin(mSuspendedAppsAdmin);
        mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
        mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
    }

    private void setupLights() {
@@ -204,6 +205,7 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
            }
        });
        mBadge.setDisabledByAdmin(mSuspendedAppsAdmin);
        mBadge.setEnabled(mAppRow.showBadge);
        mBadge.setChecked(mChannel.canShowBadge());
        mBadge.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
@@ -218,15 +220,20 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {

        mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
        final int numImportances = IMPORTANCE_HIGH - IMPORTANCE_MIN + 1;
        String[] summaries = new String[numImportances];
        String[] values = new String[numImportances];
        List<String> summaries = new ArrayList<>();
        List<String> values = new ArrayList<>();;
        for (int i = 0; i < numImportances; i++) {
            int importance = i + 1;
            summaries[i] = getSummary(importance);
            values[i] = String.valueOf(importance);
            summaries.add(getSummary(importance));
            values.add(String.valueOf(importance));
        }
        if (NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) {
            // Add option to reset to letting the app decide
            summaries.add(getSummary(NotificationManager.IMPORTANCE_UNSPECIFIED));
            values.add(String.valueOf(NotificationManager.IMPORTANCE_UNSPECIFIED));
        }
        mImportance.setEntryValues(values);
        mImportance.setEntries(summaries);
        mImportance.setEntryValues(values.toArray(new String[0]));
        mImportance.setEntries(summaries.toArray(new String[0]));
        mImportance.setValue(String.valueOf(mChannel.getImportance()));
        mImportance.setSummary("%s");

@@ -245,6 +252,8 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {

    private String getSummary(int importance) {
        switch (importance) {
            case NotificationManager.IMPORTANCE_UNSPECIFIED:
                return getContext().getString(R.string.notification_importance_unspecified);
            case NotificationManager.IMPORTANCE_NONE:
                return getContext().getString(R.string.notification_importance_blocked);
            case NotificationManager.IMPORTANCE_MIN:
Loading