mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 09:28:34 +00:00
Make CustomNotificationsDialogFragment work with recipients.
This commit is contained in:
parent
b3a59c3946
commit
f5626f678d
@ -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 -> {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user