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

Commit 8973e278 authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Notification channel settings updates

- Show a deleted count instead of individual deleted channels
- Make the link to app settings more prominent
- Reload settings onresume

Change-Id: I4f493181194943310ba536eb2bca270cec7cafce
Fixes: 36119790
Fixes: 36191444
Test: manual
parent 2194f3db
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -6473,8 +6473,14 @@
    <!-- [CHAR LIMIT=NONE] App notification settings: no channels -->
    <string name="no_channels">This app has not posted any notifications</string>
    <!-- [CHAR LIMIT=60] App notification settings: Text to display for deleted channels -->
    <string name="deleted_channel_name"><xliff:g id="channel_name" example="Promotions">%1$s</xliff:g> (deleted)</string>
    <!-- [CHAR LIMIT=NONE] App notification settings: link to app notification settings-->
    <string name="app_settings_link">Additional settings in the app</string>
    <!-- [CHAR LIMIT=NONE] Footer listing a count of deleted channels. -->
    <plurals name="deleted_channels">
        <item quantity="one">%d category deleted</item>
        <item quantity="other">%d categories deleted</item>
    </plurals>
    <!-- [CHAR LIMIT=NONE] App notification settings: Block option title -->
    <string name="app_notification_block_title">Block all</string>
+2 −10
Original line number Diff line number Diff line
@@ -23,29 +23,25 @@
        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" />

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

    <!-- 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 -->
@@ -53,7 +49,6 @@
        android:key="badge"
        android:title="@string/notification_badge_title"
        android:summary="@string/notification_badge_summary"
        android:order="5"
        settings:useAdditionalSummary="true"
        settings:restrictedSwitchSummary="@string/enabled_by_admin" />

@@ -61,21 +56,18 @@
    <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="7" />
            android:title="@string/app_notification_visibility_override_title" />

    <!-- 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="8"
            settings:useAdditionalSummary="true" />

</PreferenceScreen>
+80 −71
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.util.Log;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.AppHeader;
import com.android.settings.DimmableIconPreference;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.applications.AppHeaderController;
@@ -66,14 +67,18 @@ public class AppNotificationSettings extends NotificationSettingsBase {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    public void onResume() {
        super.onResume();

        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
            Log.w(TAG, "Missing package or uid or packageinfo");
            toastAndFinish();
            finish();
            return;
        }
        final Activity activity = getActivity();

        if (getPreferenceScreen() != null) {
            getPreferenceScreen().removeAll();
        }

        addPreferencesFromResource(R.xml.app_notification_settings);
        getPreferenceScreen().setOrderingAsAdded(true);
@@ -81,7 +86,6 @@ public class AppNotificationSettings extends NotificationSettingsBase {
        mBlock = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BLOCK);
        mBadge = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BADGE);

        if (mPkgInfo != null) {
        setupBlock();
        setupBadge();
        // load settings intent
@@ -101,24 +105,19 @@ public class AppNotificationSettings extends NotificationSettingsBase {
                populateChannelList();
            }
        }.execute();
        }
        final Preference pref = FeatureFactory.getFactory(activity)
            .getApplicationFeatureProvider(activity)

        final Preference pref = FeatureFactory.getFactory(getActivity())
                .getApplicationFeatureProvider(getActivity())
                .newAppHeaderController(this /* fragment */, null /* appHeader */)
                .setIcon(mAppRow.icon)
                .setLabel(mAppRow.label)
                .setPackageName(mAppRow.pkg)
                .setUid(mAppRow.uid)
            .setAppNotifPrefIntent(mAppRow.settingsIntent)
                .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
                        AppHeaderController.ActionType.ACTION_NOTIF_PREFERENCE)
                .done(getPrefContext());
        getPreferenceScreen().addPreference(pref);
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
            Log.w(TAG, "Missing package or uid or packageinfo");
            finish();
