Merge "Make DropDownPreference extend ListPreference"

This commit is contained in:
Jason Monk
2015-08-12 18:23:13 +00:00
committed by Android (Google) Code Review
10 changed files with 191 additions and 185 deletions

View File

@@ -419,10 +419,10 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
final UiModeManager uiManager = (UiModeManager) getSystemService( final UiModeManager uiManager = (UiModeManager) getSystemService(
Context.UI_MODE_SERVICE); Context.UI_MODE_SERVICE);
final int currentNightMode = uiManager.getNightMode(); final int currentNightMode = uiManager.getNightMode();
mNightModePreference.setSelectedValue(String.valueOf(currentNightMode)); mNightModePreference.setValue(String.valueOf(currentNightMode));
mNightModePreference.setCallback(new DropDownPreference.Callback() { mNightModePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
try { try {
final int value = Integer.parseInt((String) newValue); final int value = Integer.parseInt((String) newValue);
final UiModeManager uiManager = (UiModeManager) getSystemService( final UiModeManager uiManager = (UiModeManager) getSystemService(

View File

@@ -16,12 +16,6 @@
package com.android.settings; package com.android.settings;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.view.RotationPolicy;
import com.android.settings.DropDownPreference.Callback;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import static android.provider.Settings.Secure.CAMERA_GESTURE_DISABLED; import static android.provider.Settings.Secure.CAMERA_GESTURE_DISABLED;
import static android.provider.Settings.Secure.DOUBLE_TAP_TO_WAKE; import static android.provider.Settings.Secure.DOUBLE_TAP_TO_WAKE;
import static android.provider.Settings.Secure.DOZE_ENABLED; import static android.provider.Settings.Secure.DOZE_ENABLED;
@@ -48,6 +42,7 @@ import android.os.RemoteException;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.preference.ListPreference; import android.preference.ListPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener; import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.preference.SwitchPreference; import android.preference.SwitchPreference;
@@ -56,6 +51,11 @@ import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.view.RotationPolicy;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -162,8 +162,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
if (RotationPolicy.isRotationLockToggleVisible(activity)) { if (RotationPolicy.isRotationLockToggleVisible(activity)) {
DropDownPreference rotatePreference = DropDownPreference rotatePreference =
(DropDownPreference) findPreference(KEY_AUTO_ROTATE); (DropDownPreference) findPreference(KEY_AUTO_ROTATE);
rotatePreference.addItem(activity.getString(R.string.display_auto_rotate_rotate),
false);
int rotateLockedResourceId; int rotateLockedResourceId;
// The following block sets the string used when rotation is locked. // The following block sets the string used when rotation is locked.
// If the device locks specifically to portrait or landscape (rather than current // If the device locks specifically to portrait or landscape (rather than current
@@ -180,13 +178,17 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
R.string.display_auto_rotate_stay_in_landscape; R.string.display_auto_rotate_stay_in_landscape;
} }
} }
rotatePreference.addItem(activity.getString(rotateLockedResourceId), true); rotatePreference.setEntries(new CharSequence[] {
rotatePreference.setSelectedItem(RotationPolicy.isRotationLocked(activity) ? activity.getString(R.string.display_auto_rotate_rotate),
activity.getString(rotateLockedResourceId),
});
rotatePreference.setEntryValues(new CharSequence[] { "0", "1" });
rotatePreference.setValueIndex(RotationPolicy.isRotationLocked(activity) ?
1 : 0); 1 : 0);
rotatePreference.setCallback(new Callback() { rotatePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object value) { public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean locked = (Boolean) value; final boolean locked = Integer.parseInt((String) newValue) != 0;
MetricsLogger.action(getActivity(), MetricsLogger.ACTION_ROTATION_LOCK, MetricsLogger.action(getActivity(), MetricsLogger.ACTION_ROTATION_LOCK,
locked); locked);
RotationPolicy.setRotationLock(activity, locked); RotationPolicy.setRotationLock(activity, locked);

View File

@@ -17,9 +17,9 @@
package com.android.settings; package com.android.settings;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.preference.ListPreference;
import android.preference.Preference;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
@@ -27,16 +27,13 @@ import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.Spinner; import android.widget.Spinner;
import java.util.ArrayList; import libcore.util.Objects;
public class DropDownPreference extends ListPreference {
public class DropDownPreference extends Preference {
private final Context mContext; private final Context mContext;
private final ArrayAdapter<String> mAdapter; private final ArrayAdapter<String> mAdapter;
private final Spinner mSpinner; private final Spinner mSpinner;
private final ArrayList<Object> mValues = new ArrayList<Object>();
private Callback mCallback;
private int mSelectedPosition = -1;
public DropDownPreference(Context context) { public DropDownPreference(Context context) {
this(context, null); this(context, null);
@@ -55,7 +52,12 @@ public class DropDownPreference extends Preference {
mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override @Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
setSelectedItem(position, true); if (position >= 0) {
String value = getEntryValues()[position].toString();
if (!value.equals(getValue()) && callChangeListener(value)) {
setValue(value);
}
}
} }
@Override @Override
@@ -64,75 +66,42 @@ public class DropDownPreference extends Preference {
} }
}); });
setPersistent(false); setPersistent(false);
setOnPreferenceClickListener(new OnPreferenceClickListener() { updateEntries();
@Override }
public boolean onPreferenceClick(Preference preference) {
mSpinner.performClick();
return true;
}
});
// Support XML specification like ListPreferences do. @Override
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DropDownPreference); protected void onClick() {
CharSequence[] entries = a.getTextArray(R.styleable.DropDownPreference_android_entries); mSpinner.performClick();
CharSequence[] values = a.getTextArray(R.styleable.DropDownPreference_android_entryValues);
if (entries != null && values != null) {
for (int i= 0; i < entries.length; i++) {
addItem(entries[i].toString(), values[i]);
}
}
} }
public void setDropDownWidth(int dimenResId) { public void setDropDownWidth(int dimenResId) {
mSpinner.setDropDownWidth(mContext.getResources().getDimensionPixelSize(dimenResId)); mSpinner.setDropDownWidth(mContext.getResources().getDimensionPixelSize(dimenResId));
} }
public void setCallback(Callback callback) { @Override
mCallback = callback; public void setEntries(CharSequence[] entries) {
super.setEntries(entries);
updateEntries();
} }
public void setSelectedItem(int position) { private void updateEntries() {
setSelectedItem(position, false);
}
public void setSelectedItem(int position, boolean fromSpinner) {
if (fromSpinner && position == mSelectedPosition) {
return;
}
final Object value = mValues.get(position);
if (mCallback != null && !mCallback.onItemSelected(position, value)) {
return;
}
mSpinner.setSelection(position);
mSelectedPosition = mSpinner.getSelectedItemPosition();
setSummary(mAdapter.getItem(position));
final boolean disableDependents = value == null;
notifyDependencyChange(disableDependents);
}
public void setSelectedValue(Object value) {
final int i = mValues.indexOf(value);
if (i > -1) {
setSelectedItem(i);
}
}
public void addItem(int captionResid, Object value) {
addItem(mContext.getResources().getString(captionResid), value);
}
public void addItem(String caption, Object value) {
mAdapter.add(caption);
mValues.add(value);
}
public int getItemCount() {
return mAdapter.getCount();
}
public void clearItems(){
mAdapter.clear(); mAdapter.clear();
mValues.clear(); if (getEntries() != null) {
for (CharSequence c : getEntries()) {
mAdapter.add(c.toString());
}
}
}
@Override
public void setValue(String value) {
super.setValue(value);
mSpinner.setSelection(findIndexOfValue(getValue()));
setSummary(getEntry());
}
public void setValueIndex(int index) {
setValue(getEntryValues()[index].toString());
} }
@Override @Override
@@ -140,16 +109,12 @@ public class DropDownPreference extends Preference {
super.onBindView(view); super.onBindView(view);
if (view.equals(mSpinner.getParent())) return; if (view.equals(mSpinner.getParent())) return;
if (mSpinner.getParent() != null) { if (mSpinner.getParent() != null) {
((ViewGroup)mSpinner.getParent()).removeView(mSpinner); ((ViewGroup) mSpinner.getParent()).removeView(mSpinner);
} }
final ViewGroup vg = (ViewGroup)view; final ViewGroup vg = (ViewGroup) view;
vg.addView(mSpinner, 0); vg.addView(mSpinner, 0);
final ViewGroup.LayoutParams lp = mSpinner.getLayoutParams(); final ViewGroup.LayoutParams lp = mSpinner.getLayoutParams();
lp.width = 0; lp.width = 0;
mSpinner.setLayoutParams(lp); mSpinner.setLayoutParams(lp);
} }
public interface Callback {
boolean onItemSelected(int pos, Object value);
}
} }

