diff --git a/uhabits-android/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml
index b7cbb4520..ca802a5d6 100644
--- a/uhabits-android/src/main/AndroidManifest.xml
+++ b/uhabits-android/src/main/AndroidManifest.xml
@@ -91,6 +91,7 @@
android:name="android.support.PARENT_ACTIVITY"
android:value=".activities.habits.list.ListHabitsActivity"/>
+
time)
+ time += DateUtils.DAY_LENGTH;
+ time = applyTimezone(time);
+
+ Intent intent = new Intent( ReminderReceiver.ACTION_SNOOZE_REMINDER_SET, getIntent().getData(),
+ this, ReminderReceiver.class );
+ intent.putExtra("reminderTime", time);
+ sendBroadcast(intent);
+
+ finish();
+ }
+
+ @Override
+ public void onTimeCleared(RadialPickerLayout view)
+ {
+ Intent intent = new Intent( ReminderReceiver.ACTION_DISMISS_REMINDER, getIntent().getData(),
+ this, ReminderReceiver.class );
+ sendBroadcast(intent);
+
+ finish();
+ }
+}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java
index ae88f55c9..179b16e39 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.java
@@ -19,12 +19,15 @@
package org.isoron.uhabits.receivers;
+import android.content.*;
+import android.net.*;
import android.support.annotation.*;
import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.preferences.*;
import org.isoron.uhabits.core.reminders.*;
import org.isoron.uhabits.core.ui.*;
+import org.isoron.uhabits.notifications.*;
import javax.inject.*;
@@ -65,13 +68,32 @@ public class ReminderController
reminderScheduler.scheduleAll();
}
- public void onSnooze(@NonNull Habit habit)
+ public void onSnooze(@NonNull Habit habit, final Context context)
{
long snoozeInterval = preferences.getSnoozeInterval();
+ if (snoozeInterval < 0)
+ {
+ context.sendBroadcast( new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+ Intent intent = new Intent( SnoozeDelayActivity.ACTION_ASK_SNOOZE, Uri.parse( habit.getUriString()),
+ context, SnoozeDelayActivity.class );
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ return;
+ }
+
+ snoozeNotificationAddDelay(habit, snoozeInterval);
+ }
+
+ public void snoozeNotificationAddDelay(@NonNull Habit habit, long snoozeInterval)
+ {
long now = applyTimezone(getLocalTime());
long reminderTime = now + snoozeInterval * 60 * 1000;
+ snoozeNotificationSetReminderTime(habit, reminderTime);
+ }
+ public void snoozeNotificationSetReminderTime(@NonNull Habit habit, long reminderTime)
+ {
reminderScheduler.schedule(habit, reminderTime);
notificationTray.cancel(habit);
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java
index cb382a950..c6990b4dd 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderReceiver.java
@@ -46,6 +46,9 @@ public class ReminderReceiver extends BroadcastReceiver
public static final String ACTION_SNOOZE_REMINDER =
"org.isoron.uhabits.ACTION_SNOOZE_REMINDER";
+ public static final String ACTION_SNOOZE_REMINDER_SET =
+ "org.isoron.uhabits.ACTION_SNOOZE_REMINDER_SET";
+
private static final String TAG = "ReminderReceiver";
@Override
@@ -90,7 +93,12 @@ public class ReminderReceiver extends BroadcastReceiver
case ACTION_SNOOZE_REMINDER:
if (habit == null) return;
- reminderController.onSnooze(habit);
+ reminderController.onSnooze(habit,context);
+ break;
+
+ case ACTION_SNOOZE_REMINDER_SET:
+ if (habit == null) return;
+ reminderController.snoozeNotificationSetReminderTime(habit, reminderTime);
break;
case Intent.ACTION_BOOT_COMPLETED:
diff --git a/uhabits-android/src/main/res/values/constants.xml b/uhabits-android/src/main/res/values/constants.xml
index 94ae54340..1b46ccc5d 100644
--- a/uhabits-android/src/main/res/values/constants.xml
+++ b/uhabits-android/src/main/res/values/constants.xml
@@ -35,6 +35,7 @@
- @string/interval_4_hour
- @string/interval_8_hour
- @string/interval_24_hour
+ - @string/interval_always_ask
@@ -45,6 +46,7 @@
- 240
- 480
- 1440
+ - -1
diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml
index 1671734fd..821cf2298 100644
--- a/uhabits-android/src/main/res/values/strings.xml
+++ b/uhabits-android/src/main/res/values/strings.xml
@@ -83,6 +83,7 @@
4 hours
8 hours
24 hours
+ Always ask
Toggle with short press
Put checkmarks with a single tap instead of press-and-hold. More convenient, but might cause accidental toggles.
Snooze interval on reminders
diff --git a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java
index 93b199a10..7b0406832 100644
--- a/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java
+++ b/uhabits-android/src/test/java/org/isoron/uhabits/receivers/ReminderControllerTest.java
@@ -70,7 +70,7 @@ public class ReminderControllerTest extends BaseAndroidJVMTest
DateUtils.setFixedLocalTime(now);
when(preferences.getSnoozeInterval()).thenReturn(15L);
- controller.onSnooze(habit);
+ controller.onSnooze(habit,null);
verify(reminderScheduler).schedule(habit, nowTz + 900000);
verify(notificationTray).cancel(habit);