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

Commit 6afe8365 authored by Beverly's avatar Beverly
Browse files

Update Zen Automatic Rule Settings page

Test: atest ZenModeBackend
Test: make RunSettingsRoboTests
Bug: 111475013
Change-Id: I86cc2c35002cd3a74d21f080eaf6d0fc29fa6a17
parent 4c3251eb
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -20,13 +20,13 @@
        android:layout_height="match_parent"
        android:orientation="horizontal">
    <ImageView
            android:id="@+id/delete_zen_rule"
            android:id="@+id/zen_automatic_rule_widget"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:paddingStart="16dip"
            android:paddingEnd="16dip"
            android:src="@drawable/ic_delete"
            android:contentDescription="@string/zen_mode_delete_rule"
            android:src="@drawable/ic_settings"
            android:contentDescription="zen_mode_rule_settings"
            android:layout_gravity="center"
            android:background="?android:attr/selectableItemBackground" />
</LinearLayout>
+18 −0
Original line number Diff line number Diff line
@@ -7117,6 +7117,12 @@
    <!--  Do not disturb: Title for the zen mode automation option in Settings. [CHAR LIMIT=40] -->
    <string name="zen_mode_automation_settings_title">Schedules</string>
    <!--  Do not disturb: Title for dialog that allows users to delete DND rules/schedules[CHAR LIMIT=40] -->
    <string name="zen_mode_delete_automatic_rules">Delete schedules</string>
    <!--  Do not disturb: Delete text button presented in a dialog to confirm the user would like to delete the selected DND rules. [CHAR LIMIT=30] -->
    <string name="zen_mode_schedule_delete">Delete</string>
    <!--  Do not disturb: Title for the zen mode automatic rules page in settings. [CHAR LIMIT=30] -->
    <string name="zen_mode_automation_settings_page_title">Do Not Disturb</string>
@@ -7253,6 +7259,9 @@
    <!-- [CHAR LIMIT=110] Zen mode settings footer: Footer how DND was triggered by an app -->
    <string name="zen_mode_settings_dnd_automatic_rule_app">Do Not Disturb was automatically turned on by an app (<xliff:g id="app_name" example="Android Services">%s</xliff:g>)</string>
    <!-- [CHAR LIMIT=120] Zen mode settings footer: Footer informing user DND has custom settings. -->
    <string name="zen_mode_settings_dnd_custom_settings_footer">Do Not Disturb is on for <xliff:g id="rule_names" example="Sleeping and Work">%s</xliff:g> with custom settings.</string>
    <!--[CHAR LIMIT=40] Zen Interruption level: Priority.  -->
    <string name="zen_interruption_level_priority">Priority only</string>
@@ -7848,6 +7857,15 @@
    <!-- [CHAR LIMIT=NONE] Zen mode settings: Downtime rule setting -->
    <string name="zen_mode_schedule_alarm_summary">Stop at the end time or next alarm, whichever comes first</string>
    <!-- [CHAR LIMIT=80] Zen mode settings: Title for preference to allow custom behavior for the dnd schedule -->
    <string name="zen_mode_custom_behavior_title">Do Not Disturb behavior</string>
    <!-- [CHAR LIMIT=120] Zen mode settings: Summay text indicating the currenty dnd schedule is using the default dnd settings -->
    <string name="zen_mode_custom_behavior_summary_default">Use default settings</string>
    <!-- [CHAR LIMIT=120] Zen mode settings: Summay text indicating the currenty dnd schedule is using custom behavior -->
    <string name="zen_mode_custom_behavior_summary">Create custom settings for this schedule</string>
    <!-- [CHAR LIMIT=40] General divider text when concatenating multiple items in a text summary -->
    <string name="summary_divider_text">,\u0020</string>
+6 −0
Original line number Diff line number Diff line
@@ -43,4 +43,10 @@
        android:summary="@string/zen_mode_schedule_alarm_summary"
        android:order="99" />

    <!-- Custom Do Not Disturb Setting-->
    <Preference
        android:key="zen_schedule_custom_setting"
        android:title="@string/zen_mode_custom_behavior_title"
        android:order="100" />

</PreferenceScreen>
+6 −57
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.provider.Settings;
import android.service.notification.ConditionProviderService;
import android.service.notification.ZenModeConfig;

