diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt index 405dc49b7..2dd1b6c02 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt @@ -17,6 +17,8 @@ import androidx.compose.material3.Button import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.material3.adaptive.WindowAdaptiveInfo import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo @@ -25,6 +27,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester @@ -53,6 +56,7 @@ import com.aurora.store.compose.composables.TopAppBarComposable import com.aurora.store.compose.preview.AppPreviewProvider import com.aurora.store.viewmodel.details.AppDetailsViewModel import kotlinx.coroutines.android.awaitFrame +import kotlinx.coroutines.launch @Composable fun ManualDownloadScreen( @@ -102,6 +106,10 @@ private fun ScreenContent( windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() ) { + val coroutineScope = rememberCoroutineScope() + val snackBarHostState = remember { SnackbarHostState() } + val errorMessage = stringResource(R.string.manual_download_version_error) + val focusRequester = remember { FocusRequester() } var versionCode by remember { val initText = currentVersionCode.toString() @@ -120,7 +128,8 @@ private fun ScreenContent( navigationIcon = windowAdaptiveInfo.adaptiveNavigationIcon, onNavigateUp = onNavigateUp ) - } + }, + snackbarHost = { SnackbarHost(hostState = snackBarHostState) } ) { paddingValues -> Column( modifier = Modifier @@ -142,7 +151,13 @@ private fun ScreenContent( .fillMaxWidth() .focusRequester(focusRequester), value = versionCode, - onValueChange = { if (it.text.isDigitsOnly()) versionCode = it }, + onValueChange = { + if (it.text.isDigitsOnly()) { + versionCode = it + } else { + coroutineScope.launch { snackBarHostState.showSnackbar(errorMessage) } + } + }, shape = RoundedCornerShape(10.dp), singleLine = true, keyboardOptions = KeyboardOptions( diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5fbfff0fe..4e381763b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -394,6 +394,7 @@ Enter version code you wish to download + Version code can only contain digits FAQs