Make CustomNotificationsDialogFragment work with recipients.
This commit is contained in:
parent
b3a59c3946
commit
f5626f678d
4 changed files with 35 additions and 35 deletions
|
@ -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 -> {
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue