From 86b3de2a937bc42dd37397558a5a90bddeb7ae0d Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Sun, 23 Feb 2014 21:18:08 -0800 Subject: [PATCH] group updates do things // FREEBIE --- .../securesms/ConversationActivity.java | 7 ++-- .../securesms/GroupCreateActivity.java | 21 +++++++++- .../securesms/database/GroupDatabase.java | 40 ++++++++++++++++++- .../securesms/recipients/Recipient.java | 7 +++- .../recipients/RecipientFactory.java | 1 - .../securesms/service/AvatarDownloader.java | 1 - 6 files changed, 67 insertions(+), 10 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index d063bc4ba1..42083274a9 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -103,7 +103,6 @@ import org.whispersystems.textsecure.crypto.MasterCipher; import org.whispersystems.textsecure.crypto.MasterSecret; import org.whispersystems.textsecure.directory.Directory; import org.whispersystems.textsecure.directory.NotInDirectoryException; -import org.whispersystems.textsecure.push.PushMessageProtos; import org.whispersystems.textsecure.storage.RecipientDevice; import org.whispersystems.textsecure.storage.Session; import org.whispersystems.textsecure.storage.SessionRecordV2; @@ -226,7 +225,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi @Override public void onActivityResult(int reqCode, int resultCode, Intent data) { - Log.w("ComposeMessageActivity", "onActivityResult called: " + resultCode + " , " + data); + Log.w(TAG, "onActivityResult called: " + reqCode + ", " + resultCode + " , " + data); super.onActivityResult(reqCode, resultCode, data); if (data == null || resultCode != RESULT_OK) return; @@ -249,7 +248,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi addContactInfo(data.getData()); break; case GROUP_EDIT: - this.recipients = RecipientFactory.getRecipientsForIds(this, String.valueOf(getRecipients().getPrimaryRecipient().getRecipientId()), false); + this.recipients = data.getParcelableExtra(GroupCreateActivity.GROUP_RECIPIENT_EXTRA); initializeTitleBar(); break; } @@ -947,7 +946,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi byte[] groupId = GroupUtil.getDecodedId(getRecipients().getPrimaryRecipient().getNumber()); GroupRecord record = DatabaseFactory.getGroupDatabase(this).getGroup(groupId); - return record.isActive(); + return record != null && record.isActive(); } catch (IOException e) { Log.w("ConversationActivity", e); return false; diff --git a/src/org/thoughtcrime/securesms/GroupCreateActivity.java b/src/org/thoughtcrime/securesms/GroupCreateActivity.java index 9ba2751a61..d7677350b1 100644 --- a/src/org/thoughtcrime/securesms/GroupCreateActivity.java +++ b/src/org/thoughtcrime/securesms/GroupCreateActivity.java @@ -37,7 +37,6 @@ import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientFactory; import org.thoughtcrime.securesms.recipients.RecipientFormattingException; -import org.thoughtcrime.securesms.recipients.RecipientProvider; import org.thoughtcrime.securesms.recipients.Recipients; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage; @@ -583,6 +582,26 @@ public class GroupCreateActivity extends PassphraseRequiredSherlockFragmentActiv return new Pair(RES_BAD_NUMBER, null); } } + + @Override + protected void onPostExecute(Pair groupInfo) { + final long threadId = groupInfo.first; + final Recipients recipients = groupInfo.second; + if (threadId > -1) { + Intent intent = getIntent(); + intent.putExtra(GROUP_THREAD_EXTRA, threadId); + intent.putExtra(GROUP_RECIPIENT_EXTRA, recipients); + setResult(RESULT_OK, intent); + finish(); + } else if (threadId == RES_BAD_NUMBER) { + Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_contacts_invalid_number, Toast.LENGTH_LONG).show(); + disableWhisperGroupCreatingUi(); + } else if (threadId == RES_MMS_EXCEPTION) { + Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_contacts_mms_exception, Toast.LENGTH_LONG).show(); + setResult(RESULT_CANCELED); + finish(); + } + } } private class CreateWhisperGroupAsyncTask extends AsyncTask> { diff --git a/src/org/thoughtcrime/securesms/database/GroupDatabase.java b/src/org/thoughtcrime/securesms/database/GroupDatabase.java index 374d9a297d..89a32cf8e4 100644 --- a/src/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/src/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -7,6 +7,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.util.Log; import org.thoughtcrime.securesms.recipients.Recipient; @@ -27,6 +28,7 @@ import java.util.List; import static org.whispersystems.textsecure.push.PushMessageProtos.PushMessageContent.AttachmentPointer; public class GroupDatabase extends Database { + private static final String TAG = GroupDatabase.class.getSimpleName(); private static final String TABLE_NAME = "groups"; private static final String ID = "_id"; @@ -128,7 +130,7 @@ public class GroupDatabase extends Database { public void update(byte[] groupId, String title, AttachmentPointer avatar) { ContentValues contentValues = new ContentValues(); - if (title != null) contentValues.put(TITLE, title); + if (title != null) contentValues.put(TITLE, title); if (avatar != null) { contentValues.put(AVATAR_ID, avatar.getId()); @@ -139,6 +141,8 @@ public class GroupDatabase extends Database { databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?", new String[] {GroupUtil.getEncodedId(groupId)}); + + if (title != null) updateGroupRecipientTitle(groupId, title); } public void updateTitle(byte[] groupId, String title) { @@ -146,13 +150,21 @@ public class GroupDatabase extends Database { contentValues.put(TITLE, title); databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?", new String[] {GroupUtil.getEncodedId(groupId)}); + + if (title != null) updateGroupRecipientTitle(groupId, title); } public void updateAvatar(byte[] groupId, Bitmap avatar) { - updateAvatar(groupId, BitmapUtil.toByteArray(avatar)); + updateAvatarInDatabase(groupId, BitmapUtil.toByteArray(avatar)); + updateGroupRecipientAvatar(groupId, avatar); } public void updateAvatar(byte[] groupId, byte[] avatar) { + updateAvatarInDatabase(groupId, avatar); + updateGroupRecipientAvatar(groupId, BitmapFactory.decodeByteArray(avatar, 0, avatar.length)); + } + + private void updateAvatarInDatabase(byte[] groupId, byte[] avatar) { ContentValues contentValues = new ContentValues(); contentValues.put(AVATAR, avatar); @@ -330,4 +342,28 @@ public class GroupDatabase extends Database { return active; } } + + private Recipient getGroupRecipient(byte[] groupId) { + try { + return RecipientFactory.getRecipientsFromString(context, GroupUtil.getEncodedId(groupId), true) + .getPrimaryRecipient(); + } catch (RecipientFormattingException e) { + Log.w(TAG, e); + return null; + } + } + + private void updateGroupRecipientTitle(byte[] groupId, String title) { + Recipient groupRecipient = getGroupRecipient(groupId); + Log.i(TAG, "updating group recipient title for recipient " + System.identityHashCode(groupRecipient)); + if (groupRecipient != null) groupRecipient.setName(title); + else Log.w(TAG, "Couldn't update group title because recipient couldn't be found."); + } + + private void updateGroupRecipientAvatar(byte[] groupId, Bitmap photo) { + Recipient groupRecipient = getGroupRecipient(groupId); + if (groupRecipient != null) groupRecipient.setContactPhoto(photo); + else Log.w(TAG, "Couldn't update group title because recipient couldn't be found."); + } + } diff --git a/src/org/thoughtcrime/securesms/recipients/Recipient.java b/src/org/thoughtcrime/securesms/recipients/Recipient.java index 4b521b5d76..53462a3bb7 100644 --- a/src/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/src/org/thoughtcrime/securesms/recipients/Recipient.java @@ -110,6 +110,12 @@ public class Recipient implements Parcelable, CanonicalRecipient { public synchronized void setContactPhoto(Bitmap bitmap) { this.contactPhoto = bitmap; + notifyListeners(); + } + + public synchronized void setName(String name) { + this.name = name; + notifyListeners(); } public synchronized String getName() { @@ -203,5 +209,4 @@ public class Recipient implements Parcelable, CanonicalRecipient { public static interface RecipientModifiedListener { public void onModified(Recipient recipient); } - } diff --git a/src/org/thoughtcrime/securesms/recipients/RecipientFactory.java b/src/org/thoughtcrime/securesms/recipients/RecipientFactory.java index 60c1c1839b..574df57302 100644 --- a/src/org/thoughtcrime/securesms/recipients/RecipientFactory.java +++ b/src/org/thoughtcrime/securesms/recipients/RecipientFactory.java @@ -21,7 +21,6 @@ import android.util.Log; import org.thoughtcrime.securesms.contacts.ContactPhotoFactory; import org.thoughtcrime.securesms.database.CanonicalAddressDatabase; -import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.util.NumberUtil; import org.whispersystems.textsecure.push.IncomingPushMessage; import org.whispersystems.textsecure.util.Util; diff --git a/src/org/thoughtcrime/securesms/service/AvatarDownloader.java b/src/org/thoughtcrime/securesms/service/AvatarDownloader.java index 82dd46b0e4..666ba6e3c5 100644 --- a/src/org/thoughtcrime/securesms/service/AvatarDownloader.java +++ b/src/org/thoughtcrime/securesms/service/AvatarDownloader.java @@ -61,7 +61,6 @@ public class AvatarDownloader { Recipient groupRecipient = RecipientFactory.getRecipientsFromString(context, GroupUtil.getEncodedId(groupId), true) .getPrimaryRecipient(); groupRecipient.setContactPhoto(avatar); - groupRecipient.notifyListeners(); } catch (RecipientFormattingException e) { Log.w("AvatarDownloader", e); }