From 0d71a4492bad61672fc1b43df6233151ad370f5e Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 28 May 2018 19:30:31 +0200 Subject: [PATCH] create an interface for some shared Preview functions --- .../camera/activities/MainActivity.kt | 11 +++-- .../camera/interfaces/MyPreview.kt | 39 +++++++++++++++ .../camera/views/PreviewCameraOne.kt | 49 ++++++++++--------- 3 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt index c6a6d86f..97b7b81a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt @@ -20,6 +20,7 @@ import com.simplemobiletools.camera.extensions.getMyCamera import com.simplemobiletools.camera.extensions.navBarHeight import com.simplemobiletools.camera.helpers.* import com.simplemobiletools.camera.interfaces.MyCamera +import com.simplemobiletools.camera.interfaces.MyPreview import com.simplemobiletools.camera.views.FocusCircleView import com.simplemobiletools.camera.views.PreviewCameraOne import com.simplemobiletools.camera.views.PreviewCameraOne.PreviewListener @@ -37,7 +38,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave private lateinit var mFadeHandler: Handler private lateinit var mCameraImpl: MyCamera - private var mPreview: PreviewCameraOne? = null + private var mPreview: MyPreview? = null private var mPreviewUri: Uri? = null private var mIsInPhotoMode = false private var mIsCameraAvailable = false @@ -190,7 +191,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave (btn_holder.layoutParams as RelativeLayout.LayoutParams).setMargins(0, 0, 0, (navBarHeight + resources.getDimension(R.dimen.activity_margin)).toInt()) mPreview = PreviewCameraOne(this, camera_surface_view, this) - view_holder.addView(mPreview) + view_holder.addView(mPreview as ViewGroup) val imageDrawable = if (config.lastUsedCamera == mCameraImpl.getBackCameraId()) R.drawable.ic_camera_front else R.drawable.ic_camera_rear toggle_camera.setImageResource(imageDrawable) @@ -312,7 +313,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave } if (mIsVideoCaptureIntent) { - mPreview?.trySwitchToVideo() + mPreview?.tryInitVideoMode() } mPreview?.setFlashlightState(FLASH_OFF) @@ -339,7 +340,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave } private fun tryInitVideoMode() { - if (mPreview?.initRecorder() == true) { + if (mPreview?.initVideoMode() == true) { initVideoButtons() } else { if (!mIsVideoCaptureIntent) { @@ -443,7 +444,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave private fun resumeCameraItems() { showToggleCameraIfNeeded() - if (mPreview?.setCamera() == true) { + if (mPreview?.resumeCamera() == true) { hideNavigationBarIcons() mPreview?.checkFlashlight() diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt b/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt new file mode 100644 index 00000000..7f6e110e --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt @@ -0,0 +1,39 @@ +package com.simplemobiletools.camera.interfaces + +import android.net.Uri + +interface MyPreview { + fun setTargetUri(uri: Uri) + + fun setIsImageCaptureIntent(isImageCaptureIntent: Boolean) + + fun setFlashlightState(state: Int) + + fun setCamera(cameraId: Int): Boolean + + fun getCameraState(): Int + + fun releaseCamera() + + fun showChangeResolutionDialog() + + fun toggleFrontBackCamera() + + fun toggleFlashlight() + + fun tryTakePicture() + + fun toggleRecording(): Boolean + + fun tryInitVideoMode() + + fun initPhotoMode() + + fun initVideoMode(): Boolean + + fun checkFlashlight() + + fun deviceOrientationChanged() + + fun resumeCamera(): Boolean +} diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt index c7451bed..1193fddb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt @@ -25,13 +25,14 @@ import com.simplemobiletools.camera.dialogs.ChangeResolutionDialog import com.simplemobiletools.camera.extensions.* import com.simplemobiletools.camera.helpers.* import com.simplemobiletools.camera.implementations.MyCameraOneImpl +import com.simplemobiletools.camera.interfaces.MyPreview import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.isJellyBean1Plus import java.io.File import java.io.IOException import java.util.* -class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { +class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback, MyPreview { private val FOCUS_AREA_SIZE = 100 private val PHOTO_PREVIEW_LENGTH = 500L private val REFOCUS_PERIOD = 3000L @@ -112,15 +113,17 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { } } - fun trySwitchToVideo() { + override fun tryInitVideoMode() { if (mIsSurfaceCreated) { - initRecorder() + initVideoMode() } else { mSwitchToVideoAsap = true } } - fun setCamera(cameraId: Int = mCurrCameraId): Boolean { + override fun resumeCamera() = setCamera(mCurrCameraId) + + override fun setCamera(cameraId: Int): Boolean { mCurrCameraId = cameraId val newCamera: Camera try { @@ -139,7 +142,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { releaseCamera() mCamera = newCamera if (initCamera() && mIsInVideoMode) { - initRecorder() + initVideoMode() } if (!mWasCameraPreviewSet && mIsSurfaceCreated) { @@ -189,7 +192,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { return true } - fun toggleFrontBackCamera() { + override fun toggleFrontBackCamera() { mCurrCameraId = if (mCurrCameraId == mCameraImpl!!.getBackCameraId()) { mCameraImpl!!.getFrontCameraId() } else { @@ -207,7 +210,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { } } - fun getCameraState() = mCameraState + override fun getCameraState() = mCameraState private fun refreshPreview() { mIsSixteenToNine = getSelectedResolution().isSixteenToNine() @@ -304,7 +307,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { }) } - fun tryTakePicture() { + override fun tryTakePicture() { if (mConfig.focusBeforeCapture) { focusArea(true) } else { @@ -483,7 +486,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { }, REFOCUS_PERIOD) } - fun showChangeResolutionDialog() { + override fun showChangeResolutionDialog() { if (mCamera != null) { val oldResolution = getSelectedResolution() ChangeResolutionDialog(mActivity!!, mConfig, mCamera!!) { @@ -494,7 +497,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { } } - fun releaseCamera() { + override fun releaseCamera() { stopRecording() mCamera?.stopPreview() mCamera?.release() @@ -509,7 +512,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { mCamera?.setPreviewDisplay(mSurfaceHolder) if (mSwitchToVideoAsap) - initRecorder() + initVideoMode() } catch (e: IOException) { mActivity!!.showErrorToast(e) } @@ -519,7 +522,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { mIsSurfaceCreated = true if (mIsInVideoMode) { - initRecorder() + initVideoMode() } } @@ -617,17 +620,17 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { } } - fun setFlashlightState(state: Int) { + override fun setFlashlightState(state: Int) { mFlashlightState = state checkFlashlight() } - fun toggleFlashlight() { + override fun toggleFlashlight() { val newState = ++mFlashlightState % if (!mIsInVideoMode) 3 else 2 setFlashlightState(newState) } - fun checkFlashlight() { + override fun checkFlashlight() { when (mFlashlightState) { FLASH_OFF -> disableFlash() FLASH_ON -> enableFlash() @@ -660,7 +663,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { }, 1000) } - fun initPhotoMode() { + override fun initPhotoMode() { stopRecording() cleanupRecorder() mIsRecording = false @@ -669,7 +672,7 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { } // VIDEO RECORDING - fun initRecorder(): Boolean { + override fun initVideoMode(): Boolean { if (mCamera == null || mRecorder != null || !mIsSurfaceCreated) { return false } @@ -773,18 +776,18 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { } } - fun setTargetUri(uri: Uri) { + override fun setTargetUri(uri: Uri) { mTargetUri = uri } - fun setIsImageCaptureIntent(isImageCaptureIntent: Boolean) { + override fun setIsImageCaptureIntent(isImageCaptureIntent: Boolean) { mIsImageCaptureIntent = isImageCaptureIntent } - fun toggleRecording(): Boolean { + override fun toggleRecording(): Boolean { if (mIsRecording) { stopRecording() - initRecorder() + initVideoMode() } else { startRecording() } @@ -797,10 +800,10 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback { return (deviceRot + previewRot) % 360 } - fun deviceOrientationChanged() { + override fun deviceOrientationChanged() { if (mIsInVideoMode && !mIsRecording) { mRecorder = null - initRecorder() + initVideoMode() } }