misc tweaks here and there
This commit is contained in:
parent
9a6a4ffe9e
commit
207bb44eed
|
@ -1,10 +1,8 @@
|
|||
package com.simplemobiletools.camera
|
||||
|
||||
object Constants {
|
||||
val ORIENT_PORTRAIT = 0
|
||||
val ORIENT_LANDSCAPE_LEFT = 1
|
||||
val ORIENT_LANDSCAPE_RIGHT = 2
|
||||
}
|
||||
val ORIENT_PORTRAIT = 0
|
||||
val ORIENT_LANDSCAPE_LEFT = 1
|
||||
val ORIENT_LANDSCAPE_RIGHT = 2
|
||||
|
||||
// shared preferences
|
||||
val SAVE_PHOTOS = "save_photos"
|
||||
|
|
|
@ -4,12 +4,16 @@ import android.net.Uri
|
|||
import android.os.AsyncTask
|
||||
import android.os.Environment
|
||||
import android.util.Log
|
||||
import com.simplemobiletools.camera.Preview.Companion.config
|
||||
import com.simplemobiletools.camera.activities.MainActivity
|
||||
import com.simplemobiletools.camera.extensions.getOutputMediaFile
|
||||
import com.simplemobiletools.commons.extensions.getFileDocument
|
||||
import com.simplemobiletools.commons.extensions.needsStupidWritePermissions
|
||||
import com.simplemobiletools.commons.extensions.toast
|
||||
import java.io.*
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.io.OutputStream
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class PhotoProcessor(val activity: MainActivity, val uri: Uri?) : AsyncTask<ByteArray, Void, String>() {
|
||||
|
@ -38,7 +42,6 @@ class PhotoProcessor(val activity: MainActivity, val uri: Uri?) : AsyncTask<Byte
|
|||
|
||||
val photoFile = File(path)
|
||||
if (activity.needsStupidWritePermissions(path)) {
|
||||
val config = Config.newInstance(activity)
|
||||
if (config.treeUri.isEmpty()) {
|
||||
activity.runOnUiThread {
|
||||
activity.toast(R.string.save_error_internal_storage)
|
||||
|
@ -57,10 +60,8 @@ class PhotoProcessor(val activity: MainActivity, val uri: Uri?) : AsyncTask<Byte
|
|||
fos?.write(data)
|
||||
fos?.close()
|
||||
return photoFile.absolutePath
|
||||
} catch (e: FileNotFoundException) {
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "PhotoProcessor file not found: $e")
|
||||
} catch (e: IOException) {
|
||||
Log.e(TAG, "PhotoProcessor ioexception $e")
|
||||
} finally {
|
||||
try {
|
||||
fos?.close()
|
||||
|
@ -74,8 +75,7 @@ class PhotoProcessor(val activity: MainActivity, val uri: Uri?) : AsyncTask<Byte
|
|||
|
||||
override fun onPostExecute(path: String) {
|
||||
super.onPostExecute(path)
|
||||
val listener = mActivity?.get()
|
||||
listener?.mediaSaved(path)
|
||||
mActivity?.get()?.mediaSaved(path)
|
||||
}
|
||||
|
||||
interface MediaSavedListener {
|
||||
|
|
|
@ -29,7 +29,7 @@ import java.util.*
|
|||
|
||||
class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScanCompletedListener {
|
||||
companion object {
|
||||
val PHOTO_PREVIEW_LENGTH = 1000
|
||||
val PHOTO_PREVIEW_LENGTH = 1000L
|
||||
private val TAG = Preview::class.java.simpleName
|
||||
private val FOCUS_AREA_SIZE = 100
|
||||
|
||||
|
@ -203,9 +203,7 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
|
|||
newZoomFactor = Math.min(mMaxZoom, newZoomFactor)
|
||||
|
||||
mParameters!!.zoom = newZoomFactor
|
||||
if (mCamera != null)
|
||||
mCamera!!.parameters = mParameters
|
||||
|
||||
mCamera?.parameters = mParameters
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -248,7 +246,9 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
|
|||
|
||||
private val takePictureCallback = Camera.PictureCallback { data, cam ->
|
||||
if (config.isShowPreviewEnabled) {
|
||||
Handler().postDelayed({ resumePreview() }, PHOTO_PREVIEW_LENGTH.toLong())
|
||||
Handler().postDelayed({
|
||||
resumePreview()
|
||||
}, PHOTO_PREVIEW_LENGTH)
|
||||
} else {
|
||||
resumePreview()
|
||||
}
|
||||
|
@ -261,13 +261,7 @@ class Preview : ViewGroup, SurfaceHolder.Callback, MediaScannerConnection.OnScan
|
|||
mCanTakePicture = true
|
||||
}
|
||||
|
||||
fun getSupportedVideoSizes(): List<Camera.Size> {
|
||||
return if (mParameters!!.supportedVideoSizes != null) {
|
||||
mParameters!!.supportedVideoSizes
|
||||
} else {
|
||||
mParameters!!.supportedPreviewSizes
|
||||
}
|
||||
}
|
||||
fun getSupportedVideoSizes(): List<Camera.Size> = mParameters!!.supportedVideoSizes ?: mParameters!!.supportedPreviewSizes
|
||||
|
||||
private fun focusArea(takePictureAfter: Boolean) {
|
||||
if (mCamera == null)
|
||||
|
|
|
@ -9,7 +9,6 @@ import android.content.pm.PackageManager
|
|||
import android.content.res.Resources
|
||||
import android.database.Cursor
|
||||
import android.hardware.*
|
||||
import android.media.MediaScannerConnection
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
|
@ -29,11 +28,11 @@ import com.simplemobiletools.commons.models.Release
|
|||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import java.util.*
|
||||
|
||||
class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, PhotoProcessor.MediaSavedListener, MediaScannerConnection.OnScanCompletedListener {
|
||||
class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, PhotoProcessor.MediaSavedListener {
|
||||
companion object {
|
||||
|
||||
private val CAMERA_STORAGE_PERMISSION = 1
|
||||
private val AUDIO_PERMISSION = 2
|
||||
private val RECORD_AUDIO_PERMISSION = 2
|
||||
private val FADE_DELAY = 5000
|
||||
|
||||
lateinit var mSensorManager: SensorManager
|
||||
|
@ -107,19 +106,17 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
}
|
||||
|
||||
private fun handleIntent() {
|
||||
if (intent?.action != null) {
|
||||
if (intent.action == MediaStore.ACTION_IMAGE_CAPTURE || intent.action == MediaStore.ACTION_IMAGE_CAPTURE_SECURE) {
|
||||
mIsImageCaptureIntent = true
|
||||
hideToggleModeAbout()
|
||||
val output = intent.extras.get(MediaStore.EXTRA_OUTPUT)
|
||||
if (output != null && output is Uri) {
|
||||
mPreview?.setTargetUri(output)
|
||||
}
|
||||
} else if (intent.action == MediaStore.ACTION_VIDEO_CAPTURE) {
|
||||
mIsVideoCaptureIntent = true
|
||||
hideToggleModeAbout()
|
||||
shutter.setImageDrawable(mRes.getDrawable(R.drawable.ic_video_rec))
|
||||
if (intent?.action == MediaStore.ACTION_IMAGE_CAPTURE || intent?.action == MediaStore.ACTION_IMAGE_CAPTURE_SECURE) {
|
||||
mIsImageCaptureIntent = true
|
||||
hideToggleModeAbout()
|
||||
val output = intent.extras.get(MediaStore.EXTRA_OUTPUT)
|
||||
if (output != null && output is Uri) {
|
||||
mPreview?.setTargetUri(output)
|
||||
}
|
||||
} else if (intent?.action == MediaStore.ACTION_VIDEO_CAPTURE) {
|
||||
mIsVideoCaptureIntent = true
|
||||
hideToggleModeAbout()
|
||||
shutter.setImageDrawable(mRes.getDrawable(R.drawable.ic_video_rec))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,7 +169,7 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
toast(R.string.no_permissions)
|
||||
finish()
|
||||
}
|
||||
} else if (requestCode == AUDIO_PERMISSION) {
|
||||
} else if (requestCode == RECORD_AUDIO_PERMISSION) {
|
||||
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
togglePhotoVideo()
|
||||
} else {
|
||||
|
@ -268,15 +265,17 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
if (mIsInPhotoMode) {
|
||||
toggleBottomButtons(true)
|
||||
mPreview?.takePicture()
|
||||
Handler().postDelayed({ toggleBottomButtons(false) }, Preview.PHOTO_PREVIEW_LENGTH.toLong())
|
||||
Handler().postDelayed({
|
||||
toggleBottomButtons(false)
|
||||
}, Preview.PHOTO_PREVIEW_LENGTH)
|
||||
} else {
|
||||
if (mPreview?.toggleRecording() == true) {
|
||||
shutter.setImageDrawable(mRes.getDrawable(R.drawable.ic_video_stop))
|
||||
toggle_camera.visibility = View.INVISIBLE
|
||||
toggle_camera.beInvisible()
|
||||
showTimer()
|
||||
} else {
|
||||
shutter.setImageDrawable(mRes.getDrawable(R.drawable.ic_video_rec))
|
||||
toggle_camera.visibility = View.VISIBLE
|
||||
toggle_camera.beVisible()
|
||||
hideTimer()
|
||||
}
|
||||
}
|
||||
|
@ -309,7 +308,7 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
}
|
||||
|
||||
if (!hasRecordAudioPermission()) {
|
||||
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), AUDIO_PERMISSION)
|
||||
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), RECORD_AUDIO_PERMISSION)
|
||||
mIsAskingPermissions = true
|
||||
return
|
||||
}
|
||||
|
@ -320,7 +319,7 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
disableFlash()
|
||||
hideTimer()
|
||||
mIsInPhotoMode = !mIsInPhotoMode
|
||||
toggle_camera.visibility = View.VISIBLE
|
||||
toggle_camera.beVisible()
|
||||
}
|
||||
|
||||
private fun checkButtons() {
|
||||
|
@ -350,7 +349,7 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
|
||||
private fun initVideoButtons() {
|
||||
toggle_photo_video.setImageDrawable(mRes.getDrawable(R.drawable.ic_camera))
|
||||
toggle_camera.visibility = View.VISIBLE
|
||||
toggle_camera.beVisible()
|
||||
shutter.setImageDrawable(mRes.getDrawable(R.drawable.ic_video_rec))
|
||||
checkFlash()
|
||||
setupPreviewImage(false)
|
||||
|
@ -365,7 +364,7 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
mPreviewUri = Uri.withAppendedPath(uri, lastMediaId.toString())
|
||||
|
||||
runOnUiThread {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 || !isDestroyed) {
|
||||
if (!isDestroyed || Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
||||
Glide.with(this).load(mPreviewUri).centerCrop().diskCacheStrategy(DiskCacheStrategy.NONE).crossFade().into(last_photo_video_preview)
|
||||
}
|
||||
}
|
||||
|
@ -376,9 +375,8 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
var cursor: Cursor? = null
|
||||
try {
|
||||
cursor = contentResolver.query(uri, projection, null, null, "${MediaStore.Images.ImageColumns.DATE_TAKEN} DESC")
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
val idIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)
|
||||
return cursor.getLong(idIndex)
|
||||
if (cursor?.moveToFirst() == true) {
|
||||
return cursor.getLongValue(MediaStore.Images.ImageColumns._ID)
|
||||
}
|
||||
} finally {
|
||||
cursor?.close()
|
||||
|
@ -412,13 +410,13 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
|
||||
private fun hideTimer() {
|
||||
video_rec_curr_timer.text = 0.getFormattedDuration()
|
||||
video_rec_curr_timer.visibility = View.GONE
|
||||
video_rec_curr_timer.beGone()
|
||||
mCurrVideoRecTimer = 0
|
||||
mTimerHandler.removeCallbacksAndMessages(null)
|
||||
}
|
||||
|
||||
private fun showTimer() {
|
||||
video_rec_curr_timer.visibility = View.VISIBLE
|
||||
video_rec_curr_timer.beVisible()
|
||||
setupTimer()
|
||||
}
|
||||
|
||||
|
@ -449,7 +447,7 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
private fun resumeCameraItems() {
|
||||
val cnt = Camera.getNumberOfCameras()
|
||||
if (cnt == 1) {
|
||||
toggle_camera.visibility = View.INVISIBLE
|
||||
toggle_camera.beInvisible()
|
||||
}
|
||||
|
||||
if (mPreview?.setCamera(mCurrCamera) == true) {
|
||||
|
@ -482,19 +480,19 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
|
||||
override fun onSensorChanged(event: SensorEvent) {
|
||||
if (event.values[0] < 6.5 && event.values[0] > -6.5) {
|
||||
mOrientation = Constants.ORIENT_PORTRAIT
|
||||
mOrientation = ORIENT_PORTRAIT
|
||||
} else {
|
||||
if (event.values[0] > 0) {
|
||||
mOrientation = Constants.ORIENT_LANDSCAPE_LEFT
|
||||
mOrientation = ORIENT_LANDSCAPE_LEFT
|
||||
} else {
|
||||
mOrientation = Constants.ORIENT_LANDSCAPE_RIGHT
|
||||
mOrientation = ORIENT_LANDSCAPE_RIGHT
|
||||
}
|
||||
}
|
||||
|
||||
if (mOrientation != mLastHandledOrientation) {
|
||||
val degrees = when (mOrientation) {
|
||||
Constants.ORIENT_LANDSCAPE_LEFT -> 90
|
||||
Constants.ORIENT_LANDSCAPE_RIGHT -> -90
|
||||
ORIENT_LANDSCAPE_LEFT -> 90
|
||||
ORIENT_LANDSCAPE_RIGHT -> -90
|
||||
else -> 0
|
||||
}
|
||||
|
||||
|
@ -524,9 +522,9 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
|
||||
override fun setFlashAvailable(available: Boolean) {
|
||||
if (available) {
|
||||
toggle_flash.visibility = View.VISIBLE
|
||||
toggle_flash.beVisible()
|
||||
} else {
|
||||
toggle_flash.visibility = View.INVISIBLE
|
||||
toggle_flash.beInvisible()
|
||||
disableFlash()
|
||||
}
|
||||
}
|
||||
|
@ -552,8 +550,9 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
override fun drawFocusRect(x: Int, y: Int) = mFocusRectView.drawFocusRect(x, y)
|
||||
|
||||
override fun mediaSaved(path: String) {
|
||||
val paths = arrayOf(path)
|
||||
MediaScannerConnection.scanFile(applicationContext, paths, null, this)
|
||||
scanPath(path) {
|
||||
setupPreviewImage(mIsInPhotoMode)
|
||||
}
|
||||
|
||||
if (mIsImageCaptureIntent) {
|
||||
setResult(Activity.RESULT_OK)
|
||||
|
@ -567,8 +566,6 @@ class MainActivity : SimpleActivity(), SensorEventListener, PreviewListener, Pho
|
|||
mPreview?.releaseCamera()
|
||||
}
|
||||
|
||||
override fun onScanCompleted(path: String, uri: Uri) = setupPreviewImage(mIsInPhotoMode)
|
||||
|
||||
private fun checkWhatsNewDialog() {
|
||||
arrayListOf<Release>().apply {
|
||||
add(Release(33, R.string.release_33))
|
||||
|
|
Loading…
Reference in New Issue