mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 14:18:34 +00:00
Show unblock dialog when tap blocked contact.
This commit is contained in:
parent
48c33f3dcd
commit
e9c92bdf51
@ -0,0 +1,89 @@
|
|||||||
|
package org.thoughtcrime.securesms;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
import androidx.lifecycle.Lifecycle;
|
||||||
|
|
||||||
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
|
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||||
|
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||||
|
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
|
||||||
|
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
|
||||||
|
|
||||||
|
public final class BlockUnblockDialog {
|
||||||
|
|
||||||
|
private BlockUnblockDialog() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handleBlock(@NonNull Context context,
|
||||||
|
@NonNull Lifecycle lifecycle,
|
||||||
|
@NonNull RecipientId recipientId)
|
||||||
|
{
|
||||||
|
SimpleTask.run(
|
||||||
|
lifecycle,
|
||||||
|
() -> {
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||||
|
Recipient resolved = Recipient.resolved(recipientId);
|
||||||
|
|
||||||
|
if (resolved.isGroup()) {
|
||||||
|
if (DatabaseFactory.getGroupDatabase(context).isActive(resolved.requireGroupId())) {
|
||||||
|
builder.setTitle(R.string.RecipientPreferenceActivity_block_and_leave_group);
|
||||||
|
} else {
|
||||||
|
builder.setTitle(R.string.RecipientPreferenceActivity_block_group);
|
||||||
|
}
|
||||||
|
builder.setMessage(R.string.RecipientPreferenceActivity_block_and_leave_group_description);
|
||||||
|
} else {
|
||||||
|
builder.setTitle(R.string.RecipientPreferenceActivity_block_this_contact_question)
|
||||||
|
.setMessage(R.string.RecipientPreferenceActivity_you_will_no_longer_receive_messages_and_calls_from_this_contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.setCancelable(true)
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.setPositiveButton(R.string.RecipientPreferenceActivity_block, (dialog, which) -> setBlocked(context, resolved, true));
|
||||||
|
},
|
||||||
|
AlertDialog.Builder::show);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handleUnblock(@NonNull Context context,
|
||||||
|
@NonNull Lifecycle lifecycle,
|
||||||
|
@NonNull RecipientId recipientId,
|
||||||
|
@Nullable Runnable postUnblock)
|
||||||
|
{
|
||||||
|
SimpleTask.run(
|
||||||
|
lifecycle,
|
||||||
|
() -> {
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||||
|
Recipient resolved = Recipient.resolved(recipientId);
|
||||||
|
|
||||||
|
if (resolved.isGroup()) {
|
||||||
|
builder.setTitle(R.string.RecipientPreferenceActivity_unblock_this_group_question)
|
||||||
|
.setMessage(R.string.RecipientPreferenceActivity_unblock_this_group_description);
|
||||||
|
} else {
|
||||||
|
builder.setTitle(R.string.RecipientPreferenceActivity_unblock_this_contact_question)
|
||||||
|
.setMessage(R.string.RecipientPreferenceActivity_you_will_once_again_be_able_to_receive_messages_and_calls_from_this_contact);
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.setCancelable(true)
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.setPositiveButton(R.string.RecipientPreferenceActivity_unblock, (dialog, which) -> {
|
||||||
|
setBlocked(context, resolved, false);
|
||||||
|
if (postUnblock != null) postUnblock.run();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
AlertDialog.Builder::show);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setBlocked(@NonNull final Context context, final Recipient recipient, final boolean blocked) {
|
||||||
|
SignalExecutors.BOUNDED.execute(() -> {
|
||||||
|
if (blocked) {
|
||||||
|
RecipientUtil.block(context, recipient);
|
||||||
|
} else {
|
||||||
|
RecipientUtil.unblock(context, recipient);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -1,15 +1,8 @@
|
|||||||
package org.thoughtcrime.securesms;
|
package org.thoughtcrime.securesms;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.fragment.app.ListFragment;
|
|
||||||
import androidx.loader.app.LoaderManager;
|
|
||||||
import androidx.loader.content.Loader;
|
|
||||||
import androidx.cursoradapter.widget.CursorAdapter;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -17,6 +10,13 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.cursoradapter.widget.CursorAdapter;
|
||||||
|
import androidx.fragment.app.ListFragment;
|
||||||
|
import androidx.loader.app.LoaderManager;
|
||||||
|
import androidx.loader.content.Loader;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
||||||
import org.thoughtcrime.securesms.database.loaders.BlockedContactsLoader;
|
import org.thoughtcrime.securesms.database.loaders.BlockedContactsLoader;
|
||||||
import org.thoughtcrime.securesms.mms.GlideApp;
|
import org.thoughtcrime.securesms.mms.GlideApp;
|
||||||
@ -25,21 +25,17 @@ import org.thoughtcrime.securesms.preferences.BlockedContactListItem;
|
|||||||
import org.thoughtcrime.securesms.recipients.LiveRecipient;
|
import org.thoughtcrime.securesms.recipients.LiveRecipient;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||||
|
|
||||||
public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity {
|
public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity {
|
||||||
|
|
||||||
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
private final DynamicTheme dynamicTheme = new DynamicTheme();
|
||||||
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPreCreate() {
|
public void onPreCreate() {
|
||||||
dynamicTheme.onCreate(this);
|
dynamicTheme.onCreate(this);
|
||||||
dynamicLanguage.onCreate(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle bundle, boolean ready) {
|
public void onCreate(Bundle bundle, boolean ready) {
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
@ -51,16 +47,12 @@ public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity
|
|||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
dynamicTheme.onResume(this);
|
dynamicTheme.onResume(this);
|
||||||
dynamicLanguage.onResume(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onSupportNavigateUp() {
|
||||||
switch (item.getItemId()) {
|
onBackPressed();
|
||||||
case android.R.id.home: finish(); return true;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class BlockedContactsFragment
|
public static class BlockedContactsFragment
|
||||||
@ -76,14 +68,14 @@ public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle bundle) {
|
public void onCreate(Bundle bundle) {
|
||||||
super.onCreate(bundle);
|
super.onCreate(bundle);
|
||||||
setListAdapter(new BlockedContactAdapter(getActivity(), GlideApp.with(this), null));
|
setListAdapter(new BlockedContactAdapter(requireActivity(), GlideApp.with(this), null));
|
||||||
getLoaderManager().initLoader(0, null, this);
|
LoaderManager.getInstance(this).initLoader(0, null, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
getLoaderManager().restartLoader(0, null, this);
|
LoaderManager.getInstance(this).restartLoader(0, null, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -114,10 +106,10 @@ public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity
|
|||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
Recipient recipient = ((BlockedContactListItem)view).getRecipient();
|
Recipient recipient = ((BlockedContactListItem)view).getRecipient();
|
||||||
Intent intent = new Intent(getActivity(), RecipientPreferenceActivity.class);
|
BlockUnblockDialog.handleUnblock(requireContext(),
|
||||||
intent.putExtra(RecipientPreferenceActivity.RECIPIENT_ID, recipient.getId());
|
getLifecycle(),
|
||||||
|
recipient.getId(),
|
||||||
startActivity(intent);
|
() -> LoaderManager.getInstance(this).restartLoader(0, null, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class BlockedContactAdapter extends CursorAdapter {
|
private static class BlockedContactAdapter extends CursorAdapter {
|
||||||
@ -143,7 +135,5 @@ public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity
|
|||||||
((BlockedContactListItem) view).set(glideRequests, recipient);
|
((BlockedContactListItem) view).set(glideRequests, recipient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package org.thoughtcrime.securesms;
|
package org.thoughtcrime.securesms;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.ActivityNotFoundException;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
@ -25,7 +24,6 @@ import android.widget.TextView;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
@ -48,7 +46,6 @@ import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
|
|||||||
import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
|
import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
|
||||||
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
|
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
|
||||||
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
|
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
|
||||||
import org.thoughtcrime.securesms.conversation.ConversationActivity;
|
|
||||||
import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable;
|
import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
import org.thoughtcrime.securesms.database.IdentityDatabase;
|
import org.thoughtcrime.securesms.database.IdentityDatabase;
|
||||||
@ -73,7 +70,6 @@ import org.thoughtcrime.securesms.recipients.Recipient;
|
|||||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||||
import org.thoughtcrime.securesms.util.CommunicationActions;
|
import org.thoughtcrime.securesms.util.CommunicationActions;
|
||||||
import org.thoughtcrime.securesms.util.Dialogs;
|
|
||||||
import org.thoughtcrime.securesms.util.DynamicDarkToolbarTheme;
|
import org.thoughtcrime.securesms.util.DynamicDarkToolbarTheme;
|
||||||
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
import org.thoughtcrime.securesms.util.DynamicLanguage;
|
||||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||||
@ -85,7 +81,6 @@ import org.thoughtcrime.securesms.util.ThemeUtil;
|
|||||||
import org.thoughtcrime.securesms.util.Util;
|
import org.thoughtcrime.securesms.util.Util;
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||||
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
|
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
|
||||||
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
|
|
||||||
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
|
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
|
||||||
import org.whispersystems.libsignal.util.guava.Optional;
|
import org.whispersystems.libsignal.util.guava.Optional;
|
||||||
|
|
||||||
@ -706,73 +701,11 @@ public class RecipientPreferenceActivity extends PassphraseRequiredActionBarActi
|
|||||||
private class BlockClickedListener implements Preference.OnPreferenceClickListener {
|
private class BlockClickedListener implements Preference.OnPreferenceClickListener {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
if (recipient.get().isBlocked()) handleUnblock(preference.getContext());
|
if (recipient.get().isBlocked()) BlockUnblockDialog.handleUnblock(preference.getContext(), getLifecycle(), recipient.getId(), null);
|
||||||
else handleBlock(preference.getContext());
|
else BlockUnblockDialog.handleBlock(preference.getContext(), getLifecycle(), recipient.getId());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleBlock(@NonNull final Context context) {
|
|
||||||
new AsyncTask<Void, Void, Pair<Integer, Integer>>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Pair<Integer, Integer> doInBackground(Void... voids) {
|
|
||||||
int titleRes = R.string.RecipientPreferenceActivity_block_this_contact_question;
|
|
||||||
int bodyRes = R.string.RecipientPreferenceActivity_you_will_no_longer_receive_messages_and_calls_from_this_contact;
|
|
||||||
|
|
||||||
if (recipient.get().isGroup()) {
|
|
||||||
bodyRes = R.string.RecipientPreferenceActivity_block_and_leave_group_description;
|
|
||||||
|
|
||||||
if (recipient.get().isGroup() && DatabaseFactory.getGroupDatabase(context).isActive(recipient.get().requireGroupId())) {
|
|
||||||
titleRes = R.string.RecipientPreferenceActivity_block_and_leave_group;
|
|
||||||
} else {
|
|
||||||
titleRes = R.string.RecipientPreferenceActivity_block_group;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Pair<>(titleRes, bodyRes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Pair<Integer, Integer> titleAndBody) {
|
|
||||||
new AlertDialog.Builder(context)
|
|
||||||
.setTitle(titleAndBody.first)
|
|
||||||
.setMessage(titleAndBody.second)
|
|
||||||
.setCancelable(true)
|
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
|
||||||
.setPositiveButton(R.string.RecipientPreferenceActivity_block, (dialog, which) -> {
|
|
||||||
setBlocked(context, recipient.get(), true);
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
}.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleUnblock(@NonNull Context context) {
|
|
||||||
int titleRes = R.string.RecipientPreferenceActivity_unblock_this_contact_question;
|
|
||||||
int bodyRes = R.string.RecipientPreferenceActivity_you_will_once_again_be_able_to_receive_messages_and_calls_from_this_contact;
|
|
||||||
|
|
||||||
if (recipient.resolve().isGroup()) {
|
|
||||||
titleRes = R.string.RecipientPreferenceActivity_unblock_this_group_question;
|
|
||||||
bodyRes = R.string.RecipientPreferenceActivity_unblock_this_group_description;
|
|
||||||
}
|
|
||||||
|
|
||||||
new AlertDialog.Builder(context)
|
|
||||||
.setTitle(titleRes)
|
|
||||||
.setMessage(bodyRes)
|
|
||||||
.setCancelable(true)
|
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
|
||||||
.setPositiveButton(R.string.RecipientPreferenceActivity_unblock, (dialog, which) -> setBlocked(context, recipient.get(), false)).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setBlocked(@NonNull final Context context, final Recipient recipient, final boolean blocked) {
|
|
||||||
SignalExecutors.BOUNDED.execute(() -> {
|
|
||||||
if (blocked) {
|
|
||||||
RecipientUtil.block(context, recipient);
|
|
||||||
} else {
|
|
||||||
RecipientUtil.unblock(context, recipient);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class AboutNumberClickedListener implements ContactPreference.Listener {
|
private class AboutNumberClickedListener implements ContactPreference.Listener {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user