View File

@@ -24,7 +24,7 @@ import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.preference.Preference; import android.preference.Preference;
import android.preference.SwitchPreference; import android.preference.Preference.OnPreferenceChangeListener;
import android.util.ArraySet; import android.util.ArraySet;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@@ -32,17 +32,16 @@ import android.view.View.OnClickListener;
import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger;
import com.android.settings.DropDownPreference; import com.android.settings.DropDownPreference;
import com.android.settings.DropDownPreference.Callback;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER;
import java.util.List; import java.util.List;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListener, public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListener,
Preference.OnPreferenceChangeListener { Preference.OnPreferenceChangeListener {
private static final String TAG = "AppLaunchSettings"; private static final String TAG = "AppLaunchSettings";
@@ -90,12 +89,16 @@ public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListe
// * always // * always
// * ask // * ask
// * never // * never
mAppLinkState.addItem(R.string.app_link_open_always, mAppLinkState.setEntries(new CharSequence[] {
INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS); getString(R.string.app_link_open_always),
mAppLinkState.addItem(R.string.app_link_open_ask, getString(R.string.app_link_open_ask),
INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK); getString(R.string.app_link_open_never),
mAppLinkState.addItem(R.string.app_link_open_never, });
INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER); mAppLinkState.setEntryValues(new CharSequence[] {
Integer.toString(INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS),
Integer.toString(INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK),
Integer.toString(INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER),
});
mAppLinkState.setEnabled(mHasDomainUrls); mAppLinkState.setEnabled(mHasDomainUrls);
if (mHasDomainUrls) { if (mHasDomainUrls) {
@@ -103,16 +106,16 @@ public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListe
// purposes of the UI (and does the right thing around pending domain // purposes of the UI (and does the right thing around pending domain
// verifications that might arrive after the user chooses 'ask' in this UI). // verifications that might arrive after the user chooses 'ask' in this UI).
final int state = mPm.getIntentVerificationStatus(mPackageName, UserHandle.myUserId()); final int state = mPm.getIntentVerificationStatus(mPackageName, UserHandle.myUserId());
mAppLinkState.setSelectedValue( mAppLinkState.setValue(
(state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) Integer.toString((state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED)
? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK ? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK
: state); : state));
// Set the callback only after setting the initial selected item // Set the callback only after setting the initial selected item
mAppLinkState.setCallback(new Callback() { mAppLinkState.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object value) { public boolean onPreferenceChange(Preference preference, Object newValue) {
return updateAppLinkState((Integer) value); return updateAppLinkState(Integer.parseInt((String) newValue));
} }
}); });
} }

