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

Commit 7a05322b authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge "Notification settings updates"

parents a96b11f6 1f178a9e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6233,6 +6233,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>
@@ -7641,6 +7644,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