Refactor group leave dialog out of conversation.

This commit is contained in:
Alan Evans 2020-03-31 12:01:43 -03:00 committed by Greyson Parrelli
parent e02e4d52b4
commit 04bb4b351a
4 changed files with 56 additions and 27 deletions

View File

@ -149,7 +149,7 @@ import org.thoughtcrime.securesms.database.model.StickerRecord;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.events.ReminderUpdateEvent; import org.thoughtcrime.securesms.events.ReminderUpdateEvent;
import org.thoughtcrime.securesms.giph.ui.GiphyActivity; 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.insights.InsightsLauncher;
import org.thoughtcrime.securesms.invites.InviteReminderModel; import org.thoughtcrime.securesms.invites.InviteReminderModel;
import org.thoughtcrime.securesms.invites.InviteReminderRepository; import org.thoughtcrime.securesms.invites.InviteReminderRepository;
@ -1118,25 +1118,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
return; return;
} }
AlertDialog.Builder builder = new AlertDialog.Builder(this); LeaveGroupDialog.handleLeavePushGroup(ConversationActivity.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(), getLifecycle(),
() -> GroupManager.leaveGroup(ConversationActivity.this, getRecipient()), getRecipient().requireGroupId().requirePush(),
(success) -> { this::initializeEnabledCheck);
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();
} }
private void handleEditPushGroup() { private void handleEditPushGroup() {

View File

@ -50,10 +50,8 @@ public final class GroupManager {
} }
@WorkerThread @WorkerThread
public static boolean leaveGroup(@NonNull Context context, @NonNull Recipient groupRecipient) { public static boolean leaveGroup(@NonNull Context context, @NonNull GroupId.Push groupId) {
GroupId groupId = groupRecipient.requireGroupId(); return V1GroupManager.leaveGroup(context, groupId.requireV1());
return V1GroupManager.leaveGroup(context, groupId.requireV1(), groupRecipient);
} }
public static class GroupActionResult { public static class GroupActionResult {

View File

@ -153,7 +153,8 @@ final class V1GroupManager {
} }
@WorkerThread @WorkerThread
static boolean leaveGroup(@NonNull Context context, @NonNull GroupId.V1 groupId, @NonNull Recipient groupRecipient) { static boolean leaveGroup(@NonNull Context context, @NonNull GroupId.V1 groupId) {
Recipient groupRecipient = Recipient.externalGroup(context, groupId);
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient); long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient);
Optional<OutgoingGroupMediaMessage> leaveMessage = GroupUtil.createGroupLeaveMessage(context, groupRecipient); Optional<OutgoingGroupMediaMessage> leaveMessage = GroupUtil.createGroupLeaveMessage(context, groupRecipient);

View File

@ -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();
}
}