View File

@@ -16,18 +16,18 @@
package com.android.settings.nfc; package com.android.settings.nfc;
import android.content.Context; import android.content.Context;
import com.android.settings.DropDownPreference; import com.android.settings.DropDownPreference;
import com.android.settings.R; import com.android.settings.R;
public class NfcForegroundPreference extends DropDownPreference implements public class NfcForegroundPreference extends DropDownPreference implements
DropDownPreference.Callback, PaymentBackend.Callback { PaymentBackend.Callback {
private final PaymentBackend mPaymentBackend; private final PaymentBackend mPaymentBackend;
public NfcForegroundPreference(Context context, PaymentBackend backend) { public NfcForegroundPreference(Context context, PaymentBackend backend) {
super(context); super(context);
mPaymentBackend = backend; mPaymentBackend = backend;
mPaymentBackend.registerCallback(this); mPaymentBackend.registerCallback(this);
setCallback(this);
refresh(); refresh();
} }
@@ -43,19 +43,21 @@ public class NfcForegroundPreference extends DropDownPreference implements
setTitle(getContext().getString(R.string.nfc_payment_use_default)); setTitle(getContext().getString(R.string.nfc_payment_use_default));
CharSequence favorOpen; CharSequence favorOpen;
CharSequence favorDefault; CharSequence favorDefault;
clearItems(); setEntries(new CharSequence[] {
addItem(getContext().getString(R.string.nfc_payment_favor_open), true); getContext().getString(R.string.nfc_payment_favor_open),
addItem(getContext().getString(R.string.nfc_payment_favor_default), false); getContext().getString(R.string.nfc_payment_favor_default)
});
setEntryValues(new CharSequence[] { "1", "0" });
if (foregroundMode) { if (foregroundMode) {
setSelectedValue(true); setValue("1");
} else { } else {
setSelectedValue(false); setValue("0");
} }
} }
@Override @Override
public boolean onItemSelected(int pos, Object value) { protected boolean persistString(String value) {
mPaymentBackend.setForegroundMode((Boolean) value); mPaymentBackend.setForegroundMode(Integer.parseInt(value) != 0);
return true; return true;
} }
} }

