save medias with location data if it's allowed

This commit is contained in:
fatih ergin
2023-07-24 01:54:34 +03:00
parent cc41804745
commit e957ce607a
4 changed files with 121 additions and 12 deletions

View File

@ -10,8 +10,6 @@ import android.util.Rational
import android.util.Size
import android.view.*
import android.view.GestureDetector.SimpleOnGestureListener
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.*
import androidx.camera.core.ImageCapture.*
import androidx.camera.lifecycle.ProcessCameraProvider
@ -34,11 +32,12 @@ import com.simplemobiletools.camera.models.CaptureMode
import com.simplemobiletools.camera.models.MediaOutput
import com.simplemobiletools.camera.models.MySize
import com.simplemobiletools.camera.models.ResolutionOption
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
class CameraXPreview(
private val activity: AppCompatActivity,
private val activity: BaseSimpleActivity,
private val previewView: PreviewView,
private val mediaSoundHelper: MediaSoundHelper,
private val mediaOutputHelper: MediaOutputHelper,
@ -122,6 +121,7 @@ class CameraXPreview(
private var isPhotoCapture = initInPhotoMode
private var lastRotation = 0
private var lastCameraStartTime = 0L
private var simpleLocationManager: SimpleLocationManager? = null
init {
bindToLifeCycle()
@ -351,6 +351,21 @@ class CameraXPreview(
}
}
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
if (config.saveMediaLocation) {
if (simpleLocationManager == null) {
simpleLocationManager = SimpleLocationManager(activity)
}
simpleLocationManager?.requestLocationUpdates()
}
}
override fun onPause(owner: LifecycleOwner) {
super.onPause(owner)
simpleLocationManager?.dropLocationUpdates()
}
override fun onStop(owner: LifecycleOwner) {
orientationEventListener.disable()
}
@ -473,6 +488,9 @@ class CameraXPreview(
val metadata = Metadata().apply {
isReversedHorizontal = isFrontCameraInUse() && config.flipPhotos
if (config.saveMediaLocation) {
location = simpleLocationManager?.getLocation()
}
}
val mediaOutput = mediaOutputHelper.getImageMediaOutput()
@ -572,16 +590,26 @@ class CameraXPreview(
val recording = when (val mediaOutput = mediaOutputHelper.getVideoMediaOutput()) {
is MediaOutput.FileDescriptorMediaOutput -> {
FileDescriptorOutputOptions.Builder(mediaOutput.fileDescriptor).build()
.let { videoCapture!!.output.prepareRecording(activity, it) }
FileDescriptorOutputOptions.Builder(mediaOutput.fileDescriptor).apply {
if (config.saveMediaLocation) {
setLocation(simpleLocationManager?.getLocation())
}
}.build().let { videoCapture!!.output.prepareRecording(activity, it) }
}
is MediaOutput.FileMediaOutput -> {
FileOutputOptions.Builder(mediaOutput.file).build()
.let { videoCapture!!.output.prepareRecording(activity, it) }
FileOutputOptions.Builder(mediaOutput.file).apply {
if (config.saveMediaLocation) {
setLocation(simpleLocationManager?.getLocation())
}
}.build().let { videoCapture!!.output.prepareRecording(activity, it) }
}
is MediaOutput.MediaStoreOutput -> {
MediaStoreOutputOptions.Builder(contentResolver, mediaOutput.contentUri).setContentValues(mediaOutput.contentValues).build()
.let { videoCapture!!.output.prepareRecording(activity, it) }
MediaStoreOutputOptions.Builder(contentResolver, mediaOutput.contentUri).apply {
setContentValues(mediaOutput.contentValues)
if (config.saveMediaLocation) {
setLocation(simpleLocationManager?.getLocation())
}
}.build().let { videoCapture!!.output.prepareRecording(activity, it) }
}
}