Skip to content

Commit c2f7c40

Browse files
authored
Merge pull request #9 from critt/feature/audio
Feature/audio
2 parents 6b1da9e + ce19dff commit c2f7c40

8 files changed

Lines changed: 497 additions & 190 deletions

File tree

app/build.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,6 @@ dependencies {
7070
kapt(Dependencies.Hilt.ANDROID_COMPILER)
7171
implementation(Dependencies.Hilt.ANDROID)
7272

73-
//lifecycle (currently using this for Flow.asLiveData())
74-
implementation(Dependencies.Lifecycle.LIVEDATA)
75-
7673
//material theme
7774
implementation(Dependencies.Material.MATERIAL)
7875

app/src/main/java/com/critt/interp/ui/MainActivity.kt

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ import androidx.compose.ui.unit.dp
2727
import androidx.core.content.ContextCompat
2828
import androidx.lifecycle.viewmodel.compose.viewModel
2929
import com.critt.data.ApiResult
30-
import com.critt.domain.LanguageData
31-
import com.critt.domain.Speaker
3230
import com.critt.interp.ui.components.DropdownSelector
3331
import com.critt.ui_common.theme.InterpTheme
3432
import dagger.hilt.android.AndroidEntryPoint
@@ -48,39 +46,32 @@ class MainActivity : ComponentActivity() {
4846
@Composable
4947
fun TranslationGroup(
5048
translationText: String = "",
51-
speaker: Speaker,
52-
langSubject: LanguageData,
53-
langObject: LanguageData,
49+
textFromLanguage: String,
50+
textToLanguage: String,
5451
interactionSource: MutableInteractionSource? = null
5552
) {
5653
InterpTheme {
5754
Column(modifier = Modifier.padding(16.dp)) {
58-
LanguageDisplay(speaker, langSubject, langObject)
55+
LanguageDisplay(textFromLanguage, textToLanguage)
5956
Spacer(modifier = Modifier.height(12.dp))
6057
OutputCard(translationText, interactionSource)
6158
}
6259
}
6360
}
6461

6562
@Composable
66-
fun LanguageDisplay(speaker: Speaker, langSubject: LanguageData, langObject: LanguageData) {
63+
fun LanguageDisplay(textFromLanguage: String, textToLanguage: String) {
6764
InterpTheme {
6865
Row {
6966
Text(
70-
when (speaker) {
71-
Speaker.SUBJECT -> langObject.name
72-
Speaker.OBJECT -> langSubject.name
73-
},
67+
text = textFromLanguage,
7468
color = MaterialTheme.colorScheme.onBackground
7569
)
7670
Spacer(modifier = Modifier.width(8.dp))
7771
Text("", color = MaterialTheme.colorScheme.onBackground)
7872
Spacer(modifier = Modifier.width(8.dp))
7973
Text(
80-
when (speaker) {
81-
Speaker.SUBJECT -> langSubject.name
82-
Speaker.OBJECT -> langObject.name
83-
},
74+
text = textToLanguage,
8475
color = MaterialTheme.colorScheme.onBackground
8576
)
8677
}
@@ -141,22 +132,28 @@ class MainActivity : ComponentActivity() {
141132
val streamingState by viewModel.streamingState.collectAsState()
142133

143134
/** Local state -> LaunchedEffect -> ViewModel StateFlow */
144-
// Language selector for Subject speaker
135+
// Language selector for Subject Speaker (the user)
145136
var uiSelectedLangSubject by remember { mutableStateOf(langSubject) }
146137
LaunchedEffect(uiSelectedLangSubject) {
147138
viewModel.selectLangSubject(uiSelectedLangSubject)
148139
}
149-
// Language selector for Object speaker
140+
141+
// Language selector for Object Speaker (to whom the user is talking)
150142
var uiSelectedLangObject by remember { mutableStateOf(langObject) }
151143
LaunchedEffect(uiSelectedLangObject) {
152144
viewModel.selectLangObject(uiSelectedLangObject)
153145
}
154-
// Interaction source (pressing down on the lower OutputCard) for current Speaker
146+
147+
// Interaction source applied to the lower OutputCard
148+
// Allows the OutputCard facing the user to be used as an "I'm talking, now they are talking" toggle
149+
// The user holds it down while talking
150+
// This is how we know which language to translate the audio data into
155151
val interactionSource = remember { MutableInteractionSource() }
156152
val isPressed by interactionSource.collectIsPressedAsState()
157153
LaunchedEffect(isPressed) {
158154
viewModel.updateSpeaker(subjectSpeaking = isPressed)
159155
}
156+
160157
// Streaming state toggle (FAB)
161158
var toggleSideEffect by remember { mutableStateOf<(() -> Unit)?>(null) }
162159
LaunchedEffect(toggleSideEffect, hasRecordingPermission) {
@@ -180,18 +177,16 @@ class MainActivity : ComponentActivity() {
180177
.rotate(180F)
181178
) {
182179
TranslationGroup(
183-
translationText = translationObject,
184-
speaker = Speaker.OBJECT,
185-
langSubject = langSubject,
186-
langObject = langObject,
180+
translationText = translationSubject,
181+
textFromLanguage = langSubject.name,
182+
textToLanguage = langObject.name,
187183
)
188184
}
189185
Box(modifier = Modifier.weight(.40F)) {
190186
TranslationGroup(
191-
translationText = translationSubject,
192-
speaker = Speaker.SUBJECT,
193-
langSubject = langSubject,
194-
langObject = langObject,
187+
translationText = translationObject,
188+
textFromLanguage = langObject.name,
189+
textToLanguage = langSubject.name,
195190
interactionSource = interactionSource
196191
)
197192
}

0 commit comments

Comments
 (0)