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);