Skip to content

Commit 5053997

Browse files
committed
[b/417361559] Replace Toast with Snackbar in demo composition
This PR addresses the TODO in `CompositionPreviewActivity` by replacing the `Toast` with a `Snackbar`.
1 parent 1d976ad commit 5053997

File tree

3 files changed

+21
-16
lines changed

3 files changed

+21
-16
lines changed

demos/composition/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ dependencies {
6969
implementation project(modulePrefix + 'lib-ui')
7070
implementation project(modulePrefix + 'lib-ui-compose')
7171
implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion
72-
implementation 'androidx.lifecycle:lifecycle-livedata:' + androidxLifecycleVersion
7372
implementation 'androidx.lifecycle:lifecycle-viewmodel:' + androidxLifecycleVersion
7473
implementation 'androidx.activity:activity-compose:1.9.0'
7574
implementation platform('androidx.compose:compose-bom:2024.12.01')

demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.kt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import android.os.Build.VERSION.SDK_INT
2020
import android.os.Bundle
2121
import android.os.LocaleList
2222
import android.util.Log
23-
import android.widget.Toast
2423
import androidx.activity.compose.BackHandler
2524
import androidx.activity.compose.setContent
2625
import androidx.activity.enableEdgeToEdge
@@ -61,6 +60,8 @@ import androidx.compose.material3.MaterialTheme
6160
import androidx.compose.material3.OutlinedButton
6261
import androidx.compose.material3.RadioButton
6362
import androidx.compose.material3.Scaffold
63+
import androidx.compose.material3.SnackbarHost
64+
import androidx.compose.material3.SnackbarHostState
6465
import androidx.compose.material3.Switch
6566
import androidx.compose.material3.Text
6667
import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
@@ -70,6 +71,7 @@ import androidx.compose.material3.adaptive.layout.SupportingPaneScaffold
7071
import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole
7172
import androidx.compose.material3.adaptive.navigation.rememberSupportingPaneScaffoldNavigator
7273
import androidx.compose.runtime.Composable
74+
import androidx.compose.runtime.LaunchedEffect
7375
import androidx.compose.runtime.collectAsState
7476
import androidx.compose.runtime.getValue
7577
import androidx.compose.runtime.mutableStateOf
@@ -125,17 +127,22 @@ class CompositionPreviewActivity : AppCompatActivity() {
125127
CompositionPreviewViewModelFactory(application, compositionLayout)
126128
}
127129

128-
// TODO(b/417361559): Replace Toast with Snackbar
129-
viewModel.toastMessage.observe(this) { newMessage ->
130-
newMessage?.let {
131-
viewModel.toastMessage.value = null
132-
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
130+
setContent {
131+
val snackbarHostState = remember { SnackbarHostState() }
132+
val snackbarMessage = viewModel.snackbarMessage
133+
134+
LaunchedEffect(snackbarMessage) {
135+
if (snackbarMessage != null) {
136+
snackbarHostState.showSnackbar(snackbarMessage)
137+
viewModel.snackbarMessage = null
138+
}
133139
}
134-
}
135140

136-
setContent {
137141
CompositionDemoTheme {
138-
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
142+
Scaffold(
143+
modifier = Modifier.fillMaxSize(),
144+
snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
145+
) { innerPadding ->
139146
val scope = rememberCoroutineScope()
140147
val navigator = rememberSupportingPaneScaffoldNavigator()
141148

demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewViewModel.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import androidx.compose.runtime.mutableStateListOf
2424
import androidx.compose.runtime.mutableStateOf
2525
import androidx.compose.runtime.setValue
2626
import androidx.lifecycle.AndroidViewModel
27-
import androidx.lifecycle.MutableLiveData
2827
import androidx.lifecycle.ViewModel
2928
import androidx.lifecycle.ViewModelProvider
3029
import androidx.media3.common.Effect
@@ -79,7 +78,7 @@ class CompositionPreviewViewModel(application: Application, val compositionLayou
7978
var applyEffects: MutableState<Boolean>,
8079
)
8180

82-
var toastMessage = MutableLiveData<String?>(null)
81+
var snackbarMessage by mutableStateOf<String?>(null)
8382

8483
var compositionPlayer by mutableStateOf(createCompositionPlayer())
8584

@@ -143,7 +142,7 @@ class CompositionPreviewViewModel(application: Application, val compositionLayou
143142

144143
fun addItem(index: Int) {
145144
selectedMediaItems.add(mediaItemOptions[index].copy(applyEffects = mutableStateOf(false)))
146-
toastMessage.value = "Added item: ${mediaItemOptions[index].title}"
145+
snackbarMessage = "Added item: ${mediaItemOptions[index].title}"
147146
}
148147

149148
fun removeItem(index: Int) {
@@ -173,7 +172,7 @@ class CompositionPreviewViewModel(application: Application, val compositionLayou
173172
outputFile =
174173
createExternalCacheFile("composition-preview-" + Clock.DEFAULT.elapsedRealtime() + ".mp4")
175174
} catch (e: IOException) {
176-
toastMessage.value = "Aborting export! Unable to create output file: $e"
175+
snackbarMessage = "Aborting export! Unable to create output file: $e"
177176
Log.e(TAG, "Aborting export! Unable to create output file: ", e)
178177
return
179178
}
@@ -234,7 +233,7 @@ class CompositionPreviewViewModel(application: Application, val compositionLayou
234233
exportException: ExportException,
235234
) {
236235
exportStopwatch.stop()
237-
toastMessage.value = "Export error: $exportException"
236+
snackbarMessage = "Export error: $exportException"
238237
Log.e(TAG, "Export error", exportException)
239238
Log.d(TAG, DebugTraceUtil.generateTraceSummary())
240239
exportResultInformation = EXPORT_ERROR_MESSAGE
@@ -410,7 +409,7 @@ class CompositionPreviewViewModel(application: Application, val compositionLayou
410409
player.addListener(
411410
object : Player.Listener {
412411
override fun onPlayerError(error: PlaybackException) {
413-
toastMessage.value = "Preview error: $error"
412+
snackbarMessage = "Preview error: $error"
414413
Log.e(TAG, "Preview error", error)
415414
}
416415
}

0 commit comments

Comments
 (0)