From 26404ff5d7b3a3cc3397b726aaff9d3121e3a2a2 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Wed, 7 Oct 2020 13:44:25 -0300 Subject: [PATCH] More descriptive copy for group link permission errors. --- .../ShareableGroupLinkDialogFragment.java | 34 ++++++++++++++----- .../ShareableGroupLinkViewModel.java | 30 +++++++++------- app/src/main/res/values/strings.xml | 4 +++ 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkDialogFragment.java index 81262831e..f682b2fb0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkDialogFragment.java @@ -10,6 +10,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.DialogFragment; @@ -101,16 +102,19 @@ public final class ShareableGroupLinkDialogFragment extends DialogFragment { shareRow.setOnClickListener(v -> GroupLinkBottomSheetDialogFragment.show(requireFragmentManager(), groupId)); - shareableGroupLinkRow.setOnClickListener(v -> viewModel.onToggleGroupLink(requireContext())); - approveNewMembersRow.setOnClickListener(v -> viewModel.onToggleApproveMembers(requireContext())); - resetLinkRow.setOnClickListener(v -> - new AlertDialog.Builder(requireContext()) - .setMessage(R.string.ShareableGroupLinkDialogFragment__are_you_sure_you_want_to_reset_the_group_link) - .setPositiveButton(R.string.ShareableGroupLinkDialogFragment__reset_link, (dialog, which) -> viewModel.onResetLink(requireContext())) - .setNegativeButton(android.R.string.cancel, null) - .show()); + viewModel.getCanEdit().observe(getViewLifecycleOwner(), canEdit -> { + if (canEdit) { + shareableGroupLinkRow.setOnClickListener(v -> viewModel.onToggleGroupLink()); + approveNewMembersRow.setOnClickListener(v -> viewModel.onToggleApproveMembers()); + resetLinkRow.setOnClickListener(v -> onResetGroupLink()); + } else { + shareableGroupLinkRow.setOnClickListener(v -> toast(R.string.ManageGroupActivity_only_admins_can_enable_or_disable_the_sharable_group_link)); + approveNewMembersRow.setOnClickListener(v -> toast(R.string.ManageGroupActivity_only_admins_can_enable_or_disable_the_option_to_approve_new_members)); + resetLinkRow.setOnClickListener(v -> toast(R.string.ManageGroupActivity_only_admins_can_reset_the_sharable_group_link)); + } + }); - viewModel.getToasts().observe(getViewLifecycleOwner(), t -> Toast.makeText(requireContext(), t, Toast.LENGTH_SHORT).show()); + viewModel.getToasts().observe(getViewLifecycleOwner(), this::toast); viewModel.getBusy().observe(getViewLifecycleOwner(), busy -> { if (busy) { @@ -126,6 +130,18 @@ public final class ShareableGroupLinkDialogFragment extends DialogFragment { }); } + private void onResetGroupLink() { + new AlertDialog.Builder(requireContext()) + .setMessage(R.string.ShareableGroupLinkDialogFragment__are_you_sure_you_want_to_reset_the_group_link) + .setPositiveButton(R.string.ShareableGroupLinkDialogFragment__reset_link, (dialog, which) -> viewModel.onResetLink()) + .setNegativeButton(android.R.string.cancel, null) + .show(); + } + + protected void toast(@StringRes int message) { + Toast.makeText(requireContext(), getString(message), Toast.LENGTH_SHORT).show(); + } + /** * Inserts zero width space characters between each character in the original ensuring it takes * the full width of the TextView. diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkViewModel.java index c95be3d5e..dcc73a111 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/sharablegrouplink/ShareableGroupLinkViewModel.java @@ -1,14 +1,11 @@ package org.thoughtcrime.securesms.recipients.ui.sharablegrouplink; -import android.content.Context; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; -import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.LiveGroup; import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason; @@ -21,12 +18,16 @@ final class ShareableGroupLinkViewModel extends ViewModel { private final ShareableGroupLinkRepository repository; private final LiveData groupLink; - private final SingleLiveEvent toasts; + private final SingleLiveEvent toasts; private final SingleLiveEvent busy; + private final LiveData canEdit; private ShareableGroupLinkViewModel(@NonNull GroupId.V2 groupId, @NonNull ShareableGroupLinkRepository repository) { + LiveGroup liveGroup = new LiveGroup(groupId); + this.repository = repository; - this.groupLink = new LiveGroup(groupId).getGroupLink(); + this.groupLink = liveGroup.getGroupLink(); + this.canEdit = liveGroup.isSelfAdmin(); this.toasts = new SingleLiveEvent<>(); this.busy = new SingleLiveEvent<>(); } @@ -35,7 +36,7 @@ final class ShareableGroupLinkViewModel extends ViewModel { return groupLink; } - LiveData getToasts() { + LiveData getToasts() { return toasts; } @@ -43,7 +44,11 @@ final class ShareableGroupLinkViewModel extends ViewModel { return busy; } - void onToggleGroupLink(@NonNull Context context) { + LiveData getCanEdit() { + return canEdit; + } + + void onToggleGroupLink() { busy.setValue(true); repository.toggleGroupLinkEnabled(new AsynchronousCallback.WorkerThread() { @Override @@ -54,12 +59,12 @@ final class ShareableGroupLinkViewModel extends ViewModel { @Override public void onError(@Nullable GroupChangeFailureReason error) { busy.postValue(false); - toasts.postValue(context.getString(GroupErrors.getUserDisplayMessage(error))); + toasts.postValue(GroupErrors.getUserDisplayMessage(error)); } }); } - void onToggleApproveMembers(@NonNull Context context) { + void onToggleApproveMembers() { busy.setValue(true); repository.toggleGroupLinkApprovalRequired(new AsynchronousCallback.WorkerThread() { @Override @@ -70,24 +75,23 @@ final class ShareableGroupLinkViewModel extends ViewModel { @Override public void onError(@Nullable GroupChangeFailureReason error) { busy.postValue(false); - toasts.postValue(context.getString(GroupErrors.getUserDisplayMessage(error))); + toasts.postValue(GroupErrors.getUserDisplayMessage(error)); } }); } - void onResetLink(@NonNull Context context) { + void onResetLink() { busy.setValue(true); repository.cycleGroupLinkPassword(new AsynchronousCallback.WorkerThread() { @Override public void onComplete(@Nullable Void result) { busy.postValue(false); - toasts.postValue(context.getString(R.string.ShareableGroupLinkDialogFragment__group_link_reset)); } @Override public void onError(@Nullable GroupChangeFailureReason error) { busy.postValue(false); - toasts.postValue(context.getString(GroupErrors.getUserDisplayMessage(error))); + toasts.postValue(GroupErrors.getUserDisplayMessage(error)); } }); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bd23ad9c4..affc09a06 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -618,6 +618,10 @@ %d members added. + Only admins can enable or disable the sharable group link. + Only admins can enable or disable the option to approve new members. + Only admins can reset the sharable group link. + You don\'t have the rights to do this Someone you added does not support new groups and needs to update Signal Failed to update the group