mirror of
https://github.com/SimpleMobileTools/Simple-Camera.git
synced 2025-06-27 09:02:59 +02:00
save medias with location data if it's allowed
This commit is contained in:
@ -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) }
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user