Fix crash when creating group with no avatar icon

Fixes #4320
// FREEBIE
This commit is contained in:
Moxie Marlinspike 2015-10-28 10:36:21 -07:00
parent 4271732b10
commit a086a2471c
4 changed files with 16 additions and 10 deletions

View File

@ -26,6 +26,7 @@ import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
@ -460,10 +461,12 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity {
return handlePushOperation(groupId, groupName, avatar, memberE164Numbers);
}
private Pair<Long, Recipients> handlePushOperation(byte[] groupId, String groupName, byte[] avatar,
private Pair<Long, Recipients> handlePushOperation(byte[] groupId, String groupName,
@Nullable byte[] avatar,
Set<String> e164numbers)
throws InvalidNumberException
{
Attachment avatarAttachment = null;
String groupRecipientId = GroupUtil.getEncodedId(groupId);
Recipients groupRecipient = RecipientFactory.getRecipientsFromString(this, groupRecipientId, false);
@ -474,8 +477,11 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity {
.addAllMembers(e164numbers)
.build();
Uri avatarUri = SingleUseBlobProvider.getInstance().createUri(avatar);
Attachment avatarAttachment = new UriAttachment(avatarUri, ContentType.IMAGE_JPEG, AttachmentDatabase.TRANSFER_PROGRESS_DONE, avatar.length);
if (avatar != null) {
Uri avatarUri = SingleUseBlobProvider.getInstance().createUri(avatar);
avatarAttachment = new UriAttachment(avatarUri, ContentType.IMAGE_JPEG, AttachmentDatabase.TRANSFER_PROGRESS_DONE, avatar.length);
}
OutgoingGroupMediaMessage outgoingMessage = new OutgoingGroupMediaMessage(groupRecipient, context, avatarAttachment, System.currentTimeMillis());
long threadId = MessageSender.send(this, masterSecret, outgoingMessage, -1, false);

View File

@ -43,8 +43,8 @@ public class Recipient {
private final long recipientId;
private String number;
private String name;
private @NonNull String number;
private @Nullable String name;
private boolean stale;
private ContactPhoto contactPhoto;
@ -123,7 +123,7 @@ public class Recipient {
notifyListeners();
}
public String getNumber() {
public @NonNull String getNumber() {
return number;
}

View File

@ -58,11 +58,11 @@ public class RecipientFactory {
return provider.getRecipients(context, ids, asynchronous);
}
public static Recipient getRecipientForId(Context context, long recipientId, boolean asynchronous) {
public @NonNull static Recipient getRecipientForId(Context context, long recipientId, boolean asynchronous) {
return provider.getRecipient(context, recipientId, asynchronous);
}
public static Recipients getRecipientsForIds(Context context, long[] recipientIds, boolean asynchronous) {
public @NonNull static Recipients getRecipientsForIds(Context context, long[] recipientIds, boolean asynchronous) {
return provider.getRecipients(context, recipientIds, asynchronous);
}

View File

@ -70,7 +70,7 @@ public class RecipientProvider {
ContactColors.UNKNOWN_COLOR));
}};
Recipient getRecipient(Context context, long recipientId, boolean asynchronous) {
@NonNull Recipient getRecipient(Context context, long recipientId, boolean asynchronous) {
Recipient cachedRecipient = recipientCache.get(recipientId);
if (cachedRecipient != null && !cachedRecipient.isStale()) return cachedRecipient;
@ -86,7 +86,7 @@ public class RecipientProvider {
return cachedRecipient;
}
Recipients getRecipients(Context context, long[] recipientIds, boolean asynchronous) {
@NonNull Recipients getRecipients(Context context, long[] recipientIds, boolean asynchronous) {
Recipients cachedRecipients = recipientsCache.get(new RecipientIds(recipientIds));
if (cachedRecipients != null && !cachedRecipients.isStale()) return cachedRecipients;