Skip to content

Commit

Permalink
Update project
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelbel committed Feb 11, 2024
1 parent 70abd16 commit 767a85e
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,13 @@ package org.michaelbel.movies.settings.ui

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.widthIn
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
Expand All @@ -16,13 +21,16 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
import androidx.constraintlayout.compose.Dimension
import org.michaelbel.movies.common.localization.model.AppLanguage
import org.michaelbel.movies.common.theme.AppTheme
import org.michaelbel.movies.settings.ktx.languageText
import org.michaelbel.movies.settings_impl.R
import org.michaelbel.movies.ui.accessibility.MoviesContentDescription
import org.michaelbel.movies.ui.icons.MoviesIcons
import org.michaelbel.movies.ui.preview.DevicePreviews
import org.michaelbel.movies.ui.preview.provider.LanguagePreviewParameterProvider
import org.michaelbel.movies.ui.theme.MoviesTheme
Expand All @@ -33,34 +41,37 @@ fun SettingsLanguageBox(
onLanguageSelect: (AppLanguage) -> Unit,
modifier: Modifier = Modifier,
) {
var languageDialog: Boolean by remember { mutableStateOf(false) }

if (languageDialog) {
SettingLanguageDialog(
currentLanguage = currentLanguage,
onLanguageSelect = onLanguageSelect,
onDismissRequest = {
languageDialog = false
}
)
}
var languageDropdown by remember { mutableStateOf(false) }

ConstraintLayout(
modifier = modifier
.clickable {
languageDialog = true
}
.clickable { languageDropdown = true }
.testTag("ConstraintLayout")
) {
val (title, value) = createRefs()
val (icon, title, value) = createRefs()

Icon(
imageVector = MoviesIcons.Language,
contentDescription = stringResource(MoviesContentDescription.LanguageIcon),
modifier = Modifier
.constrainAs(icon) {
width = Dimension.wrapContent
height = Dimension.wrapContent
start.linkTo(parent.start, 16.dp)
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
}
.testTag("Icon"),
tint = MaterialTheme.colorScheme.onPrimaryContainer
)

Text(
text = stringResource(R.string.settings_language),
modifier = Modifier
.constrainAs(title) {
width = Dimension.wrapContent
height = Dimension.wrapContent
start.linkTo(parent.start, 16.dp)
start.linkTo(icon.end, 8.dp)
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
}
Expand All @@ -70,8 +81,7 @@ fun SettingsLanguageBox(
)
)

Text(
text = currentLanguage.languageText,
Box(
modifier = Modifier
.constrainAs(value) {
width = Dimension.wrapContent
Expand All @@ -81,10 +91,33 @@ fun SettingsLanguageBox(
bottom.linkTo(parent.bottom)
}
.testTag("ValueText"),
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.primary
) {
Text(
text = currentLanguage.languageText,
style = MaterialTheme.typography.bodyLarge.copy(
color = MaterialTheme.colorScheme.primary
)
)
)

DropdownMenu(
expanded = languageDropdown,
onDismissRequest = { languageDropdown = false },
offset = DpOffset(x = 0.dp, y = (-48).dp),
modifier = Modifier.widthIn(min = 112.dp, max = 280.dp)
) {
AppLanguage.VALUES.forEach { appLanguage ->
DropdownMenuItem(
text = {
Text(
text = appLanguage.languageText,
style = MaterialTheme.typography.bodyLarge
)
},
onClick = { onLanguageSelect(appLanguage) }
)
}
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.Divider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarDuration
Expand Down Expand Up @@ -53,13 +55,13 @@ fun SettingsRoute(
modifier: Modifier = Modifier,
viewModel: SettingsViewModel = hiltViewModel()
) {
val currentLanguage: AppLanguage = AppLanguage.transform(stringResource(UiR.string.language_code))
val currentTheme: AppTheme by viewModel.currentTheme.collectAsStateWithLifecycle()
val currentFeedView: FeedView by viewModel.currentFeedView.collectAsStateWithLifecycle()
val currentMovieList: MovieList by viewModel.currentMovieList.collectAsStateWithLifecycle()
val dynamicColors: Boolean by viewModel.dynamicColors.collectAsStateWithLifecycle()
val isPlayServicesAvailable: Boolean by viewModel.isPlayServicesAvailable.collectAsStateWithLifecycle()
val appVersionData: AppVersionData by viewModel.appVersionData.collectAsStateWithLifecycle()
val currentLanguage = AppLanguage.transform(stringResource(UiR.string.language_code))
val currentTheme by viewModel.currentTheme.collectAsStateWithLifecycle()
val currentFeedView by viewModel.currentFeedView.collectAsStateWithLifecycle()
val currentMovieList by viewModel.currentMovieList.collectAsStateWithLifecycle()
val dynamicColors by viewModel.dynamicColors.collectAsStateWithLifecycle()
val isPlayServicesAvailable by viewModel.isPlayServicesAvailable.collectAsStateWithLifecycle()
val appVersionData by viewModel.appVersionData.collectAsStateWithLifecycle()

SettingsScreenContent(
onBackClick = onBackClick,
Expand Down Expand Up @@ -107,10 +109,7 @@ private fun SettingsScreenContent(
val snackbarHostState = remember { SnackbarHostState() }
val topAppBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
val lazyListState = rememberLazyListState()

val resultContract = rememberLauncherForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {}
val resultContract = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {}

val onShowPermissionSnackbar: () -> Unit = {
scope.launch {
Expand Down Expand Up @@ -186,36 +185,48 @@ private fun SettingsScreenContent(
SettingsLanguageBox(
currentLanguage = currentLanguage,
onLanguageSelect = onLanguageSelect,
modifier = Modifier
.fillMaxWidth()
.height(52.dp)
modifier = Modifier.fillMaxWidth().height(52.dp)
)
}
item {
Divider(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp)
)
}
item {
SettingsThemeBox(
currentTheme = currentTheme,
onThemeSelect = onThemeSelect,
modifier = Modifier
.fillMaxWidth()
.height(52.dp)
modifier = Modifier.fillMaxWidth().height(52.dp)
)
}
item {
Divider(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp)
)
}
item {
SettingsAppearanceBox(
currentFeedView = currentFeedView,
onFeedViewSelect = onFeedViewSelect,
modifier = Modifier
.fillMaxWidth()
.height(52.dp)
modifier = Modifier.fillMaxWidth().height(52.dp)
)
}
item {
Divider(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp)
)
}
item {
SettingsMovieListBox(
currentMovieList = currentMovieList,
onMovieListSelect = onMovieListSelect,
modifier = Modifier
.fillMaxWidth()
.height(52.dp)
modifier = Modifier.fillMaxWidth().height(52.dp)
)
}
item {
Divider(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp)
)
}
item {
Expand All @@ -229,6 +240,11 @@ private fun SettingsScreenContent(
)
}
}
item {
Divider(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp)
)
}
item {
if (isPostNotificationsFeatureEnabled) {
SettingsPostNotificationsBox(
Expand All @@ -237,6 +253,11 @@ private fun SettingsScreenContent(
)
}
}
item {
Divider(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp)
)
}
item {
SettingsReviewBox(
modifier = Modifier
Expand All @@ -245,6 +266,11 @@ private fun SettingsScreenContent(
.clickable { onLaunchReviewFlow() }
)
}
item {
Divider(
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp)
)
}
item {
SettingsAppIconBox(
onAppIconChanged = { iconAlias ->
Expand Down

0 comments on commit 767a85e

Please sign in to comment.