From f9c783085def547e82a8ab83826d74dd543ec0c2 Mon Sep 17 00:00:00 2001 From: Sam Whited Date: Mon, 15 Dec 2014 17:46:32 -0500 Subject: [PATCH 1/2] Update summary in TimePreference change listener Ensures the summary is updated even if we change the time preference programatically; also allows other places to stop the summary from being updated by setting a new listener. --- .../siacs/conversations/ui/TimePreference.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/ui/TimePreference.java b/src/main/java/eu/siacs/conversations/ui/TimePreference.java index 44a362243..e32b068c7 100644 --- a/src/main/java/eu/siacs/conversations/ui/TimePreference.java +++ b/src/main/java/eu/siacs/conversations/ui/TimePreference.java @@ -3,6 +3,7 @@ package eu.siacs.conversations.ui; import android.content.Context; import android.content.res.TypedArray; import android.preference.DialogPreference; +import android.preference.Preference; import android.util.AttributeSet; import android.view.View; import android.widget.TimePicker; @@ -11,12 +12,13 @@ import java.text.DateFormat; import java.util.Calendar; import java.util.Date; -public class TimePreference extends DialogPreference { +public class TimePreference extends DialogPreference implements Preference.OnPreferenceChangeListener { private TimePicker picker = null; public final static long DEFAULT_VALUE = 0; public TimePreference(final Context context, final AttributeSet attrs) { super(context, attrs, 0); + this.setOnPreferenceChangeListener(this); } protected void setTime(final long time) { @@ -25,8 +27,7 @@ public class TimePreference extends DialogPreference { notifyChanged(); } - protected void updateSummary() { - final long time = getPersistedLong(DEFAULT_VALUE); + protected void updateSummary(final long time) { final DateFormat dateFormat = android.text.format.DateFormat.getTimeFormat(getContext()); final Date date = new Date(time); setSummary(dateFormat.format(date.getTime())); @@ -71,7 +72,6 @@ public class TimePreference extends DialogPreference { } setTime(c.getTimeInMillis()); - updateSummary(); } } @@ -94,6 +94,12 @@ public class TimePreference extends DialogPreference { } setTime(time); - updateSummary(); + updateSummary(time); + } + + @Override + public boolean onPreferenceChange(final Preference preference, final Object newValue) { + ((TimePreference) preference).updateSummary((Long)newValue); + return true; } } From 0b4987581f6aeebd2b8c729b83aaebf9998ec0d6 Mon Sep 17 00:00:00 2001 From: Sam Whited Date: Tue, 16 Dec 2014 18:03:16 -0500 Subject: [PATCH 2/2] Handle time comparisons using longs --- .../java/eu/siacs/conversations/Config.java | 2 +- .../services/NotificationService.java | 19 +++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 698c403fd..90e4a8991 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -24,7 +24,7 @@ public final class Config { public static final boolean NO_PROXY_LOOKUP = false; //useful to debug ibb - private static final long MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000; + public static final long MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000; public static final long MAM_MAX_CATCHUP = MILLISECONDS_IN_DAY / 2; public static final int MAM_MAX_MESSAGES = 500; diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 9e21d1604..c27ab72a2 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -72,20 +72,15 @@ public class NotificationService { if (!mXmppConnectionService.getPreferences().getBoolean("enable_quiet_hours", false)) { return false; } - final Calendar startTime = Calendar.getInstance(); - startTime.setTimeInMillis(mXmppConnectionService.getPreferences().getLong("quiet_hours_start", TimePreference.DEFAULT_VALUE)); - final Calendar endTime = Calendar.getInstance(); - endTime.setTimeInMillis(mXmppConnectionService.getPreferences().getLong("quiet_hours_end", TimePreference.DEFAULT_VALUE)); - final Calendar nowTime = Calendar.getInstance(); + final long startTime = mXmppConnectionService.getPreferences().getLong("quiet_hours_start", TimePreference.DEFAULT_VALUE) % Config.MILLISECONDS_IN_DAY; + final long endTime = mXmppConnectionService.getPreferences().getLong("quiet_hours_end", TimePreference.DEFAULT_VALUE) % Config.MILLISECONDS_IN_DAY; + final long nowTime = Calendar.getInstance().getTimeInMillis() % Config.MILLISECONDS_IN_DAY; - startTime.set(nowTime.get(Calendar.YEAR), nowTime.get(Calendar.MONTH), nowTime.get(Calendar.DATE)); - endTime.set(nowTime.get(Calendar.YEAR), nowTime.get(Calendar.MONTH), nowTime.get(Calendar.DATE)); - - if (endTime.before(startTime)) { - endTime.add(Calendar.DATE, 1); + if (endTime < startTime) { + return nowTime > startTime || nowTime < endTime; + } else { + return nowTime > startTime && nowTime < endTime; } - - return nowTime.after(startTime) && nowTime.before(endTime); } public boolean conferenceNotificationsEnabled() {