compose: details: Show error on entering non-digit characters for manual download

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-09-01 14:22:23 +08:00
parent 3a41491bf4
commit 5711e6db3b
2 changed files with 18 additions and 2 deletions

View File

@@ -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(

View File

@@ -394,6 +394,7 @@
<!-- ManualDownloadSheet -->
<string name="manual_download_hint">Enter version code you wish to download</string>
<string name="manual_download_version_error">Version code can only contain digits</string>
<!-- WelcomeFragment -->
<string name="faqs_title" translatable="false">FAQs</string>