From f30304423d7c86c326e69043c21586fb0501a4d1 Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Sun, 23 Feb 2014 23:30:43 -0800 Subject: [PATCH 1/3] lose SD card dependency, fix NPEs // FREEBIE --- .../securesms/GroupCreateActivity.java | 38 +++++++++---------- .../securesms/database/GroupDatabase.java | 3 +- .../securesms/util/BitmapUtil.java | 1 + 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/org/thoughtcrime/securesms/GroupCreateActivity.java b/src/org/thoughtcrime/securesms/GroupCreateActivity.java index d7677350b1..337d08ef3b 100644 --- a/src/org/thoughtcrime/securesms/GroupCreateActivity.java +++ b/src/org/thoughtcrime/securesms/GroupCreateActivity.java @@ -9,7 +9,6 @@ import android.graphics.BitmapFactory; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; -import android.os.Environment; import android.provider.MediaStore; import android.text.Editable; import android.text.TextUtils; @@ -81,7 +80,7 @@ public class GroupCreateActivity extends PassphraseRequiredSherlockFragmentActiv private final DynamicTheme dynamicTheme = new DynamicTheme(); private final DynamicLanguage dynamicLanguage = new DynamicLanguage(); - private static final String TEMP_PHOTO_FILE = "__tmp_group_create_avatar_photo.tmp"; + private File pendingFile = null; private static final int PICK_CONTACT = 1; private static final int PICK_AVATAR = 2; @@ -266,7 +265,7 @@ public class GroupCreateActivity extends PassphraseRequiredSherlockFragmentActiv photoPickerIntent.putExtra("aspectY", 1); photoPickerIntent.putExtra("outputX", AVATAR_SIZE); photoPickerIntent.putExtra("outputY", AVATAR_SIZE); - photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri()); + photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getAvatarTempUri()); photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); startActivityForResult(photoPickerIntent, PICK_AVATAR); } @@ -275,23 +274,20 @@ public class GroupCreateActivity extends PassphraseRequiredSherlockFragmentActiv ((RecipientsEditor)findViewById(R.id.recipients_text)).setHint(R.string.recipients_panel__add_member); } - private Uri getTempUri() { - return Uri.fromFile(getTempFile()); + private Uri getAvatarTempUri() { + return Uri.fromFile(createAvatarTempFile()); } - private File getTempFile() { - if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { - - File f = new File(Environment.getExternalStorageDirectory(), TEMP_PHOTO_FILE); - try { - f.createNewFile(); - f.deleteOnExit(); - } catch (IOException e) { - Log.e(TAG, "Error creating new temp file.", e); - Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_file_io_exception, Toast.LENGTH_SHORT).show(); - } + private File createAvatarTempFile() { + try { + File f = File.createTempFile("avatar", ".tmp", getFilesDir()); + pendingFile = f; + f.setWritable(true, false); + f.deleteOnExit(); return f; - } else { + } catch (IOException ioe) { + Log.e(TAG, "Error creating new temp file.", ioe); + Toast.makeText(getApplicationContext(), R.string.GroupCreateActivity_file_io_exception, Toast.LENGTH_SHORT).show(); return null; } } @@ -517,9 +513,11 @@ public class GroupCreateActivity extends PassphraseRequiredSherlockFragmentActiv @Override protected Bitmap doInBackground(Void... voids) { - File tempFile = getTempFile(); - avatarBmp = BitmapUtil.getCircleCroppedBitmap(BitmapFactory.decodeFile(tempFile.getAbsolutePath())); - tempFile.delete(); + if (pendingFile != null) { + avatarBmp = BitmapUtil.getCircleCroppedBitmap(BitmapFactory.decodeFile(pendingFile.getAbsolutePath())); + pendingFile.delete(); + pendingFile = null; + } return avatarBmp; } diff --git a/src/org/thoughtcrime/securesms/database/GroupDatabase.java b/src/org/thoughtcrime/securesms/database/GroupDatabase.java index 89a32cf8e4..9334a89cab 100644 --- a/src/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/src/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -161,7 +161,8 @@ public class GroupDatabase extends Database { public void updateAvatar(byte[] groupId, byte[] avatar) { updateAvatarInDatabase(groupId, avatar); - updateGroupRecipientAvatar(groupId, BitmapFactory.decodeByteArray(avatar, 0, avatar.length)); + Bitmap bitmap = (avatar == null ? null : BitmapFactory.decodeByteArray(avatar, 0, avatar.length)); + updateGroupRecipientAvatar(groupId, bitmap); } private void updateAvatarInDatabase(byte[] groupId, byte[] avatar) { diff --git a/src/org/thoughtcrime/securesms/util/BitmapUtil.java b/src/org/thoughtcrime/securesms/util/BitmapUtil.java index 65e38bf8eb..3c76ffb85c 100644 --- a/src/org/thoughtcrime/securesms/util/BitmapUtil.java +++ b/src/org/thoughtcrime/securesms/util/BitmapUtil.java @@ -105,6 +105,7 @@ public class BitmapUtil { } public static Bitmap getCircleCroppedBitmap(Bitmap bitmap) { + if (bitmap == null) return null; Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); From e3aed66ded5aa0381752ba48e9f4a76fe307bcce Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Sun, 23 Feb 2014 23:34:53 -0800 Subject: [PATCH 2/3] avatar was getting nulled with any update, no more "unsetting" // FREEBIE --- src/org/thoughtcrime/securesms/GroupCreateActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/org/thoughtcrime/securesms/GroupCreateActivity.java b/src/org/thoughtcrime/securesms/GroupCreateActivity.java index 337d08ef3b..0807e23e44 100644 --- a/src/org/thoughtcrime/securesms/GroupCreateActivity.java +++ b/src/org/thoughtcrime/securesms/GroupCreateActivity.java @@ -448,8 +448,7 @@ public class GroupCreateActivity extends PassphraseRequiredSherlockFragmentActiv new LinkedList(newMembers)); groupDatabase.updateTitle(groupId, groupName); - groupDatabase.updateAvatar(groupId, avatar); - + if (avatar != null) groupDatabase.updateAvatar(groupId, avatar); return handlePushOperation(groupId, groupName, avatar, memberE164Numbers); } From fc12f2cf8e5ddc85d22d8c9699baa1e10e3cc299 Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Sun, 23 Feb 2014 23:58:16 -0800 Subject: [PATCH 3/3] disable subtitle for push groups // FREEBIE --- src/org/thoughtcrime/securesms/ConversationActivity.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index 42083274a9..e9dbaa8ce0 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -596,11 +596,10 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi } } else { title = getString(R.string.ConversationActivity_group_conversation); + int size = getRecipients().getRecipientsList().size(); + subtitle = (size == 1) ? getString(R.string.ConversationActivity_d_recipients_in_group_singular) + : String.format(getString(R.string.ConversationActivity_d_recipients_in_group), size); } - int size = getRecipients().getRecipientsList().size(); - subtitle = (size == 1) ? getString(R.string.ConversationActivity_d_recipients_in_group_singular) - : String.format(getString(R.string.ConversationActivity_d_recipients_in_group), - getRecipients().getRecipientsList().size()); } else { title = getString(R.string.ConversationActivity_compose_message); subtitle = "";