mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-18 23:05:26 +02:00
fix: Properly assign batchesFolder
This commit is contained in:
parent
448108a974
commit
89baa35ed7
@ -6,21 +6,21 @@ import android.media.AudioDeviceInfo
|
|||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
import android.media.MediaRecorder
|
import android.media.MediaRecorder
|
||||||
import android.media.MediaRecorder.OnErrorListener
|
import android.media.MediaRecorder.OnErrorListener
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import androidx.compose.material3.SnackbarDuration
|
|
||||||
import androidx.documentfile.provider.DocumentFile
|
|
||||||
import app.myzel394.alibi.db.AudioRecorderSettings
|
import app.myzel394.alibi.db.AudioRecorderSettings
|
||||||
import app.myzel394.alibi.db.RecordingInformation
|
import app.myzel394.alibi.db.RecordingInformation
|
||||||
import app.myzel394.alibi.enums.RecorderState
|
import app.myzel394.alibi.enums.RecorderState
|
||||||
|
import app.myzel394.alibi.helpers.AudioBatchesFolder
|
||||||
import app.myzel394.alibi.helpers.BatchesFolder
|
import app.myzel394.alibi.helpers.BatchesFolder
|
||||||
import app.myzel394.alibi.ui.utils.MicrophoneInfo
|
import app.myzel394.alibi.ui.utils.MicrophoneInfo
|
||||||
import java.lang.IllegalStateException
|
import java.lang.IllegalStateException
|
||||||
|
|
||||||
class AudioRecorderService :
|
class AudioRecorderService :
|
||||||
IntervalRecorderService<AudioRecorderService.Settings, RecordingInformation>() {
|
IntervalRecorderService<AudioRecorderService.Settings, RecordingInformation>() {
|
||||||
|
override var batchesFolder: BatchesFolder = AudioBatchesFolder.viaInternalFolder(this)
|
||||||
|
|
||||||
var amplitudesAmount = 1000
|
var amplitudesAmount = 1000
|
||||||
var selectedMicrophone: MicrophoneInfo? = null
|
var selectedMicrophone: MicrophoneInfo? = null
|
||||||
|
|
||||||
|
@ -1,20 +1,6 @@
|
|||||||
package app.myzel394.alibi.services
|
package app.myzel394.alibi.services
|
||||||
|
|
||||||
import android.media.MediaRecorder
|
|
||||||
import android.net.Uri
|
|
||||||
import androidx.documentfile.provider.DocumentFile
|
|
||||||
import app.myzel394.alibi.dataStore
|
|
||||||
import app.myzel394.alibi.db.AudioRecorderSettings
|
|
||||||
import app.myzel394.alibi.db.RecordingInformation
|
|
||||||
import app.myzel394.alibi.helpers.AudioRecorderExporter
|
|
||||||
import app.myzel394.alibi.helpers.BatchesFolder
|
import app.myzel394.alibi.helpers.BatchesFolder
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.SupervisorJob
|
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import org.w3c.dom.DocumentFragment
|
|
||||||
import java.io.File
|
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
import java.util.concurrent.ScheduledExecutorService
|
import java.util.concurrent.ScheduledExecutorService
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
@ -28,7 +14,7 @@ abstract class IntervalRecorderService<S : IntervalRecorderService.Settings, I>
|
|||||||
|
|
||||||
private lateinit var cycleTimer: ScheduledExecutorService
|
private lateinit var cycleTimer: ScheduledExecutorService
|
||||||
|
|
||||||
var batchesFolder: BatchesFolder = BatchesFolder.viaInternalFolder(this)
|
abstract var batchesFolder: BatchesFolder
|
||||||
|
|
||||||
var onCustomOutputFolderNotAccessible: () -> Unit = {}
|
var onCustomOutputFolderNotAccessible: () -> Unit = {}
|
||||||
|
|
||||||
@ -54,10 +40,8 @@ abstract class IntervalRecorderService<S : IntervalRecorderService.Settings, I>
|
|||||||
override fun start() {
|
override fun start() {
|
||||||
batchesFolder.initFolders()
|
batchesFolder.initFolders()
|
||||||
if (!batchesFolder.checkIfFolderIsAccessible()) {
|
if (!batchesFolder.checkIfFolderIsAccessible()) {
|
||||||
batchesFolder =
|
|
||||||
BatchesFolder.viaInternalFolder(this@IntervalRecorderService)
|
|
||||||
batchesFolder.initFolders()
|
|
||||||
onCustomOutputFolderNotAccessible()
|
onCustomOutputFolderNotAccessible()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
createTimer()
|
createTimer()
|
||||||
|
@ -13,6 +13,8 @@ import androidx.camera.video.VideoCapture
|
|||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import app.myzel394.alibi.db.AppSettings
|
import app.myzel394.alibi.db.AppSettings
|
||||||
import app.myzel394.alibi.db.RecordingInformation
|
import app.myzel394.alibi.db.RecordingInformation
|
||||||
|
import app.myzel394.alibi.helpers.BatchesFolder
|
||||||
|
import app.myzel394.alibi.helpers.VideoBatchesFolder
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@ -23,6 +25,8 @@ import kotlinx.coroutines.withContext
|
|||||||
|
|
||||||
class VideoRecorderService :
|
class VideoRecorderService :
|
||||||
IntervalRecorderService<VideoRecorderService.Settings, RecordingInformation>() {
|
IntervalRecorderService<VideoRecorderService.Settings, RecordingInformation>() {
|
||||||
|
override var batchesFolder: BatchesFolder = VideoBatchesFolder.viaInternalFolder(this)
|
||||||
|
|
||||||
private val job = SupervisorJob()
|
private val job = SupervisorJob()
|
||||||
private val scope = CoroutineScope(Dispatchers.IO + job)
|
private val scope = CoroutineScope(Dispatchers.IO + job)
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ import androidx.lifecycle.ViewModel
|
|||||||
import app.myzel394.alibi.db.AppSettings
|
import app.myzel394.alibi.db.AppSettings
|
||||||
import app.myzel394.alibi.db.RecordingInformation
|
import app.myzel394.alibi.db.RecordingInformation
|
||||||
import app.myzel394.alibi.enums.RecorderState
|
import app.myzel394.alibi.enums.RecorderState
|
||||||
|
import app.myzel394.alibi.helpers.AudioBatchesFolder
|
||||||
import app.myzel394.alibi.helpers.AudioRecorderExporter
|
import app.myzel394.alibi.helpers.AudioRecorderExporter
|
||||||
import app.myzel394.alibi.helpers.BatchesFolder
|
import app.myzel394.alibi.helpers.BatchesFolder
|
||||||
import app.myzel394.alibi.services.AudioRecorderService
|
import app.myzel394.alibi.services.AudioRecorderService
|
||||||
@ -67,9 +68,9 @@ class AudioRecorderModel :
|
|||||||
|
|
||||||
override fun startRecording(context: Context, settings: AppSettings) {
|
override fun startRecording(context: Context, settings: AppSettings) {
|
||||||
batchesFolder = if (settings.audioRecorderSettings.saveFolder == null)
|
batchesFolder = if (settings.audioRecorderSettings.saveFolder == null)
|
||||||
BatchesFolder.viaInternalFolder(context)
|
AudioBatchesFolder.viaInternalFolder(context)
|
||||||
else
|
else
|
||||||
BatchesFolder.viaCustomFolder(
|
AudioBatchesFolder.viaCustomFolder(
|
||||||
context,
|
context,
|
||||||
DocumentFile.fromTreeUri(
|
DocumentFile.fromTreeUri(
|
||||||
context,
|
context,
|
||||||
@ -95,6 +96,8 @@ class AudioRecorderModel :
|
|||||||
recorderService!!.changeMicrophone(microphone)
|
recorderService!!.changeMicrophone(microphone)
|
||||||
|
|
||||||
if (microphone == null) {
|
if (microphone == null) {
|
||||||
|
// Microphone was reset to default,
|
||||||
|
// default is always assumed to be connected
|
||||||
microphoneStatus = MicrophoneConnectivityStatus.CONNECTED
|
microphoneStatus = MicrophoneConnectivityStatus.CONNECTED
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,10 @@ abstract class BaseRecorderModel<S : IntervalRecorderService.Settings, I, T : In
|
|||||||
recorder.onError = {
|
recorder.onError = {
|
||||||
onError()
|
onError()
|
||||||
}
|
}
|
||||||
recorder.batchesFolder = batchesFolder ?: recorder.batchesFolder
|
|
||||||
|
if (batchesFolder != null) {
|
||||||
|
recorder.batchesFolder = batchesFolder!!
|
||||||
|
}
|
||||||
|
|
||||||
// Rest should be initialized from the child class
|
// Rest should be initialized from the child class
|
||||||
onServiceConnected(recorder)
|
onServiceConnected(recorder)
|
||||||
|
@ -8,7 +8,7 @@ class VideoRecorderModel :
|
|||||||
override val intentClass = VideoRecorderService::class.java
|
override val intentClass = VideoRecorderService::class.java
|
||||||
|
|
||||||
override fun onServiceConnected(service: VideoRecorderService) {
|
override fun onServiceConnected(service: VideoRecorderService) {
|
||||||
service.settings = VideoRecorderService.Settings.from()
|
service.settings = VideoRecorderService.Settings.from(settings)
|
||||||
|
|
||||||
service.clearAllRecordings()
|
service.clearAllRecordings()
|
||||||
service.startRecording()
|
service.startRecording()
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package app.myzel394.alibi.ui.screens
|
package app.myzel394.alibi.ui.screens
|
||||||
|
|
||||||
import android.content.ComponentName
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.IBinder
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
@ -12,19 +9,15 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import app.myzel394.alibi.db.AppSettings
|
import app.myzel394.alibi.db.AppSettings
|
||||||
import app.myzel394.alibi.services.AudioRecorderService
|
|
||||||
import app.myzel394.alibi.services.RecorderService
|
|
||||||
import app.myzel394.alibi.services.VideoService
|
|
||||||
import app.myzel394.alibi.ui.models.VideoRecorderModel
|
import app.myzel394.alibi.ui.models.VideoRecorderModel
|
||||||
|
|
||||||
|
@SuppressLint("NewApi")
|
||||||
@Composable
|
@Composable
|
||||||
fun POCVideo(
|
fun POCVideo(
|
||||||
videoRecorder: VideoRecorderModel,
|
videoRecorder: VideoRecorderModel,
|
||||||
@ -46,6 +39,8 @@ fun POCVideo(
|
|||||||
videoRecorder.startRecording(context, settings)
|
videoRecorder.startRecording(context, settings)
|
||||||
} else {
|
} else {
|
||||||
videoRecorder.stopRecording(context)
|
videoRecorder.stopRecording(context)
|
||||||
|
|
||||||
|
val folder = "content://media/external/video/media/DCIM/Recordings"
|
||||||
}
|
}
|
||||||
|
|
||||||
started = !started
|
started = !started
|
||||||
|
Loading…
x
Reference in New Issue
Block a user