diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 26bcfe37..0f55cef6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,6 +25,11 @@ + + + + + { private static final String TAG = PhotoProcessor.class.getSimpleName(); - private static Context mContext; + private static WeakReference mActivity; + private static Uri mUri; - public PhotoProcessor(Context context) { - mContext = context; + public PhotoProcessor(MainActivity activity, Uri uri) { + mActivity = new WeakReference<>(activity); + mUri = uri; } @Override protected Void doInBackground(byte[]... params) { - final String photoPath = Utils.getOutputMediaFile(mContext, true); - if (photoPath.isEmpty()) { - return null; - } - + FileOutputStream fos = null; + String path; try { - final File photoFile = new File(photoPath); + if (mUri != null) { + path = mUri.getPath(); + } else { + path = Utils.getOutputMediaFile(mActivity.get(), true); + } + + if (path.isEmpty()) { + return null; + } + + final File photoFile = new File(path); final byte[] data = params[0]; - final FileOutputStream fos = new FileOutputStream(photoFile); + fos = new FileOutputStream(photoFile); fos.write(data); fos.close(); - Utils.scanFile(photoPath, mContext); + Utils.scanFile(path, mActivity.get().getApplicationContext()); } catch (FileNotFoundException e) { - Log.d(TAG, "PhotoProcessor file not found: " + e.getMessage()); + Log.e(TAG, "PhotoProcessor file not found: " + e.getMessage()); } catch (IOException e) { Log.e(TAG, "PhotoProcessor ioexception " + e.getMessage()); + } finally { + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + Log.e(TAG, "PhotoProcessor close ioexception " + e.getMessage()); + } + } } return null; } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + MediaSavedListener listener = mActivity.get(); + if (listener != null) { + listener.mediaSaved(); + } + } + + public interface MediaSavedListener { + void mediaSaved(); + } } diff --git a/app/src/main/java/com/simplemobiletools/camera/Preview.java b/app/src/main/java/com/simplemobiletools/camera/Preview.java index 6c3606a3..1b568d0c 100644 --- a/app/src/main/java/com/simplemobiletools/camera/Preview.java +++ b/app/src/main/java/com/simplemobiletools/camera/Preview.java @@ -1,12 +1,12 @@ package com.simplemobiletools.camera; -import android.app.Activity; import android.content.Context; import android.graphics.Rect; import android.hardware.Camera; import android.media.CamcorderProfile; import android.media.MediaPlayer; import android.media.MediaRecorder; +import android.net.Uri; import android.os.Handler; import android.util.Log; import android.view.MotionEvent; @@ -34,7 +34,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O private static SurfaceView surfaceView; private static Camera.Size previewSize; private static boolean canTakePicture; - private static Activity activity; + private static MainActivity activity; private static int currCameraId; private static boolean isFlashEnabled; private static Camera.Parameters parameters; @@ -47,12 +47,13 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O private static int lastClickX; private static int lastClickY; private static int initVideoRotation; + private static Uri targetUri; public Preview(Context context) { super(context); } - public Preview(Activity act, SurfaceView sv, PreviewListener cb) { + public Preview(MainActivity act, SurfaceView sv, PreviewListener cb) { super(act); activity = act; @@ -120,6 +121,10 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O } } + public void setTargetUri(Uri uri) { + targetUri = uri; + } + private static int getPreviewRotation(int cameraId) { final Camera.CameraInfo info = Utils.getCameraInfo(cameraId); int degrees = getRotationDegrees(); @@ -200,7 +205,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O } }, PHOTO_PREVIEW_LENGTH); - new PhotoProcessor(getContext()).execute(data); + new PhotoProcessor(activity, targetUri).execute(data); if (isFlashEnabled) { parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); camera.setParameters(parameters);