From 41a54289270aba50c199770a4c7da44a78553889 Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Mon, 28 Aug 2023 19:29:30 +0200
Subject: [PATCH] feat: Add basic Tasker AudioRecorder state
---
app/build.gradle | 2 +-
app/src/main/AndroidManifest.xml | 10 +
.../main/java/app/myzel394/alibi/Constants.kt | 2 +-
.../java/app/myzel394/alibi/MainActivity.kt | 2 -
.../app/myzel394/alibi/enums/RecorderState.kt | 10 +-
.../alibi/tasker/AudioRecorder/Activity.kt | 185 ++++++++++++++++++
.../alibi/tasker/AudioRecorder/Helper.kt | 10 +
.../myzel394/alibi/tasker/AudioRecorder/IO.kt | 22 +++
.../alibi/tasker/AudioRecorder/Runner.kt | 26 +++
app/src/main/res/values/strings.xml | 9 +-
10 files changed, 272 insertions(+), 6 deletions(-)
create mode 100644 app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Activity.kt
create mode 100644 app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Helper.kt
create mode 100644 app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/IO.kt
create mode 100644 app/src/main/java/app/myzel394/alibi/tasker/AudioRecorder/Runner.kt
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