package de.stephanlindauer.criticalmaps.handler;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AlertDialog;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import de.stephanlindauer.criticalmaps.R;
import de.stephanlindauer.criticalmaps.utils.ImageUtils;
import de.stephanlindauer.criticalmaps.vo.ResultType;
public class ProcessCameraResultHandler extends AsyncTask<Void, Void, ResultType> {
private final Activity activity;
private final File newCameraOutputFile;
private File processedImageFile;
private ProgressDialog progressDialog;
public ProcessCameraResultHandler(Activity activity, File newCameraOutputFile) {
this.activity = activity;
this.newCameraOutputFile = newCameraOutputFile;
}
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(activity);
progressDialog.setIndeterminate(false);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage(activity.getString(R.string.camera_processing_image));
progressDialog.setCancelable(false);
progressDialog.show();
}
@Override
protected ResultType doInBackground(Void... params) {
try {
Bitmap rotatedBitmap = ImageUtils.rotateBitmap(newCameraOutputFile);
Bitmap scaledBitmap = ImageUtils.resize(rotatedBitmap, 1024, 1024);
if (scaledBitmap != rotatedBitmap) {
rotatedBitmap.recycle();
}
processedImageFile = ImageUtils.getNewOutputImageFile();
FileOutputStream fOut = new FileOutputStream(processedImageFile);
scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 80, fOut);
fOut.flush();
fOut.close();
scaledBitmap.recycle();
} catch (Exception e) {
return ResultType.FAILED;
}
return ResultType.SUCCEEDED;
}
@Override
protected void onPostExecute(ResultType resultType) {
progressDialog.dismiss();
if (resultType == ResultType.FAILED) {
Toast.makeText(activity, R.string.something_went_wrong, Toast.LENGTH_LONG).show();
return;
}
LayoutInflater factory = LayoutInflater.from(activity);
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
final View view = factory.inflate(R.layout.view_picture_upload, null);
ImageView image = (ImageView) view.findViewById(R.id.picture_preview);
image.setImageBitmap(BitmapFactory.decodeFile(processedImageFile.getPath(), new BitmapFactory.Options()));
TextView text = (TextView) view.findViewById(R.id.picture_confirm_text);
text.setLinksClickable(true);
text.setText(Html.fromHtml(activity.getString(R.string.camera_confirm_image_upload)));
builder.setView(view);
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
new ImageUploadHandler(processedImageFile, activity).execute();
break;
case DialogInterface.BUTTON_NEGATIVE:
processedImageFile.delete();
break;
}
}
};
builder.setPositiveButton(R.string.camera_upload, dialogClickListener);
builder.setNegativeButton(R.string.camera_discard, dialogClickListener);
builder.setCancelable(false);
builder.show();
}
}