mirror of
https://github.com/moparisthebest/k-9
synced 2024-08-13 17:03:48 -04:00
fc8d2e9979
Conflicts: res/menu/accounts_context.xml res/menu/accounts_option.xml res/values/strings.xml src/com/fsck/k9/Account.java src/com/fsck/k9/activity/Accounts.java src/com/fsck/k9/activity/AsyncUIProcessor.java src/com/fsck/k9/activity/FolderList.java src/com/fsck/k9/activity/ImportListener.java src/com/fsck/k9/activity/K9Activity.java src/com/fsck/k9/activity/K9ListActivity.java src/com/fsck/k9/activity/MessageView.java src/com/fsck/k9/mail/store/ImapStore.java src/com/fsck/k9/mail/store/Pop3Store.java src/com/fsck/k9/mail/store/WebDavStore.java src/com/fsck/k9/mail/transport/SmtpTransport.java
175 lines
4.6 KiB
Java
175 lines
4.6 KiB
Java
/* Sourced from http://www.ebessette.com/d/TimePickerPreference
|
|
* on 2010-11-27 by jessev
|
|
*/
|
|
|
|
package com.fsck.k9.preferences;
|
|
|
|
import android.content.Context;
|
|
import android.preference.DialogPreference;
|
|
import android.text.format.DateFormat;
|
|
import android.util.AttributeSet;
|
|
import android.view.View;
|
|
import android.widget.TimePicker;
|
|
|
|
/**
|
|
* A preference type that allows a user to choose a time
|
|
*/
|
|
public class TimePickerPreference extends DialogPreference implements
|
|
TimePicker.OnTimeChangedListener {
|
|
|
|
/**
|
|
* The validation expression for this preference
|
|
*/
|
|
public static final String VALIDATION_EXPRESSION = "[0-2]*[0-9]:[0-5]*[0-9]";
|
|
|
|
/**
|
|
* The default value for this preference
|
|
*/
|
|
private String defaultValue;
|
|
/**
|
|
* Store the original value, in case the user
|
|
* chooses to abort the {@link DialogPreference}
|
|
* after making a change.
|
|
*/
|
|
private int originalHour = 0;
|
|
/**
|
|
* Store the original value, in case the user
|
|
* chooses to abort the {@link DialogPreference}
|
|
* after making a change.
|
|
*/
|
|
private int originalMinute = 0;
|
|
/**
|
|
* @param context
|
|
* @param attrs
|
|
*/
|
|
public TimePickerPreference(final Context context, final AttributeSet attrs) {
|
|
super(context, attrs);
|
|
initialize();
|
|
}
|
|
|
|
/**
|
|
* @param context
|
|
* @param attrs
|
|
* @param defStyle
|
|
*/
|
|
public TimePickerPreference(final Context context, final AttributeSet attrs,
|
|
final int defStyle) {
|
|
super(context, attrs, defStyle);
|
|
initialize();
|
|
}
|
|
|
|
/**
|
|
* Initialize this preference
|
|
*/
|
|
private void initialize() {
|
|
setPersistent(true);
|
|
}
|
|
|
|
/*
|
|
* (non-Javadoc)
|
|
*
|
|
* @see android.preference.DialogPreference#onCreateDialogView()
|
|
*/
|
|
@Override
|
|
protected View onCreateDialogView() {
|
|
|
|
TimePicker tp = new TimePicker(getContext());
|
|
tp.setIs24HourView(DateFormat.is24HourFormat(getContext()));
|
|
tp.setOnTimeChangedListener(this);
|
|
originalHour = getHour();
|
|
originalMinute = getMinute();
|
|
if (originalHour >= 0 && originalMinute >= 0) {
|
|
tp.setCurrentHour(originalHour);
|
|
tp.setCurrentMinute(originalMinute);
|
|
}
|
|
|
|
return tp;
|
|
}
|
|
|
|
/**
|
|
* @see
|
|
* android.widget.TimePicker.OnTimeChangedListener#onTimeChanged(android
|
|
* .widget.TimePicker, int, int)
|
|
*/
|
|
@Override
|
|
public void onTimeChanged(final TimePicker view, final int hour, final int minute) {
|
|
|
|
persistString(String.format("%02d:%02d", hour, minute));
|
|
callChangeListener(String.format("%02d:%02d", hour, minute));
|
|
}
|
|
|
|
/**
|
|
* If not a positive result, restore the original value
|
|
* before going to super.onDialogClosed(positiveResult).
|
|
*/
|
|
@Override
|
|
protected void onDialogClosed(boolean positiveResult) {
|
|
|
|
if (!positiveResult) {
|
|
persistString(String.format("%02d:%02d", originalHour, originalMinute));
|
|
callChangeListener(String.format("%02d:%02d", originalHour, originalMinute));
|
|
}
|
|
super.onDialogClosed(positiveResult);
|
|
}
|
|
|
|
/**
|
|
* @see android.preference.Preference#setDefaultValue(java.lang.Object)
|
|
*/
|
|
@Override
|
|
public void setDefaultValue(final Object defaultValue) {
|
|
// BUG this method is never called if you use the 'android:defaultValue' attribute in your XML preference file, not sure why it isn't
|
|
|
|
super.setDefaultValue(defaultValue);
|
|
|
|
if (!(defaultValue instanceof String)) {
|
|
return;
|
|
}
|
|
|
|
if (!((String) defaultValue).matches(VALIDATION_EXPRESSION)) {
|
|
return;
|
|
}
|
|
|
|
this.defaultValue = (String) defaultValue;
|
|
}
|
|
|
|
/**
|
|
* Get the hour value (in 24 hour time)
|
|
*
|
|
* @return The hour value, will be 0 to 23 (inclusive) or -1 if illegal
|
|
*/
|
|
private int getHour() {
|
|
String time = getTime();
|
|
if (time == null || !time.matches(VALIDATION_EXPRESSION)) {
|
|
return -1;
|
|
}
|
|
|
|
return Integer.valueOf(time.split(":")[0]);
|
|
}
|
|
|
|
/**
|
|
* Get the minute value
|
|
*
|
|
* @return the minute value, will be 0 to 59 (inclusive) or -1 if illegal
|
|
*/
|
|
private int getMinute() {
|
|
String time = getTime();
|
|
if (time == null || !time.matches(VALIDATION_EXPRESSION)) {
|
|
return -1;
|
|
}
|
|
|
|
return Integer.valueOf(time.split(":")[1]);
|
|
}
|
|
|
|
/**
|
|
* Get the time. It is only legal, if it matches
|
|
* {@link #VALIDATION_EXPRESSION}.
|
|
*
|
|
* @return the time as hh:mm
|
|
*/
|
|
public String getTime() {
|
|
return getPersistedString(this.defaultValue);
|
|
}
|
|
|
|
}
|
|
|