diff --git a/app/src/main/java/org/tasks/notifications/NotificationManager.java b/app/src/main/java/org/tasks/notifications/NotificationManager.java
index 5f30998c1..6417c8880 100644
--- a/app/src/main/java/org/tasks/notifications/NotificationManager.java
+++ b/app/src/main/java/org/tasks/notifications/NotificationManager.java
@@ -1,26 +1,14 @@
package org.tasks.notifications;
-import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-import static androidx.core.app.NotificationCompat.FLAG_INSISTENT;
-import static androidx.core.app.NotificationCompat.FLAG_NO_CLEAR;
-import static com.google.common.collect.Iterables.concat;
-import static com.google.common.collect.Iterables.tryFind;
-import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Lists.transform;
-import static com.todoroo.andlib.utility.AndroidUtilities.atLeastNougat;
-import static com.todoroo.astrid.reminders.ReminderService.TYPE_GEOFENCE_ENTER;
-import static com.todoroo.astrid.reminders.ReminderService.TYPE_GEOFENCE_EXIT;
-import static java.util.Collections.emptyList;
-import static java.util.Collections.singletonList;
-
import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
+
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
+
import com.google.common.base.Joiner;
import com.google.common.base.Strings;
import com.todoroo.andlib.sql.Join;
@@ -30,14 +18,7 @@ import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.reminders.ReminderService;
-import io.reactivex.Completable;
-import io.reactivex.Single;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.schedulers.Schedulers;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.inject.Inject;
+
import org.tasks.LocalBroadcastManager;
import org.tasks.R;
import org.tasks.data.Location;
@@ -53,8 +34,33 @@ import org.tasks.reminders.SnoozeDialog;
import org.tasks.reminders.SnoozeOption;
import org.tasks.time.DateTime;
import org.tasks.ui.CheckBoxes;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import io.reactivex.Completable;
+import io.reactivex.Single;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
import timber.log.Timber;
+import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static androidx.core.app.NotificationCompat.FLAG_INSISTENT;
+import static androidx.core.app.NotificationCompat.FLAG_NO_CLEAR;
+import static com.google.common.collect.Iterables.concat;
+import static com.google.common.collect.Iterables.tryFind;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Lists.transform;
+import static com.todoroo.andlib.utility.AndroidUtilities.atLeastNougat;
+import static com.todoroo.astrid.reminders.ReminderService.TYPE_GEOFENCE_ENTER;
+import static com.todoroo.astrid.reminders.ReminderService.TYPE_GEOFENCE_EXIT;
+import static java.util.Collections.emptyList;
+import static java.util.Collections.singletonList;
+
@ApplicationScope
public class NotificationManager {
@@ -205,6 +211,7 @@ public class NotificationManager {
if (!preferences.getBoolean(R.string.p_rmd_enabled, true)) {
return;
}
+ builder.setLocalOnly(!preferences.getBoolean(R.string.p_wearable_notifications, true));
int ringTimes = fiveTimes ? 5 : 1;
if (alert) {
builder
diff --git a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt
index 613b4a822..f6f284584 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt
@@ -10,6 +10,7 @@ import android.os.Bundle
import android.provider.Settings
import android.speech.tts.TextToSpeech
import androidx.preference.Preference
+import androidx.preference.SwitchPreferenceCompat
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.voice.VoiceOutputAssistant
@@ -46,12 +47,13 @@ class Notifications : InjectingPreferenceFragment() {
setPreferencesFromResource(R.xml.preferences_notifications, rootKey)
rescheduleNotificationsOnChange(
+ false,
R.string.p_rmd_time,
R.string.p_rmd_enable_quiet,
R.string.p_rmd_quietStart,
- R.string.p_rmd_quietEnd,
- R.string.p_rmd_persistent
+ R.string.p_rmd_quietEnd
)
+ rescheduleNotificationsOnChange(true, R.string.p_bundle_notifications)
initializeRingtonePreference()
initializeTimePreference(getDefaultRemindTimePreference()!!, REQUEST_DEFAULT_REMIND)
@@ -63,12 +65,6 @@ class Notifications : InjectingPreferenceFragment() {
findPreference(R.string.battery_optimization_settings)
.setOnPreferenceClickListener(::openBatteryOptimizationSettings)
- findPreference(R.string.p_bundle_notifications)
- .setOnPreferenceChangeListener { _: Preference?, _: Any? ->
- NotificationSchedulerIntentService.enqueueWork(context, true)
- true
- }
-
findPreference(R.string.p_badges_enabled)
.setOnPreferenceChangeListener { _: Preference?, newValue: Any? ->
if (newValue != null) {
@@ -115,6 +111,24 @@ class Notifications : InjectingPreferenceFragment() {
true
}
+ val persistentReminders =
+ findPreference(R.string.p_rmd_persistent) as SwitchPreferenceCompat
+ val wearableReminders =
+ findPreference(R.string.p_wearable_notifications) as SwitchPreferenceCompat
+ if (persistentReminders.isChecked) {
+ wearableReminders.isChecked = false
+ }
+ persistentReminders.setOnPreferenceChangeListener { _, newValue ->
+ wearableReminders.isChecked = !(newValue as Boolean)
+ rescheduleNotifications(false)
+ }
+ wearableReminders.setOnPreferenceChangeListener { _, newValue ->
+ if (newValue as Boolean) {
+ persistentReminders.isChecked = false
+ }
+ rescheduleNotifications(false)
+ }
+
requires(AndroidUtilities.atLeastOreo(), R.string.notification_channel_settings)
requires(AndroidUtilities.atLeastMarshmallow(), R.string.battery_optimization_settings)
requires(
@@ -135,16 +149,20 @@ class Notifications : InjectingPreferenceFragment() {
component.inject(this)
}
- private fun rescheduleNotificationsOnChange(vararg resIds: Int) {
+ private fun rescheduleNotificationsOnChange(cancelExisting: Boolean, vararg resIds: Int) {
for (resId in resIds) {
findPreference(resId)
.setOnPreferenceChangeListener { _: Preference?, _: Any? ->
- NotificationSchedulerIntentService.enqueueWork(context, false)
- true
+ rescheduleNotifications(cancelExisting)
}
}
}
+ private fun rescheduleNotifications(cancelExisting: Boolean): Boolean {
+ NotificationSchedulerIntentService.enqueueWork(context, cancelExisting)
+ return true
+ }
+
override fun onPreferenceTreeClick(preference: Preference?): Boolean {
return if (preference!!.key == getString(R.string.p_rmd_ringtone)) {
val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER)
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
index d7ed580b1..3ae2ae5b6 100644
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -276,4 +276,5 @@
Always perform a full synchronization to workaround https://issuetracker.google.com/issues/132432317
https://tasks.org/subscribe
show_subtasks
+ wearable_notifications
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1e997e23e..bd82599f7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -576,4 +576,6 @@ File %1$s contained %2$s.\n\n
Advanced
Documentation
Accounts
+ Wearable notifications
+ Display notifications on your wearable
diff --git a/app/src/main/res/xml/preferences_notifications.xml b/app/src/main/res/xml/preferences_notifications.xml
index 7a7ca3988..f8e39a47c 100644
--- a/app/src/main/res/xml/preferences_notifications.xml
+++ b/app/src/main/res/xml/preferences_notifications.xml
@@ -26,13 +26,6 @@
android:title="@string/rmd_EPr_rmd_time_title"
app:time_summary="@string/rmd_EPr_rmd_time_desc" />
-
-
+
+
+
+