Settings: Hide downtime settings if not supported.

Depends on frameworks/base:
  I4f801018ddb0beb6eb9fa03a81c79f7949888a3f

Bug: 16373455

Change-Id: I88b526d947fb697a7abd4d4cf4225f926434915a
This commit is contained in:
John Spurlock
2014-11-30 16:22:09 -05:00
parent 838d6dc949
commit f68bc64593

View File

@@ -23,6 +23,7 @@ import android.app.Dialog;
import android.app.DialogFragment; import android.app.DialogFragment;
import android.app.FragmentManager; import android.app.FragmentManager;
import android.app.INotificationManager; import android.app.INotificationManager;
import android.app.NotificationManager;
import android.app.TimePickerDialog; import android.app.TimePickerDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
@@ -131,6 +132,7 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index
private SwitchPreference mMessages; private SwitchPreference mMessages;
private DropDownPreference mStarred; private DropDownPreference mStarred;
private SwitchPreference mEvents; private SwitchPreference mEvents;
private boolean mDowntimeSupported;
private Preference mDays; private Preference mDays;
private TimePickerPreference mStart; private TimePickerPreference mStart;
private TimePickerPreference mEnd; private TimePickerPreference mEnd;
@@ -227,99 +229,103 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index
}); });
final PreferenceCategory downtime = (PreferenceCategory) root.findPreference(KEY_DOWNTIME); final PreferenceCategory downtime = (PreferenceCategory) root.findPreference(KEY_DOWNTIME);
mDowntimeSupported = isDowntimeSupported(mContext);
mDays = downtime.findPreference(KEY_DAYS); if (!mDowntimeSupported) {
mDays.setOnPreferenceClickListener(new OnPreferenceClickListener() { removePreference(KEY_DOWNTIME);
@Override } else {
public boolean onPreferenceClick(Preference preference) { mDays = downtime.findPreference(KEY_DAYS);
new AlertDialog.Builder(mContext) mDays.setOnPreferenceClickListener(new OnPreferenceClickListener() {
.setTitle(R.string.zen_mode_downtime_days) @Override
.setView(new ZenModeDowntimeDaysSelection(mContext, mConfig.sleepMode) { public boolean onPreferenceClick(Preference preference) {
@Override new AlertDialog.Builder(mContext)
protected void onChanged(String mode) { .setTitle(R.string.zen_mode_downtime_days)
if (mDisableListeners) return; .setView(new ZenModeDowntimeDaysSelection(mContext, mConfig.sleepMode) {
if (Objects.equals(mode, mConfig.sleepMode)) return; @Override
if (DEBUG) Log.d(TAG, "days.onChanged sleepMode=" + mode); protected void onChanged(String mode) {
final ZenModeConfig newConfig = mConfig.copy(); if (mDisableListeners) return;
newConfig.sleepMode = mode; if (Objects.equals(mode, mConfig.sleepMode)) return;
setZenModeConfig(newConfig); if (DEBUG) Log.d(TAG, "days.onChanged sleepMode=" + mode);
} final ZenModeConfig newConfig = mConfig.copy();
}) newConfig.sleepMode = mode;
.setOnDismissListener(new OnDismissListener() { setZenModeConfig(newConfig);
@Override }
public void onDismiss(DialogInterface dialog) { })
updateDays(); .setOnDismissListener(new OnDismissListener() {
} @Override
}) public void onDismiss(DialogInterface dialog) {
.setPositiveButton(R.string.done_button, null) updateDays();
.show(); }
return true; })
} .setPositiveButton(R.string.done_button, null)
}); .show();
final FragmentManager mgr = getFragmentManager();
mStart = new TimePickerPreference(mContext, mgr);
mStart.setKey(KEY_START_TIME);
mStart.setTitle(R.string.zen_mode_start_time);
mStart.setCallback(new TimePickerPreference.Callback() {
@Override
public boolean onSetTime(int hour, int minute) {
if (mDisableListeners) return true;
if (!ZenModeConfig.isValidHour(hour)) return false;
if (!ZenModeConfig.isValidMinute(minute)) return false;
if (hour == mConfig.sleepStartHour && minute == mConfig.sleepStartMinute) {
return true; return true;
} }
if (DEBUG) Log.d(TAG, "onPrefChange sleepStart h=" + hour + " m=" + minute); });
final ZenModeConfig newConfig = mConfig.copy();
newConfig.sleepStartHour = hour;
newConfig.sleepStartMinute = minute;
return setZenModeConfig(newConfig);
}
});
downtime.addPreference(mStart);
mStart.setDependency(mDays.getKey());
mEnd = new TimePickerPreference(mContext, mgr); final FragmentManager mgr = getFragmentManager();
mEnd.setKey(KEY_END_TIME);
mEnd.setTitle(R.string.zen_mode_end_time); mStart = new TimePickerPreference(mContext, mgr);
mEnd.setCallback(new TimePickerPreference.Callback() { mStart.setKey(KEY_START_TIME);
@Override mStart.setTitle(R.string.zen_mode_start_time);
public boolean onSetTime(int hour, int minute) { mStart.setCallback(new TimePickerPreference.Callback() {
if (mDisableListeners) return true; @Override
if (!ZenModeConfig.isValidHour(hour)) return false; public boolean onSetTime(int hour, int minute) {
if (!ZenModeConfig.isValidMinute(minute)) return false; if (mDisableListeners) return true;
if (hour == mConfig.sleepEndHour && minute == mConfig.sleepEndMinute) { if (!ZenModeConfig.isValidHour(hour)) return false;
return true; if (!ZenModeConfig.isValidMinute(minute)) return false;
if (hour == mConfig.sleepStartHour && minute == mConfig.sleepStartMinute) {
return true;
}
if (DEBUG) Log.d(TAG, "onPrefChange sleepStart h=" + hour + " m=" + minute);
final ZenModeConfig newConfig = mConfig.copy();
newConfig.sleepStartHour = hour;
newConfig.sleepStartMinute = minute;
return setZenModeConfig(newConfig);
} }
if (DEBUG) Log.d(TAG, "onPrefChange sleepEnd h=" + hour + " m=" + minute); });
final ZenModeConfig newConfig = mConfig.copy(); downtime.addPreference(mStart);
newConfig.sleepEndHour = hour; mStart.setDependency(mDays.getKey());
newConfig.sleepEndMinute = minute;
return setZenModeConfig(newConfig);
}
});
downtime.addPreference(mEnd);
mEnd.setDependency(mDays.getKey());
mDowntimeMode = (DropDownPreference) downtime.findPreference(KEY_DOWNTIME_MODE); mEnd = new TimePickerPreference(mContext, mgr);
mDowntimeMode.addItem(R.string.zen_mode_downtime_mode_priority, false); mEnd.setKey(KEY_END_TIME);
mDowntimeMode.addItem(R.string.zen_mode_downtime_mode_none, true); mEnd.setTitle(R.string.zen_mode_end_time);
mDowntimeMode.setCallback(new DropDownPreference.Callback() { mEnd.setCallback(new TimePickerPreference.Callback() {
@Override @Override
public boolean onItemSelected(int pos, Object value) { public boolean onSetTime(int hour, int minute) {
if (mDisableListeners) return true; if (mDisableListeners) return true;
final boolean sleepNone = value instanceof Boolean ? ((Boolean) value) : false; if (!ZenModeConfig.isValidHour(hour)) return false;
if (mConfig == null || mConfig.sleepNone == sleepNone) return false; if (!ZenModeConfig.isValidMinute(minute)) return false;
final ZenModeConfig newConfig = mConfig.copy(); if (hour == mConfig.sleepEndHour && minute == mConfig.sleepEndMinute) {
newConfig.sleepNone = sleepNone; return true;
if (DEBUG) Log.d(TAG, "onPrefChange sleepNone=" + sleepNone); }
return setZenModeConfig(newConfig); if (DEBUG) Log.d(TAG, "onPrefChange sleepEnd h=" + hour + " m=" + minute);
} final ZenModeConfig newConfig = mConfig.copy();
}); newConfig.sleepEndHour = hour;
mDowntimeMode.setOrder(10); // sort at the bottom of the category newConfig.sleepEndMinute = minute;
mDowntimeMode.setDependency(mDays.getKey()); return setZenModeConfig(newConfig);
}
});
downtime.addPreference(mEnd);
mEnd.setDependency(mDays.getKey());
mDowntimeMode = (DropDownPreference) downtime.findPreference(KEY_DOWNTIME_MODE);
mDowntimeMode.addItem(R.string.zen_mode_downtime_mode_priority, false);
mDowntimeMode.addItem(R.string.zen_mode_downtime_mode_none, true);
mDowntimeMode.setCallback(new DropDownPreference.Callback() {
@Override
public boolean onItemSelected(int pos, Object value) {
if (mDisableListeners) return true;
final boolean sleepNone = value instanceof Boolean ? ((Boolean) value) : false;
if (mConfig == null || mConfig.sleepNone == sleepNone) return false;
final ZenModeConfig newConfig = mConfig.copy();
newConfig.sleepNone = sleepNone;
if (DEBUG) Log.d(TAG, "onPrefChange sleepNone=" + sleepNone);
return setZenModeConfig(newConfig);
}
});
mDowntimeMode.setOrder(10); // sort at the bottom of the category
mDowntimeMode.setDependency(mDays.getKey());
}
mAutomationCategory = (PreferenceCategory) findPreference(KEY_AUTOMATION); mAutomationCategory = (PreferenceCategory) findPreference(KEY_AUTOMATION);
mEntry = findPreference(KEY_ENTRY); mEntry = findPreference(KEY_ENTRY);
@@ -376,6 +382,7 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index
} }
private void updateEndSummary() { private void updateEndSummary() {
if (!mDowntimeSupported) return;
final int startMin = 60 * mConfig.sleepStartHour + mConfig.sleepStartMinute; final int startMin = 60 * mConfig.sleepStartHour + mConfig.sleepStartMinute;
final int endMin = 60 * mConfig.sleepEndHour + mConfig.sleepEndMinute; final int endMin = 60 * mConfig.sleepEndHour + mConfig.sleepEndMinute;
final boolean nextDay = startMin >= endMin; final boolean nextDay = startMin >= endMin;
@@ -399,10 +406,12 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index
mStarred.setSelectedValue(mConfig.allowFrom); mStarred.setSelectedValue(mConfig.allowFrom);
mEvents.setChecked(mConfig.allowEvents); mEvents.setChecked(mConfig.allowEvents);
updateStarredEnabled(); updateStarredEnabled();
updateDays(); if (mDowntimeSupported) {
mStart.setTime(mConfig.sleepStartHour, mConfig.sleepStartMinute); updateDays();
mEnd.setTime(mConfig.sleepEndHour, mConfig.sleepEndMinute); mStart.setTime(mConfig.sleepStartHour, mConfig.sleepStartMinute);
mDowntimeMode.setSelectedValue(mConfig.sleepNone); mEnd.setTime(mConfig.sleepEndHour, mConfig.sleepEndMinute);
mDowntimeMode.setSelectedValue(mConfig.sleepNone);
}
mDisableListeners = false; mDisableListeners = false;
refreshAutomationSection(); refreshAutomationSection();
updateEndSummary(); updateEndSummary();
@@ -552,9 +561,15 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index
mDialog = null; mDialog = null;
} }
private static boolean isDowntimeSupported(Context context) {
return NotificationManager.from(context)
.isSystemConditionProviderEnabled(ZenModeConfig.DOWNTIME_PATH);
}
// Enable indexing of searchable data // Enable indexing of searchable data
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() { new BaseSearchIndexProvider() {
@Override @Override
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
final SparseArray<String> keyTitles = allKeyTitles(context); final SparseArray<String> keyTitles = allKeyTitles(context);
@@ -570,6 +585,19 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index
} }
return result; return result;
} }
@Override
public List<String> getNonIndexableKeys(Context context) {
final ArrayList<String> rt = new ArrayList<String>();
if (!isDowntimeSupported(context)) {
rt.add(KEY_DOWNTIME);
rt.add(KEY_DAYS);
rt.add(KEY_START_TIME);
rt.add(KEY_END_TIME);
rt.add(KEY_DOWNTIME_MODE);
}
return rt;
}
}; };
private static class SettingPrefWithCallback extends SettingPref { private static class SettingPrefWithCallback extends SettingPref {