diff --git a/app/build.gradle b/app/build.gradle index 0285e79..2f223f2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,5 +128,5 @@ dependencies { implementation 'com.maxkeppeler.sheets-compose-dialogs:list:1.2.0' implementation 'com.maxkeppeler.sheets-compose-dialogs:input:1.2.0' - implementation 'com.joaomgcd:taskerpluginlibrary:0.4.4' + implementation 'com.joaomgcd:taskerpluginlibrary:0.4.7' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8998103..6c28c84 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,6 +30,16 @@ + + + + + + { + override val inputForTasker: TaskerInput + get() = TaskerInput(AudioRecorderInput(RecorderState.IDLE.name)) + + override val context: Context + get() = applicationContext + + override fun assignFromInput(input: TaskerInput) { + println("assign") + } + + override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { + super.onCreate(savedInstanceState, persistentState) + + println("create") + } + + override fun onStart() { + super.onStart() + + WindowCompat.setDecorFitsSystemWindows(window, false) + + setContent { + var selectedState by remember { mutableStateOf(RecorderState.IDLE) } + + AlibiTheme { + Column( + modifier = Modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + .padding(horizontal = 16.dp, vertical = 32.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceBetween, + ) { + Box {} + Text( + "Configure Audio Recorder State", + style = MaterialTheme.typography.headlineLarge, + color = MaterialTheme.colorScheme.onBackground, + textAlign = TextAlign.Center, + ) + Box {} + + var opened by remember { mutableStateOf(false) } + Column { + Text( + getString(R.string.ui_audioRecorder_recorderState_taskerConfiguration_description), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onBackground, + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + getString(R.string.ui_audioRecorder_recorderState_taskerConfiguration_state_label), + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.secondary, + ) + Spacer(modifier = Modifier.height(4.dp)) + Box { + Button( + onClick = { + opened = true + }, + colors = ButtonDefaults.filledTonalButtonColors( + containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation( + 4.dp + ), + ), + shape = MaterialTheme.shapes.small, + ) { + Text( + getString(ENUM_LABEL_MAP[selectedState]!!) + ) + } + DropdownMenu( + expanded = opened, + onDismissRequest = { opened = false }, + ) { + RecorderState.values().forEach { state -> + DropdownMenuItem( + onClick = { + opened = false + + selectedState = state + }, + text = { + val resourceId = ENUM_LABEL_MAP[state]!! + val text = getString(resourceId) + + Text(text) + } + ) + } + } + } + } + + Button( + modifier = Modifier + .fillMaxWidth() + .height(BIG_PRIMARY_BUTTON_SIZE), + onClick = { + val helper = AudioRecorderHelper(this@AudioRecorderActivity) + + helper.addOutputs( + TaskerInput( + AudioRecorderInput() + ), + TaskerOutputsForConfig().apply { + add( + TaskerOutputForConfig(AudioRecorderOutput.VAR_STATE, selectedState.name) + ) + } + ) + }, + ) { + Icon( + Icons.Default.Check, + contentDescription = null, + modifier = Modifier.size(ButtonDefaults.IconSize), + ) + Spacer(modifier = Modifier.width(ButtonDefaults.IconSpacing)) + Text( + stringResource(id = R.string.dialog_close_neutral_label) + ) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Helper.kt b/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Helper.kt new file mode 100644 index 0000000..d2f9f0e --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Helper.kt @@ -0,0 +1,10 @@ +package app.myzel394.alibi.tasker.AudioRecorder + +import com.joaomgcd.taskerpluginlibrary.config.TaskerPluginConfig +import com.joaomgcd.taskerpluginlibrary.config.TaskerPluginConfigHelper + +class AudioRecorderHelper(config: TaskerPluginConfig) : TaskerPluginConfigHelper(config) { + override val runnerClass = AudioRecorderRunner::class.java + override val inputClass = AudioRecorderInput::class.java + override val outputClass = AudioRecorderOutput::class.java +} \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/IO.kt b/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/IO.kt new file mode 100644 index 0000000..bc894f2 --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/IO.kt @@ -0,0 +1,22 @@ +package app.myzel394.alibi.tasker.AudioRecorder + +import app.myzel394.alibi.R +import app.myzel394.alibi.enums.RecorderState +import com.joaomgcd.taskerpluginlibrary.input.TaskerInputField +import com.joaomgcd.taskerpluginlibrary.input.TaskerInputRoot +import com.joaomgcd.taskerpluginlibrary.output.TaskerOutputObject +import com.joaomgcd.taskerpluginlibrary.output.TaskerOutputVariable + +@TaskerInputRoot +class AudioRecorderInput( + @field:TaskerInputField("state", labelResIdName = "ui_audioRecorder_recordingState_label") val state: String? = null +) + +@TaskerOutputObject +class AudioRecorderOutput { + @get:TaskerOutputVariable(VAR_STATE, labelResIdName = "ui_audioRecorder_recordingState_label") var state: String = RecorderState.IDLE.name + + companion object { + const val VAR_STATE = "state" + } +} diff --git a/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Runner.kt b/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Runner.kt new file mode 100644 index 0000000..38d9316 --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Runner.kt @@ -0,0 +1,26 @@ +package app.myzel394.alibi.tasker.AudioRecorder + +import android.content.Context +import app.myzel394.alibi.enums.RecorderState +import com.joaomgcd.taskerpluginlibrary.condition.TaskerPluginRunnerConditionState +import com.joaomgcd.taskerpluginlibrary.extensions.requestQuery +import com.joaomgcd.taskerpluginlibrary.input.TaskerInput +import com.joaomgcd.taskerpluginlibrary.runner.TaskerPluginResultCondition +import com.joaomgcd.taskerpluginlibrary.runner.TaskerPluginResultConditionSatisfied +import com.joaomgcd.taskerpluginlibrary.runner.TaskerPluginResultConditionUnsatisfied + +class AudioRecorderRunner : TaskerPluginRunnerConditionState() { + override fun getSatisfiedCondition(context: Context, input: TaskerInput, update: Unit?): TaskerPluginResultCondition { + return if (state.name == input.regular.state) + TaskerPluginResultConditionSatisfied(context) + else TaskerPluginResultConditionUnsatisfied() + } + + companion object { + var state: RecorderState = RecorderState.IDLE + fun change(context: Context, newState: RecorderState) { + state = newState + AudioRecorderActivity::class.java.requestQuery(context) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 15ab739..64d3aec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -60,8 +60,15 @@ Auto Recording paused Audio Recording has been paused - An error occured + An error occurred Alibi encountered an error during recording. Would you like to try saving the recording? Language Change + + Audio Recorder State + Idle + Recording + Paused + Configure what state you want to check for + Continue when Audio Recorder is... \ No newline at end of file