From b48abb08d2e6b6877a50fed90d2b4c27b444c776 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Sun, 7 Jun 2020 13:13:51 -0400 Subject: [PATCH] Show custom notifications for API < 26. --- .../groups/ui/managegroup/ManageGroupFragment.java | 14 ++++++-------- .../ui/managegroup/ManageGroupViewModel.java | 3 ++- .../CustomNotificationsDialogFragment.java | 6 ++++++ .../CustomNotificationsRepository.java | 10 ++++++---- .../CustomNotificationsViewModel.java | 3 ++- .../notifications/NotificationChannels.java | 3 +++ 6 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java index a4cc4d7307..f5e8c78fa5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java @@ -314,19 +314,17 @@ public class ManageGroupFragment extends Fragment { } }); + customNotificationsRow.setVisibility(View.VISIBLE); + + customNotificationsRow.setOnClickListener(v -> CustomNotificationsDialogFragment.create(groupId) + .show(requireFragmentManager(), "CUSTOM_NOTIFICATIONS")); + + //noinspection CodeBlock2Expr if (NotificationChannels.supported()) { - customNotificationsRow.setVisibility(View.VISIBLE); - - customNotificationsRow.setOnClickListener(v -> CustomNotificationsDialogFragment.create(groupId) - .show(requireFragmentManager(), "CUSTOM_NOTIFICATIONS")); - - //noinspection CodeBlock2Expr viewModel.hasCustomNotifications().observe(getViewLifecycleOwner(), hasCustomNotifications -> { customNotificationsButton.setText(hasCustomNotifications ? R.string.ManageGroupActivity_on : R.string.ManageGroupActivity_off); }); - } else { - customNotificationsRow.setVisibility(View.GONE); } viewModel.getSnackbarEvents().observe(getViewLifecycleOwner(), this::handleSnackbarEvent); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java index d20d57a2cc..fba25b44c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java @@ -31,6 +31,7 @@ import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason; import org.thoughtcrime.securesms.groups.ui.GroupErrors; import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry; import org.thoughtcrime.securesms.groups.ui.addmembers.AddMembersActivity; +import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; @@ -100,7 +101,7 @@ public class ManageGroupViewModel extends ViewModel { this.muteState = Transformations.map(this.groupRecipient, recipient -> new MuteState(recipient.getMuteUntil(), recipient.isMuted())); this.hasCustomNotifications = Transformations.map(this.groupRecipient, - recipient -> recipient.getNotificationChannel() != null); + recipient -> recipient.getNotificationChannel() != null || !NotificationChannels.supported()); this.canLeaveGroup = liveGroup.isActive(); this.canBlockGroup = Transformations.map(this.groupRecipient, recipient -> !recipient.isBlocked()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsDialogFragment.java index 44e6303a86..4e1c29c112 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsDialogFragment.java @@ -24,6 +24,7 @@ import androidx.lifecycle.ViewModelProviders; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.groups.GroupId; +import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.util.ThemeUtil; public class CustomNotificationsDialogFragment extends DialogFragment { @@ -123,6 +124,11 @@ public class CustomNotificationsDialogFragment extends DialogFragment { vibrateSwitch.setVisibility(hasCustomNotifications ? View.VISIBLE : View.GONE); }); + if (!NotificationChannels.supported()) { + customNotificationsSwitch.setVisibility(View.GONE); + view.findViewById(R.id.custom_notifications_enable_label).setVisibility(View.GONE); + } + CompoundButton.OnCheckedChangeListener onVibrateSwitchCheckChangedListener = (buttonView, isChecked) -> { viewModel.setMessageVibrate(isChecked ? RecipientDatabase.VibrateState.ENABLED : RecipientDatabase.VibrateState.DISABLED); }; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsRepository.java index 0df25b4f4e..3cfd0158d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsRepository.java @@ -30,11 +30,13 @@ class CustomNotificationsRepository { Recipient recipient = getRecipient(); RecipientDatabase recipientDatabase = DatabaseFactory.getRecipientDatabase(context); - recipientDatabase.setMessageRingtone(recipient.getId(), NotificationChannels.getMessageRingtone(context, recipient)); - recipientDatabase.setMessageVibrate(recipient.getId(), NotificationChannels.getMessageVibrate(context, recipient) ? RecipientDatabase.VibrateState.ENABLED - : RecipientDatabase.VibrateState.DISABLED); + if (NotificationChannels.supported()) { + recipientDatabase.setMessageRingtone(recipient.getId(), NotificationChannels.getMessageRingtone(context, recipient)); + recipientDatabase.setMessageVibrate(recipient.getId(), NotificationChannels.getMessageVibrate(context, recipient) ? RecipientDatabase.VibrateState.ENABLED + : RecipientDatabase.VibrateState.DISABLED); - NotificationChannels.ensureCustomChannelConsistency(context); + NotificationChannels.ensureCustomChannelConsistency(context); + } onLoaded.run(); }); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsViewModel.java index 82237b5699..dc7c53d185 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsViewModel.java @@ -13,6 +13,7 @@ import androidx.lifecycle.ViewModelProvider; import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.LiveGroup; +import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.recipients.Recipient; public final class CustomNotificationsViewModel extends ViewModel { @@ -27,7 +28,7 @@ public final class CustomNotificationsViewModel extends ViewModel { private CustomNotificationsViewModel(@NonNull GroupId groupId, @NonNull CustomNotificationsRepository repository) { this.liveGroup = new LiveGroup(groupId); this.repository = repository; - this.hasCustomNotifications = Transformations.map(liveGroup.getGroupRecipient(), recipient -> recipient.getNotificationChannel() != null); + this.hasCustomNotifications = Transformations.map(liveGroup.getGroupRecipient(), recipient -> recipient.getNotificationChannel() != null || !NotificationChannels.supported()); this.isVibrateEnabled = Transformations.map(liveGroup.getGroupRecipient(), Recipient::getMessageVibrate); this.notificationSound = Transformations.map(liveGroup.getGroupRecipient(), Recipient::getMessageRingtone); 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 b7f3c922a4..bb578db88e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java @@ -400,6 +400,9 @@ public class NotificationChannels { @TargetApi(26) @WorkerThread public static synchronized void ensureCustomChannelConsistency(@NonNull Context context) { + if (!supported()) { + return; + } Log.d(TAG, "ensureCustomChannelConsistency()"); NotificationManager notificationManager = ServiceUtil.getNotificationManager(context);