Make CustomNotificationsDialogFragment work with recipients.

This commit is contained in:
Alan Evans 2020-06-12 12:32:17 -03:00 committed by Greyson Parrelli
parent b3a59c3946
commit f5626f678d
4 changed files with 35 additions and 35 deletions

View File

@ -35,7 +35,6 @@ import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.groups.ui.GroupMemberListView; import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog; import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog;
import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupRightsDialog; 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.groups.ui.pendingmemberinvites.PendingMemberInvitesActivity;
import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity; 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.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment; 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.DateUtils;
import org.thoughtcrime.securesms.util.LifecycleCursorWrapper; import org.thoughtcrime.securesms.util.LifecycleCursorWrapper;
@ -205,6 +205,8 @@ public class ManageGroupFragment extends Fragment {
activity.startActivity(AvatarPreviewActivity.intentFromRecipientId(activity, groupRecipient.getId()), activity.startActivity(AvatarPreviewActivity.intentFromRecipientId(activity, groupRecipient.getId()),
AvatarPreviewActivity.createTransitionBundle(activity, avatar)); AvatarPreviewActivity.createTransitionBundle(activity, avatar));
}); });
customNotificationsRow.setOnClickListener(v -> CustomNotificationsDialogFragment.create(groupRecipient.getId())
.show(requireFragmentManager(), "CUSTOM_NOTIFICATIONS"));
}); });
viewModel.getGroupViewState().observe(getViewLifecycleOwner(), vs -> { viewModel.getGroupViewState().observe(getViewLifecycleOwner(), vs -> {
@ -299,9 +301,6 @@ public class ManageGroupFragment extends Fragment {
customNotificationsRow.setVisibility(View.VISIBLE); customNotificationsRow.setVisibility(View.VISIBLE);
customNotificationsRow.setOnClickListener(v -> CustomNotificationsDialogFragment.create(groupId)
.show(requireFragmentManager(), "CUSTOM_NOTIFICATIONS"));
//noinspection CodeBlock2Expr //noinspection CodeBlock2Expr
if (NotificationChannels.supported()) { if (NotificationChannels.supported()) {
viewModel.hasCustomNotifications().observe(getViewLifecycleOwner(), hasCustomNotifications -> { viewModel.hasCustomNotifications().observe(getViewLifecycleOwner(), hasCustomNotifications -> {

View File

@ -1,4 +1,4 @@
package org.thoughtcrime.securesms.groups.ui.notifications; package org.thoughtcrime.securesms.recipients.ui.notifications;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@ -23,15 +23,17 @@ import androidx.lifecycle.ViewModelProviders;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.notifications.NotificationChannels;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemeUtil;
import java.util.Objects;
public class CustomNotificationsDialogFragment extends DialogFragment { public class CustomNotificationsDialogFragment extends DialogFragment {
private static final short RINGTONE_PICKER_REQUEST_CODE = 13562; 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 SwitchCompat customNotificationsSwitch;
private View soundLabel; private View soundLabel;
@ -41,11 +43,11 @@ public class CustomNotificationsDialogFragment extends DialogFragment {
private CustomNotificationsViewModel viewModel; private CustomNotificationsViewModel viewModel;
public static DialogFragment create(@NonNull GroupId groupId) { public static DialogFragment create(@NonNull RecipientId recipientId) {
DialogFragment fragment = new CustomNotificationsDialogFragment(); DialogFragment fragment = new CustomNotificationsDialogFragment();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putString(ARG_GROUP_ID, groupId.toString()); args.putParcelable(ARG_RECIPIENT_ID, recipientId);
fragment.setArguments(args); fragment.setArguments(args);
return fragment; return fragment;
@ -85,10 +87,10 @@ public class CustomNotificationsDialogFragment extends DialogFragment {
} }
private void initializeViewModel() { private void initializeViewModel() {
Bundle arguments = requireArguments(); Bundle arguments = requireArguments();
GroupId groupId = GroupId.parseOrThrow(arguments.getString(ARG_GROUP_ID, "")); RecipientId recipientId = Objects.requireNonNull(arguments.getParcelable(ARG_RECIPIENT_ID));
CustomNotificationsRepository repository = new CustomNotificationsRepository(requireContext(), groupId); CustomNotificationsRepository repository = new CustomNotificationsRepository(requireContext(), recipientId);
CustomNotificationsViewModel.Factory factory = new CustomNotificationsViewModel.Factory(groupId, repository); CustomNotificationsViewModel.Factory factory = new CustomNotificationsViewModel.Factory(recipientId, repository);
viewModel = ViewModelProviders.of(this, factory).get(CustomNotificationsViewModel.class); viewModel = ViewModelProviders.of(this, factory).get(CustomNotificationsViewModel.class);
} }

View File

@ -1,4 +1,4 @@
package org.thoughtcrime.securesms.groups.ui.notifications; package org.thoughtcrime.securesms.recipients.ui.notifications;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
@ -9,20 +9,20 @@ import androidx.annotation.WorkerThread;
import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.groups.GroupId;
import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.notifications.NotificationChannels;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
class CustomNotificationsRepository { class CustomNotificationsRepository {
private final Context context; private final Context context;
private final GroupId groupId; private final RecipientId recipientId;
CustomNotificationsRepository(@NonNull Context context, @NonNull GroupId groupId) { CustomNotificationsRepository(@NonNull Context context, @NonNull RecipientId recipientId) {
this.context = context; this.context = context;
this.groupId = groupId; this.recipientId = recipientId;
} }
void onLoad(@NonNull Runnable onLoaded) { void onLoad(@NonNull Runnable onLoaded) {
@ -94,6 +94,6 @@ class CustomNotificationsRepository {
@WorkerThread @WorkerThread
private @NonNull Recipient getRecipient() { private @NonNull Recipient getRecipient() {
return Recipient.externalGroup(context, groupId).resolve(); return Recipient.resolved(recipientId);
} }
} }

View File

@ -1,4 +1,4 @@
package org.thoughtcrime.securesms.groups.ui.notifications; package org.thoughtcrime.securesms.recipients.ui.notifications;
import android.net.Uri; import android.net.Uri;
@ -11,26 +11,25 @@ import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import org.thoughtcrime.securesms.database.RecipientDatabase; 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.notifications.NotificationChannels;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
public final class CustomNotificationsViewModel extends ViewModel { public final class CustomNotificationsViewModel extends ViewModel {
private final LiveGroup liveGroup;
private final LiveData<Boolean> hasCustomNotifications; private final LiveData<Boolean> hasCustomNotifications;
private final LiveData<RecipientDatabase.VibrateState> isVibrateEnabled; private final LiveData<RecipientDatabase.VibrateState> isVibrateEnabled;
private final LiveData<Uri> notificationSound; private final LiveData<Uri> notificationSound;
private final CustomNotificationsRepository repository; private final CustomNotificationsRepository repository;
private final MutableLiveData<Boolean> isInitialLoadComplete = new MutableLiveData<>(); private final MutableLiveData<Boolean> isInitialLoadComplete = new MutableLiveData<>();
private CustomNotificationsViewModel(@NonNull GroupId groupId, @NonNull CustomNotificationsRepository repository) { private CustomNotificationsViewModel(@NonNull RecipientId recipientId, @NonNull CustomNotificationsRepository repository) {
this.liveGroup = new LiveGroup(groupId); LiveData<Recipient> recipient = Recipient.live(recipientId).getLiveData();
this.repository = repository; this.repository = repository;
this.hasCustomNotifications = Transformations.map(liveGroup.getGroupRecipient(), recipient -> recipient.getNotificationChannel() != null || !NotificationChannels.supported()); this.hasCustomNotifications = Transformations.map(recipient, r -> r.getNotificationChannel() != null || !NotificationChannels.supported());
this.isVibrateEnabled = Transformations.map(liveGroup.getGroupRecipient(), Recipient::getMessageVibrate); this.isVibrateEnabled = Transformations.map(recipient, Recipient::getMessageVibrate);
this.notificationSound = Transformations.map(liveGroup.getGroupRecipient(), Recipient::getMessageRingtone); this.notificationSound = Transformations.map(recipient, Recipient::getMessageRingtone);
repository.onLoad(() -> isInitialLoadComplete.postValue(true)); repository.onLoad(() -> isInitialLoadComplete.postValue(true));
} }
@ -65,18 +64,18 @@ public final class CustomNotificationsViewModel extends ViewModel {
public static final class Factory implements ViewModelProvider.Factory { public static final class Factory implements ViewModelProvider.Factory {
private final GroupId groupId; private final RecipientId recipientId;
private final CustomNotificationsRepository repository; private final CustomNotificationsRepository repository;
public Factory(@NonNull GroupId groupId, @NonNull CustomNotificationsRepository repository) { public Factory(@NonNull RecipientId recipientId, @NonNull CustomNotificationsRepository repository) {
this.groupId = groupId; this.recipientId = recipientId;
this.repository = repository; this.repository = repository;
} }
@Override @Override
public @NonNull <T extends ViewModel> T create(@NonNull Class<T> modelClass) { public @NonNull <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
//noinspection ConstantConditions //noinspection ConstantConditions
return modelClass.cast(new CustomNotificationsViewModel(groupId, repository)); return modelClass.cast(new CustomNotificationsViewModel(recipientId, repository));
} }
} }
} }