TimePreference.java

 1package eu.siacs.conversations.ui;
 2
 3import android.content.Context;
 4import android.content.res.TypedArray;
 5import android.preference.DialogPreference;
 6import android.util.AttributeSet;
 7import android.view.View;
 8import android.widget.TimePicker;
 9
10import java.text.DateFormat;
11import java.util.Calendar;
12import java.util.Date;
13
14public class TimePreference extends DialogPreference {
15	private TimePicker picker = null;
16	public final static long DEFAULT_VALUE = 0;
17
18	public TimePreference(final Context context, final AttributeSet attrs) {
19		super(context, attrs, 0);
20	}
21
22	protected void setTime(final long time) {
23		persistLong(time);
24		notifyDependencyChange(shouldDisableDependents());
25		notifyChanged();
26	}
27
28	protected void updateSummary() {
29		final long time = getPersistedLong(DEFAULT_VALUE);
30		final DateFormat dateFormat = android.text.format.DateFormat.getTimeFormat(getContext());
31		final Date date = new Date(time);
32		setSummary(dateFormat.format(date.getTime()));
33	}
34
35	@Override
36	protected View onCreateDialogView() {
37		picker = new TimePicker(getContext());
38		picker.setIs24HourView(android.text.format.DateFormat.is24HourFormat(getContext()));
39		return picker;
40	}
41
42	protected Calendar getPersistedTime() {
43		final Calendar c = Calendar.getInstance();
44		c.setTimeInMillis(getPersistedLong(DEFAULT_VALUE));
45
46		return c;
47	}
48
49	@SuppressWarnings("NullableProblems")
50	@Override
51	protected void onBindDialogView(final View v) {
52		super.onBindDialogView(v);
53		final Calendar c = getPersistedTime();
54
55		picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
56		picker.setCurrentMinute(c.get(Calendar.MINUTE));
57	}
58
59	@Override
60	protected void onDialogClosed(final boolean positiveResult) {
61		super.onDialogClosed(positiveResult);
62
63		if (positiveResult) {
64			final Calendar c = Calendar.getInstance();
65			c.set(Calendar.MINUTE, picker.getCurrentMinute());
66			c.set(Calendar.HOUR_OF_DAY, picker.getCurrentHour());
67
68
69			if (!callChangeListener(c.getTimeInMillis())) {
70				return;
71			}
72
73			setTime(c.getTimeInMillis());
74			updateSummary();
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();
98	}
99}