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

Commit daa13a96 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Zen Mode messages + calls are ListPreferences (radio button dialog)

Bug: 63077372
Test: ZenModeCallsPreferenceControllerTest
Test: ZenModeMessagesPreferenceControllerTest
Change-Id: I5d2516402b261413c51a1b4eba5153ffadf1459b
parent 5ff1df89
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -47,16 +47,19 @@
           android:key="zen_mode_events"
           android:title="@string/zen_mode_events"/>

       <Preference
       <!-- Messages -->
       <ListPreference
           android:key="zen_mode_messages"
           android:title="@string/zen_mode_messages"
           android:fragment="com.android.settings.notification.ZenModeMessagesSettings" />
           android:entries="@array/zen_mode_contacts_entries"
           android:entryValues="@array/zen_mode_contacts_values"/>

       <!-- Calls -->
       <Preference
       <ListPreference
           android:key="zen_mode_calls"
           android:title="@string/zen_mode_calls"
           android:fragment="com.android.settings.notification.ZenModeCallsSettings" />
           android:entries="@array/zen_mode_contacts_entries"
           android:entryValues="@array/zen_mode_contacts_values"/>

       <!-- Repeat callers -->
       <SwitchPreference
+0 −21
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright (C) 2017 The Android Open Source Project

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  -->

<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="zen_mode_calls_settings"
    android:title="@string/zen_mode_calls" />
+0 −21
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright (C) 2017 The Android Open Source Project

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  -->

<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="zen_mode_messages_settings"
    android:title="@string/zen_mode_messages" />
+9 −2
Original line number Diff line number Diff line
@@ -103,12 +103,19 @@ public class ZenModeBackend {
    }

    protected int getPriorityCallSenders() {
        if (isPriorityCategoryEnabled(NotificationManager.Policy.PRIORITY_CATEGORY_CALLS)) {
            return mPolicy.priorityCallSenders;
        }

        return SOURCE_NONE;
    }

    protected int getPriorityMessageSenders() {
        if (isPriorityCategoryEnabled(NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES)) {
            return mPolicy.priorityMessageSenders;
        }
        return SOURCE_NONE;
    }

    protected void saveVisualEffectsPolicy(int category, boolean canBypass) {
        int suppressedEffects = getNewSuppressedEffects(!canBypass, category);
+48 −3
Original line number Diff line number Diff line
@@ -19,16 +19,27 @@ package com.android.settings.notification;
import android.app.NotificationManager;
import android.content.Context;
import android.provider.Settings;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settingslib.core.lifecycle.Lifecycle;

public class ZenModeCallsPreferenceController extends AbstractZenModePreferenceController {
public class ZenModeCallsPreferenceController extends AbstractZenModePreferenceController implements
        Preference.OnPreferenceChangeListener {

    protected static final String KEY = "zen_mode_calls";
    private final ZenModeBackend mBackend;
    private ListPreference mPreference;
    private final String[] mListValues;

    public ZenModeCallsPreferenceController(Context context, Lifecycle lifecycle) {
        super(context, KEY, lifecycle);
        mBackend = ZenModeBackend.getInstance(context);
        mListValues = context.getResources().getStringArray(R.array.zen_mode_contacts_values);
    }

    @Override
@@ -41,21 +52,55 @@ public class ZenModeCallsPreferenceController extends AbstractZenModePreferenceC
        return true;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = (ListPreference) screen.findPreference(KEY);
    }

    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        updateFromContactsValue(preference);
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object selectedContactsFrom) {
        mBackend.saveSenders(NotificationManager.Policy.PRIORITY_CATEGORY_CALLS,
                ZenModeBackend.getSettingFromPrefKey(selectedContactsFrom.toString()));
        updateFromContactsValue(preference);
        return true;
    }

    private void updateFromContactsValue(Preference preference) {
        mPreference = (ListPreference) preference;
        switch (getZenMode()) {
            case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
            case Settings.Global.ZEN_MODE_ALARMS:
                preference.setEnabled(false);
                preference.setSummary(mBackend.getContactsSummary(mBackend.SOURCE_NONE));
                mPreference.setEnabled(false);
                mPreference.setValue(ZenModeBackend.ZEN_MODE_FROM_NONE);
                mPreference.setSummary(mBackend.getContactsSummary(ZenModeBackend.SOURCE_NONE));
                break;
            default:
                preference.setEnabled(true);
                preference.setSummary(mBackend.getContactsSummary(
                        NotificationManager.Policy.PRIORITY_CATEGORY_CALLS));

                final String currentVal = ZenModeBackend.getKeyFromSetting(
                        mBackend.getPriorityCallSenders());
                mPreference.setValue(mListValues[getIndexOfSendersValue(currentVal)]);
        }
    }

    @VisibleForTesting
    protected int getIndexOfSendersValue(String currentVal) {
        int index = 3; // defaults to "none" based on R.array.zen_mode_contacts_values
        for (int i = 0; i < mListValues.length; i++) {
            if (TextUtils.equals(currentVal, mListValues[i])) {
                return i;
            }
        }

        return index;
    }
}
Loading