Skip to content

Commit 5c2e2b8

Browse files
committed
improve the handling of third party intents
1 parent 6d9fbc4 commit 5c2e2b8

2 files changed

Lines changed: 38 additions & 18 deletions

File tree

app/src/main/kotlin/com/simplemobiletools/camera/Preview.kt

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
3939
private var mPreviewSize: Camera.Size? = null
4040
private var mParameters: Camera.Parameters? = null
4141
private var mRecorder: MediaRecorder? = null
42-
private var mTargetUri: Uri? = null
4342
private var mScaleGestureDetector: ScaleGestureDetector? = null
4443
private var mZoomRatios: List<Int>? = null
4544

@@ -62,6 +61,8 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
6261
private var autoFocusHandler = Handler()
6362

6463
var isWaitingForTakePictureCallback = false
64+
var mTargetUri: Uri? = null
65+
var isImageCaptureIntent = false
6566

6667
constructor(context: Context) : super(context)
6768

@@ -94,7 +95,7 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
9495
if (mIsPreviewShown) {
9596
resumePreview()
9697
} else {
97-
if (!mWasZooming)
98+
if (!mWasZooming && !mIsPreviewShown)
9899
focusArea(false)
99100

100101
mWasZooming = false
@@ -214,10 +215,6 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
214215
return null
215216
}
216217

217-
fun setTargetUri(uri: Uri) {
218-
mTargetUri = uri
219-
}
220-
221218
private fun initGestureDetector() {
222219
mScaleGestureDetector = ScaleGestureDetector(mActivity, object : ScaleGestureDetector.SimpleOnScaleGestureListener() {
223220
override fun onScale(detector: ScaleGestureDetector): Boolean {
@@ -285,6 +282,7 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
285282
mRotationAtCapture = MainActivity.mLastHandledOrientation
286283
mCamera!!.parameters = mParameters
287284
isWaitingForTakePictureCallback = true
285+
mIsPreviewShown = true
288286
mCamera!!.takePicture(null, null, takePictureCallback)
289287

290288
if (config.isSoundEnabled) {
@@ -302,19 +300,37 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
302300

303301
private val takePictureCallback = Camera.PictureCallback { data, cam ->
304302
isWaitingForTakePictureCallback = false
303+
if (!isImageCaptureIntent) {
304+
handlePreview()
305+
}
306+
307+
if (isImageCaptureIntent) {
308+
if (mTargetUri != null) {
309+
storePhoto(data)
310+
} else {
311+
mActivity.finishActivity()
312+
}
313+
} else {
314+
storePhoto(data)
315+
}
316+
}
317+
318+
private fun storePhoto(data: ByteArray) {
319+
PhotoProcessor(mActivity, mTargetUri, mCurrCameraId, mRotationAtCapture).execute(data)
320+
}
321+
322+
private fun handlePreview() {
305323
if (config.isShowPreviewEnabled) {
306-
mIsPreviewShown = true
307324
if (!config.wasPhotoPreviewHintShown) {
308325
mActivity.toast(R.string.click_to_resume_preview)
309326
config.wasPhotoPreviewHintShown = true
310327
}
311328
} else {
312329
Handler().postDelayed({
330+
mIsPreviewShown = false
313331
resumePreview()
314332
}, PHOTO_PREVIEW_LENGTH)
315333
}
316-
317-
PhotoProcessor(mActivity, mTargetUri, mCurrCameraId, mRotationAtCapture).execute(data)
318334
}
319335

320336
private fun resumePreview() {

app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
4848
private var mIsInPhotoMode = false
4949
private var mIsAskingPermissions = false
5050
private var mIsCameraAvailable = false
51-
private var mIsImageCaptureIntent = false
5251
private var mIsVideoCaptureIntent = false
5352
private var mIsHardwareShutterHandled = false
5453
private var mCurrVideoRecTimer = 0
@@ -75,7 +74,6 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
7574
mIsInPhotoMode = false
7675
mIsAskingPermissions = false
7776
mIsCameraAvailable = false
78-
mIsImageCaptureIntent = false
7977
mIsVideoCaptureIntent = false
8078
mIsHardwareShutterHandled = false
8179
mCurrVideoRecTimer = 0
@@ -125,20 +123,22 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
125123
}
126124

127125
private fun handleIntent() {
128-
if (intent?.action == MediaStore.ACTION_IMAGE_CAPTURE || intent?.action == MediaStore.ACTION_IMAGE_CAPTURE_SECURE) {
129-
mIsImageCaptureIntent = true
126+
if (isImageCaptureIntent()) {
130127
hideToggleModeAbout()
131-
val output = intent.extras.get(MediaStore.EXTRA_OUTPUT)
128+
val output = intent.extras?.get(MediaStore.EXTRA_OUTPUT)
132129
if (output != null && output is Uri) {
133-
mPreview?.setTargetUri(output)
130+
mPreview?.mTargetUri = output
134131
}
135132
} else if (intent?.action == MediaStore.ACTION_VIDEO_CAPTURE) {
136133
mIsVideoCaptureIntent = true
137134
hideToggleModeAbout()
138135
shutter.setImageDrawable(mRes.getDrawable(R.drawable.ic_video_rec))
139136
}
137+
mPreview?.isImageCaptureIntent = isImageCaptureIntent()
140138
}
141139

140+
private fun isImageCaptureIntent() = intent?.action == MediaStore.ACTION_IMAGE_CAPTURE || intent?.action == MediaStore.ACTION_IMAGE_CAPTURE_SECURE
141+
142142
private fun initializeCamera() {
143143
setContentView(R.layout.activity_main)
144144
initButtons()
@@ -567,6 +567,11 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
567567
return mIsCameraAvailable
568568
}
569569

570+
fun finishActivity() {
571+
setResult(Activity.RESULT_OK)
572+
finish()
573+
}
574+
570575
override fun setFlashAvailable(available: Boolean) {
571576
if (available) {
572577
toggle_flash.beVisible()
@@ -599,9 +604,8 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
599604
setupPreviewImage(mIsInPhotoMode)
600605
}
601606

602-
if (mIsImageCaptureIntent) {
603-
setResult(Activity.RESULT_OK)
604-
finish()
607+
if (isImageCaptureIntent()) {
608+
finishActivity()
605609
}
606610
}
607611

0 commit comments

Comments
 (0)