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" /> - - + + + +