From aa24a0f779c82c555e3f3f6f76485301c9757c89 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 4 Mar 2016 14:32:38 +0100 Subject: don't automatically crop avatar --- .../ui/PublishProfilePictureActivity.java | 62 +++++++++++++-------- src/main/res/drawable-hdpi/ic_crop_white_24dp.png | Bin 0 -> 302 bytes src/main/res/drawable-mdpi/ic_crop_white_24dp.png | Bin 0 -> 214 bytes src/main/res/drawable-xhdpi/ic_crop_white_24dp.png | Bin 0 -> 272 bytes .../res/drawable-xxhdpi/ic_crop_white_24dp.png | Bin 0 -> 326 bytes .../res/drawable-xxxhdpi/ic_crop_white_24dp.png | Bin 0 -> 394 bytes src/main/res/menu/publish_avatar.xml | 8 +++ src/main/res/values/strings.xml | 1 + 8 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 src/main/res/drawable-hdpi/ic_crop_white_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_crop_white_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_crop_white_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_crop_white_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_crop_white_24dp.png create mode 100644 src/main/res/menu/publish_avatar.xml diff --git a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java index a457bf96..ee70ee43 100644 --- a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java @@ -7,6 +7,8 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; @@ -27,13 +29,12 @@ import eu.siacs.conversations.persistance.FileBackend; import eu.siacs.conversations.utils.ExifHelper; import eu.siacs.conversations.utils.FileUtils; import eu.siacs.conversations.utils.PhoneHelper; -import eu.siacs.conversations.xmpp.jid.InvalidJidException; -import eu.siacs.conversations.xmpp.jid.Jid; import eu.siacs.conversations.xmpp.pep.Avatar; public class PublishProfilePictureActivity extends XmppActivity { - private static final int REQUEST_CHOOSE_FILE = 0xac23; + private static final int REQUEST_CHOOSE_FILE_AND_CROP = 0xac23; + private static final int REQUEST_CHOOSE_FILE = 0xac24; private ImageView avatar; private TextView accountTextView; private TextView hintOrWarning; @@ -138,7 +139,7 @@ public class PublishProfilePictureActivity extends XmppActivity { @Override public void onClick(View v) { if (hasStoragePermission(REQUEST_CHOOSE_FILE)) { - chooseAvatar(); + chooseAvatar(false); } } @@ -146,32 +147,52 @@ public class PublishProfilePictureActivity extends XmppActivity { this.defaultUri = PhoneHelper.getSefliUri(getApplicationContext()); } - private void chooseAvatar() { + private void chooseAvatar(boolean crop) { Intent attachFileIntent = new Intent(); attachFileIntent.setType("image/*"); attachFileIntent.setAction(Intent.ACTION_GET_CONTENT); Intent chooser = Intent.createChooser(attachFileIntent, getString(R.string.attach_file)); - startActivityForResult(chooser, REQUEST_CHOOSE_FILE); + startActivityForResult(chooser, crop ? REQUEST_CHOOSE_FILE_AND_CROP : REQUEST_CHOOSE_FILE); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { if (grantResults.length > 0) if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - if (requestCode == REQUEST_CHOOSE_FILE) { - chooseAvatar(); + if (requestCode == REQUEST_CHOOSE_FILE_AND_CROP) { + chooseAvatar(true); + } else if (requestCode == REQUEST_CHOOSE_FILE) { + chooseAvatar(false); } } else { Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show(); } } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.publish_avatar, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + if (item.getItemId() == R.id.action_crop_image) { + if (hasStoragePermission(REQUEST_CHOOSE_FILE_AND_CROP)) { + chooseAvatar(true); + } + return true; + } else { + return onOptionsItemSelected(item); + } + } + @Override protected void onActivityResult(int requestCode, int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { - case REQUEST_CHOOSE_FILE: + case REQUEST_CHOOSE_FILE_AND_CROP: Uri source = data.getData(); String original = FileUtils.getPath(this, source); if (original != null) { @@ -181,9 +202,17 @@ public class PublishProfilePictureActivity extends XmppActivity { final int size = getPixel(192); Crop.of(source, destination).asSquare().withMaxSize(size, size).start(this); break; + case REQUEST_CHOOSE_FILE: + this.avatarUri = data.getData(); + if (xmppConnectionServiceBound) { + loadImageIntoPreview(this.avatarUri); + } + break; case Crop.REQUEST_CROP: this.avatarUri = Uri.fromFile(new File(getCacheDir(), "croppedAvatar")); - loadImageIntoPreview(this.avatarUri); + if (xmppConnectionServiceBound) { + loadImageIntoPreview(this.avatarUri); + } break; } } else { @@ -248,21 +277,10 @@ public class PublishProfilePictureActivity extends XmppActivity { } } - private Bitmap loadScaledBitmap(Uri uri, int reqSize) throws FileNotFoundException { - final BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options); - int rotation = ExifHelper.getOrientation(getContentResolver().openInputStream(uri)); - options.inSampleSize = FileBackend.calcSampleSize(options, reqSize); - options.inJustDecodeBounds = false; - Bitmap bm = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options); - return FileBackend.rotate(bm,rotation); - } - protected void loadImageIntoPreview(Uri uri) { Bitmap bm = null; try { - bm = loadScaledBitmap(uri, getPixel(192)); + bm = xmppConnectionService.getFileBackend().cropCenterSquare(uri, getPixel(192)); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/res/drawable-hdpi/ic_crop_white_24dp.png b/src/main/res/drawable-hdpi/ic_crop_white_24dp.png new file mode 100644 index 00000000..6cbb87ce Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_crop_white_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_crop_white_24dp.png b/src/main/res/drawable-mdpi/ic_crop_white_24dp.png new file mode 100644 index 00000000..d606c072 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_crop_white_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_crop_white_24dp.png b/src/main/res/drawable-xhdpi/ic_crop_white_24dp.png new file mode 100644 index 00000000..983af77f Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_crop_white_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_crop_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_crop_white_24dp.png new file mode 100644 index 00000000..8c9eecb9 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_crop_white_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_crop_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_crop_white_24dp.png new file mode 100644 index 00000000..35d5434a Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_crop_white_24dp.png differ diff --git a/src/main/res/menu/publish_avatar.xml b/src/main/res/menu/publish_avatar.xml new file mode 100644 index 00000000..1bffb296 --- /dev/null +++ b/src/main/res/menu/publish_avatar.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 6a36233c..7368d0dc 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -602,4 +602,5 @@ Correct message Send corrected message You already trust this contact. By selecting \'done\' you are just confirming that %s is part of this conference. + Select image and crop -- cgit v1.2.3