Make CustomNotificationsDialogFragment work with recipients.

master
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.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 -> {

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.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);
}

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.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);
}
}

View File

@ -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<Boolean> hasCustomNotifications;
private final LiveData<RecipientDatabase.VibrateState> isVibrateEnabled;
private final LiveData<Uri> notificationSound;
private final CustomNotificationsRepository repository;
private final MutableLiveData<Boolean> 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 = 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 extends ViewModel> T create(@NonNull Class<T> modelClass) {
//noinspection ConstantConditions
return modelClass.cast(new CustomNotificationsViewModel(groupId, repository));
return modelClass.cast(new CustomNotificationsViewModel(recipientId, repository));
}
}
}