don't automatically crop avatar
This commit is contained in:
parent
89eea3636f
commit
aa24a0f779
|
@ -7,6 +7,8 @@ import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.View.OnLongClickListener;
|
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.ExifHelper;
|
||||||
import eu.siacs.conversations.utils.FileUtils;
|
import eu.siacs.conversations.utils.FileUtils;
|
||||||
import eu.siacs.conversations.utils.PhoneHelper;
|
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;
|
import eu.siacs.conversations.xmpp.pep.Avatar;
|
||||||
|
|
||||||
public class PublishProfilePictureActivity extends XmppActivity {
|
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 ImageView avatar;
|
||||||
private TextView accountTextView;
|
private TextView accountTextView;
|
||||||
private TextView hintOrWarning;
|
private TextView hintOrWarning;
|
||||||
|
@ -138,7 +139,7 @@ public class PublishProfilePictureActivity extends XmppActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (hasStoragePermission(REQUEST_CHOOSE_FILE)) {
|
if (hasStoragePermission(REQUEST_CHOOSE_FILE)) {
|
||||||
chooseAvatar();
|
chooseAvatar(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -146,32 +147,52 @@ public class PublishProfilePictureActivity extends XmppActivity {
|
||||||
this.defaultUri = PhoneHelper.getSefliUri(getApplicationContext());
|
this.defaultUri = PhoneHelper.getSefliUri(getApplicationContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void chooseAvatar() {
|
private void chooseAvatar(boolean crop) {
|
||||||
Intent attachFileIntent = new Intent();
|
Intent attachFileIntent = new Intent();
|
||||||
attachFileIntent.setType("image/*");
|
attachFileIntent.setType("image/*");
|
||||||
attachFileIntent.setAction(Intent.ACTION_GET_CONTENT);
|
attachFileIntent.setAction(Intent.ACTION_GET_CONTENT);
|
||||||
Intent chooser = Intent.createChooser(attachFileIntent, getString(R.string.attach_file));
|
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
|
@Override
|
||||||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
||||||
if (grantResults.length > 0)
|
if (grantResults.length > 0)
|
||||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
if (requestCode == REQUEST_CHOOSE_FILE) {
|
if (requestCode == REQUEST_CHOOSE_FILE_AND_CROP) {
|
||||||
chooseAvatar();
|
chooseAvatar(true);
|
||||||
|
} else if (requestCode == REQUEST_CHOOSE_FILE) {
|
||||||
|
chooseAvatar(false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
|
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
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
case REQUEST_CHOOSE_FILE:
|
case REQUEST_CHOOSE_FILE_AND_CROP:
|
||||||
Uri source = data.getData();
|
Uri source = data.getData();
|
||||||
String original = FileUtils.getPath(this, source);
|
String original = FileUtils.getPath(this, source);
|
||||||
if (original != null) {
|
if (original != null) {
|
||||||
|
@ -181,9 +202,17 @@ public class PublishProfilePictureActivity extends XmppActivity {
|
||||||
final int size = getPixel(192);
|
final int size = getPixel(192);
|
||||||
Crop.of(source, destination).asSquare().withMaxSize(size, size).start(this);
|
Crop.of(source, destination).asSquare().withMaxSize(size, size).start(this);
|
||||||
break;
|
break;
|
||||||
|
case REQUEST_CHOOSE_FILE:
|
||||||
|
this.avatarUri = data.getData();
|
||||||
|
if (xmppConnectionServiceBound) {
|
||||||
|
loadImageIntoPreview(this.avatarUri);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case Crop.REQUEST_CROP:
|
case Crop.REQUEST_CROP:
|
||||||
this.avatarUri = Uri.fromFile(new File(getCacheDir(), "croppedAvatar"));
|
this.avatarUri = Uri.fromFile(new File(getCacheDir(), "croppedAvatar"));
|
||||||
|
if (xmppConnectionServiceBound) {
|
||||||
loadImageIntoPreview(this.avatarUri);
|
loadImageIntoPreview(this.avatarUri);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} 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) {
|
protected void loadImageIntoPreview(Uri uri) {
|
||||||
Bitmap bm = null;
|
Bitmap bm = null;
|
||||||
try {
|
try {
|
||||||
bm = loadScaledBitmap(uri, getPixel(192));
|
bm = xmppConnectionService.getFileBackend().cropCenterSquare(uri, getPixel(192));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 302 B |
Binary file not shown.
After Width: | Height: | Size: 214 B |
Binary file not shown.
After Width: | Height: | Size: 272 B |
Binary file not shown.
After Width: | Height: | Size: 326 B |
Binary file not shown.
After Width: | Height: | Size: 394 B |
|
@ -0,0 +1,8 @@
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_crop_image"
|
||||||
|
android:showAsAction="always"
|
||||||
|
android:icon="@drawable/ic_crop_white_24dp"
|
||||||
|
android:title="@string/select_image_and_crop"/>
|
||||||
|
</menu>
|
|
@ -602,4 +602,5 @@
|
||||||
<string name="correct_message">Correct message</string>
|
<string name="correct_message">Correct message</string>
|
||||||
<string name="send_corrected_message">Send corrected message</string>
|
<string name="send_corrected_message">Send corrected message</string>
|
||||||
<string name="no_keys_just_confirm">You already trust this contact. By selecting \'done\' you are just confirming that %s is part of this conference.</string>
|
<string name="no_keys_just_confirm">You already trust this contact. By selecting \'done\' you are just confirming that %s is part of this conference.</string>
|
||||||
|
<string name="select_image_and_crop">Select image and crop</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in New Issue