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}