Make DropDownPreference extend ListPreference
Lots of updates to handle static setting of entries/values Callbacks are now through preference changes Fix weird inconsistencies in callback return values... Change-Id: I2ebe02c3492ce543162efcd55bdae3f2c4039287
This commit is contained in:
@@ -451,24 +451,26 @@ public class NotificationSettings extends SettingsPreferenceFragment implements
|
||||
|
||||
boolean isSecureNotificationsDisabled = isSecureNotificationsDisabled();
|
||||
boolean isUnredactedNotificationsDisabled = isUnredactedNotificationsDisabled();
|
||||
ArrayList<CharSequence> entries = new ArrayList<>();
|
||||
ArrayList<CharSequence> 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() {
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<CharSequence> entries = new ArrayList<>();
|
||||
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;
|
||||
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
|
||||
|
||||
@@ -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),
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user