import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
@@ -34,20 +33,15 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;

abstract public class AbstractZenModeAutomaticRulePreferenceController extends
        AbstractZenModePreferenceController implements PreferenceControllerMixin {

    protected ZenModeBackend mBackend;
    protected Fragment mParent;
    protected Set<Map.Entry<String, AutomaticZenRule>> mRules;
    protected Map.Entry<String, AutomaticZenRule>[] mRules;
    protected PackageManager mPm;
    private static List<String> mDefaultRuleIds;

    public AbstractZenModeAutomaticRulePreferenceController(Context context, String key, Fragment
            parent, Lifecycle lifecycle) {
@@ -60,20 +54,14 @@ abstract public class AbstractZenModeAutomaticRulePreferenceController extends
    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        mRules = getZenModeRules();
        mRules = mBackend.getAutomaticZenRules();
    }

    private static List<String> getDefaultRuleIds() {
        if (mDefaultRuleIds == null) {
            mDefaultRuleIds = ZenModeConfig.DEFAULT_RULE_IDS;
        }
        return mDefaultRuleIds;
    protected Map.Entry<String, AutomaticZenRule>[] getRules() {
        if (mRules == null) {
            mRules = mBackend.getAutomaticZenRules();
        }

    private Set<Map.Entry<String, AutomaticZenRule>> getZenModeRules() {
        Map<String, AutomaticZenRule> ruleMap =
                NotificationManager.from(mContext).getAutomaticZenRules();
        return ruleMap.entrySet();
        return mRules;
    }

    protected void showNameRuleDialog(final ZenRuleInfo ri, Fragment parent) {
@@ -81,16 +69,6 @@ abstract public class AbstractZenModeAutomaticRulePreferenceController extends
                RuleNameChangeListener(ri));
    }

    protected Map.Entry<String, AutomaticZenRule>[] sortedRules() {
        if (mRules == null) {
            mRules = getZenModeRules();
        }
        final Map.Entry<String, AutomaticZenRule>[] rt =
                mRules.toArray(new Map.Entry[mRules.size()]);
        Arrays.sort(rt, RULE_COMPARATOR);
        return rt;
    }

    protected static Intent getRuleIntent(String settingsAction,
            ComponentName configurationActivity, String ruleId) {
        final Intent intent = new Intent()
@@ -104,35 +82,6 @@ abstract public class AbstractZenModeAutomaticRulePreferenceController extends
        return intent;
    }

    private static final Comparator<Map.Entry<String, AutomaticZenRule>> RULE_COMPARATOR =
            new Comparator<Map.Entry<String, AutomaticZenRule>>() {
                @Override
                public int compare(Map.Entry<String, AutomaticZenRule> lhs,
                        Map.Entry<String, AutomaticZenRule> rhs) {
                    // if it's a default rule, should be at the top of automatic rules
                    boolean lhsIsDefaultRule = getDefaultRuleIds().contains(lhs.getKey());
                    boolean rhsIsDefaultRule = getDefaultRuleIds().contains(rhs.getKey());
                    if (lhsIsDefaultRule != rhsIsDefaultRule) {
                        return lhsIsDefaultRule ? -1 : 1;
                    }

                    int byDate = Long.compare(lhs.getValue().getCreationTime(),
                            rhs.getValue().getCreationTime());
                    if (byDate != 0) {
                        return byDate;
                    } else {
                        return key(lhs.getValue()).compareTo(key(rhs.getValue()));
                    }
                }

                private String key(AutomaticZenRule rule) {
                    final int type = ZenModeConfig.isValidScheduleConditionId(rule.getConditionId())
                            ? 1 : ZenModeConfig.isValidEventConditionId(rule.getConditionId())
                            ? 2 : 3;
                    return type + rule.getName().toString();
                }
            };

    public static ZenRuleInfo getRuleInfo(PackageManager pm, ServiceInfo si) {
        if (si == null || si.metaData == null) {
            return null;
+1 −1
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModeP
                    MetricsProto.MetricsEvent.ACTION_ZEN_MODE_RULE_NAME_CHANGE_OK);
            mRule.setName(ruleName);
            mRule.setModified(true);
            mBackend.setZenRule(mId, mRule);
            mBackend.updateZenRule(mId, mRule);
        }
    }
}
Loading