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

Commit 3527ef7c authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Notification settings updates

- Text changes
- Show channels on the app settings screen (again)
- Hide most of the channel settings under 'advanced' (note: this hides
  the footer preference(s) also, at the moment. the functionality
  to exclude those is coming in a later cl)
  - Add a 'show notifications' toggle for each app created group

Bug: 63927402
Test: make RunSettingsRoboTests

Change-Id: I9906ef943d05e1915061b59294a25d81c4e6cbb5
parent 9c3d329d
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -6926,7 +6926,7 @@
    <string name="notification_group_title">Notification category group</string>
    <!-- [CHAR LIMIT=100] Notification importance screen title -->
    <string name="notification_importance_title">Importance</string>
    <string name="notification_importance_title">Behavior</string>
    <!-- [CHAR LIMIT=100 BACKUP_MESSAGE_ID=1820188704793497324] Notification Importance: unspecified importance level description -->
    <string name="notification_importance_unspecified">Allow sound</string>
@@ -6991,6 +6991,9 @@
    <!-- [CHAR LIMIT=100] Notification Importance title: high importance level title -->
    <string name="notification_channel_summary_high">Urgent importance</string>
    <!-- [CHAR LIMIT=100] Label for on/off toggle -->
    <string name="notification_switch_label">Show notifications</string>
    <!-- Default Apps > Default notification assistant -->
    <string name="default_notification_assistant">Notification assistant</string>
@@ -7087,13 +7090,13 @@
    <string name="loading_notification_apps">Loading apps...</string>
    <!-- [CHAR LIMIT=NONE] Text appearing when app notifications are off -->
    <string name="app_notifications_off_desc">Android is blocking this app\'s notifications from appearing on this device</string>
    <string name="app_notifications_off_desc">At your request, Android is blocking this app\'s notifications from appearing on this device</string>
    <!-- [CHAR LIMIT=NONE] Text appearing when channel notifications are off -->
    <string name="channel_notifications_off_desc">Android is blocking this category of notifications from appearing on this device</string>
    <string name="channel_notifications_off_desc">At your request, Android is blocking this category of notifications from appearing on this device</string>
    <!-- [CHAR LIMIT=NONE] Text appearing when channel group notifications are off -->
    <string name="channel_group_notifications_off_desc">Android is blocking this group of notifications from appearing on this device</string>
    <string name="channel_group_notifications_off_desc">At your request, Android is blocking this group of notifications from appearing on this device</string>
    <!-- [CHAR LIMIT=NONE] App notification settings: channels title -->
    <string name="notification_channels">Categories</string>
+2 −1
Original line number Diff line number Diff line
@@ -15,7 +15,8 @@
-->

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:settings="http://schemas.android.com/apk/res-auto" >
        xmlns:settings="http://schemas.android.com/apk/res-auto"
        settings:initialExpandedChildrenCount="3">

    <com.android.settings.applications.LayoutPreference
        android:key="pref_app_header"
+4 −9
Original line number Diff line number Diff line
@@ -19,20 +19,15 @@

        <com.android.settings.widget.RadioButtonPreference
            android:key="importance_high"
            android:title="@string/notification_importance_high_title"
            android:summary="@string/notification_importance_high"
        />
            android:title="@string/notification_importance_high" />
        <com.android.settings.widget.RadioButtonPreference
            android:key="importance_default"
            android:title="@string/notification_importance_default_title"
            android:summary="@string/notification_importance_default" />
            android:title="@string/notification_importance_default" />
        <com.android.settings.widget.RadioButtonPreference
            android:key="importance_low"
            android:title="@string/notification_importance_low_title"
            android:summary="@string/notification_importance_low" />
            android:title="@string/notification_importance_low" />
        <com.android.settings.widget.RadioButtonPreference
            android:key="importance_min"
            android:title="@string/notification_importance_min_title"
            android:summary="@string/notification_importance_min" />
            android:title="@string/notification_importance_min" />

