From db92bb274b2bc197ef5882362a73da56a9639d07 Mon Sep 17 00:00:00 2001 From: "daniel.boehrs" Date: Thu, 18 Oct 2018 15:30:44 +0200 Subject: [PATCH] prefill groups form with exstiting data #92 --- .../securesms/GroupCreateActivity.java | 78 +++++++------------ .../connect/ApplicationDcContext.java | 27 ++++++- .../util/SelectedRecipientsAdapter.java | 2 +- 3 files changed, 53 insertions(+), 54 deletions(-) diff --git a/src/org/thoughtcrime/securesms/GroupCreateActivity.java b/src/org/thoughtcrime/securesms/GroupCreateActivity.java index 057c9c0fc..3595e4ea1 100644 --- a/src/org/thoughtcrime/securesms/GroupCreateActivity.java +++ b/src/org/thoughtcrime/securesms/GroupCreateActivity.java @@ -47,13 +47,9 @@ import org.thoughtcrime.securesms.contacts.ContactsCursorLoader.DisplayMode; import org.thoughtcrime.securesms.contacts.avatars.ContactColors; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.database.Address; -import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.SelectedRecipientsAdapter; @@ -63,8 +59,6 @@ import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask; import org.whispersystems.libsignal.util.guava.Optional; import java.io.File; -import java.util.Collection; -import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -99,8 +93,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity private TextView creatingText; private Bitmap avatarBmp; private CircularProgressButton verifyButton; - - @NonNull private Optional groupToUpdate = Optional.absent(); + private boolean editGroup; @Override protected void onPreCreate() { @@ -134,7 +127,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity groupName.setEnabled(true); String title; - if(groupToUpdate.isPresent()) { + if(editGroup) { title = getString(R.string.GroupCreateActivity_actionbar_edit_title); } else if(createVerified) { @@ -150,10 +143,6 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity new AddMembersTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, recipients); } - private void addSelectedContacts(@NonNull Collection recipients) { - addSelectedContacts(recipients.toArray(new Recipient[recipients.size()])); - } - private static class AddMembersTask extends AsyncTask> { static class Result { Optional recipient; @@ -217,10 +206,11 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity } private void initializeExistingGroup() { + editGroup = true; final Address groupAddress = getIntent().getParcelableExtra(GROUP_ADDRESS_EXTRA); - if (groupAddress != null) { - new FillExistingGroupInfoAsyncTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, groupAddress.toGroupString()); + int chatId = groupAddress.getDcChatId(); + new FillExistingGroupInfoAsyncTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, chatId); } } @@ -242,7 +232,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity finish(); return true; case R.id.menu_create_group: - if (groupToUpdate.isPresent()) handleGroupUpdate(); + if (editGroup) handleGroupUpdate(); else handleGroupCreate(); return true; } @@ -361,7 +351,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity public void onClick(View v) { Intent intent = new Intent(GroupCreateActivity.this, ContactMultiSelectionActivity.class); intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, createVerified); - if (groupToUpdate.isPresent()) { + if (editGroup) { intent.putExtra(ContactSelectionListFragment.DISPLAY_MODE, DisplayMode.FLAG_PUSH); } else { intent.putExtra(ContactSelectionListFragment.DISPLAY_MODE, DisplayMode.FLAG_PUSH | DisplayMode.FLAG_SMS); @@ -379,10 +369,11 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity } } - private static class FillExistingGroupInfoAsyncTask extends ProgressDialogAsyncTask> { - private GroupCreateActivity activity; + private static class FillExistingGroupInfoAsyncTask extends ProgressDialogAsyncTask { - public FillExistingGroupInfoAsyncTask(GroupCreateActivity activity) { + GroupCreateActivity activity; + + FillExistingGroupInfoAsyncTask(GroupCreateActivity activity) { super(activity, R.string.GroupCreateActivity_loading_group_details, R.string.please_wait); @@ -390,40 +381,27 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity } @Override - protected Optional doInBackground(String... groupIds) { - final GroupDatabase db = DatabaseFactory.getGroupDatabase(activity); - final List recipients = db.getGroupMembers(groupIds[0], false); - final Optional group = db.getGroup(groupIds[0]); - final Set existingContacts = new HashSet<>(recipients.size()); - existingContacts.addAll(recipients); - - if (group.isPresent()) { - return Optional.of(new GroupData(groupIds[0], - existingContacts, - BitmapUtil.fromByteArray(group.get().getAvatar()), - group.get().getAvatar(), - group.get().getTitle())); - } else { - return Optional.absent(); - } + protected Recipient doInBackground(Integer... recipientIds) { + Integer recipientsId = recipientIds[0]; + Recipient recipient = activity.dcContext.getRecipient(ApplicationDcContext.RECIPIENT_TYPE_CHAT, recipientsId); + return recipient; } @Override - protected void onPostExecute(Optional group) { - super.onPostExecute(group); + protected void onPostExecute(Recipient recipient) { + super.onPostExecute(recipient); + activity.fllExistingGroup(recipient); + } + } - if (group.isPresent() && !activity.isFinishing()) { - activity.groupToUpdate = group; - - activity.groupName.setText(group.get().name); - if (group.get().avatarBmp != null) { - activity.setAvatar(group.get().avatarBytes, group.get().avatarBmp); - } - SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(activity, group.get().recipients); - adapter.setOnRecipientDeletedListener(activity); - activity.lv.setAdapter(adapter); - activity.updateViewState(); - } + private void fllExistingGroup(Recipient recipient) { + List participants = recipient.getParticipants(); + if (!isFinishing()) { + groupName.setText(recipient.getName()); + SelectedRecipientsAdapter adapter = new SelectedRecipientsAdapter(this, participants); + adapter.setOnRecipientDeletedListener(this); + lv.setAdapter(adapter); + updateViewState(); } } diff --git a/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java b/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java index 38d6df4fd..9b4833da9 100644 --- a/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java +++ b/src/org/thoughtcrime/securesms/connect/ApplicationDcContext.java @@ -22,6 +22,7 @@ import android.net.Uri; import android.os.Build; import android.os.Environment; import android.os.PowerManager; +import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.v4.content.FileProvider; import android.util.Log; @@ -51,11 +52,19 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; public class ApplicationDcContext extends DcContext { + @IntDef({RECIPIENT_TYPE_CHAT, RECIPIENT_TYPE_CONTACT}) + public @interface RecipientType {} + + public static final int RECIPIENT_TYPE_CHAT = 0; + public static final int RECIPIENT_TYPE_CONTACT = 1; + public Context context; public ApplicationDcContext(Context context) { @@ -148,13 +157,25 @@ public class ApplicationDcContext extends DcContext { **********************************************************************************************/ @NonNull - public Recipient getRecipient(int chatId) { - return getRecipient(getChat(chatId)); + public Recipient getRecipient(@RecipientType int recipientType, int id) { + switch (recipientType) { + case RECIPIENT_TYPE_CHAT: + return getRecipient(getChat(id)); + case RECIPIENT_TYPE_CONTACT: + return getRecipient(getContact(id)); + default: + throw new IllegalArgumentException("Wrong RecipientType"); + } } @NonNull public Recipient getRecipient(DcChat chat) { - RecipientProvider.RecipientDetails recipientDetails = new RecipientProvider.RecipientDetails(chat.getName(), null, false, null, null); + int[] contactIds = getChatContacts(chat.getId()); + List participants = new ArrayList<>(); + for(int contactId : contactIds) { + participants.add(getRecipient(RECIPIENT_TYPE_CONTACT, contactId)); + } + RecipientProvider.RecipientDetails recipientDetails = new RecipientProvider.RecipientDetails(chat.getName(), null, false, null, participants); return new Recipient(Address.fromChat(chat.getId()), recipientDetails); } @NonNull diff --git a/src/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java b/src/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java index 929fc1bf9..926ae05c7 100644 --- a/src/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java +++ b/src/org/thoughtcrime/securesms/util/SelectedRecipientsAdapter.java @@ -127,7 +127,7 @@ public class SelectedRecipientsAdapter extends BaseAdapter { private static List wrapExistingMembers(Collection recipients) { final LinkedList wrapperList = new LinkedList<>(); for (Recipient recipient : recipients) { - wrapperList.add(new RecipientWrapper(recipient, false, true)); + wrapperList.add(new RecipientWrapper(recipient, true, true)); } return wrapperList; }