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