Hide Block and Leave options when not available in group settings, add unblock.

fork-5.53.8
Alan Evans 2020-06-07 13:40:05 -03:00 zatwierdzone przez Greyson Parrelli
rodzic db06cbbc86
commit 8dbcb255ad
5 zmienionych plików z 47 dodań i 2 usunięć

Wyświetl plik

@ -61,6 +61,10 @@ public final class LiveGroup {
return Transformations.map(groupRecord, g -> g.isAdmin(Recipient.self()));
}
public LiveData<Boolean> isActive() {
return Transformations.map(groupRecord, GroupDatabase.GroupRecord::isActive);
}
public LiveData<Boolean> getRecipientIsAdmin(@NonNull RecipientId recipientId) {
return LiveDataUtil.mapAsync(groupRecord, g -> g.isAdmin(Recipient.resolved(recipientId)));
}

Wyświetl plik

@ -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) {

Wyświetl plik

@ -67,6 +67,8 @@ public class ManageGroupViewModel extends ViewModel {
private final LiveData<Boolean> hasCustomNotifications;
private final LiveData<Boolean> canCollapseMemberList;
private final DefaultValueLiveData<CollapseState> memberListCollapseState = new DefaultValueLiveData<>(CollapseState.COLLAPSED);
private final LiveData<Boolean> canLeaveGroup;
private final LiveData<Boolean> 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<Boolean> getCanCollapseMemberList() {
LiveData<Boolean> getCanCollapseMemberList() {
return canCollapseMemberList;
}
LiveData<Boolean> getCanBlockGroup() {
return canBlockGroup;
}
LiveData<Boolean> 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<RecipientId> selected) {
manageGroupRepository.addMembers(selected, this::showSuccessSnackbar, this::showErrorToast);
}

Wyświetl plik

@ -557,6 +557,21 @@
android:textAppearance="@style/Signal.Text.Body"
android:textColor="@color/core_red" />
<TextView
android:id="@+id/unblockGroup"
android:layout_width="match_parent"
android:layout_height="@dimen/group_manage_fragment_row_height"
android:background="?selectableItemBackground"
android:gravity="center_vertical|start"
android:paddingStart="@dimen/group_manage_fragment_row_horizontal_padding"
android:paddingEnd="@dimen/group_manage_fragment_row_horizontal_padding"
android:text="@string/ManageGroupActivity_unblock_group"
android:textAlignment="viewStart"
android:textAppearance="@style/Signal.Text.Body"
android:textColor="@color/core_red"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/leaveGroup"
android:layout_width="match_parent"

Wyświetl plik

@ -518,6 +518,7 @@
<string name="ManageGroupActivity_who_can_edit_group_membership">Who can edit group membership</string>
<string name="ManageGroupActivity_who_can_edit_group_info">Who can edit group info</string>
<string name="ManageGroupActivity_block_group">Block group</string>
<string name="ManageGroupActivity_unblock_group">Unblock group</string>
<string name="ManageGroupActivity_leave_group">Leave group</string>
<string name="ManageGroupActivity_mute_notifications">Mute notifications</string>
<string name="ManageGroupActivity_custom_notifications">Custom notifications</string>