TimePreference.java

  1package eu.siacs.conversations.ui;
  2
  3import android.content.Context;
  4import android.content.res.TypedArray;
  5import android.preference.DialogPreference;
  6import android.preference.Preference;
  7import android.util.AttributeSet;
  8import android.view.View;
  9import android.widget.TimePicker;
 10
 11import java.text.DateFormat;
 12import java.util.Calendar;
 13import java.util.Date;
 14
 15public class TimePreference extends DialogPreference implements Preference.OnPreferenceChangeListener {
 16	private TimePicker picker = null;
 17	public final static long DEFAULT_VALUE = 0;
 18
 19	public TimePreference(final Context context, final AttributeSet attrs) {
 20		super(context, attrs, 0);
 21		this.setOnPreferenceChangeListener(this);
 22	}
 23
 24	protected void setTime(final long time) {
 25		persistLong(time);
 26		notifyDependencyChange(shouldDisableDependents());
 27		notifyChanged();
 28	}
 29
 30	protected void updateSummary(final long time) {
 31		final DateFormat dateFormat = android.text.format.DateFormat.getTimeFormat(getContext());
 32		final Date date = new Date(time);
 33		setSummary(dateFormat.format(date.getTime()));
 34	}
 35
 36	@Override
 37	protected View onCreateDialogView() {
 38		picker = new TimePicker(getContext());
 39		picker.setIs24HourView(android.text.format.DateFormat.is24HourFormat(getContext()));
 40		return picker;
 41	}
 42
 43	protected Calendar getPersistedTime() {
 44		final Calendar c = Calendar.getInstance();
 45		c.setTimeInMillis(getPersistedLong(DEFAULT_VALUE));
 46
 47		return c;
 48	}
 49
 50	@SuppressWarnings("NullableProblems")
 51	@Override
 52	protected void onBindDialogView(final View v) {
 53		super.onBindDialogView(v);
 54		final Calendar c = getPersistedTime();
 55
 56		picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
 57		picker.setCurrentMinute(c.get(Calendar.MINUTE));
 58	}
 59
 60	@Override
 61	protected void onDialogClosed(final boolean positiveResult) {
 62		super.onDialogClosed(positiveResult);
 63
 64		if (positiveResult) {
 65			final Calendar c = Calendar.getInstance();
 66			c.set(Calendar.MINUTE, picker.getCurrentMinute());
 67			c.set(Calendar.HOUR_OF_DAY, picker.getCurrentHour());
 68
 69
 70			if (!callChangeListener(c.getTimeInMillis())) {
 71				return;
 72			}
 73
 74			setTime(c.getTimeInMillis());
 75		}
 76	}
 77
 78	@Override
 79	protected Object onGetDefaultValue(final TypedArray a, final int index) {
 80		return a.getInteger(index, 0);
 81	}
 82
 83	@Override
 84	protected void onSetInitialValue(final boolean restorePersistedValue, final Object defaultValue) {
 85		long time;
 86		if (defaultValue == null) {
 87			time = restorePersistedValue ? getPersistedLong(DEFAULT_VALUE) : DEFAULT_VALUE;
 88		} else if (defaultValue instanceof Long) {
 89			time = restorePersistedValue ? getPersistedLong((Long) defaultValue) : (Long) defaultValue;
 90		} else if (defaultValue instanceof Calendar) {
 91			time = restorePersistedValue ? getPersistedLong(((Calendar)defaultValue).getTimeInMillis()) : ((Calendar)defaultValue).getTimeInMillis();
 92		} else {
 93			time = restorePersistedValue ? getPersistedLong(DEFAULT_VALUE) : DEFAULT_VALUE;
 94		}
 95
 96		setTime(time);
 97		updateSummary(time);
 98	}
 99
100	@Override
101	public boolean onPreferenceChange(final Preference preference, final Object newValue) {
102		((TimePreference) preference).updateSummary((Long)newValue);
103		return true;
104	}
105}