View File

@@ -451,24 +451,26 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
boolean isSecureNotificationsDisabled = isSecureNotificationsDisabled(); boolean isSecureNotificationsDisabled = isSecureNotificationsDisabled();
boolean isUnredactedNotificationsDisabled = isUnredactedNotificationsDisabled(); boolean isUnredactedNotificationsDisabled = isUnredactedNotificationsDisabled();
ArrayList<CharSequence> entries = new ArrayList<>();
ArrayList<CharSequence> values = new ArrayList<>();
if (!isSecureNotificationsDisabled && !isUnredactedNotificationsDisabled) { if (!isSecureNotificationsDisabled && !isUnredactedNotificationsDisabled) {
mLockscreen.addItem(R.string.lock_screen_notifications_summary_show, entries.add(getString(R.string.lock_screen_notifications_summary_show));
R.string.lock_screen_notifications_summary_show); values.add(Integer.toString(R.string.lock_screen_notifications_summary_show));
} }
if (mSecure && !isSecureNotificationsDisabled) { if (mSecure && !isSecureNotificationsDisabled) {
mLockscreen.addItem(R.string.lock_screen_notifications_summary_hide, entries.add(getString(R.string.lock_screen_notifications_summary_hide));
R.string.lock_screen_notifications_summary_hide); values.add(Integer.toString(R.string.lock_screen_notifications_summary_hide));
} }
mLockscreen.addItem(R.string.lock_screen_notifications_summary_disable, entries.add(getString(R.string.lock_screen_notifications_summary_disable));
R.string.lock_screen_notifications_summary_disable); values.add(Integer.toString(R.string.lock_screen_notifications_summary_disable));
updateLockscreenNotifications(); updateLockscreenNotifications();
if (mLockscreen.getItemCount() > 1) { if (mLockscreen.getEntries().length > 1) {
mLockscreen.setCallback(new DropDownPreference.Callback() { mLockscreen.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object value) { public boolean onPreferenceChange(Preference preference, Object newValue) {
final int val = (Integer) value; final int val = Integer.parseInt((String) newValue);
if (val == mLockscreenSelectedValue) { if (val == mLockscreenSelectedValue) {
return true; return false;
} }
final boolean enabled = final boolean enabled =
val != R.string.lock_screen_notifications_summary_disable; val != R.string.lock_screen_notifications_summary_disable;
@@ -510,7 +512,7 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
mLockscreenSelectedValue = !enabled ? R.string.lock_screen_notifications_summary_disable : mLockscreenSelectedValue = !enabled ? R.string.lock_screen_notifications_summary_disable :
allowPrivate ? R.string.lock_screen_notifications_summary_show : allowPrivate ? R.string.lock_screen_notifications_summary_show :
R.string.lock_screen_notifications_summary_hide; R.string.lock_screen_notifications_summary_hide;
mLockscreen.setSelectedValue(mLockscreenSelectedValue); mLockscreen.setValue(Integer.toString(mLockscreenSelectedValue));
} }
private boolean getLockscreenNotificationsEnabled() { private boolean getLockscreenNotificationsEnabled() {

View File

@@ -72,9 +72,14 @@ public class SettingPref {
mTwoState = (TwoStatePreference) p; mTwoState = (TwoStatePreference) p;
} else if (p instanceof DropDownPreference) { } else if (p instanceof DropDownPreference) {
mDropDown = (DropDownPreference) p; mDropDown = (DropDownPreference) p;
for (int value : mValues) { CharSequence[] entries = new CharSequence[mValues.length];
mDropDown.addItem(getCaption(context.getResources(), value), value); CharSequence[] values = new CharSequence[mValues.length];
for (int i = 0; i < mValues.length; i++) {
entries[i] = getCaption(context.getResources(), mValues[i]);
values[i] = Integer.toString(mValues[i]);
} }
mDropDown.setEntries(entries);
mDropDown.setEntryValues(values);
} }
update(context); update(context);
if (mTwoState != null) { if (mTwoState != null) {
@@ -88,10 +93,10 @@ public class SettingPref {
return mTwoState; return mTwoState;
} }
if (mDropDown != null) { if (mDropDown != null) {
mDropDown.setCallback(new DropDownPreference.Callback() { p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object value) { public boolean onPreferenceChange(Preference preference, Object newValue) {
return setSetting(context, (Integer) value); return setSetting(context, Integer.parseInt((String) newValue));
} }
}); });
return mDropDown; return mDropDown;
@@ -116,7 +121,7 @@ public class SettingPref {
if (mTwoState != null) { if (mTwoState != null) {
mTwoState.setChecked(val != 0); mTwoState.setChecked(val != 0);
} else if (mDropDown != null) { } else if (mDropDown != null) {
mDropDown.setSelectedValue(val); mDropDown.setValue(Integer.toString(val));
} }
} }

View File

@@ -21,6 +21,8 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor; import android.database.Cursor;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.provider.CalendarContract.Calendars; import android.provider.CalendarContract.Calendars;
import android.provider.Settings; import android.provider.Settings;
@@ -78,19 +80,25 @@ public class ZenModeEventRuleSettings extends ZenModeRuleSettingsBase {
private void reloadCalendar() { private void reloadCalendar() {
mCalendars = getCalendars(mContext); mCalendars = getCalendars(mContext);
mCalendar.clearItems(); ArrayList<CharSequence> entries = new ArrayList<>();
mCalendar.addItem(R.string.zen_mode_event_rule_calendar_any, key(0, null)); ArrayList<CharSequence> values = new ArrayList<>();
entries.add(getString(R.string.zen_mode_event_rule_calendar_any));
values.add(key(0, null));
final String eventCalendar = mEvent != null ? mEvent.calendar : null; final String eventCalendar = mEvent != null ? mEvent.calendar : null;
boolean found = false; boolean found = false;
for (CalendarInfo calendar : mCalendars) { for (CalendarInfo calendar : mCalendars) {
mCalendar.addItem(calendar.name, key(calendar)); entries.add(calendar.name);
values.add(key(calendar));
if (eventCalendar != null && eventCalendar.equals(calendar.name)) { if (eventCalendar != null && eventCalendar.equals(calendar.name)) {
found = true; found = true;
} }
} }
if (eventCalendar != null && !found) { if (eventCalendar != null && !found) {
mCalendar.addItem(eventCalendar, key(mEvent.userId, eventCalendar)); entries.add(eventCalendar);
values.add(key(mEvent.userId, eventCalendar));
} }
mCalendar.setEntries(entries.toArray(new CharSequence[entries.size()]));
mCalendar.setEntryValues(values.toArray(new CharSequence[values.size()]));
} }
@Override @Override
@@ -100,11 +108,11 @@ public class ZenModeEventRuleSettings extends ZenModeRuleSettingsBase {
final PreferenceScreen root = getPreferenceScreen(); final PreferenceScreen root = getPreferenceScreen();
mCalendar = (DropDownPreference) root.findPreference(KEY_CALENDAR); mCalendar = (DropDownPreference) root.findPreference(KEY_CALENDAR);
mCalendar.setCallback(new DropDownPreference.Callback() { mCalendar.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object value) { public boolean onPreferenceChange(Preference preference, Object newValue) {
final String calendarKey = (String) value; final String calendarKey = (String) newValue;
if (calendarKey.equals(key(mEvent))) return true; if (calendarKey.equals(key(mEvent))) return false;
final int i = calendarKey.indexOf(':'); final int i = calendarKey.indexOf(':');
mEvent.userId = Integer.parseInt(calendarKey.substring(0, i)); mEvent.userId = Integer.parseInt(calendarKey.substring(0, i));
mEvent.calendar = calendarKey.substring(i + 1); mEvent.calendar = calendarKey.substring(i + 1);
@@ -117,17 +125,21 @@ public class ZenModeEventRuleSettings extends ZenModeRuleSettingsBase {
}); });
mReply = (DropDownPreference) root.findPreference(KEY_REPLY); mReply = (DropDownPreference) root.findPreference(KEY_REPLY);
mReply.addItem(R.string.zen_mode_event_rule_reply_any_except_no, mReply.setEntries(new CharSequence[] {
EventInfo.REPLY_ANY_EXCEPT_NO); getString(R.string.zen_mode_event_rule_reply_any_except_no),
mReply.addItem(R.string.zen_mode_event_rule_reply_yes_or_maybe, getString(R.string.zen_mode_event_rule_reply_yes_or_maybe),
EventInfo.REPLY_YES_OR_MAYBE); getString(R.string.zen_mode_event_rule_reply_yes),
mReply.addItem(R.string.zen_mode_event_rule_reply_yes, });
EventInfo.REPLY_YES); mReply.setEntryValues(new CharSequence[] {
mReply.setCallback(new DropDownPreference.Callback() { Integer.toString(EventInfo.REPLY_ANY_EXCEPT_NO),
Integer.toString(EventInfo.REPLY_YES_OR_MAYBE),
Integer.toString(EventInfo.REPLY_YES),
});
mReply.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object value) { public boolean onPreferenceChange(Preference preference, Object newValue) {
final int reply = (Integer) value; final int reply = Integer.parseInt((String) newValue);
if (reply == mEvent.reply) return true; if (reply == mEvent.reply) return false;
mEvent.reply = reply; mEvent.reply = reply;
updateRule(ZenModeConfig.toEventConditionId(mEvent)); updateRule(ZenModeConfig.toEventConditionId(mEvent));
return true; return true;
@@ -140,8 +152,8 @@ public class ZenModeEventRuleSettings extends ZenModeRuleSettingsBase {
@Override @Override
protected void updateControlsInternal() { protected void updateControlsInternal() {
mCalendar.setSelectedValue(key(mEvent)); mCalendar.setValue(key(mEvent));
mReply.setSelectedValue(mEvent.reply); mReply.setValue(Integer.toString(mEvent.reply));
} }
@Override @Override

View File

@@ -83,17 +83,17 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase implements Inde
mMessages = (DropDownPreference) root.findPreference(KEY_MESSAGES); mMessages = (DropDownPreference) root.findPreference(KEY_MESSAGES);
addSources(mMessages); addSources(mMessages);
mMessages.setCallback(new DropDownPreference.Callback() { mMessages.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
if (mDisableListeners) return true; if (mDisableListeners) return false;
final int val = (Integer) newValue; final int val = Integer.parseInt((String) newValue);
MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_MESSAGES, val); MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_MESSAGES, val);
final boolean allowMessages = val != SOURCE_NONE; final boolean allowMessages = val != SOURCE_NONE;
final int allowMessagesFrom = val == SOURCE_NONE ? mConfig.allowMessagesFrom : val; final int allowMessagesFrom = val == SOURCE_NONE ? mConfig.allowMessagesFrom : val;
if (allowMessages == mConfig.allowMessages if (allowMessages == mConfig.allowMessages
&& allowMessagesFrom == mConfig.allowMessagesFrom) { && allowMessagesFrom == mConfig.allowMessagesFrom) {
return true; return false;
} }
if (DEBUG) Log.d(TAG, "onPrefChange allowMessages=" + allowMessages if (DEBUG) Log.d(TAG, "onPrefChange allowMessages=" + allowMessages
+ " allowMessagesFrom=" + ZenModeConfig.sourceToString(allowMessagesFrom)); + " allowMessagesFrom=" + ZenModeConfig.sourceToString(allowMessagesFrom));
@@ -106,24 +106,24 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase implements Inde
mCalls = (DropDownPreference) root.findPreference(KEY_CALLS); mCalls = (DropDownPreference) root.findPreference(KEY_CALLS);
addSources(mCalls); addSources(mCalls);
mCalls.setCallback(new DropDownPreference.Callback() { mCalls.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
if (mDisableListeners) return true; if (mDisableListeners) return false;
final int val = (Integer) newValue; final int val = Integer.parseInt((String) newValue);
MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_CALLS, val); MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_CALLS, val);
final boolean allowCalls = val != SOURCE_NONE; final boolean allowCalls = val != SOURCE_NONE;
final int allowCallsFrom = val == SOURCE_NONE ? mConfig.allowCallsFrom : val; final int allowCallsFrom = val == SOURCE_NONE ? mConfig.allowCallsFrom : val;
if (allowCalls == mConfig.allowCalls if (allowCalls == mConfig.allowCalls
&& allowCallsFrom == mConfig.allowCallsFrom) { && allowCallsFrom == mConfig.allowCallsFrom) {
return true; return false;
} }
if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + allowCalls if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + allowCalls
+ " allowCallsFrom=" + ZenModeConfig.sourceToString(allowCallsFrom)); + " allowCallsFrom=" + ZenModeConfig.sourceToString(allowCallsFrom));
final ZenModeConfig newConfig = mConfig.copy(); final ZenModeConfig newConfig = mConfig.copy();
newConfig.allowCalls = allowCalls; newConfig.allowCalls = allowCalls;
newConfig.allowCallsFrom = allowCallsFrom; newConfig.allowCallsFrom = allowCallsFrom;
return setZenModeConfig(newConfig); return !setZenModeConfig(newConfig);
} }
}); });
@@ -161,9 +161,11 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase implements Inde
private void updateControls() { private void updateControls() {
mDisableListeners = true; mDisableListeners = true;
if (mCalls != null) { if (mCalls != null) {
mCalls.setSelectedValue(mConfig.allowCalls ? mConfig.allowCallsFrom : SOURCE_NONE); mCalls.setValue(Integer.toString(mConfig.allowCalls ? mConfig.allowCallsFrom
: SOURCE_NONE));
} }
mMessages.setSelectedValue(mConfig.allowMessages ? mConfig.allowMessagesFrom : SOURCE_NONE); mMessages.setValue(Integer.toString(mConfig.allowMessages ? mConfig.allowMessagesFrom
: SOURCE_NONE));
mReminders.setChecked(mConfig.allowReminders); mReminders.setChecked(mConfig.allowReminders);
mEvents.setChecked(mConfig.allowEvents); mEvents.setChecked(mConfig.allowEvents);
mRepeatCallers.setChecked(mConfig.allowRepeatCallers); mRepeatCallers.setChecked(mConfig.allowRepeatCallers);
@@ -178,10 +180,18 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase implements Inde
} }
private static void addSources(DropDownPreference pref) { private static void addSources(DropDownPreference pref) {
pref.addItem(R.string.zen_mode_from_anyone, ZenModeConfig.SOURCE_ANYONE); pref.setEntryValues(new CharSequence[] {
pref.addItem(R.string.zen_mode_from_contacts, ZenModeConfig.SOURCE_CONTACT); pref.getContext().getString(R.string.zen_mode_from_anyone),
pref.addItem(R.string.zen_mode_from_starred, ZenModeConfig.SOURCE_STAR); pref.getContext().getString(R.string.zen_mode_from_contacts),
pref.addItem(R.string.zen_mode_from_none, SOURCE_NONE); pref.getContext().getString(R.string.zen_mode_from_starred),
pref.getContext().getString(R.string.zen_mode_from_none),
});
pref.setEntryValues(new CharSequence[] {
Integer.toString(ZenModeConfig.SOURCE_ANYONE),
Integer.toString(ZenModeConfig.SOURCE_CONTACT),
Integer.toString(ZenModeConfig.SOURCE_STAR),
Integer.toString(SOURCE_NONE),
});
} }
} }

