From cec05ccbca4ec8c0c803c1cdd7c59a28fe247cf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Fri, 15 Sep 2017 11:29:36 +0200 Subject: [PATCH] when asking for snooze delay, first show a list of common options --- .../notifications/SnoozeDelayActivity.java | 34 ++++++++++++++++++- .../uhabits/receivers/ReminderReceiver.java | 9 +++++ .../src/main/res/values/constants.xml | 22 ++++++++++++ .../src/main/res/values/strings.xml | 2 ++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayActivity.java b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayActivity.java index a32871f65..be0ef36d1 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayActivity.java +++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayActivity.java @@ -1,5 +1,6 @@ package org.isoron.uhabits.notifications; +import android.app.*; import android.content.*; import android.os.*; import android.support.v4.app.*; @@ -7,6 +8,7 @@ import android.text.format.*; import android.util.*; import com.android.datetimepicker.time.*; +import com.android.datetimepicker.time.TimePickerDialog; import org.isoron.uhabits.*; import org.isoron.uhabits.core.utils.DateUtils; @@ -18,12 +20,14 @@ import static org.isoron.uhabits.core.ui.ThemeSwitcher.THEME_DARK; import static org.isoron.uhabits.core.utils.DateUtils.applyTimezone; public class SnoozeDelayActivity extends FragmentActivity implements - TimePickerDialog.OnTimeSetListener, DialogInterface.OnDismissListener { + TimePickerDialog.OnTimeSetListener, DialogInterface.OnDismissListener, DialogInterface.OnClickListener { public static final String ACTION_ASK_SNOOZE = "org.isoron.uhabits.ACTION_ASK_SNOOZE"; private static final String TAG = "SnoozeDelayActivity"; + private AlertDialog activeDelayDialog; + @Override protected void onCreate(Bundle bundle) { @@ -45,6 +49,34 @@ public class SnoozeDelayActivity extends FragmentActivity implements } private void AskSnooze() + { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.select_snooze_delay) + .setItems(R.array.snooze_interval_names_reminder, this); + AlertDialog dialog = builder.create(); + dialog.setOnDismissListener(this); + activeDelayDialog = dialog; + dialog.show(); + } + + @Override + public void onClick(DialogInterface dialogInterface, int i) + { + int[] snoozeDelay = getResources().getIntArray(R.array.snooze_interval_values_reminder); + assert (i >= 0 && i <= snoozeDelay.length); + if( snoozeDelay[ i ] < 0 ) + { + activeDelayDialog.setOnDismissListener(null); + AskCustomSnooze(); + return; + } + Intent intent = new Intent( ReminderReceiver.ACTION_SNOOZE_REMINDER_DELAY, getIntent().getData(), + this, ReminderReceiver.class ); + intent.putExtra("snoozeDelay", snoozeDelay[ i ]); + sendBroadcast(intent); + } + + private void AskCustomSnooze() { final Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); 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 c6990b4dd..b80baf11b 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 @@ -49,6 +49,9 @@ public class ReminderReceiver extends BroadcastReceiver public static final String ACTION_SNOOZE_REMINDER_SET = "org.isoron.uhabits.ACTION_SNOOZE_REMINDER_SET"; + public static final String ACTION_SNOOZE_REMINDER_DELAY = + "org.isoron.uhabits.ACTION_SNOOZE_REMINDER_DELAY"; + private static final String TAG = "ReminderReceiver"; @Override @@ -101,6 +104,12 @@ public class ReminderReceiver extends BroadcastReceiver reminderController.snoozeNotificationSetReminderTime(habit, reminderTime); break; + case ACTION_SNOOZE_REMINDER_DELAY: + if (habit == null) return; + long snoozeDelay = intent.getIntExtra("snoozeDelay", 0); + reminderController.snoozeNotificationAddDelay(habit, snoozeDelay); + break; + case Intent.ACTION_BOOT_COMPLETED: reminderController.onBootCompleted(); break; diff --git a/uhabits-android/src/main/res/values/constants.xml b/uhabits-android/src/main/res/values/constants.xml index 1b46ccc5d..e8d08c0b5 100644 --- a/uhabits-android/src/main/res/values/constants.xml +++ b/uhabits-android/src/main/res/values/constants.xml @@ -49,6 +49,28 @@ -1 + + @string/interval_15_minutes + @string/interval_30_minutes + @string/interval_1_hour + @string/interval_2_hour + @string/interval_4_hour + @string/interval_8_hour + @string/interval_24_hour + @string/interval_custom + + + + 15 + 30 + 60 + 120 + 240 + 480 + 1440 + -1 + + @string/every_day @string/every_week diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml index 821cf2298..814a53d32 100644 --- a/uhabits-android/src/main/res/values/strings.xml +++ b/uhabits-android/src/main/res/values/strings.xml @@ -84,6 +84,7 @@ 8 hours 24 hours Always ask + Custom... 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 @@ -96,6 +97,7 @@ Name Settings Snooze interval + Select snooze delay Did you know? To rearrange the entries, press-and-hold on the name of the habit, then drag it to the correct place.