From 8f6ff215aa5329028949ddd681cde7ab0785e57a Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 25 Feb 2021 12:54:23 -0500 Subject: [PATCH] Show a megaphone when notifications are disabled. --- .../ApplicationPreferencesActivity.java | 9 ++-- .../megaphone/BasicMegaphoneView.java | 5 +- .../securesms/megaphone/Megaphone.java | 10 +++- .../securesms/megaphone/Megaphones.java | 45 +++++++++++++++++- .../megaphone/RecurringSchedule.java | 21 ++++++++ .../notifications/NotificationChannels.java | 30 ++++++++++++ .../megaphone_notifications_64.webp | Bin 0 -> 3544 bytes .../megaphone_notifications_64.webp | Bin 0 -> 2344 bytes .../megaphone_notifications_64.webp | Bin 0 -> 5046 bytes .../megaphone_notifications_64.webp | Bin 0 -> 11858 bytes app/src/main/res/values/strings.xml | 6 +++ 11 files changed, 120 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/megaphone_notifications_64.webp create mode 100644 app/src/main/res/drawable-mdpi/megaphone_notifications_64.webp create mode 100644 app/src/main/res/drawable-xhdpi/megaphone_notifications_64.webp create mode 100644 app/src/main/res/drawable-xxhdpi/megaphone_notifications_64.webp diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java index 03a94645cd..bd3f19d498 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java @@ -66,9 +66,10 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences; public class ApplicationPreferencesActivity extends PassphraseRequiredActivity implements SharedPreferences.OnSharedPreferenceChangeListener { - public static final String LAUNCH_TO_BACKUPS_FRAGMENT = "launch.to.backups.fragment"; - public static final String LAUNCH_TO_HELP_FRAGMENT = "launch.to.help.fragment"; - public static final String LAUNCH_TO_PROXY_FRAGMENT = "launch.to.proxy.fragment"; + public static final String LAUNCH_TO_BACKUPS_FRAGMENT = "launch.to.backups.fragment"; + public static final String LAUNCH_TO_HELP_FRAGMENT = "launch.to.help.fragment"; + public static final String LAUNCH_TO_PROXY_FRAGMENT = "launch.to.proxy.fragment"; + public static final String LAUNCH_TO_NOTIFICATIONS_FRAGMENT = "launch.to.notifications.fragment"; @SuppressWarnings("unused") private static final String TAG = ApplicationPreferencesActivity.class.getSimpleName(); @@ -112,6 +113,8 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActivity initFragment(android.R.id.content, new HelpFragment()); } else if (getIntent() != null && getIntent().getBooleanExtra(LAUNCH_TO_PROXY_FRAGMENT, false)) { initFragment(android.R.id.content, EditProxyFragment.newInstance()); + } else if (getIntent() != null && getIntent().getBooleanExtra(LAUNCH_TO_NOTIFICATIONS_FRAGMENT, false)) { + initFragment(android.R.id.content, new NotificationsPreferenceFragment()); } else if (icicle == null) { initFragment(android.R.id.content, new ApplicationPreferenceFragment()); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java index 0de9510e63..28ffd79f6d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java @@ -56,7 +56,10 @@ public class BasicMegaphoneView extends FrameLayout { this.megaphone = megaphone; this.megaphoneListener = megaphoneListener; - if (megaphone.getImageRequest() != null) { + if (megaphone.getImageRes() != 0) { + image.setVisibility(VISIBLE); + image.setImageResource(megaphone.getImageRes()); + } else if (megaphone.getImageRequest() != null) { image.setVisibility(VISIBLE); megaphone.getImageRequest().into(image); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java index a6cdd69b8f..d3e8df29b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphone.java @@ -24,6 +24,7 @@ public class Megaphone { private final boolean canSnooze; private final int titleRes; private final int bodyRes; + private final int imageRes; private final GlideRequest imageRequest; private final int buttonTextRes; private final EventListener buttonListener; @@ -39,6 +40,7 @@ public class Megaphone { this.canSnooze = builder.canSnooze; this.titleRes = builder.titleRes; this.bodyRes = builder.bodyRes; + this.imageRes = builder.imageRes; this.imageRequest = builder.imageRequest; this.buttonTextRes = builder.buttonTextRes; this.buttonListener = builder.buttonListener; @@ -72,6 +74,10 @@ public class Megaphone { return bodyRes; } + public @DrawableRes int getImageRes() { + return imageRes; + } + public @Nullable GlideRequest getImageRequest() { return imageRequest; } @@ -117,6 +123,7 @@ public class Megaphone { private boolean canSnooze; private int titleRes; private int bodyRes; + private int imageRes; private GlideRequest imageRequest; private int buttonTextRes; private EventListener buttonListener; @@ -163,7 +170,8 @@ public class Megaphone { } public @NonNull Builder setImage(@DrawableRes int imageRes) { - return setImageRequest(GlideApp.with(ApplicationDependencies.getApplication()).load(imageRes)); + this.imageRes = imageRes; + return this; } public @NonNull Builder setImageRequest(@Nullable GlideRequest imageRequest) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java index 3467a94278..5f7113595e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -2,6 +2,8 @@ package org.thoughtcrime.securesms.megaphone; import android.content.Context; import android.content.Intent; +import android.os.Build; +import android.provider.Settings; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -9,6 +11,7 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.ApplicationPreferencesActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.conversationlist.ConversationListFragment; import org.thoughtcrime.securesms.database.model.MegaphoneRecord; @@ -20,6 +23,7 @@ import org.thoughtcrime.securesms.lock.SignalPinReminders; import org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity; import org.thoughtcrime.securesms.lock.v2.KbsMigrationActivity; import org.thoughtcrime.securesms.messagerequests.MessageRequestMegaphoneActivity; +import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.CommunicationActions; @@ -32,6 +36,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; /** * Creating a new megaphone: @@ -94,6 +99,7 @@ public final class Megaphones { put(Event.DONATE, shouldShowDonateMegaphone(context) ? ShowForDurationSchedule.showForDays(7) : NEVER); put(Event.GROUP_CALLING, shouldShowGroupCallingMegaphone() ? ALWAYS : NEVER); put(Event.ONBOARDING, shouldShowOnboardingMegaphone(context) ? ALWAYS : NEVER); + put(Event.NOTIFICATIONS, shouldShowNotificationsMegaphone(context) ? RecurringSchedule.every(TimeUnit.DAYS.toMillis(30)) : NEVER); }}; } @@ -119,6 +125,8 @@ public final class Megaphones { return buildGroupCallingMegaphone(context); case ONBOARDING: return buildOnboardingMegaphone(); + case NOTIFICATIONS: + return buildNotificationsMegaphone(context); default: throw new IllegalArgumentException("Event not handled!"); } @@ -264,6 +272,34 @@ public final class Megaphones { .build(); } + private static @NonNull Megaphone buildNotificationsMegaphone(@NonNull Context context) { + return new Megaphone.Builder(Event.NOTIFICATIONS, Megaphone.Style.BASIC) + .setTitle(R.string.NotificationsMegaphone_turn_on_notifications) + .setBody(R.string.NotificationsMegaphone_never_miss_a_message) + .setImage(R.drawable.megaphone_notifications_64) + .setActionButton(R.string.NotificationsMegaphone_turn_on, (megaphone, controller) -> { + controller.onMegaphoneSnooze(Event.NOTIFICATIONS); + + if (Build.VERSION.SDK_INT >= 26 && !NotificationChannels.isMessageChannelEnabled(context)) { + Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); + intent.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationChannels.getMessagesChannel(context)); + intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); + controller.onMegaphoneNavigationRequested(intent); + } else if (Build.VERSION.SDK_INT >= 26 && !NotificationChannels.areNotificationsEnabled(context)) { + Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS); + intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); + controller.onMegaphoneNavigationRequested(intent); + } else { + Intent intent = new Intent(context, ApplicationPreferencesActivity.class); + intent.putExtra(ApplicationPreferencesActivity.LAUNCH_TO_NOTIFICATIONS_FRAGMENT, true); + controller.onMegaphoneNavigationRequested(intent); + } + }) + .setSecondaryButton(R.string.NotificationsMegaphone_not_now, (megaphone, controller) -> controller.onMegaphoneSnooze(Event.NOTIFICATIONS)) + .setPriority(Megaphone.Priority.DEFAULT) + .build(); + } + private static boolean shouldShowMessageRequestsMegaphone() { return Recipient.self().getProfileName() == ProfileName.EMPTY; } @@ -288,6 +324,12 @@ public final class Megaphones { return SignalStore.onboarding().hasOnboarding(context); } + private static boolean shouldShowNotificationsMegaphone(@NonNull Context context) { + return !TextSecurePreferences.isNotificationsEnabled(context) || + !NotificationChannels.isMessageChannelEnabled(context) || + !NotificationChannels.areNotificationsEnabled(context); + } + public enum Event { REACTIONS("reactions"), PINS_FOR_ALL("pins_for_all"), @@ -298,7 +340,8 @@ public final class Megaphones { RESEARCH("research"), DONATE("donate"), GROUP_CALLING("group_calling"), - ONBOARDING("onboarding"); + ONBOARDING("onboarding"), + NOTIFICATIONS("notifications"); private final String key; diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/RecurringSchedule.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/RecurringSchedule.java index 90fe17dd5f..d9a957ff4a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/RecurringSchedule.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/RecurringSchedule.java @@ -1,13 +1,34 @@ package org.thoughtcrime.securesms.megaphone; +import androidx.annotation.NonNull; + +/** + * A schedule that provides a high level of control, allowing you to specify an amount of time to + * wait based on how many times a user has seen the megaphone. + */ class RecurringSchedule implements MegaphoneSchedule { private final long[] gaps; + /** + * How long to wait after each time a user has seen the megaphone. Index 0 corresponds to how long + * to wait to show it again after the user has seen it once, index 1 is for after the user has + * seen it twice, etc. If the seen count is greater than the number of provided intervals, it will + * continue to use the last interval provided indefinitely. + * + * The schedule will always show the megaphone if the user has never seen it. + */ RecurringSchedule(long... durationGaps) { this.gaps = durationGaps; } + /** + * Shortcut for a recurring schedule with a single interval. + */ + public static @NonNull MegaphoneSchedule every(long interval) { + return new RecurringSchedule(interval); + } + @Override public boolean shouldDisplay(int seenCount, long lastSeen, long firstVisible, long currentTime) { if (seenCount == 0) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java index 2a9cb66e3c..de9fd1e31d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java @@ -376,6 +376,36 @@ public class NotificationChannels { ensureCustomChannelConsistency(context); } + /** + * Whether or not the default messages notification channel is enabled. Note that "enabled" just + * means receiving notifications in some capacity -- a user could have it enabled, but set it to a + * lower importance. + * + * This could also return true if the specific channnel is enabled, but notifications *overall* + * are disabled. Check {@link #areNotificationsEnabled(Context)} to be safe. + */ + public static synchronized boolean isMessageChannelEnabled(@NonNull Context context) { + if (!supported()) { + return true; + } + + NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); + NotificationChannel channel = notificationManager.getNotificationChannel(getMessagesChannel(context)); + + return channel != null && channel.getImportance() != NotificationManager.IMPORTANCE_NONE; + } + + /** + * Whether or not notifications for the entire app are enabled. + */ + public static synchronized boolean areNotificationsEnabled(@NonNull Context context) { + if (Build.VERSION.SDK_INT >= 24) { + return ServiceUtil.getNotificationManager(context).areNotificationsEnabled(); + } else { + return true; + } + } + /** * Updates the name of an existing channel to match the recipient's current name. Will have no * effect if the recipient doesn't have an existing valid channel. diff --git a/app/src/main/res/drawable-hdpi/megaphone_notifications_64.webp b/app/src/main/res/drawable-hdpi/megaphone_notifications_64.webp new file mode 100644 index 0000000000000000000000000000000000000000..fc819496fb643a4b0074a6bcf2641795b7df6120 GIT binary patch literal 3544 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 SN7nss#3}#x#8O)NzZU>{is+R9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/megaphone_notifications_64.webp b/app/src/main/res/drawable-mdpi/megaphone_notifications_64.webp new file mode 100644 index 0000000000000000000000000000000000000000..61dde0217ca10c29a6d06c50f07691d795a75ad9 GIT binary patch literal 2344 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 O+I$@1yIro3NfQ7a4|Z7q literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/megaphone_notifications_64.webp b/app/src/main/res/drawable-xhdpi/megaphone_notifications_64.webp new file mode 100644 index 0000000000000000000000000000000000000000..abb39ff0c6d7a54b69dec1cec26a531044664e5c GIT binary patch literal 5046 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8818ccd7ca..ac74af3449 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -973,6 +973,12 @@ End call Cancel call + + Turn on Notifications? + Never miss a message from your contacts and groups. + Turn on + Not now + Multimedia message Downloading MMS message