mirror of
https://github.com/oxen-io/session-android.git
synced 2025-03-15 12:30:53 +00:00
move db query off main thread, fix group self-add
fixes #4168 Closes #4502 // FREEBIE
This commit is contained in:
parent
e51e5cdfd4
commit
76b0183e0f
@ -233,8 +233,9 @@
|
|||||||
<string name="GroupCreateActivity_menu_create_title">Create group</string>
|
<string name="GroupCreateActivity_menu_create_title">Create group</string>
|
||||||
<string name="GroupCreateActivity_creating_group">Creating %1$s…</string>
|
<string name="GroupCreateActivity_creating_group">Creating %1$s…</string>
|
||||||
<string name="GroupCreateActivity_updating_group">Updating %1$s...</string>
|
<string name="GroupCreateActivity_updating_group">Updating %1$s...</string>
|
||||||
<string name="GroupCreateActivity_cannot_add_non_push_to_existing_group">Cannot add non-Signal contacts to an existing Signal group</string>
|
<string name="GroupCreateActivity_cannot_add_non_push_to_existing_group">Couldn\'t add %1$s because they\'re not a Signal user.</string>
|
||||||
<string name="GroupCreateActivity_loading_group_details">Loading group details...</string>
|
<string name="GroupCreateActivity_loading_group_details">Loading group details...</string>
|
||||||
|
<string name="GroupCreateActivity_youre_already_in_the_group">You\'re already in the group.</string>
|
||||||
|
|
||||||
<!-- GroupMembersDialog -->
|
<!-- GroupMembersDialog -->
|
||||||
<string name="GroupMembersDialog_me">Me</string>
|
<string name="GroupMembersDialog_me">Me</string>
|
||||||
|
@ -26,6 +26,7 @@ import android.os.AsyncTask;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
@ -75,6 +76,7 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -161,7 +163,9 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
|||||||
getSupportActionBar().setTitle(R.string.GroupCreateActivity_actionbar_mms_title);
|
getSupportActionBar().setTitle(R.string.GroupCreateActivity_actionbar_mms_title);
|
||||||
} else {
|
} else {
|
||||||
enableSignalGroupViews();
|
enableSignalGroupViews();
|
||||||
getSupportActionBar().setTitle(R.string.GroupCreateActivity_actionbar_title);
|
getSupportActionBar().setTitle(groupToUpdate.isPresent()
|
||||||
|
? R.string.GroupCreateActivity_actionbar_update_title
|
||||||
|
: R.string.GroupCreateActivity_actionbar_title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,21 +178,12 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSelectedContact(@NonNull Recipient contact) {
|
private void addSelectedContacts(@NonNull Recipient... recipients) {
|
||||||
final boolean isPushUser = isActiveInDirectory(this, contact);
|
new AddMembersTask(this).execute(recipients);
|
||||||
if (groupToUpdate.isPresent() && !isPushUser) {
|
|
||||||
Toast.makeText(this, R.string.GroupCreateActivity_cannot_add_non_push_to_existing_group, Toast.LENGTH_LONG).show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
getAdapter().add(contact, isPushUser);
|
|
||||||
updateViewState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addAllSelectedContacts(Collection<Recipient> contacts) {
|
private void addSelectedContacts(@NonNull Collection<Recipient> recipients) {
|
||||||
for (Recipient contact : contacts) {
|
addSelectedContacts(recipients.toArray(new Recipient[recipients.size()]));
|
||||||
addSelectedContact(contact);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeResources() {
|
private void initializeResources() {
|
||||||
@ -261,7 +256,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRecipientsPanelUpdate(Recipients recipients) {
|
public void onRecipientsPanelUpdate(Recipients recipients) {
|
||||||
if (recipients != null) addAllSelectedContacts(recipients.getRecipientsList());
|
if (recipients != null) addSelectedContacts(recipients.getRecipientsList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleGroupCreate() {
|
private void handleGroupCreate() {
|
||||||
@ -312,7 +307,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
|||||||
List<String> selected = data.getStringArrayListExtra("contacts");
|
List<String> selected = data.getStringArrayListExtra("contacts");
|
||||||
for (String contact : selected) {
|
for (String contact : selected) {
|
||||||
final Recipient recipient = RecipientFactory.getRecipientsFromString(this, contact, false).getPrimaryRecipient();
|
final Recipient recipient = RecipientFactory.getRecipientsFromString(this, contact, false).getPrimaryRecipient();
|
||||||
if (recipient != null) addSelectedContact(recipient);
|
if (recipient != null) addSelectedContacts(recipient);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -485,6 +480,65 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class AddMembersTask extends AsyncTask<Recipient,Void,List<AddMembersTask.Result>> {
|
||||||
|
static class Result {
|
||||||
|
Optional<Recipient> recipient;
|
||||||
|
boolean isPush;
|
||||||
|
String reason;
|
||||||
|
|
||||||
|
public Result(@Nullable Recipient recipient, boolean isPush, @Nullable String reason) {
|
||||||
|
this.recipient = Optional.fromNullable(recipient);
|
||||||
|
this.isPush = isPush;
|
||||||
|
this.reason = reason;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private GroupCreateActivity activity;
|
||||||
|
private boolean failIfNotPush;
|
||||||
|
|
||||||
|
public AddMembersTask(@NonNull GroupCreateActivity activity) {
|
||||||
|
this.activity = activity;
|
||||||
|
this.failIfNotPush = activity.groupToUpdate.isPresent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<Result> doInBackground(Recipient... recipients) {
|
||||||
|
final List<Result> results = new LinkedList<>();
|
||||||
|
|
||||||
|
for (Recipient recipient : recipients) {
|
||||||
|
boolean isPush = isActiveInDirectory(activity, recipient);
|
||||||
|
String recipientE164 = null;
|
||||||
|
try {
|
||||||
|
recipientE164 = Util.canonicalizeNumber(activity, recipient.getNumber());
|
||||||
|
} catch (InvalidNumberException ine) { /* do nothing */ }
|
||||||
|
|
||||||
|
if (failIfNotPush && !isPush) {
|
||||||
|
results.add(new Result(null, false, activity.getString(R.string.GroupCreateActivity_cannot_add_non_push_to_existing_group,
|
||||||
|
recipient.getNumber())));
|
||||||
|
} else if (TextUtils.equals(TextSecurePreferences.getLocalNumber(activity), recipientE164)) {
|
||||||
|
results.add(new Result(null, false, activity.getString(R.string.GroupCreateActivity_youre_already_in_the_group)));
|
||||||
|
} else {
|
||||||
|
results.add(new Result(recipient, isPush, null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(List<Result> results) {
|
||||||
|
if (activity.isFinishing()) return;
|
||||||
|
|
||||||
|
for (Result result : results) {
|
||||||
|
if (result.recipient.isPresent()) {
|
||||||
|
activity.getAdapter().add(result.recipient.get(), result.isPush);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(activity, result.reason, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
activity.updateViewState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class FillExistingGroupInfoAsyncTask extends ProgressDialogAsyncTask<byte[],Void,Optional<GroupData>> {
|
private static class FillExistingGroupInfoAsyncTask extends ProgressDialogAsyncTask<byte[],Void,Optional<GroupData>> {
|
||||||
private GroupCreateActivity activity;
|
private GroupCreateActivity activity;
|
||||||
|
|
||||||
@ -525,6 +579,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
|||||||
SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(activity, group.get().recipients);
|
SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(activity, group.get().recipients);
|
||||||
adapter.setOnRecipientDeletedListener(activity);
|
adapter.setOnRecipientDeletedListener(activity);
|
||||||
activity.lv.setAdapter(adapter);
|
activity.lv.setAdapter(adapter);
|
||||||
|
activity.updateViewState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user