diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index e39418576ab..12b9858ec81 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -416,10 +416,10 @@ public class DevelopmentSettings extends SettingsPreferenceFragment final UiModeManager uiManager = (UiModeManager) getSystemService( Context.UI_MODE_SERVICE); final int currentNightMode = uiManager.getNightMode(); - mNightModePreference.setSelectedValue(String.valueOf(currentNightMode)); - mNightModePreference.setCallback(new DropDownPreference.Callback() { + mNightModePreference.setValue(String.valueOf(currentNightMode)); + mNightModePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object newValue) { + public boolean onPreferenceChange(Preference preference, Object newValue) { try { final int value = Integer.parseInt((String) newValue); final UiModeManager uiManager = (UiModeManager) getSystemService( diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index d2daac8f667..275d465e6a7 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -16,12 +16,6 @@ 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.DOUBLE_TAP_TO_WAKE; import static android.provider.Settings.Secure.DOZE_ENABLED; @@ -48,6 +42,7 @@ import android.os.RemoteException; import android.os.SystemProperties; import android.preference.ListPreference; import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; @@ -56,6 +51,11 @@ import android.provider.Settings; import android.text.TextUtils; 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.List; @@ -162,8 +162,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements if (RotationPolicy.isRotationLockToggleVisible(activity)) { DropDownPreference rotatePreference = (DropDownPreference) findPreference(KEY_AUTO_ROTATE); - rotatePreference.addItem(activity.getString(R.string.display_auto_rotate_rotate), - false); int rotateLockedResourceId; // The following block sets the string used when rotation is locked. // 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; } } - rotatePreference.addItem(activity.getString(rotateLockedResourceId), true); - rotatePreference.setSelectedItem(RotationPolicy.isRotationLocked(activity) ? + rotatePreference.setEntries(new CharSequence[] { + activity.getString(R.string.display_auto_rotate_rotate), + activity.getString(rotateLockedResourceId), + }); + rotatePreference.setEntryValues(new CharSequence[] { "0", "1" }); + rotatePreference.setValueIndex(RotationPolicy.isRotationLocked(activity) ? 1 : 0); - rotatePreference.setCallback(new Callback() { + rotatePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object value) { - final boolean locked = (Boolean) value; + public boolean onPreferenceChange(Preference preference, Object newValue) { + final boolean locked = Integer.parseInt((String) newValue) != 0; MetricsLogger.action(getActivity(), MetricsLogger.ACTION_ROTATION_LOCK, locked); RotationPolicy.setRotationLock(activity, locked); diff --git a/src/com/android/settings/DropDownPreference.java b/src/com/android/settings/DropDownPreference.java index 0f5b06a07f6..dd18b7ec1bb 100644 --- a/src/com/android/settings/DropDownPreference.java +++ b/src/com/android/settings/DropDownPreference.java @@ -17,9 +17,9 @@ package com.android.settings; import android.content.Context; -import android.content.res.TypedArray; -import android.preference.Preference; +import android.preference.ListPreference; import android.util.AttributeSet; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -27,16 +27,13 @@ import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; 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 ArrayAdapter mAdapter; private final Spinner mSpinner; - private final ArrayList mValues = new ArrayList(); - - private Callback mCallback; - private int mSelectedPosition = -1; public DropDownPreference(Context context) { this(context, null); @@ -55,7 +52,12 @@ public class DropDownPreference extends Preference { mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override 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 @@ -64,75 +66,42 @@ public class DropDownPreference extends Preference { } }); setPersistent(false); - setOnPreferenceClickListener(new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - mSpinner.performClick(); - return true; - } - }); + updateEntries(); + } - // Support XML specification like ListPreferences do. - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DropDownPreference); - CharSequence[] entries = a.getTextArray(R.styleable.DropDownPreference_android_entries); - 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]); - } - } + @Override + protected void onClick() { + mSpinner.performClick(); } public void setDropDownWidth(int dimenResId) { mSpinner.setDropDownWidth(mContext.getResources().getDimensionPixelSize(dimenResId)); } - public void setCallback(Callback callback) { - mCallback = callback; + @Override + public void setEntries(CharSequence[] entries) { + super.setEntries(entries); + updateEntries(); } - public void setSelectedItem(int position) { - 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(){ + private void updateEntries() { 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 @@ -140,16 +109,12 @@ public class DropDownPreference extends Preference { super.onBindView(view); if (view.equals(mSpinner.getParent())) return; 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); final ViewGroup.LayoutParams lp = mSpinner.getLayoutParams(); lp.width = 0; mSpinner.setLayoutParams(lp); } - - public interface Callback { - boolean onItemSelected(int pos, Object value); - } } diff --git a/src/com/android/settings/applications/AppLaunchSettings.java b/src/com/android/settings/applications/AppLaunchSettings.java index b63bd7dfeed..d83ce309d7d 100644 --- a/src/com/android/settings/applications/AppLaunchSettings.java +++ b/src/com/android/settings/applications/AppLaunchSettings.java @@ -24,7 +24,7 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.os.UserHandle; import android.preference.Preference; -import android.preference.SwitchPreference; +import android.preference.Preference.OnPreferenceChangeListener; import android.util.ArraySet; import android.util.Log; import android.view.View; @@ -32,17 +32,16 @@ import android.view.View.OnClickListener; import com.android.internal.logging.MetricsLogger; import com.android.settings.DropDownPreference; -import com.android.settings.DropDownPreference.Callback; import com.android.settings.R; 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 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, Preference.OnPreferenceChangeListener { private static final String TAG = "AppLaunchSettings"; @@ -90,12 +89,16 @@ public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListe // * always // * ask // * never - mAppLinkState.addItem(R.string.app_link_open_always, - INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS); - mAppLinkState.addItem(R.string.app_link_open_ask, - INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK); - mAppLinkState.addItem(R.string.app_link_open_never, - INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER); + mAppLinkState.setEntries(new CharSequence[] { + getString(R.string.app_link_open_always), + getString(R.string.app_link_open_ask), + getString(R.string.app_link_open_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); 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 // verifications that might arrive after the user chooses 'ask' in this UI). final int state = mPm.getIntentVerificationStatus(mPackageName, UserHandle.myUserId()); - mAppLinkState.setSelectedValue( - (state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) + mAppLinkState.setValue( + Integer.toString((state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) ? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK - : state); + : state)); // Set the callback only after setting the initial selected item - mAppLinkState.setCallback(new Callback() { + mAppLinkState.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object value) { - return updateAppLinkState((Integer) value); + public boolean onPreferenceChange(Preference preference, Object newValue) { + return updateAppLinkState(Integer.parseInt((String) newValue)); } }); } diff --git a/src/com/android/settings/nfc/NfcForegroundPreference.java b/src/com/android/settings/nfc/NfcForegroundPreference.java index 8ee5535aedd..2e0c3d8ae44 100644 --- a/src/com/android/settings/nfc/NfcForegroundPreference.java +++ b/src/com/android/settings/nfc/NfcForegroundPreference.java @@ -16,18 +16,18 @@ package com.android.settings.nfc; import android.content.Context; + import com.android.settings.DropDownPreference; import com.android.settings.R; public class NfcForegroundPreference extends DropDownPreference implements - DropDownPreference.Callback, PaymentBackend.Callback { + PaymentBackend.Callback { private final PaymentBackend mPaymentBackend; public NfcForegroundPreference(Context context, PaymentBackend backend) { super(context); mPaymentBackend = backend; mPaymentBackend.registerCallback(this); - setCallback(this); refresh(); } @@ -43,19 +43,21 @@ public class NfcForegroundPreference extends DropDownPreference implements setTitle(getContext().getString(R.string.nfc_payment_use_default)); CharSequence favorOpen; CharSequence favorDefault; - clearItems(); - addItem(getContext().getString(R.string.nfc_payment_favor_open), true); - addItem(getContext().getString(R.string.nfc_payment_favor_default), false); + setEntries(new CharSequence[] { + getContext().getString(R.string.nfc_payment_favor_open), + getContext().getString(R.string.nfc_payment_favor_default) + }); + setEntryValues(new CharSequence[] { "1", "0" }); if (foregroundMode) { - setSelectedValue(true); + setValue("1"); } else { - setSelectedValue(false); + setValue("0"); } } @Override - public boolean onItemSelected(int pos, Object value) { - mPaymentBackend.setForegroundMode((Boolean) value); + protected boolean persistString(String value) { + mPaymentBackend.setForegroundMode(Integer.parseInt(value) != 0); return true; } } diff --git a/src/com/android/settings/notification/NotificationSettings.java b/src/com/android/settings/notification/NotificationSettings.java index e0d5e8c64db..d160e355b91 100644 --- a/src/com/android/settings/notification/NotificationSettings.java +++ b/src/com/android/settings/notification/NotificationSettings.java @@ -451,24 +451,26 @@ public class NotificationSettings extends SettingsPreferenceFragment implements boolean isSecureNotificationsDisabled = isSecureNotificationsDisabled(); boolean isUnredactedNotificationsDisabled = isUnredactedNotificationsDisabled(); + ArrayList entries = new ArrayList<>(); + ArrayList values = new ArrayList<>(); if (!isSecureNotificationsDisabled && !isUnredactedNotificationsDisabled) { - mLockscreen.addItem(R.string.lock_screen_notifications_summary_show, - R.string.lock_screen_notifications_summary_show); + entries.add(getString(R.string.lock_screen_notifications_summary_show)); + values.add(Integer.toString(R.string.lock_screen_notifications_summary_show)); } if (mSecure && !isSecureNotificationsDisabled) { - mLockscreen.addItem(R.string.lock_screen_notifications_summary_hide, - R.string.lock_screen_notifications_summary_hide); + entries.add(getString(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, - R.string.lock_screen_notifications_summary_disable); + entries.add(getString(R.string.lock_screen_notifications_summary_disable)); + values.add(Integer.toString(R.string.lock_screen_notifications_summary_disable)); updateLockscreenNotifications(); - if (mLockscreen.getItemCount() > 1) { - mLockscreen.setCallback(new DropDownPreference.Callback() { + if (mLockscreen.getEntries().length > 1) { + mLockscreen.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object value) { - final int val = (Integer) value; + public boolean onPreferenceChange(Preference preference, Object newValue) { + final int val = Integer.parseInt((String) newValue); if (val == mLockscreenSelectedValue) { - return true; + return false; } final boolean enabled = 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 : allowPrivate ? R.string.lock_screen_notifications_summary_show : R.string.lock_screen_notifications_summary_hide; - mLockscreen.setSelectedValue(mLockscreenSelectedValue); + mLockscreen.setValue(Integer.toString(mLockscreenSelectedValue)); } private boolean getLockscreenNotificationsEnabled() { diff --git a/src/com/android/settings/notification/SettingPref.java b/src/com/android/settings/notification/SettingPref.java index a20d1b4df6a..d78c3e4a8dd 100644 --- a/src/com/android/settings/notification/SettingPref.java +++ b/src/com/android/settings/notification/SettingPref.java @@ -72,9 +72,14 @@ public class SettingPref { mTwoState = (TwoStatePreference) p; } else if (p instanceof DropDownPreference) { mDropDown = (DropDownPreference) p; - for (int value : mValues) { - mDropDown.addItem(getCaption(context.getResources(), value), value); + CharSequence[] entries = new CharSequence[mValues.length]; + 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); if (mTwoState != null) { @@ -88,10 +93,10 @@ public class SettingPref { return mTwoState; } if (mDropDown != null) { - mDropDown.setCallback(new DropDownPreference.Callback() { + p.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object value) { - return setSetting(context, (Integer) value); + public boolean onPreferenceChange(Preference preference, Object newValue) { + return setSetting(context, Integer.parseInt((String) newValue)); } }); return mDropDown; @@ -116,7 +121,7 @@ public class SettingPref { if (mTwoState != null) { mTwoState.setChecked(val != 0); } else if (mDropDown != null) { - mDropDown.setSelectedValue(val); + mDropDown.setValue(Integer.toString(val)); } } diff --git a/src/com/android/settings/notification/ZenModeEventRuleSettings.java b/src/com/android/settings/notification/ZenModeEventRuleSettings.java index 004d5dff45a..91ca6674346 100644 --- a/src/com/android/settings/notification/ZenModeEventRuleSettings.java +++ b/src/com/android/settings/notification/ZenModeEventRuleSettings.java @@ -21,6 +21,8 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.database.Cursor; import android.os.UserHandle; import android.os.UserManager; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceScreen; import android.provider.CalendarContract.Calendars; import android.provider.Settings; @@ -78,19 +80,25 @@ public class ZenModeEventRuleSettings extends ZenModeRuleSettingsBase { private void reloadCalendar() { mCalendars = getCalendars(mContext); - mCalendar.clearItems(); - mCalendar.addItem(R.string.zen_mode_event_rule_calendar_any, key(0, null)); + ArrayList entries = new ArrayList<>(); + ArrayList 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; boolean found = false; 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)) { found = true; } } 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 @@ -100,11 +108,11 @@ public class ZenModeEventRuleSettings extends ZenModeRuleSettingsBase { final PreferenceScreen root = getPreferenceScreen(); mCalendar = (DropDownPreference) root.findPreference(KEY_CALENDAR); - mCalendar.setCallback(new DropDownPreference.Callback() { + mCalendar.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object value) { - final String calendarKey = (String) value; - if (calendarKey.equals(key(mEvent))) return true; + public boolean onPreferenceChange(Preference preference, Object newValue) { + final String calendarKey = (String) newValue; + if (calendarKey.equals(key(mEvent))) return false; final int i = calendarKey.indexOf(':'); mEvent.userId = Integer.parseInt(calendarKey.substring(0, i)); mEvent.calendar = calendarKey.substring(i + 1); @@ -117,17 +125,21 @@ public class ZenModeEventRuleSettings extends ZenModeRuleSettingsBase { }); mReply = (DropDownPreference) root.findPreference(KEY_REPLY); - mReply.addItem(R.string.zen_mode_event_rule_reply_any_except_no, - EventInfo.REPLY_ANY_EXCEPT_NO); - mReply.addItem(R.string.zen_mode_event_rule_reply_yes_or_maybe, - EventInfo.REPLY_YES_OR_MAYBE); - mReply.addItem(R.string.zen_mode_event_rule_reply_yes, - EventInfo.REPLY_YES); - mReply.setCallback(new DropDownPreference.Callback() { + mReply.setEntries(new CharSequence[] { + getString(R.string.zen_mode_event_rule_reply_any_except_no), + getString(R.string.zen_mode_event_rule_reply_yes_or_maybe), + getString(R.string.zen_mode_event_rule_reply_yes), + }); + mReply.setEntryValues(new CharSequence[] { + Integer.toString(EventInfo.REPLY_ANY_EXCEPT_NO), + Integer.toString(EventInfo.REPLY_YES_OR_MAYBE), + Integer.toString(EventInfo.REPLY_YES), + }); + mReply.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object value) { - final int reply = (Integer) value; - if (reply == mEvent.reply) return true; + public boolean onPreferenceChange(Preference preference, Object newValue) { + final int reply = Integer.parseInt((String) newValue); + if (reply == mEvent.reply) return false; mEvent.reply = reply; updateRule(ZenModeConfig.toEventConditionId(mEvent)); return true; @@ -140,8 +152,8 @@ public class ZenModeEventRuleSettings extends ZenModeRuleSettingsBase { @Override protected void updateControlsInternal() { - mCalendar.setSelectedValue(key(mEvent)); - mReply.setSelectedValue(mEvent.reply); + mCalendar.setValue(key(mEvent)); + mReply.setValue(Integer.toString(mEvent.reply)); } @Override diff --git a/src/com/android/settings/notification/ZenModePrioritySettings.java b/src/com/android/settings/notification/ZenModePrioritySettings.java index 6e34bf723bf..12faaca8b23 100644 --- a/src/com/android/settings/notification/ZenModePrioritySettings.java +++ b/src/com/android/settings/notification/ZenModePrioritySettings.java @@ -83,17 +83,17 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase implements Inde mMessages = (DropDownPreference) root.findPreference(KEY_MESSAGES); addSources(mMessages); - mMessages.setCallback(new DropDownPreference.Callback() { + mMessages.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object newValue) { - if (mDisableListeners) return true; - final int val = (Integer) newValue; + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (mDisableListeners) return false; + final int val = Integer.parseInt((String) newValue); MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_MESSAGES, val); final boolean allowMessages = val != SOURCE_NONE; final int allowMessagesFrom = val == SOURCE_NONE ? mConfig.allowMessagesFrom : val; if (allowMessages == mConfig.allowMessages && allowMessagesFrom == mConfig.allowMessagesFrom) { - return true; + return false; } if (DEBUG) Log.d(TAG, "onPrefChange allowMessages=" + allowMessages + " allowMessagesFrom=" + ZenModeConfig.sourceToString(allowMessagesFrom)); @@ -106,24 +106,24 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase implements Inde mCalls = (DropDownPreference) root.findPreference(KEY_CALLS); addSources(mCalls); - mCalls.setCallback(new DropDownPreference.Callback() { + mCalls.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override - public boolean onItemSelected(int pos, Object newValue) { - if (mDisableListeners) return true; - final int val = (Integer) newValue; + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (mDisableListeners) return false; + final int val = Integer.parseInt((String) newValue); MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_CALLS, val); final boolean allowCalls = val != SOURCE_NONE; final int allowCallsFrom = val == SOURCE_NONE ? mConfig.allowCallsFrom : val; if (allowCalls == mConfig.allowCalls && allowCallsFrom == mConfig.allowCallsFrom) { - return true; + return false; } if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + allowCalls + " allowCallsFrom=" + ZenModeConfig.sourceToString(allowCallsFrom)); final ZenModeConfig newConfig = mConfig.copy(); newConfig.allowCalls = allowCalls; newConfig.allowCallsFrom = allowCallsFrom; - return setZenModeConfig(newConfig); + return !setZenModeConfig(newConfig); } }); @@ -161,9 +161,11 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase implements Inde private void updateControls() { mDisableListeners = true; 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); mEvents.setChecked(mConfig.allowEvents); mRepeatCallers.setChecked(mConfig.allowRepeatCallers); @@ -178,10 +180,18 @@ public class ZenModePrioritySettings extends ZenModeSettingsBase implements Inde } private static void addSources(DropDownPreference pref) { - pref.addItem(R.string.zen_mode_from_anyone, ZenModeConfig.SOURCE_ANYONE); - pref.addItem(R.string.zen_mode_from_contacts, ZenModeConfig.SOURCE_CONTACT); - pref.addItem(R.string.zen_mode_from_starred, ZenModeConfig.SOURCE_STAR); - pref.addItem(R.string.zen_mode_from_none, SOURCE_NONE); + pref.setEntryValues(new CharSequence[] { + pref.getContext().getString(R.string.zen_mode_from_anyone), + pref.getContext().getString(R.string.zen_mode_from_contacts), + 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), + }); } } diff --git a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java index 0c85eca1ddb..052de8a0af6 100644 --- a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java +++ b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java @@ -24,6 +24,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceScreen; import android.provider.Settings.Global; @@ -35,7 +36,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Switch; -import android.widget.TextView; import android.widget.Toast; import com.android.internal.logging.MetricsLogger; @@ -105,17 +105,22 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase }); mZenMode = (DropDownPreference) root.findPreference(KEY_ZEN_MODE); - mZenMode.addItem(R.string.zen_mode_option_important_interruptions, - Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); - mZenMode.addItem(R.string.zen_mode_option_alarms, Global.ZEN_MODE_ALARMS); - mZenMode.addItem(R.string.zen_mode_option_no_interruptions, - Global.ZEN_MODE_NO_INTERRUPTIONS); - mZenMode.setCallback(new DropDownPreference.Callback() { + mZenMode.setEntries(new CharSequence[] { + getString(R.string.zen_mode_option_important_interruptions), + getString(R.string.zen_mode_option_alarms), + getString(R.string.zen_mode_option_no_interruptions), + }); + 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 - public boolean onItemSelected(int pos, Object value) { - if (mDisableListeners) return true; - final int zenMode = (Integer) value; - if (zenMode == mRule.zenMode) return true; + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (mDisableListeners) return false; + final int zenMode = Integer.parseInt((String) newValue); + if (zenMode == mRule.zenMode) return false; if (DEBUG) Log.d(TAG, "onPrefChange zenMode=" + zenMode); mRule.zenMode = zenMode; setZenModeConfig(mConfig); @@ -269,7 +274,7 @@ public abstract class ZenModeRuleSettingsBase extends ZenModeSettingsBase mDisableListeners = true; updateRuleName(); updateControlsInternal(); - mZenMode.setSelectedValue(mRule.zenMode); + mZenMode.setValue(Integer.toString(mRule.zenMode)); if (mSwitchBar != null) { mSwitchBar.setChecked(mRule.enabled); }