</PreferenceScreen>
+28 −49
Original line number Diff line number Diff line
@@ -135,7 +135,6 @@ public class AppNotificationSettings extends NotificationSettingsBase {
        return new ArrayList<>(mControllers);
    }


    private void populateList() {
        if (!mDynamicPreferences.isEmpty()) {
            // If there's anything in mChannelGroups, we've called populateChannelList twice.
@@ -164,59 +163,39 @@ public class AppNotificationSettings extends NotificationSettingsBase {
    }

    private void populateGroupList() {
        for (NotificationChannelGroup group : mChannelGroupList) {
            PreferenceCategory groupCategory = new PreferenceCategory(getPrefContext());
        groupCategory.setTitle(R.string.notification_channels);
        groupCategory.setKey(KEY_GENERAL_CATEGORY);
            groupCategory.setOrderingAsAdded(true);
            getPreferenceScreen().addPreference(groupCategory);
            mDynamicPreferences.add(groupCategory);
        for (NotificationChannelGroup group : mChannelGroupList) {
            final List<NotificationChannel> channels = group.getChannels();
            int N = channels.size();
            // app defined groups with one channel and channels with no group display the channel
            // name and no summary and link directly to the channel page unless the group is blocked
            if ((group.getId() == null || N < 2) && !group.isBlocked()) {
                Collections.sort(channels, mChannelComparator);
                for (int i = 0; i < N; i++) {
                    final NotificationChannel channel = channels.get(i);
                    populateSingleChannelPrefs(groupCategory, channel, "");
                }
            if (group.getId() == null) {
                groupCategory.setTitle(mChannelGroupList.size() > 1
                        ? R.string.notification_channels_other
                        : R.string.notification_channels);
                groupCategory.setKey(KEY_GENERAL_CATEGORY);
            } else {
                populateGroupPreference(groupCategory, group, N);
            }
        }
    }

    void populateGroupPreference(PreferenceGroup parent,
            final NotificationChannelGroup group, int channelCount) {
        MasterSwitchPreference groupPref = new MasterSwitchPreference(
                getPrefContext());
        groupPref.setSwitchEnabled(mSuspendedAppsAdmin == null
                && isChannelGroupBlockable(group));
        groupPref.setKey(group.getId());
        groupPref.setTitle(group.getName());
        groupPref.setChecked(!group.isBlocked());
        groupPref.setSummary(getResources().getQuantityString(
                R.plurals.notification_group_summary, channelCount, channelCount));
                groupCategory.setTitle(group.getName());
                groupCategory.setKey(group.getId());
                Bundle groupArgs = new Bundle();
                groupArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
                groupArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
                groupArgs.putString(Settings.EXTRA_CHANNEL_GROUP_ID, group.getId());
        Intent groupIntent = Utils.onBuildStartFragmentIntent(getActivity(),
                Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(),
                        ChannelGroupNotificationSettings.class.getName(),
                groupArgs, null, R.string.notification_group_title, null, false,
                getMetricsCategory());
        groupPref.setIntent(groupIntent);

        groupPref.setOnPreferenceChangeListener(
                (preference, o) -> {
                    boolean value = (Boolean) o;
                    group.setBlocked(!value);
                    mBackend.updateChannelGroup(mPkg, mUid, group);

                    return true;
                });
        parent.addPreference(groupPref);
                        groupArgs, null, R.string.notification_group_title,
                        null, false, getMetricsCategory());
                groupCategory.setIntent(channelIntent);
                populateGroupToggle(groupCategory, group);
            }

            final List<NotificationChannel> channels = group.getChannels();
            Collections.sort(channels, mChannelComparator);
            int N = channels.size();
            for (int i = 0; i < N; i++) {
                final NotificationChannel channel = channels.get(i);
                populateSingleChannelPrefs(groupCategory, channel, group.isBlocked());
            }
        }
    }

    private Comparator<NotificationChannelGroup> mChannelGroupComparator =
+2 −0
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ public class BlockPreferenceController extends NotificationPreferenceController
        LayoutPreference pref = (LayoutPreference) preference;
        SwitchBar bar = pref.findViewById(R.id.switch_bar);
        if (bar != null) {
            bar.setSwitchBarText(R.string.notification_switch_label,
                    R.string.notification_switch_label);
            bar.show();
            try {
                bar.addOnSwitchChangeListener(this);
Loading