From 04bb4b351a0c14582db76bc0d0c15f856105ab09 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Tue, 31 Mar 2020 12:01:43 -0300 Subject: [PATCH] Refactor group leave dialog out of conversation. --- .../conversation/ConversationActivity.java | 25 +++-------- .../securesms/groups/GroupManager.java | 6 +-- .../securesms/groups/V1GroupManager.java | 7 +-- .../securesms/groups/ui/LeaveGroupDialog.java | 45 +++++++++++++++++++ 4 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 58bfa8d3c5..c891369448 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -149,7 +149,7 @@ import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.ReminderUpdateEvent; import org.thoughtcrime.securesms.giph.ui.GiphyActivity; -import org.thoughtcrime.securesms.groups.GroupManager; +import org.thoughtcrime.securesms.groups.ui.LeaveGroupDialog; import org.thoughtcrime.securesms.insights.InsightsLauncher; import org.thoughtcrime.securesms.invites.InviteReminderModel; import org.thoughtcrime.securesms.invites.InviteReminderRepository; @@ -1118,25 +1118,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity return; } - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(getString(R.string.ConversationActivity_leave_group)); - builder.setIconAttribute(R.attr.dialog_info_icon); - builder.setCancelable(true); - builder.setMessage(getString(R.string.ConversationActivity_are_you_sure_you_want_to_leave_this_group)); - builder.setPositiveButton(R.string.yes, (dialog, which) -> - SimpleTask.run( - getLifecycle(), - () -> GroupManager.leaveGroup(ConversationActivity.this, getRecipient()), - (success) -> { - if (success) { - initializeEnabledCheck(); - } else { - Toast.makeText(ConversationActivity.this, R.string.ConversationActivity_error_leaving_group, Toast.LENGTH_LONG).show(); - } - })); - - builder.setNegativeButton(R.string.no, null); - builder.show(); + LeaveGroupDialog.handleLeavePushGroup(ConversationActivity.this, + getLifecycle(), + getRecipient().requireGroupId().requirePush(), + this::initializeEnabledCheck); } private void handleEditPushGroup() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java index 28c8e50143..54e0358a5b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java @@ -50,10 +50,8 @@ public final class GroupManager { } @WorkerThread - public static boolean leaveGroup(@NonNull Context context, @NonNull Recipient groupRecipient) { - GroupId groupId = groupRecipient.requireGroupId(); - - return V1GroupManager.leaveGroup(context, groupId.requireV1(), groupRecipient); + public static boolean leaveGroup(@NonNull Context context, @NonNull GroupId.Push groupId) { + return V1GroupManager.leaveGroup(context, groupId.requireV1()); } public static class GroupActionResult { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/V1GroupManager.java b/app/src/main/java/org/thoughtcrime/securesms/groups/V1GroupManager.java index c33f44957d..c3e5a25aca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/V1GroupManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/V1GroupManager.java @@ -153,9 +153,10 @@ final class V1GroupManager { } @WorkerThread - static boolean leaveGroup(@NonNull Context context, @NonNull GroupId.V1 groupId, @NonNull Recipient groupRecipient) { - long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient); - Optional leaveMessage = GroupUtil.createGroupLeaveMessage(context, groupRecipient); + static boolean leaveGroup(@NonNull Context context, @NonNull GroupId.V1 groupId) { + Recipient groupRecipient = Recipient.externalGroup(context, groupId); + long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient); + Optional leaveMessage = GroupUtil.createGroupLeaveMessage(context, groupRecipient); if (threadId != -1 && leaveMessage.isPresent()) { try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java new file mode 100644 index 0000000000..027c695e54 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java @@ -0,0 +1,45 @@ +package org.thoughtcrime.securesms.groups.ui; + +import android.content.Context; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.lifecycle.Lifecycle; + +import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.groups.GroupId; +import org.thoughtcrime.securesms.groups.GroupManager; +import org.thoughtcrime.securesms.util.concurrent.SimpleTask; + +public final class LeaveGroupDialog { + + private LeaveGroupDialog() { + } + + public static void handleLeavePushGroup(@NonNull Context context, + @NonNull Lifecycle lifecycle, + @NonNull GroupId.Push groupId, + @Nullable Runnable onSuccess) + { + new AlertDialog.Builder(context) + .setTitle(context.getString(R.string.ConversationActivity_leave_group)) + .setIconAttribute(R.attr.dialog_info_icon) + .setCancelable(true) + .setMessage(context.getString(R.string.ConversationActivity_are_you_sure_you_want_to_leave_this_group)) + .setPositiveButton(R.string.yes, (dialog, which) -> + SimpleTask.run( + lifecycle, + () -> GroupManager.leaveGroup(context, groupId), + (success) -> { + if (success) { + if (onSuccess != null) onSuccess.run(); + } else { + Toast.makeText(context, R.string.ConversationActivity_error_leaving_group, Toast.LENGTH_LONG).show(); + } + })) + .setNegativeButton(R.string.no, null) + .show(); + } +}