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 6a0c95c2c6..2b4edf99ce 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 @@ -35,7 +35,6 @@ import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.ui.GroupMemberListView; import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog; import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupRightsDialog; -import org.thoughtcrime.securesms.groups.ui.notifications.CustomNotificationsDialogFragment; import org.thoughtcrime.securesms.groups.ui.pendingmemberinvites.PendingMemberInvitesActivity; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity; @@ -45,6 +44,7 @@ import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment; +import org.thoughtcrime.securesms.recipients.ui.notifications.CustomNotificationsDialogFragment; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.LifecycleCursorWrapper; @@ -205,6 +205,8 @@ public class ManageGroupFragment extends Fragment { activity.startActivity(AvatarPreviewActivity.intentFromRecipientId(activity, groupRecipient.getId()), AvatarPreviewActivity.createTransitionBundle(activity, avatar)); }); + customNotificationsRow.setOnClickListener(v -> CustomNotificationsDialogFragment.create(groupRecipient.getId()) + .show(requireFragmentManager(), "CUSTOM_NOTIFICATIONS")); }); viewModel.getGroupViewState().observe(getViewLifecycleOwner(), vs -> { @@ -299,9 +301,6 @@ public class ManageGroupFragment extends Fragment { customNotificationsRow.setVisibility(View.VISIBLE); - customNotificationsRow.setOnClickListener(v -> CustomNotificationsDialogFragment.create(groupId) - .show(requireFragmentManager(), "CUSTOM_NOTIFICATIONS")); - //noinspection CodeBlock2Expr if (NotificationChannels.supported()) { viewModel.hasCustomNotifications().observe(getViewLifecycleOwner(), hasCustomNotifications -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsDialogFragment.java similarity index 89% rename from app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsDialogFragment.java rename to app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsDialogFragment.java index 4e1c29c112..891969ba40 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsDialogFragment.java @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.groups.ui.notifications; +package org.thoughtcrime.securesms.recipients.ui.notifications; import android.app.Activity; import android.content.Context; @@ -23,15 +23,17 @@ 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.recipients.RecipientId; import org.thoughtcrime.securesms.util.ThemeUtil; +import java.util.Objects; + public class CustomNotificationsDialogFragment extends DialogFragment { private static final short RINGTONE_PICKER_REQUEST_CODE = 13562; - private static final String ARG_GROUP_ID = "group_id"; + private static final String ARG_RECIPIENT_ID = "recipient_id"; private SwitchCompat customNotificationsSwitch; private View soundLabel; @@ -41,11 +43,11 @@ public class CustomNotificationsDialogFragment extends DialogFragment { private CustomNotificationsViewModel viewModel; - public static DialogFragment create(@NonNull GroupId groupId) { + public static DialogFragment create(@NonNull RecipientId recipientId) { DialogFragment fragment = new CustomNotificationsDialogFragment(); Bundle args = new Bundle(); - args.putString(ARG_GROUP_ID, groupId.toString()); + args.putParcelable(ARG_RECIPIENT_ID, recipientId); fragment.setArguments(args); return fragment; @@ -85,10 +87,10 @@ public class CustomNotificationsDialogFragment extends DialogFragment { } private void initializeViewModel() { - Bundle arguments = requireArguments(); - GroupId groupId = GroupId.parseOrThrow(arguments.getString(ARG_GROUP_ID, "")); - CustomNotificationsRepository repository = new CustomNotificationsRepository(requireContext(), groupId); - CustomNotificationsViewModel.Factory factory = new CustomNotificationsViewModel.Factory(groupId, repository); + Bundle arguments = requireArguments(); + RecipientId recipientId = Objects.requireNonNull(arguments.getParcelable(ARG_RECIPIENT_ID)); + CustomNotificationsRepository repository = new CustomNotificationsRepository(requireContext(), recipientId); + CustomNotificationsViewModel.Factory factory = new CustomNotificationsViewModel.Factory(recipientId, repository); viewModel = ViewModelProviders.of(this, factory).get(CustomNotificationsViewModel.class); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsRepository.java similarity index 90% rename from app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsRepository.java rename to app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsRepository.java index 3cfd0158d8..43715a149d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsRepository.java @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.groups.ui.notifications; +package org.thoughtcrime.securesms.recipients.ui.notifications; import android.content.Context; import android.net.Uri; @@ -9,20 +9,20 @@ import androidx.annotation.WorkerThread; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; class CustomNotificationsRepository { - private final Context context; - private final GroupId groupId; + private final Context context; + private final RecipientId recipientId; - CustomNotificationsRepository(@NonNull Context context, @NonNull GroupId groupId) { - this.context = context; - this.groupId = groupId; + CustomNotificationsRepository(@NonNull Context context, @NonNull RecipientId recipientId) { + this.context = context; + this.recipientId = recipientId; } void onLoad(@NonNull Runnable onLoaded) { @@ -94,6 +94,6 @@ class CustomNotificationsRepository { @WorkerThread private @NonNull Recipient getRecipient() { - return Recipient.externalGroup(context, groupId).resolve(); + return Recipient.resolved(recipientId); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsViewModel.java similarity index 65% rename from app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsViewModel.java rename to app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsViewModel.java index dc7c53d185..b5b6eae306 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/notifications/CustomNotificationsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/notifications/CustomNotificationsViewModel.java @@ -1,4 +1,4 @@ -package org.thoughtcrime.securesms.groups.ui.notifications; +package org.thoughtcrime.securesms.recipients.ui.notifications; import android.net.Uri; @@ -11,26 +11,25 @@ import androidx.lifecycle.ViewModel; 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; +import org.thoughtcrime.securesms.recipients.RecipientId; public final class CustomNotificationsViewModel extends ViewModel { - private final LiveGroup liveGroup; private final LiveData hasCustomNotifications; private final LiveData isVibrateEnabled; private final LiveData notificationSound; private final CustomNotificationsRepository repository; private final MutableLiveData isInitialLoadComplete = new MutableLiveData<>(); - private CustomNotificationsViewModel(@NonNull GroupId groupId, @NonNull CustomNotificationsRepository repository) { - this.liveGroup = new LiveGroup(groupId); + private CustomNotificationsViewModel(@NonNull RecipientId recipientId, @NonNull CustomNotificationsRepository repository) { + LiveData recipient = Recipient.live(recipientId).getLiveData(); + this.repository = repository; - 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); + this.hasCustomNotifications = Transformations.map(recipient, r -> r.getNotificationChannel() != null || !NotificationChannels.supported()); + this.isVibrateEnabled = Transformations.map(recipient, Recipient::getMessageVibrate); + this.notificationSound = Transformations.map(recipient, Recipient::getMessageRingtone); repository.onLoad(() -> isInitialLoadComplete.postValue(true)); } @@ -65,18 +64,18 @@ public final class CustomNotificationsViewModel extends ViewModel { public static final class Factory implements ViewModelProvider.Factory { - private final GroupId groupId; + private final RecipientId recipientId; private final CustomNotificationsRepository repository; - public Factory(@NonNull GroupId groupId, @NonNull CustomNotificationsRepository repository) { - this.groupId = groupId; - this.repository = repository; + public Factory(@NonNull RecipientId recipientId, @NonNull CustomNotificationsRepository repository) { + this.recipientId = recipientId; + this.repository = repository; } @Override public @NonNull T create(@NonNull Class modelClass) { //noinspection ConstantConditions - return modelClass.cast(new CustomNotificationsViewModel(groupId, repository)); + return modelClass.cast(new CustomNotificationsViewModel(recipientId, repository)); } } }