diff --git a/app/src/conjugate/java/be/scri/activities/MainActivity.kt b/app/src/conjugate/java/be/scri/activities/MainActivity.kt index 07e74d0d0..61bfe1a3a 100644 --- a/app/src/conjugate/java/be/scri/activities/MainActivity.kt +++ b/app/src/conjugate/java/be/scri/activities/MainActivity.kt @@ -28,7 +28,7 @@ import be.scri.ui.common.bottombar.BottomBarScreen import be.scri.ui.theme.ScribeTheme /** - * The main entry point of the app. + * The main entry point of the Conjugate app. * Initializes theme settings, navigation, and sets up the main UI using Jetpack Compose. */ class MainActivity : ComponentActivity() { diff --git a/app/src/conjugate/java/be/scri/ui/screens/SampleScreen.kt b/app/src/conjugate/java/be/scri/ui/screens/SampleScreen.kt deleted file mode 100644 index 08dfa9a78..000000000 --- a/app/src/conjugate/java/be/scri/ui/screens/SampleScreen.kt +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -package be.scri.ui.screens - -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier - -@Composable -fun SampleScreen(modifier: Modifier = Modifier) { - MaterialTheme { - Box( - modifier = modifier.fillMaxSize(), - contentAlignment = Alignment.Center, - ) { - Text( - text = "Conjugate App", - style = MaterialTheme.typography.bodyLarge, - ) - } - } -} diff --git a/app/src/main/java/be/scri/App.kt b/app/src/main/java/be/scri/App.kt index c03b7513b..402497bea 100644 --- a/app/src/main/java/be/scri/App.kt +++ b/app/src/main/java/be/scri/App.kt @@ -15,15 +15,12 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel @@ -36,6 +33,7 @@ import be.scri.navigation.Screen import be.scri.ui.common.appcomponents.HintDialog import be.scri.ui.common.bottombar.BottomBarScreen import be.scri.ui.common.bottombar.ScribeBottomBar +import be.scri.ui.screens.ConjugateScreen import be.scri.ui.screens.DefaultCurrencySymbolScreen import be.scri.ui.screens.InstallationScreen import be.scri.ui.screens.LanguageSettingsScreen @@ -170,13 +168,12 @@ fun ScribeApp( } is BottomBarScreen.Conjugate -> { Box( - modifier = - Modifier.fillMaxSize(), - contentAlignment = Alignment.Center, + modifier = Modifier.fillMaxSize(), ) { - Text( - text = "Conjugate App", - style = MaterialTheme.typography.headlineMedium, + ConjugateScreen( + onNavigateToDownloadData = { + navController.navigate("download_data") + }, ) } HandleBackPress(pagerState, coroutineScope) diff --git a/app/src/main/java/be/scri/ui/screens/ConjugateScreen.kt b/app/src/main/java/be/scri/ui/screens/ConjugateScreen.kt new file mode 100644 index 000000000..4f7a67cf1 --- /dev/null +++ b/app/src/main/java/be/scri/ui/screens/ConjugateScreen.kt @@ -0,0 +1,137 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package be.scri.ui.screens + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import be.scri.R +import be.scri.ui.common.ScribeBaseScreen + +/** + * The conjugate page of the application with details for downloading conjugation data. + */ +@Composable +fun ConjugateScreen( + onNavigateToDownloadData: () -> Unit, + modifier: Modifier = Modifier, +) { + val localConfiguration = LocalConfiguration.current + val scrollState = rememberScrollState() + + val dynamicSpacing = localConfiguration.screenHeightDp.dp * 0.1f + ScribeBaseScreen { + Column( + modifier = + modifier + .fillMaxSize() + .background(MaterialTheme.colorScheme.background) + .padding(horizontal = Dimensions.PaddingMedium) + .padding(vertical = Dimensions.PaddingLarge) + .verticalScroll(scrollState), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Spacer(modifier = Modifier.height(dynamicSpacing)) + + Image( + painter = painterResource(id = R.drawable.scribe_logo), + contentDescription = stringResource(R.string.app_launcher_name), + modifier = + Modifier + .align(Alignment.CenterHorizontally) + .padding(bottom = 16.dp) + .width(248.dp) + .height(122.dp), + contentScale = ContentScale.Fit, + ) + Text( + text = stringResource(R.string.i18n_app_download_menu_option_conjugate_title), + color = MaterialTheme.colorScheme.onSurface, + fontWeight = FontWeight.Bold, + style = MaterialTheme.typography.headlineMedium, + modifier = + Modifier + .padding( + start = 4.dp, + top = Dimensions.PaddingLarge, + bottom = Dimensions.PaddingSmall, + ).align(Alignment.Start), + ) + Card( + modifier = + Modifier + .fillMaxWidth() + .padding(bottom = Dimensions.PaddingSmall) + .clickable { + onNavigateToDownloadData() + }, + shape = RoundedCornerShape(dimensionResource(id = R.dimen.rounded_corner_radius_standard)), + colors = + CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.surface, + ), + ) { + Column( + modifier = + Modifier.Companion + .padding(Dimensions.PaddingMedium) + .fillMaxWidth(), + ) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = stringResource(R.string.i18n_app_download_menu_option_conjugate_download_data_start), + fontWeight = FontWeight.Bold, + color = MaterialTheme.colorScheme.onSurface, + style = MaterialTheme.typography.labelMedium, + ) + Image( + painter = painterResource(R.drawable.right_arrow), + contentDescription = "Right Arrow", + modifier = + Modifier.Companion + .size(Dimensions.IconSize) + .alpha(Alpha.HIGH), + ) + } + Text( + text = stringResource(R.string.i18n_app_download_menu_option_conjugate_description), + color = MaterialTheme.colorScheme.onSurface.copy(alpha = Alpha.MEDIUM), + style = MaterialTheme.typography.bodySmall, + ) + } + } + } + } +} diff --git a/app/src/main/java/be/scri/ui/screens/settings/SettingsScreen.kt b/app/src/main/java/be/scri/ui/screens/settings/SettingsScreen.kt index d87a0c3c3..455853f4f 100644 --- a/app/src/main/java/be/scri/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/be/scri/ui/screens/settings/SettingsScreen.kt @@ -21,6 +21,8 @@ import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.viewmodel.compose.viewModel import be.scri.R +import be.scri.helpers.AppFlavor +import be.scri.helpers.FlavorProvider import be.scri.ui.common.ScribeBaseScreen import be.scri.ui.common.appcomponents.InstallKeyboardButton import be.scri.ui.common.components.ItemCardContainerWithTitle @@ -108,6 +110,8 @@ fun SettingsScreen( ) } + val isKeyboardsApp = FlavorProvider.get() == AppFlavor.KEYBOARDS + ScribeBaseScreen( pageTitle = stringResource(R.string.i18n_app_settings_title), onBackNavigation = {}, @@ -121,20 +125,22 @@ fun SettingsScreen( ) } - item { - if (isKeyboardInstalled) { - ItemCardContainerWithTitle( - title = stringResource(R.string.i18n_app_settings_keyboard_title), - cardItemsList = ScribeItemList(installedKeyboardList), - isDivider = true, - modifier = Modifier.padding(top = 8.dp), - ) - } else { - InstallKeyboardButton( - onClick = { - SettingsUtil.navigateToKeyboardSettings(context) - }, - ) + if (isKeyboardsApp) { + item { + if (isKeyboardInstalled) { + ItemCardContainerWithTitle( + title = stringResource(R.string.i18n_app_settings_keyboard_title), + cardItemsList = ScribeItemList(installedKeyboardList), + isDivider = true, + modifier = Modifier.padding(top = 8.dp), + ) + } else { + InstallKeyboardButton( + onClick = { + SettingsUtil.navigateToKeyboardSettings(context) + }, + ) + } } }