From 9a06d064b163d03bd5583b9f27b6ae13a32ec087 Mon Sep 17 00:00:00 2001 From: Fynn Date: Sun, 2 Jul 2017 14:10:44 +0200 Subject: [PATCH 1/5] test --- .../haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java b/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java index 8835acf..92e415a 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java @@ -337,7 +337,6 @@ public void processFinish(long delaySecs) { cal.add(Calendar.MINUTE,-Math.abs(delayMinutes)); } - Log.d("ExpandedAlarmViewHolder","calendar time after set: "+cal.getTime().toString()); Log.d("ExpandedAlarmViewHolder","setting new hours to: "+cal.get(Calendar.HOUR_OF_DAY)); Log.d("ExpandedAlarmViewHolder","setting new minutes to: "+cal.get(Calendar.MINUTE)); From a97693317efd57a33cd35ceafffdc66450bd50eb Mon Sep 17 00:00:00 2001 From: Fynn Date: Mon, 3 Jul 2017 00:30:23 +0200 Subject: [PATCH 2/5] need to fix alarm NOT NULL CONSTRAINT failed on alarm.rescheduled --> try setting in builder class --> build in alarmcursor --- .../haayhappen/clockplus/MainActivity.java | 8 +-- .../haayhappen/clockplus/alarms/Alarm.java | 17 +++++ .../background/UpcomingAlarmReceiver.java | 65 ++++++++++++++++++- .../clockplus/alarms/data/AlarmCursor.java | 1 + .../clockplus/alarms/data/AlarmsTable.java | 2 + .../alarms/ui/ExpandedAlarmViewHolder.java | 53 ++++++++++----- .../data/ClockAppDatabaseHelper.java | 3 +- .../clockplus/location/DistanceHandler.java | 7 +- 8 files changed, 125 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/haayhappen/clockplus/MainActivity.java b/app/src/main/java/com/haayhappen/clockplus/MainActivity.java index 678ad7e..be6dfc4 100644 --- a/app/src/main/java/com/haayhappen/clockplus/MainActivity.java +++ b/app/src/main/java/com/haayhappen/clockplus/MainActivity.java @@ -82,10 +82,10 @@ public void onClick(View view) { @Override protected void onResume() { //TODO activate when published - //if (prefs.getBoolean("firstrun", true)) { - //startActivity(new Intent(this, IntroActivity.class)); - // prefs.edit().putBoolean("firstrun", false).commit(); - //} +// if (prefs.getBoolean("firstrun", true)) { +// startActivity(new Intent(this, IntroActivity.class)); +// prefs.edit().putBoolean("firstrun", false).commit(); +// } super.onResume(); } diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/Alarm.java b/app/src/main/java/com/haayhappen/clockplus/alarms/Alarm.java index 917c5c3..38eb41e 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/Alarm.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/Alarm.java @@ -28,8 +28,10 @@ public abstract class Alarm extends ObjectWithId implements Parcelable { private boolean enabled; private final boolean[] recurringDays = new boolean[NUM_DAYS]; private boolean ignoreUpcomingRingTime; + private boolean rescheduled; // ==================================================== + public abstract int hour(); public abstract int minutes(); @@ -48,6 +50,7 @@ public abstract class Alarm extends ObjectWithId implements Parcelable { public abstract boolean vibrates(); + /** * Initializes a Builder to the same property values as this instance */ @@ -64,6 +67,7 @@ public void copyMutableFieldsTo(Alarm target) { target.enabled = this.enabled; System.arraycopy(this.recurringDays, 0, target.recurringDays, 0, NUM_DAYS); target.ignoreUpcomingRingTime = this.ignoreUpcomingRingTime; + target.rescheduled = this.rescheduled; } public static Builder builder() { @@ -79,6 +83,15 @@ public static Builder builder() { .realDuration(0) .ringtone("") .vibrates(false); + + } + + public boolean isRescheduled() { + return rescheduled; + } + + public void setRescheduled(boolean rescheduled) { + this.rescheduled = rescheduled; } public void snooze(int minutes) { @@ -263,6 +276,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeLong(getId()); dest.writeLong(snoozingUntilMillis); dest.writeInt(enabled ? 1 : 0); + dest.writeInt(rescheduled ? 1 : 0); //NEW added 02.07.17 21:44 dest.writeBooleanArray(recurringDays); dest.writeInt(ignoreUpcomingRingTime ? 1 : 0); } @@ -282,6 +296,7 @@ private static Alarm create(Parcel in) { alarm.setId(in.readLong()); alarm.snoozingUntilMillis = in.readLong(); alarm.enabled = in.readInt() != 0; + alarm.rescheduled = in.readInt() != 0; in.readBooleanArray(alarm.recurringDays); alarm.ignoreUpcomingRingTime = in.readInt() != 0; return alarm; @@ -322,6 +337,8 @@ public abstract static class Builder { public abstract Builder vibrates(boolean vibrates); + //public abstract Builder reschedules(boolean reschedules); + /* package */ abstract Alarm autoBuild(); diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java b/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java index 93bd08c..ac10f8d 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java @@ -31,9 +31,17 @@ import com.haayhappen.clockplus.R; import com.haayhappen.clockplus.alarms.Alarm; import com.haayhappen.clockplus.alarms.misc.AlarmController; +import com.haayhappen.clockplus.location.DistanceHandler; +import com.haayhappen.clockplus.location.Location; import com.haayhappen.clockplus.util.ContentIntentUtils; import com.haayhappen.clockplus.util.ParcelableUtil; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.concurrent.TimeUnit; + import static android.app.PendingIntent.FLAG_ONE_SHOT; import static com.haayhappen.clockplus.R.string.alarm; import static com.haayhappen.clockplus.util.TimeFormatUtils.formatTime; @@ -49,6 +57,8 @@ public class UpcomingAlarmReceiver extends BroadcastReceiver { public static final String EXTRA_ALARM = "com.philliphsu.clock2.extra.ALARM"; //public static final String EXTRA_ALARM = "com.haayhappen.clockplus.extra.ALARM"; + private AlarmController mAlarmController; + @Override public void onReceive(final Context context, final Intent intent) { @@ -57,11 +67,14 @@ public void onReceive(final Context context, final Intent intent) { //get the byte array out of the intents' extras byte[] byteArray = extras.getByteArray(EXTRA_ALARM); //unmarshall the array to our parcel(alarm) - final Alarm alarm = ParcelableUtil.unmarshall(byteArray,Alarm.CREATOR); + final Alarm alarm = ParcelableUtil.unmarshall(byteArray, Alarm.CREATOR); if (alarm == null) { throw new IllegalStateException("No alarm received"); } + Log.d(TAG, "Received Alarm which rings in: " + alarm.ringsIn()); + Log.d(TAG, "Received Alarm which rings at: " + alarm.ringsAt()); + Log.d(TAG, "Does the alarm ring within 1 hour?: " + alarm.ringsWithinHours(1)); final long id = alarm.getId(); final NotificationManager nm = (NotificationManager) @@ -83,7 +96,7 @@ public void onReceive(final Context context, final Intent intent) { if (ACTION_SHOW_SNOOZING.equals(intent.getAction())) { if (!alarm.isSnoozed()) throw new IllegalStateException("Can't show snoozing notif. if alarm not snoozed!"); - title="Fix me"; + title = "Fix me"; //TODO fix this //title = alarm.label().isEmpty() ? context.getString(alarm) : alarm.label(); text = context.getString(R.string.title_snoozing_until, @@ -111,5 +124,53 @@ public void onReceive(final Context context, final Intent intent) { nm.notify(TAG, (int) id, note); } } + //Check that alarm rings within 1 hours + if (alarm.ringsWithinHours(1)) { + mAlarmController = new AlarmController(context, null); + DistanceHandler asyncTask = new DistanceHandler(alarm, new DistanceHandler.AsyncResponse() { + @Override + public void processFinish(long delaySecs) { + int minutesUntilRing = (int) TimeUnit.MILLISECONDS.toMinutes(alarm.ringsIn()); + int testseconds = 240; + int delayMinutes = (int) TimeUnit.SECONDS.toMinutes(testseconds); + + if (delayMinutes < minutesUntilRing) { + if (!alarm.isRescheduled()) { + Alarm newAlarm = alarm.toBuilder() + .minutes(minutesUntilRing - delayMinutes) + .build(); + alarm.setRescheduled(true); + alarm.copyMutableFieldsTo(newAlarm); + persistUpdatedAlarm(newAlarm, false); + Log.d(TAG, "Rescheduled alarm, so user will be waked up earlier."); + } + + + NotificationCompat.Builder builder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_alarm_24dp) + .setContentTitle("TrafficAlarm") + .setContentText("Alarm has been rescheduled: " + (minutesUntilRing - delayMinutes) + " minutes"); + + // Add as notification + NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + manager.notify(0, builder.build()); + } + + } + }); + + try { + asyncTask.execute(); + } catch (Exception e) { + e.getMessage(); + } + } + + } + + final void persistUpdatedAlarm(Alarm newAlarm, boolean showSnackbar) { + mAlarmController.scheduleAlarm(newAlarm, showSnackbar); + mAlarmController.save(newAlarm); } } diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmCursor.java b/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmCursor.java index 29a0911..61245a8 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmCursor.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmCursor.java @@ -70,6 +70,7 @@ public Alarm getItem() { .build(); alarm.setId(getLong(getColumnIndexOrThrow(AlarmsTable.COLUMN_ID))); alarm.setEnabled(isTrue(AlarmsTable.COLUMN_ENABLED)); + alarm.setRescheduled(isTrue(AlarmsTable.COLUMN_RESCHEDULED)); alarm.setSnoozing(getLong(getColumnIndexOrThrow(AlarmsTable.COLUMN_SNOOZING_UNTIL_MILLIS))); alarm.setRecurring(SUNDAY, isTrue(AlarmsTable.COLUMN_SUNDAY)); alarm.setRecurring(MONDAY, isTrue(AlarmsTable.COLUMN_MONDAY)); diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmsTable.java b/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmsTable.java index 7cbf39d..da9f13a 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmsTable.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmsTable.java @@ -45,6 +45,7 @@ private AlarmsTable() { public static final String COLUMN_RINGTONE = "ringtone"; public static final String COLUMN_VIBRATES = "vibrates"; public static final String COLUMN_ENABLED = "enabled"; + public static final String COLUMN_RESCHEDULED = "rescheduled"; // TODO: Delete this column, becuase new sort order does not consider it @@ -114,6 +115,7 @@ public static void onCreate(SQLiteDatabase db) { + COLUMN_RINGTONE + " TEXT NOT NULL, " + COLUMN_VIBRATES + " INTEGER NOT NULL, " + COLUMN_ENABLED + " INTEGER NOT NULL, " + + COLUMN_RESCHEDULED + " INTEGER NOT NULL, " + COLUMN_RING_TIME_MILLIS + " INTEGER NOT NULL, " + COLUMN_SNOOZING_UNTIL_MILLIS + " INTEGER, " + COLUMN_SUNDAY + " INTEGER NOT NULL DEFAULT 0, " diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java b/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java index 92e415a..842caec 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java @@ -326,29 +326,46 @@ public void processFinish(long delaySecs) { //TODO remove all debug logs for production Calendar cal = Calendar.getInstance(); cal.setTime(d); - Log.d("ExpandedAlarmViewHolder","calendar time before new set: "+cal.getTime().toString()); - Log.d("ExpandedAlarmViewHolder","hours to be subtracted: "+delayHours); - Log.d("ExpandedAlarmViewHolder","minutes to be subtracted: "+delayMinutes); + Log.d(TAG, "calendar time before new set: " + cal.getTime().toString()); + Log.d(TAG, "hours to be subtracted: " + delayHours); + Log.d(TAG, "minutes to be subtracted: " + delayMinutes); - if (delayHours == 0){ + if (delayHours == 0) { + cal.add(Calendar.MINUTE, -Math.abs(delayMinutes)); + } else { + cal.add(Calendar.HOUR_OF_DAY, -Math.abs(delayHours)); cal.add(Calendar.MINUTE, -Math.abs(delayMinutes)); - }else{ - cal.add(Calendar.HOUR_OF_DAY,-Math.abs(delayHours)); - cal.add(Calendar.MINUTE,-Math.abs(delayMinutes)); } - Log.d("ExpandedAlarmViewHolder","calendar time after set: "+cal.getTime().toString()); - Log.d("ExpandedAlarmViewHolder","setting new hours to: "+cal.get(Calendar.HOUR_OF_DAY)); - Log.d("ExpandedAlarmViewHolder","setting new minutes to: "+cal.get(Calendar.MINUTE)); - - Alarm newAlarm = oldAlarm.toBuilder() - .minutes(cal.get(Calendar.MINUTE)) - .hour(cal.get(Calendar.HOUR_OF_DAY)) - .build(); - oldAlarm.copyMutableFieldsTo(newAlarm); - persistUpdatedAlarm(newAlarm, false); + Log.d(TAG, "calendar time after set: " + cal.getTime().toString()); + Log.d(TAG, "setting new hours to: " + cal.get(Calendar.HOUR_OF_DAY)); + Log.d(TAG, "setting new minutes to: " + cal.get(Calendar.MINUTE)); + + //TODO Update Alarm depending what is set in the preferences (example: 1 hour) +// Alarm newAlarm = oldAlarm.toBuilder() +// .minutes(cal.get(Calendar.MINUTE)) +// .hour(cal.get(Calendar.HOUR_OF_DAY)) +// .build(); +// oldAlarm.copyMutableFieldsTo(newAlarm); +// persistUpdatedAlarm(newAlarm, false); //############################# - duration.setText(String.valueOf(delayMinutes) + "delay"); + String delay = "Expected delay: "; + + if (delayHours > 0) { + if (delayHours == 1) { + delay += delayHours + " Hour and "; + } else { + delay += delayHours + " Hours and "; + } + } + + if (delayMinutes == 1) { + delay += delayMinutes + " Minute"; + } else { + delay += delayMinutes + " Minutes"; + } + + duration.setText(delay); } }); diff --git a/app/src/main/java/com/haayhappen/clockplus/data/ClockAppDatabaseHelper.java b/app/src/main/java/com/haayhappen/clockplus/data/ClockAppDatabaseHelper.java index 9b79520..62043fe 100644 --- a/app/src/main/java/com/haayhappen/clockplus/data/ClockAppDatabaseHelper.java +++ b/app/src/main/java/com/haayhappen/clockplus/data/ClockAppDatabaseHelper.java @@ -29,6 +29,7 @@ public class ClockAppDatabaseHelper extends SQLiteOpenHelper { private static final String TAG = "ClockAppDatabaseHelper"; private static final String DB_NAME = "clock_app.db"; private static final int VERSION_1 = 1; + private static final int VERSION_2 = 2; private static ClockAppDatabaseHelper sDatabaseHelper; @@ -42,7 +43,7 @@ public static ClockAppDatabaseHelper getInstance(Context context) { * @param context the Context with which the application context will be retrieved */ private ClockAppDatabaseHelper(Context context) { - super(context.getApplicationContext(), DB_NAME, null, VERSION_1); + super(context.getApplicationContext(), DB_NAME, null, VERSION_2); } @Override diff --git a/app/src/main/java/com/haayhappen/clockplus/location/DistanceHandler.java b/app/src/main/java/com/haayhappen/clockplus/location/DistanceHandler.java index 9587d56..26156cc 100644 --- a/app/src/main/java/com/haayhappen/clockplus/location/DistanceHandler.java +++ b/app/src/main/java/com/haayhappen/clockplus/location/DistanceHandler.java @@ -126,12 +126,7 @@ protected Long doInBackground(String... params) { //Get delay if one exists: if (durationInTrafficLong > durationLong){ try{ - Long del; - del = (durationInTrafficLong-durationLong); - //del = del/60; - //delay in seconds - //TODO Philipp : subtract delay time from alarm ringtime, so alarm rings earlier -how the fuck - delay = del; + delay = (durationInTrafficLong-durationLong); } catch (NumberFormatException nfe){ nfe.printStackTrace(); From cfdde8a3984f7a28f5aa2a27158b73cc5c03b332 Mon Sep 17 00:00:00 2001 From: Fynn Merlevede Date: Wed, 5 Jul 2017 11:17:09 +0200 Subject: [PATCH 3/5] small fix --- .../alarms/background/UpcomingAlarmReceiver.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java b/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java index ac10f8d..8c7693a 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java @@ -23,7 +23,6 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.os.Parcel; import android.support.v4.app.NotificationCompat; import android.util.Log; @@ -32,18 +31,12 @@ import com.haayhappen.clockplus.alarms.Alarm; import com.haayhappen.clockplus.alarms.misc.AlarmController; import com.haayhappen.clockplus.location.DistanceHandler; -import com.haayhappen.clockplus.location.Location; import com.haayhappen.clockplus.util.ContentIntentUtils; import com.haayhappen.clockplus.util.ParcelableUtil; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; import java.util.concurrent.TimeUnit; import static android.app.PendingIntent.FLAG_ONE_SHOT; -import static com.haayhappen.clockplus.R.string.alarm; import static com.haayhappen.clockplus.util.TimeFormatUtils.formatTime; // TODO: Consider registering this locally instead of in the manifest. @@ -59,6 +52,7 @@ public class UpcomingAlarmReceiver extends BroadcastReceiver { private AlarmController mAlarmController; + @Override public void onReceive(final Context context, final Intent intent) { From 4a9025318831e9b9332fd1891b6d007808940715 Mon Sep 17 00:00:00 2001 From: Fynn Merlevede Date: Wed, 5 Jul 2017 11:54:41 +0200 Subject: [PATCH 4/5] fixed database issue --> rescheduled now working --- .../haayhappen/clockplus/alarms/Alarm.java | 26 ++++++++++--------- .../background/UpcomingAlarmReceiver.java | 5 ++-- .../clockplus/alarms/data/AlarmCursor.java | 3 ++- .../alarms/data/AlarmsTableManager.java | 1 + .../alarms/ui/ExpandedAlarmViewHolder.java | 15 +++-------- app/src/main/res/xml/preferences.xml | 2 +- gradle.properties | 1 + 7 files changed, 25 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/Alarm.java b/app/src/main/java/com/haayhappen/clockplus/alarms/Alarm.java index 38eb41e..12dfb61 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/Alarm.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/Alarm.java @@ -28,7 +28,7 @@ public abstract class Alarm extends ObjectWithId implements Parcelable { private boolean enabled; private final boolean[] recurringDays = new boolean[NUM_DAYS]; private boolean ignoreUpcomingRingTime; - private boolean rescheduled; + //private boolean rescheduled; // ==================================================== @@ -50,6 +50,8 @@ public abstract class Alarm extends ObjectWithId implements Parcelable { public abstract boolean vibrates(); + public abstract boolean reschedules(); + /** * Initializes a Builder to the same property values as this instance @@ -67,7 +69,6 @@ public void copyMutableFieldsTo(Alarm target) { target.enabled = this.enabled; System.arraycopy(this.recurringDays, 0, target.recurringDays, 0, NUM_DAYS); target.ignoreUpcomingRingTime = this.ignoreUpcomingRingTime; - target.rescheduled = this.rescheduled; } public static Builder builder() { @@ -82,17 +83,18 @@ public static Builder builder() { .duration(0) .realDuration(0) .ringtone("") - .vibrates(false); + .vibrates(false) + .reschedules(false); } - public boolean isRescheduled() { - return rescheduled; - } + //public boolean isRescheduled() { + // return rescheduled; + //} - public void setRescheduled(boolean rescheduled) { - this.rescheduled = rescheduled; - } + //public void setRescheduled(boolean rescheduled) { + // this.rescheduled = rescheduled; + //} public void snooze(int minutes) { if (minutes <= 0 || minutes > MAX_MINUTES_CAN_SNOOZE) @@ -269,6 +271,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeLong(realDuration()); dest.writeString(ringtone()); dest.writeInt(vibrates() ? 1 : 0); + dest.writeInt(reschedules() ? 1 : 0); // Mutable fields must be written after the immutable fields, // because when we recreate the object, we can't initialize // those mutable fields until after we call build(). Values @@ -276,7 +279,6 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeLong(getId()); dest.writeLong(snoozingUntilMillis); dest.writeInt(enabled ? 1 : 0); - dest.writeInt(rescheduled ? 1 : 0); //NEW added 02.07.17 21:44 dest.writeBooleanArray(recurringDays); dest.writeInt(ignoreUpcomingRingTime ? 1 : 0); } @@ -292,11 +294,11 @@ private static Alarm create(Parcel in) { .realDuration(in.readLong()) .ringtone(in.readString()) .vibrates(in.readInt() != 0) + .reschedules(in.readInt() != 0) .build(); alarm.setId(in.readLong()); alarm.snoozingUntilMillis = in.readLong(); alarm.enabled = in.readInt() != 0; - alarm.rescheduled = in.readInt() != 0; in.readBooleanArray(alarm.recurringDays); alarm.ignoreUpcomingRingTime = in.readInt() != 0; return alarm; @@ -337,7 +339,7 @@ public abstract static class Builder { public abstract Builder vibrates(boolean vibrates); - //public abstract Builder reschedules(boolean reschedules); + public abstract Builder reschedules(boolean reschedules); /* package */ abstract Alarm autoBuild(); diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java b/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java index 8c7693a..a42ad22 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java @@ -129,11 +129,12 @@ public void processFinish(long delaySecs) { int delayMinutes = (int) TimeUnit.SECONDS.toMinutes(testseconds); if (delayMinutes < minutesUntilRing) { - if (!alarm.isRescheduled()) { + Log.d(TAG, "Alarm: "+ alarm.toString()+" rescheduled? : "+alarm.reschedules()); + if (!alarm.reschedules()) { Alarm newAlarm = alarm.toBuilder() .minutes(minutesUntilRing - delayMinutes) + .reschedules(true) .build(); - alarm.setRescheduled(true); alarm.copyMutableFieldsTo(newAlarm); persistUpdatedAlarm(newAlarm, false); Log.d(TAG, "Rescheduled alarm, so user will be waked up earlier."); diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmCursor.java b/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmCursor.java index 61245a8..beb8ce5 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmCursor.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmCursor.java @@ -57,6 +57,7 @@ public Alarm getItem() { .hour(getInt(getColumnIndexOrThrow(AlarmsTable.COLUMN_HOUR))) .minutes(getInt(getColumnIndexOrThrow(AlarmsTable.COLUMN_MINUTES))) .vibrates(isTrue(AlarmsTable.COLUMN_VIBRATES)) + .reschedules(isTrue(AlarmsTable.COLUMN_RESCHEDULED)) .ringtone(getString(getColumnIndexOrThrow(AlarmsTable.COLUMN_RINGTONE))) .label(getString(getColumnIndexOrThrow(AlarmsTable.COLUMN_LABEL))) .origin(new Location(getString(getColumnIndexOrThrow(AlarmsTable.COLUMN_ORIGIN_ADRESS)), @@ -70,7 +71,7 @@ public Alarm getItem() { .build(); alarm.setId(getLong(getColumnIndexOrThrow(AlarmsTable.COLUMN_ID))); alarm.setEnabled(isTrue(AlarmsTable.COLUMN_ENABLED)); - alarm.setRescheduled(isTrue(AlarmsTable.COLUMN_RESCHEDULED)); + //alarm.setReschedules(isTrue(AlarmsTable.COLUMN_RESCHEDULED)); alarm.setSnoozing(getLong(getColumnIndexOrThrow(AlarmsTable.COLUMN_SNOOZING_UNTIL_MILLIS))); alarm.setRecurring(SUNDAY, isTrue(AlarmsTable.COLUMN_SUNDAY)); alarm.setRecurring(MONDAY, isTrue(AlarmsTable.COLUMN_MONDAY)); diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmsTableManager.java b/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmsTableManager.java index dc83328..4feff10 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmsTableManager.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/data/AlarmsTableManager.java @@ -86,6 +86,7 @@ protected ContentValues toContentValues(Alarm alarm) { values.put(AlarmsTable.COLUMN_RINGTONE, alarm.ringtone()); values.put(AlarmsTable.COLUMN_VIBRATES, alarm.vibrates()); values.put(AlarmsTable.COLUMN_ENABLED, alarm.isEnabled()); + values.put(AlarmsTable.COLUMN_RESCHEDULED, alarm.reschedules()); values.put(AlarmsTable.COLUMN_RING_TIME_MILLIS, alarm.ringsAt()); values.put(AlarmsTable.COLUMN_SNOOZING_UNTIL_MILLIS, alarm.snoozingUntil()); values.put(AlarmsTable.COLUMN_SUNDAY, alarm.isRecurring(SUNDAY)); diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java b/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java index 842caec..0dc1d64 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/ui/ExpandedAlarmViewHolder.java @@ -24,10 +24,7 @@ import android.net.Uri; import android.os.Vibrator; import android.support.annotation.IdRes; -import android.support.annotation.Nullable; import android.support.v4.graphics.drawable.DrawableCompat; -import android.text.format.DateUtils; -import android.text.format.Time; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -309,9 +306,10 @@ private void setDuration() { DistanceHandler asyncTask = new DistanceHandler(getAlarm(), new DistanceHandler.AsyncResponse() { @Override public void processFinish(long delaySecs) { - int testseconds = 4000; + //int testseconds = 4000; final Alarm oldAlarm = getAlarm(); - int delayMinutes = (int) TimeUnit.SECONDS.toMinutes(testseconds); + int delayMinutes = (int) TimeUnit.SECONDS.toMinutes(delaySecs); + Log.d(TAG, "delayminutes: "+delayMinutes); int delayHours = delayMinutes / 60; delayMinutes = delayMinutes % 60; @@ -326,9 +324,6 @@ public void processFinish(long delaySecs) { //TODO remove all debug logs for production Calendar cal = Calendar.getInstance(); cal.setTime(d); - Log.d(TAG, "calendar time before new set: " + cal.getTime().toString()); - Log.d(TAG, "hours to be subtracted: " + delayHours); - Log.d(TAG, "minutes to be subtracted: " + delayMinutes); if (delayHours == 0) { cal.add(Calendar.MINUTE, -Math.abs(delayMinutes)); @@ -337,10 +332,6 @@ public void processFinish(long delaySecs) { cal.add(Calendar.MINUTE, -Math.abs(delayMinutes)); } - Log.d(TAG, "calendar time after set: " + cal.getTime().toString()); - Log.d(TAG, "setting new hours to: " + cal.get(Calendar.HOUR_OF_DAY)); - Log.d(TAG, "setting new minutes to: " + cal.get(Calendar.MINUTE)); - //TODO Update Alarm depending what is set in the preferences (example: 1 hour) // Alarm newAlarm = oldAlarm.toBuilder() // .minutes(cal.get(Calendar.MINUTE)) diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 68e3208..0823237 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -33,7 +33,7 @@ android:dialogTitle="@string/title_theme" android:entries="@array/array_theme" android:entryValues="@array/array_theme" - android:defaultValue="@string/theme_light" + android:defaultValue="@string/theme_dark" android:summary="%s"> diff --git a/gradle.properties b/gradle.properties index e3e07ec..9606651 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,4 +12,5 @@ # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true +org.gradle.jvmargs=-Xmx1536M From c059bcfdf8430ec75a27deb1cf3eea308b271d7e Mon Sep 17 00:00:00 2001 From: Fynn Date: Sun, 9 Jul 2017 18:35:59 +0200 Subject: [PATCH 5/5] fixed small reschedule error --- .../background/UpcomingAlarmReceiver.java | 83 +++++++++++++++++-- .../clockplus/location/DistanceHandler.java | 7 +- 2 files changed, 83 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java b/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java index a42ad22..1ebbff3 100644 --- a/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java +++ b/app/src/main/java/com/haayhappen/clockplus/alarms/background/UpcomingAlarmReceiver.java @@ -118,34 +118,58 @@ public void onReceive(final Context context, final Intent intent) { nm.notify(TAG, (int) id, note); } } - //Check that alarm rings within 1 hours - if (alarm.ringsWithinHours(1)) { + // Check that alarm rings within 1 hours + if (alarm.ringsWithinHours(1) && !alarm.reschedules()) { mAlarmController = new AlarmController(context, null); DistanceHandler asyncTask = new DistanceHandler(alarm, new DistanceHandler.AsyncResponse() { @Override public void processFinish(long delaySecs) { + String newRingtime =""; int minutesUntilRing = (int) TimeUnit.MILLISECONDS.toMinutes(alarm.ringsIn()); int testseconds = 240; int delayMinutes = (int) TimeUnit.SECONDS.toMinutes(testseconds); + int ringsAtMinutes = (int) ((alarm.ringsAt() / (1000*60)) % 60); + //check that delay is less than the alarm is actually away in terms of time if (delayMinutes < minutesUntilRing) { Log.d(TAG, "Alarm: "+ alarm.toString()+" rescheduled? : "+alarm.reschedules()); - if (!alarm.reschedules()) { + //if (!alarm.reschedules()) { + //subtract delay minutes from ringing minutes + if (ringsAtMinutes < delayMinutes){ + //that would happen when the ring time is set right after a new hour started...we have to adjust the hour too then + int restmin = ringsAtMinutes-delayMinutes; + int newmin = 60 - Math.abs(restmin); + int newhour = alarm.hour() -1; + Alarm newAlarm = alarm.toBuilder() - .minutes(minutesUntilRing - delayMinutes) + .minutes(newmin) + .hour(newhour) .reschedules(true) .build(); alarm.copyMutableFieldsTo(newAlarm); persistUpdatedAlarm(newAlarm, false); - Log.d(TAG, "Rescheduled alarm, so user will be waked up earlier."); + + newRingtime += newhour+":"+newmin; + + }else { + //no hours to schedules + Alarm newAlarm = alarm.toBuilder() + .minutes(ringsAtMinutes - delayMinutes) + .reschedules(true) + .build(); + alarm.copyMutableFieldsTo(newAlarm); + persistUpdatedAlarm(newAlarm, false); + newRingtime += alarm.hour()+":"+(ringsAtMinutes - delayMinutes); } + Log.d(TAG, "Rescheduled alarm, so user will be waked up earlier."); + // } NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_alarm_24dp) .setContentTitle("TrafficAlarm") - .setContentText("Alarm has been rescheduled: " + (minutesUntilRing - delayMinutes) + " minutes"); + .setContentText("Alarm rescheduled, new ringtime: "+newRingtime ); // Add as notification NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); @@ -162,6 +186,53 @@ public void processFinish(long delaySecs) { } } + //TODO FOR TESTING + Log.d(TAG, "alarm ringing in: " + alarm.ringsIn()); + //180000 = 3 minutes -> if alarm rings in less than 3 minutes and isn't rescheduled +// if (alarm.ringsIn() < 180000 && !alarm.reschedules()) { +// mAlarmController = new AlarmController(context, null); +// DistanceHandler asyncTask = new DistanceHandler(alarm, new DistanceHandler.AsyncResponse() { +// @Override +// public void processFinish(long delaySecs) { +// int minutesUntilRing = (int) TimeUnit.MILLISECONDS.toMinutes(alarm.ringsIn()); +// int testseconds = 120; +// int delayMinutes = (int) TimeUnit.SECONDS.toMinutes(testseconds); +// +// if (delayMinutes < minutesUntilRing) { +// Log.d(TAG, "Alarm: " + alarm.toString() + " rescheduled? : " + alarm.reschedules()); +// //if (!alarm.reschedules()) { +// Alarm newAlarm = alarm.toBuilder() +// .minutes(minutesUntilRing - delayMinutes) +// .reschedules(true) +// .build(); +// alarm.copyMutableFieldsTo(newAlarm); +// persistUpdatedAlarm(newAlarm, false); +// Log.d(TAG, "Rescheduled alarm, so user will be waked up earlier."); +// // } +// +// +// NotificationCompat.Builder builder = +// new NotificationCompat.Builder(context) +// .setSmallIcon(R.drawable.ic_alarm_24dp) +// .setContentTitle("TrafficAlarm") +// .setContentText("Alarm has been rescheduled: " + (minutesUntilRing - delayMinutes) + " minutes"); +// +// // Add as notification +// NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); +// manager.notify(0, builder.build()); +// } +// +// } +// }); +// +// try { +// asyncTask.execute(); +// } catch (Exception e) { +// e.getMessage(); +// } +// } + + } final void persistUpdatedAlarm(Alarm newAlarm, boolean showSnackbar) { diff --git a/app/src/main/java/com/haayhappen/clockplus/location/DistanceHandler.java b/app/src/main/java/com/haayhappen/clockplus/location/DistanceHandler.java index 26156cc..e8e2983 100644 --- a/app/src/main/java/com/haayhappen/clockplus/location/DistanceHandler.java +++ b/app/src/main/java/com/haayhappen/clockplus/location/DistanceHandler.java @@ -123,6 +123,8 @@ protected Long doInBackground(String... params) { durationInTrafficLong = Long.parseLong(jsonDurationInTraffic.get("value").toString()); + Log.d(TAG,"Duration normal: "+ durationLong); + Log.d(TAG,"Duration in traffic: "+ durationInTrafficLong); //Get delay if one exists: if (durationInTrafficLong > durationLong){ try{ @@ -134,12 +136,15 @@ protected Long doInBackground(String... params) { } else{ //there is no delay - delay = Long.parseLong(jsonDuration.get("value").toString()); + //delay = Long.parseLong(jsonDuration.get("value").toString()); + + delay = 0l; } } catch (JSONException e) { e.printStackTrace(); } + Log.d(TAG,"Returning delay of : "+ delay+" seconds"); return delay; }