From 8dbcb255ad329df29e6ec1749a41568eed8b031f Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Sun, 7 Jun 2020 13:40:05 -0300 Subject: [PATCH] Hide Block and Leave options when not available in group settings, add unblock. --- .../securesms/groups/LiveGroup.java | 4 ++++ .../ui/managegroup/ManageGroupFragment.java | 10 +++++++++- .../ui/managegroup/ManageGroupViewModel.java | 19 ++++++++++++++++++- .../main/res/layout/group_manage_fragment.xml | 15 +++++++++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 47 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java index be7d9da400..4159339130 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java @@ -61,6 +61,10 @@ public final class LiveGroup { return Transformations.map(groupRecord, g -> g.isAdmin(Recipient.self())); } + public LiveData isActive() { + return Transformations.map(groupRecord, GroupDatabase.GroupRecord::isActive); + } + public LiveData getRecipientIsAdmin(@NonNull RecipientId recipientId) { return LiveDataUtil.mapAsync(groupRecord, g -> g.isAdmin(Recipient.resolved(recipientId))); } 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 4c11283919..a4cc4d7307 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 @@ -19,7 +19,6 @@ import androidx.appcompat.widget.Toolbar; import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; -import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.ViewModelProviders; import com.google.android.material.snackbar.Snackbar; @@ -84,6 +83,7 @@ public class ManageGroupFragment extends Fragment { private View disappearingMessagesRow; private TextView disappearingMessages; private TextView blockGroup; + private TextView unblockGroup; private TextView leaveGroup; private TextView addMembers; private SwitchCompat muteNotificationsSwitch; @@ -157,6 +157,7 @@ public class ManageGroupFragment extends Fragment { disappearingMessagesRow = view.findViewById(R.id.disappearing_messages_row); disappearingMessages = view.findViewById(R.id.disappearing_messages); blockGroup = view.findViewById(R.id.blockGroup); + unblockGroup = view.findViewById(R.id.unblockGroup); leaveGroup = view.findViewById(R.id.leaveGroup); addMembers = view.findViewById(R.id.add_members); muteNotificationsUntilLabel = view.findViewById(R.id.group_mute_notifications_until); @@ -247,6 +248,7 @@ public class ManageGroupFragment extends Fragment { disappearingMessagesRow.setOnClickListener(v -> viewModel.handleExpirationSelection()); blockGroup.setOnClickListener(v -> viewModel.blockAndLeave(requireActivity())); + unblockGroup.setOnClickListener(v -> viewModel.unblock(requireActivity())); addMembers.setOnClickListener(v -> viewModel.onAddMembersClick(this, PICK_CONTACT)); @@ -328,6 +330,12 @@ public class ManageGroupFragment extends Fragment { } viewModel.getSnackbarEvents().observe(getViewLifecycleOwner(), this::handleSnackbarEvent); + + viewModel.getCanLeaveGroup().observe(getViewLifecycleOwner(), canLeave -> leaveGroup.setVisibility(canLeave ? View.VISIBLE : View.GONE)); + viewModel.getCanBlockGroup().observe(getViewLifecycleOwner(), canBlock -> { + blockGroup.setVisibility(canBlock ? View.VISIBLE : View.GONE); + unblockGroup.setVisibility(canBlock ? View.GONE : View.VISIBLE); + }); } public boolean onMenuItemSelected(@NonNull MenuItem item) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java index df96cc4868..d20d57a2cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java @@ -67,6 +67,8 @@ public class ManageGroupViewModel extends ViewModel { private final LiveData hasCustomNotifications; private final LiveData canCollapseMemberList; private final DefaultValueLiveData memberListCollapseState = new DefaultValueLiveData<>(CollapseState.COLLAPSED); + private final LiveData canLeaveGroup; + private final LiveData canBlockGroup; private ManageGroupViewModel(@NonNull Context context, @NonNull ManageGroupRepository manageGroupRepository) { this.context = context; @@ -99,6 +101,8 @@ public class ManageGroupViewModel extends ViewModel { recipient -> new MuteState(recipient.getMuteUntil(), recipient.isMuted())); this.hasCustomNotifications = Transformations.map(this.groupRecipient, recipient -> recipient.getNotificationChannel() != null); + this.canLeaveGroup = liveGroup.isActive(); + this.canBlockGroup = Transformations.map(this.groupRecipient, recipient -> !recipient.isBlocked()); } @WorkerThread @@ -172,10 +176,18 @@ public class ManageGroupViewModel extends ViewModel { return snackbarEvents; } - public LiveData getCanCollapseMemberList() { + LiveData getCanCollapseMemberList() { return canCollapseMemberList; } + LiveData getCanBlockGroup() { + return canBlockGroup; + } + + LiveData getCanLeaveGroup() { + return canLeaveGroup; + } + void handleExpirationSelection() { manageGroupRepository.getRecipient(groupRecipient -> ExpirationDialog.show(context, @@ -196,6 +208,11 @@ public class ManageGroupViewModel extends ViewModel { () -> RecipientUtil.block(context, recipient))); } + void unblock(@NonNull FragmentActivity activity) { + manageGroupRepository.getRecipient(recipient -> BlockUnblockDialog.showUnblockFor(activity, activity.getLifecycle(), recipient, + () -> RecipientUtil.unblock(context, recipient))); + } + void onAddMembers(List selected) { manageGroupRepository.addMembers(selected, this::showSuccessSnackbar, this::showErrorToast); } diff --git a/app/src/main/res/layout/group_manage_fragment.xml b/app/src/main/res/layout/group_manage_fragment.xml index 98d4e46b6d..4b6c77d62f 100644 --- a/app/src/main/res/layout/group_manage_fragment.xml +++ b/app/src/main/res/layout/group_manage_fragment.xml @@ -557,6 +557,21 @@ android:textAppearance="@style/Signal.Text.Body" android:textColor="@color/core_red" /> + + Who can edit group membership Who can edit group info Block group + Unblock group Leave group Mute notifications Custom notifications