View File

@@ -24,6 +24,7 @@ import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.preference.Preference; import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener; import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.provider.Settings.Global; import android.provider.Settings.Global;
@@ -35,7 +36,6 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.Switch; import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger;
@@ -105,17 +105,22 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase
}); });
mZenMode = (DropDownPreference) root.findPreference(KEY_ZEN_MODE); mZenMode = (DropDownPreference) root.findPreference(KEY_ZEN_MODE);
mZenMode.addItem(R.string.zen_mode_option_important_interruptions, mZenMode.setEntries(new CharSequence[] {
Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); getString(R.string.zen_mode_option_important_interruptions),
mZenMode.addItem(R.string.zen_mode_option_alarms, Global.ZEN_MODE_ALARMS); getString(R.string.zen_mode_option_alarms),
mZenMode.addItem(R.string.zen_mode_option_no_interruptions, getString(R.string.zen_mode_option_no_interruptions),
Global.ZEN_MODE_NO_INTERRUPTIONS); });
mZenMode.setCallback(new DropDownPreference.Callback() { mZenMode.setEntryValues(new CharSequence[] {
Integer.toString(Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS),
Integer.toString(Global.ZEN_MODE_ALARMS),
Integer.toString(Global.ZEN_MODE_NO_INTERRUPTIONS),
});
mZenMode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onItemSelected(int pos, Object value) { public boolean onPreferenceChange(Preference preference, Object newValue) {
if (mDisableListeners) return true; if (mDisableListeners) return false;
final int zenMode = (Integer) value; final int zenMode = Integer.parseInt((String) newValue);
if (zenMode == mRule.zenMode) return true; if (zenMode == mRule.zenMode) return false;
if (DEBUG) Log.d(TAG, "onPrefChange zenMode=" + zenMode); if (DEBUG) Log.d(TAG, "onPrefChange zenMode=" + zenMode);
mRule.zenMode = zenMode; mRule.zenMode = zenMode;
setZenModeConfig(mConfig); setZenModeConfig(mConfig);
@@ -269,7 +274,7 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase
mDisableListeners = true; mDisableListeners = true;
updateRuleName(); updateRuleName();
updateControlsInternal(); updateControlsInternal();
mZenMode.setSelectedValue(mRule.zenMode); mZenMode.setValue(Integer.toString(mRule.zenMode));
if (mSwitchBar != null) { if (mSwitchBar != null) {
mSwitchBar.setChecked(mRule.enabled); mSwitchBar.setChecked(mRule.enabled);
} }