Add option to disable wearable notifications

pull/935/head
Alex Baker 6 years ago
parent cf67812206
commit 2822837a04

@ -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

@ -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)

@ -276,4 +276,5 @@
<string name="google_tasks_position_hack_summary">Always perform a full synchronization to workaround https://issuetracker.google.com/issues/132432317</string>
<string name="subscription_help_url">https://tasks.org/subscribe</string>
<string name="p_show_subtasks">show_subtasks</string>
<string name="p_wearable_notifications">wearable_notifications</string>
</resources>

@ -576,4 +576,6 @@ File %1$s contained %2$s.\n\n
<string name="preferences_advanced">Advanced</string>
<string name="documentation">Documentation</string>
<string name="accounts">Accounts</string>
<string name="wearable_notifications">Wearable notifications</string>
<string name="wearable_notifications_summary">Display notifications on your wearable</string>
</resources>

@ -26,13 +26,6 @@
android:title="@string/rmd_EPr_rmd_time_title"
app:time_summary="@string/rmd_EPr_rmd_time_desc" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:dependency="@string/p_rmd_enabled"
android:key="@string/p_rmd_persistent"
android:summary="@string/persistent_notifications_description"
android:title="@string/persistent_notifications" />
<SwitchPreferenceCompat
android:defaultValue="@bool/default_bundle_notifications"
android:dependency="@string/p_rmd_enabled"
@ -65,6 +58,20 @@
android:summary="@string/hardware_support_required"
android:title="@string/led_notification" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:dependency="@string/p_rmd_enabled"
android:key="@string/p_rmd_persistent"
android:summary="@string/persistent_notifications_description"
android:title="@string/persistent_notifications"
app:allowDividerAbove="true" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:key="@string/p_wearable_notifications"
android:summary="@string/wearable_notifications_summary"
android:title="@string/wearable_notifications" />
<PreferenceCategory android:title="@string/badges">
<SwitchPreferenceCompat

Loading…
Cancel
Save