package im.actor.sdk.controllers.pickers; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.widget.Toast; import com.soundcloud.android.crop.Crop; import org.jetbrains.annotations.NotNull; import java.io.File; import im.actor.sdk.R; import im.actor.sdk.controllers.Intents; import im.actor.sdk.util.Files; public class TakePhotoActivity extends Activity { private static final int REQUEST_GALLERY = 1; private static final int REQUEST_PHOTO = 2; private boolean isAllowDelete = false; private boolean isPerformedAction = false; private String tempAvatarPath; private String externalFile; private AlertDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { isPerformedAction = savedInstanceState.getBoolean("isPerformedAction"); isAllowDelete = savedInstanceState.getBoolean("isAllowDelete"); externalFile = savedInstanceState.getString("externalFile"); tempAvatarPath = savedInstanceState.getString("tempAvatarPath"); } else { isAllowDelete = getIntent().getBooleanExtra(Intents.EXTRA_ALLOW_DELETE, false); } } @Override protected void onResume() { super.onResume(); if (!isPerformedAction) { CharSequence[] args; if (isAllowDelete) { args = new CharSequence[]{getString(R.string.pick_photo_camera), getString(R.string.pick_photo_gallery), getString(R.string.pick_photo_remove)}; } else { args = new CharSequence[]{getString(R.string.pick_photo_camera), getString(R.string.pick_photo_gallery)}; } dialog = new AlertDialog.Builder(this) .setItems(args, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog2, int which) { if (which == 0) { externalFile = Files.getExternalTempFile("capture", "jpg"); if (externalFile == null) { Toast.makeText(getApplicationContext(), R.string.toast_no_sdcard, Toast.LENGTH_LONG).show(); return; } startActivityForResult( new Intent(MediaStore.ACTION_IMAGE_CAPTURE) .putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(externalFile))), REQUEST_PHOTO); } else if (which == 1) { Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); i.setType("image/*"); startActivityForResult(i, REQUEST_GALLERY); } else if (which == 2) { setResult(RESULT_OK, new Intent().putExtra(Intents.EXTRA_RESULT, Intents.RESULT_DELETE)); finish(); } isPerformedAction = true; } }) .setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { finish(); } }).show(); dialog.setCanceledOnTouchOutside(true); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK) { tempAvatarPath = Files.getInternalTempFile("avatar", "jpg"); Crop.of(data.getData(), Uri.fromFile(new File(tempAvatarPath))) .asSquare() .start(this); return; } else if (requestCode == REQUEST_PHOTO && resultCode == Activity.RESULT_OK) { tempAvatarPath = Files.getInternalTempFile("avatar", "jpg"); Crop.of(Uri.fromFile(new File(externalFile)), Uri.fromFile(new File(tempAvatarPath))) .asSquare() .start(this); return; } else if (requestCode == Crop.REQUEST_CROP && resultCode == Activity.RESULT_OK) { setResult(RESULT_OK, new Intent() .putExtra(Intents.EXTRA_RESULT, Intents.RESULT_IMAGE) .putExtra(Intents.EXTRA_IMAGE, tempAvatarPath)); finish(); return; } setResult(RESULT_CANCELED); finish(); } @Override protected void onPause() { super.onPause(); if (dialog != null) { dialog.dismiss(); dialog = null; } } @Override protected void onSaveInstanceState(@NotNull Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean("isPerformedAction", isPerformedAction); outState.putBoolean("isAllowDelete", isAllowDelete); if (externalFile != null) { outState.putString("externalFile", externalFile); } if (tempAvatarPath != null) { outState.putString("tempAvatarPath", tempAvatarPath); } } }