Update DND people Settings pages
Settings > Sound > Do Not Disturb > People - Redesign of messages + calls settings pages - Redesign of conversations page - Added strings for Apps page Test: make RunSettingsRoboTests7 Bug: 151845457 Change-Id: I58d22a31c398418c053e06a4c6bf5ed8c482ee35
This commit is contained in:
@@ -0,0 +1,241 @@
|
||||
/*
|
||||
* Copyright (C) 2020 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.
|
||||
*/
|
||||
|
||||
package com.android.settings.notification.zen;
|
||||
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CALLS;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES;
|
||||
|
||||
import static com.android.settings.widget.RadioButtonPreferenceWithExtraWidget.EXTRA_WIDGET_VISIBILITY_GONE;
|
||||
import static com.android.settings.widget.RadioButtonPreferenceWithExtraWidget.EXTRA_WIDGET_VISIBILITY_SETTING;
|
||||
|
||||
import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.provider.Contacts;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.widget.RadioButtonPreferenceWithExtraWidget;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Common preference controller functionality shared by
|
||||
* ZenModePriorityMessagesPreferenceController and ZenModePriorityCallsPreferenceController.
|
||||
*
|
||||
* This includes the options to choose the priority senders that are allowed to bypass DND for
|
||||
* calls or messages. This can be one of four values: starred contacts, all contacts, anyone, or
|
||||
* no one.
|
||||
*/
|
||||
public class ZenModePrioritySendersPreferenceController
|
||||
extends AbstractZenModePreferenceController {
|
||||
@VisibleForTesting static final String KEY_ANY = "senders_anyone";
|
||||
@VisibleForTesting static final String KEY_CONTACTS = "senders_contacts";
|
||||
@VisibleForTesting static final String KEY_STARRED = "senders_starred_contacts";
|
||||
@VisibleForTesting static final String KEY_NONE = "senders_none";
|
||||
|
||||
private static final Intent ALL_CONTACTS_INTENT =
|
||||
new Intent(Contacts.Intents.UI.LIST_ALL_CONTACTS_ACTION);
|
||||
private static final Intent STARRED_CONTACTS_INTENT =
|
||||
new Intent(Contacts.Intents.UI.LIST_STARRED_ACTION);
|
||||
private static final Intent FALLBACK_INTENT = new Intent(Intent.ACTION_MAIN);
|
||||
|
||||
private final PackageManager mPackageManager;
|
||||
private final boolean mIsMessages; // if this is false, then this preference is for calls
|
||||
|
||||
private PreferenceCategory mPreferenceCategory;
|
||||
private List<RadioButtonPreferenceWithExtraWidget> mRadioButtonPreferences = new ArrayList<>();
|
||||
|
||||
public ZenModePrioritySendersPreferenceController(Context context, String key,
|
||||
Lifecycle lifecycle, boolean isMessages) {
|
||||
super(context, key, lifecycle);
|
||||
mIsMessages = isMessages;
|
||||
|
||||
mPackageManager = mContext.getPackageManager();
|
||||
if (!FALLBACK_INTENT.hasCategory(Intent.CATEGORY_APP_CONTACTS)) {
|
||||
FALLBACK_INTENT.addCategory(Intent.CATEGORY_APP_CONTACTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
mPreferenceCategory = screen.findPreference(getPreferenceKey());
|
||||
if (mPreferenceCategory.findPreference(KEY_ANY) == null) {
|
||||
makeRadioPreference(KEY_STARRED,
|
||||
com.android.settings.R.string.zen_mode_from_starred);
|
||||
makeRadioPreference(KEY_CONTACTS,
|
||||
com.android.settings.R.string.zen_mode_from_contacts);
|
||||
makeRadioPreference(KEY_ANY,
|
||||
com.android.settings.R.string.zen_mode_from_anyone);
|
||||
makeRadioPreference(KEY_NONE,
|
||||
com.android.settings.R.string.zen_mode_from_none);
|
||||
updateSummaries();
|
||||
}
|
||||
|
||||
super.displayPreference(screen);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return KEY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
final int currSetting = getPrioritySenders();
|
||||
|
||||
for (RadioButtonPreferenceWithExtraWidget pref : mRadioButtonPreferences) {
|
||||
pref.setChecked(keyToSetting(pref.getKey()) == currSetting);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateSummaries();
|
||||
}
|
||||
|
||||
private void updateSummaries() {
|
||||
for (RadioButtonPreferenceWithExtraWidget pref : mRadioButtonPreferences) {
|
||||
pref.setSummary(getSummary(pref.getKey()));
|
||||
}
|
||||
}
|
||||
|
||||
private static int keyToSetting(String key) {
|
||||
switch (key) {
|
||||
case KEY_STARRED:
|
||||
return NotificationManager.Policy.PRIORITY_SENDERS_STARRED;
|
||||
case KEY_CONTACTS:
|
||||
return NotificationManager.Policy.PRIORITY_SENDERS_CONTACTS;
|
||||
case KEY_ANY:
|
||||
return NotificationManager.Policy.PRIORITY_SENDERS_ANY;
|
||||
case KEY_NONE:
|
||||
default:
|
||||
return ZenModeBackend.SOURCE_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
private String getSummary(String key) {
|
||||
switch (key) {
|
||||
case KEY_STARRED:
|
||||
return mBackend.getStarredContactsSummary(mContext);
|
||||
case KEY_CONTACTS:
|
||||
return mBackend.getContactsNumberSummary(mContext);
|
||||
case KEY_ANY:
|
||||
return mContext.getResources().getString(R.string.zen_mode_all_senders_summary,
|
||||
mContext.getResources().getString(mIsMessages
|
||||
? R.string.zen_mode_messages_list
|
||||
: R.string.zen_mode_calls_list));
|
||||
case KEY_NONE:
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private int getPrioritySenders() {
|
||||
if (mIsMessages) {
|
||||
return mBackend.getPriorityMessageSenders();
|
||||
} else {
|
||||
return mBackend.getPriorityCallSenders();
|
||||
}
|
||||
}
|
||||
|
||||
private RadioButtonPreferenceWithExtraWidget makeRadioPreference(String key, int titleId) {
|
||||
RadioButtonPreferenceWithExtraWidget pref =
|
||||
new RadioButtonPreferenceWithExtraWidget(mPreferenceCategory.getContext());
|
||||
View.OnClickListener widgetClickListener = getWidgetClickListener(key);
|
||||
if (widgetClickListener != null) {
|
||||
pref.setExtraWidgetOnClickListener(widgetClickListener);
|
||||
pref.setExtraWidgetVisibility(EXTRA_WIDGET_VISIBILITY_SETTING);
|
||||
} else {
|
||||
pref.setExtraWidgetVisibility(EXTRA_WIDGET_VISIBILITY_GONE);
|
||||
}
|
||||
|
||||
pref.setKey(key);
|
||||
pref.setTitle(titleId);
|
||||
pref.setOnClickListener(mRadioButtonClickListener);
|
||||
mPreferenceCategory.addPreference(pref);
|
||||
mRadioButtonPreferences.add(pref);
|
||||
return pref;
|
||||
}
|
||||
|
||||
private RadioButtonPreference.OnClickListener mRadioButtonClickListener =
|
||||
new RadioButtonPreference.OnClickListener() {
|
||||
@Override
|
||||
public void onRadioButtonClicked(RadioButtonPreference preference) {
|
||||
int selectedSetting = keyToSetting(preference.getKey());
|
||||
if (selectedSetting != getPrioritySenders()) {
|
||||
mBackend.saveSenders(
|
||||
mIsMessages ? PRIORITY_CATEGORY_MESSAGES : PRIORITY_CATEGORY_CALLS,
|
||||
selectedSetting);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private View.OnClickListener getWidgetClickListener(String key) {
|
||||
if (!KEY_CONTACTS.equals(key) && !KEY_STARRED.equals(key)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (KEY_STARRED.equals(key) && !isStarredIntentValid()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (KEY_CONTACTS.equals(key) && !isContactsIntentValid()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (KEY_STARRED.equals(key)
|
||||
&& STARRED_CONTACTS_INTENT.resolveActivity(mPackageManager) != null) {
|
||||
mContext.startActivity(STARRED_CONTACTS_INTENT);
|
||||
} else if (KEY_CONTACTS.equals(key)
|
||||
&& ALL_CONTACTS_INTENT.resolveActivity(mPackageManager) != null) {
|
||||
mContext.startActivity(ALL_CONTACTS_INTENT);
|
||||
} else {
|
||||
mContext.startActivity(FALLBACK_INTENT);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private boolean isStarredIntentValid() {
|
||||
return STARRED_CONTACTS_INTENT.resolveActivity(mPackageManager) != null
|
||||
|| FALLBACK_INTENT.resolveActivity(mPackageManager) != null;
|
||||
}
|
||||
|
||||
private boolean isContactsIntentValid() {
|
||||
return ALL_CONTACTS_INTENT.resolveActivity(mPackageManager) != null
|
||||
|| FALLBACK_INTENT.resolveActivity(mPackageManager) != null;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user