@@ -164,12 +163,6 @@ public class AppNotificationSettings extends NotificationSettingsBase {
                    channelPref.setTitle(channel.getName());
                    channelPref.setChecked(channel.getImportance() != IMPORTANCE_NONE);
                    channelPref.setMultiLine(true);

                    if (channel.isDeleted()) {
                        channelPref.setTitle(getString(R.string.deleted_channel_name,
                                channel.getName()));
                        channelPref.setEnabled(false);
                    } else {
                    channelPref.setSummary(getImportanceSummary(channel.getImportance()));
                    Bundle channelArgs = new Bundle();
                    channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
@@ -196,10 +189,26 @@ public class AppNotificationSettings extends NotificationSettingsBase {
                                    return true;
                                }
                            });
                    }
                    groupCategory.addPreference(channelPref);
                }
            }

            if (mAppRow.settingsIntent != null) {
                Preference intentPref = new Preference(getPrefContext());
                intentPref.setIntent(mAppRow.settingsIntent);
                intentPref.setTitle(mContext.getString(R.string.app_settings_link));
                getPreferenceScreen().addPreference(intentPref);
            }

            int deletedChannelCount = mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid);
            if (deletedChannelCount > 0) {
                DimmableIconPreference deletedPref = new DimmableIconPreference(getPrefContext());
                deletedPref.setEnabled(false);
                deletedPref.setTitle(getResources().getQuantityString(
                        R.plurals.deleted_channels, deletedChannelCount, deletedChannelCount));
                deletedPref.setIcon(R.drawable.ic_info);
                getPreferenceScreen().addPreference(deletedPref);
            }
        }
        updateDependents(mAppRow.banned);
    }
+26 −33
Original line number Diff line number Diff line
@@ -73,19 +73,22 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    public void onResume() {
        super.onResume();
        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null || mChannel == null) {
            Log.w(TAG, "Missing package or uid or packageinfo or channel");
            toastAndFinish();
            finish();
            return;
        }
        final Activity activity = getActivity();

        if (getPreferenceScreen() != null) {
            getPreferenceScreen().removeAll();
        }
        addPreferencesFromResource(R.xml.channel_notification_settings);
        getPreferenceScreen().setOrderingAsAdded(true);

        // load settings intent
        ArrayMap<String, NotificationBackend.AppRow>
                rows = new ArrayMap<String, NotificationBackend.AppRow>();
        ArrayMap<String, NotificationBackend.AppRow> rows = new ArrayMap<String, NotificationBackend.AppRow>();
        rows.put(mAppRow.pkg, mAppRow);
        collectConfigActivities(rows);

@@ -109,36 +112,25 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
            setupBlockAndImportance();
            updateDependents();
        }
        final Preference pref = FeatureFactory.getFactory(activity)
            .getApplicationFeatureProvider(activity)
        final Preference pref = FeatureFactory.getFactory(getActivity())
                .getApplicationFeatureProvider(getActivity())
                .newAppHeaderController(this /* fragment */, null /* appHeader */)
                .setIcon(mAppRow.icon)
                .setLabel(mChannel.getName())
                .setSummary(mAppRow.label)
                .setPackageName(mAppRow.pkg)
                .setUid(mAppRow.uid)
            .setAppNotifPrefIntent(mAppRow.settingsIntent)
                .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
                        AppHeaderController.ActionType.ACTION_NOTIF_PREFERENCE)
                .done(getPrefContext());
        getPreferenceScreen().addPreference(pref);
    }

    @Override
    public void onResume() {
        super.onResume();
        if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null || mChannel == null) {
            Log.w(TAG, "Missing package or uid or packageinfo or channel");
            finish();
            return;
        }
        mLights.setDisabledByAdmin(mSuspendedAppsAdmin);
        mVibrate.setDisabledByAdmin(mSuspendedAppsAdmin);
        if (mImportance.isEnabled()) {
            mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
        if (mAppRow.settingsIntent != null) {
            Preference intentPref = new Preference(getPrefContext());
            intentPref.setIntent(mAppRow.settingsIntent);
            intentPref.setTitle(mContext.getString(R.string.app_settings_link));
            getPreferenceScreen().addPreference(intentPref);
        }
        mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
        mVisibilityOverride.setDisabledByAdmin(mSuspendedAppsAdmin);
    }

    private void setupLights() {
@@ -321,6 +313,7 @@ public class ChannelNotificationSettings extends NotificationSettingsBase {
                        return true;
                    }
                });
        mVisibilityOverride.setDisabledByAdmin(mSuspendedAppsAdmin);
    }

    private void setRestrictedIfNotificationFeaturesDisabled(CharSequence entry,
+10 −1
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ public class NotificationBackend {

    public ParceledListSlice<NotificationChannelGroup> getChannelGroups(String pkg, int uid) {
        try {
            return sINM.getNotificationChannelGroupsForPackage(pkg, uid, true);
            return sINM.getNotificationChannelGroupsForPackage(pkg, uid, false);
        } catch (Exception e) {
            Log.w(TAG, "Error calling NoMan", e);
            return ParceledListSlice.emptyList();
@@ -139,6 +139,15 @@ public class NotificationBackend {
        }
    }

    public int getDeletedChannelCount(String pkg, int uid) {
        try {
            return sINM.getDeletedChannelCount(pkg, uid);
        } catch (Exception e) {
            Log.w(TAG, "Error calling NoMan", e);
            return 0;
        }
    }

    static class Row {
        public String section;
    }
Loading