diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffoldExtensions.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SettingsScaffoldExtensions.kt similarity index 98% rename from commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffoldExtensions.kt rename to commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SettingsScaffoldExtensions.kt index 79830e8f4..cb99c8e4e 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffoldExtensions.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SettingsScaffoldExtensions.kt @@ -1,4 +1,4 @@ -package com.simplemobiletools.commons.compose.settings.scaffold +package com.simplemobiletools.commons.compose.lists import android.content.Context import androidx.compose.foundation.background diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffold.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleColumnScaffold.kt similarity index 74% rename from commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffold.kt rename to commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleColumnScaffold.kt index 2336963bd..1342671af 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffold.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleColumnScaffold.kt @@ -1,6 +1,7 @@ -package com.simplemobiletools.commons.compose.settings.scaffold +package com.simplemobiletools.commons.compose.lists import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -19,7 +20,7 @@ import com.simplemobiletools.commons.compose.extensions.rememberMutableInteracti import com.simplemobiletools.commons.compose.theme.AppThemeSurface @Composable -fun SettingsScaffold( +fun SimpleColumnScaffold( title: String, goBack: () -> Unit, modifier: Modifier = Modifier, @@ -28,7 +29,7 @@ fun SettingsScaffold( if (!reverseLayout) Arrangement.Top else Arrangement.Bottom, horizontalAlignment: Alignment.Horizontal = Alignment.Start, scrollState: ScrollState = rememberScrollState(), - content: @Composable() (ColumnScope.(PaddingValues) -> Unit) + content: @Composable (ColumnScope.(PaddingValues) -> Unit) ) { val context = LocalContext.current val (statusBarColor, contrastColor) = statusBarAndContrastColor(context) @@ -43,7 +44,7 @@ fun SettingsScaffold( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SettingsScaffoldTopBar( + SimpleScaffoldTopBar( title = title, scrolledColor = scrolledColor, navigationIconInteractionSource = navigationIconInteractionSource, @@ -72,7 +73,7 @@ fun SettingsScaffold( @Composable -fun SettingsScaffold( +fun SimpleColumnScaffold( modifier: Modifier = Modifier, title: @Composable (scrolledColor: Color) -> Unit, goBack: () -> Unit, @@ -97,7 +98,7 @@ fun SettingsScaffold( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SettingsScaffoldTopBar( + SimpleScaffoldTopBar( title = title, scrolledColor = scrolledColor, navigationIconInteractionSource = navigationIconInteractionSource, @@ -125,7 +126,7 @@ fun SettingsScaffold( } @Composable -fun SettingsScaffold( +fun SimpleColumnScaffold( modifier: Modifier = Modifier, title: @Composable (scrolledColor: Color) -> Unit, actions: @Composable() (RowScope.() -> Unit), @@ -135,7 +136,7 @@ fun SettingsScaffold( if (!reverseLayout) Arrangement.Top else Arrangement.Bottom, horizontalAlignment: Alignment.Horizontal = Alignment.Start, scrollState: ScrollState = rememberScrollState(), - content: @Composable() (ColumnScope.(PaddingValues) -> Unit) + content: @Composable (ColumnScope.(PaddingValues) -> Unit) ) { val context = LocalContext.current @@ -151,7 +152,7 @@ fun SettingsScaffold( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SettingsScaffoldTopBar( + SimpleScaffoldTopBar( title = title, scrolledColor = scrolledColor, navigationIconInteractionSource = navigationIconInteractionSource, @@ -179,13 +180,56 @@ fun SettingsScaffold( } } +@Composable +fun SimpleColumnScaffold( + modifier: Modifier = Modifier, + customTopBar: @Composable (scrolledColor: Color, navigationInteractionSource: MutableInteractionSource, scrollBehavior: TopAppBarScrollBehavior, statusBarColor: Int, colorTransitionFraction: Float, contrastColor: Color) -> Unit, + goBack: () -> Unit, + reverseLayout: Boolean = false, + verticalArrangement: Arrangement.Vertical = + if (!reverseLayout) Arrangement.Top else Arrangement.Bottom, + horizontalAlignment: Alignment.Horizontal = Alignment.Start, + scrollState: ScrollState = rememberScrollState(), + content: @Composable() (ColumnScope.(PaddingValues) -> Unit) +) { + val context = LocalContext.current + + val (statusBarColor, contrastColor) = statusBarAndContrastColor(context) + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) + val (colorTransitionFraction, scrolledColor) = transitionFractionAndScrolledColor(scrollBehavior, contrastColor) + SystemUISettingsScaffoldStatusBarColor(scrolledColor) + val navigationIconInteractionSource = rememberMutableInteractionSource() + AdjustNavigationBarColors() + + Scaffold( + modifier = modifier + .fillMaxSize() + .nestedScroll(scrollBehavior.nestedScrollConnection), + topBar = { + customTopBar(scrolledColor, navigationIconInteractionSource, scrollBehavior, statusBarColor, colorTransitionFraction, contrastColor) + } + ) { paddingValues -> + ScreenBoxSettingsScaffold(paddingValues) { + Column( + modifier = Modifier + .matchParentSize() + .verticalScroll(scrollState), + verticalArrangement = verticalArrangement, + horizontalAlignment = horizontalAlignment, + ) { + content(paddingValues) + Spacer(modifier = Modifier.padding(bottom = paddingValues.calculateBottomPadding())) + } + } + } +} @MyDevices @Composable -private fun SettingsScaffoldPreview() { +private fun SimpleColumnScaffoldPreview() { AppThemeSurface { - SettingsScaffold(title = "About", goBack = {}) { + SimpleColumnScaffold(title = "About", goBack = {}) { ListItem(headlineContent = { Text(text = "Some text") }, leadingContent = { Icon(imageVector = Icons.Filled.AccessTime, contentDescription = null) diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsLazyScaffold.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleLazyListScaffold.kt similarity index 96% rename from commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsLazyScaffold.kt rename to commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleLazyListScaffold.kt index 3322350b9..9eb3b6d98 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsLazyScaffold.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleLazyListScaffold.kt @@ -1,4 +1,4 @@ -package com.simplemobiletools.commons.compose.settings.scaffold +package com.simplemobiletools.commons.compose.lists import androidx.compose.foundation.gestures.FlingBehavior import androidx.compose.foundation.gestures.ScrollableDefaults @@ -25,7 +25,7 @@ import com.simplemobiletools.commons.compose.extensions.rememberMutableInteracti import com.simplemobiletools.commons.compose.theme.AppThemeSurface @Composable -fun SettingsLazyScaffold( +fun SimpleLazyListScaffold( title: String, goBack: () -> Unit, modifier: Modifier = Modifier, @@ -53,7 +53,7 @@ fun SettingsLazyScaffold( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SettingsScaffoldTopBar( + SimpleScaffoldTopBar( title = title, scrolledColor = scrolledColor, navigationIconInteractionSource = navigationIconInteractionSource, @@ -85,7 +85,7 @@ fun SettingsLazyScaffold( @Composable -fun SettingsLazyScaffold( +fun SimpleLazyListScaffold( modifier: Modifier = Modifier, title: @Composable (scrolledColor: Color) -> Unit, goBack: () -> Unit, @@ -113,7 +113,7 @@ fun SettingsLazyScaffold( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SettingsScaffoldTopBar( + SimpleScaffoldTopBar( title = title, scrolledColor = scrolledColor, navigationIconInteractionSource = navigationIconInteractionSource, @@ -144,7 +144,7 @@ fun SettingsLazyScaffold( } @Composable -fun SettingsLazyScaffold( +fun SimpleLazyListScaffold( modifier: Modifier = Modifier, title: @Composable (scrolledColor: Color) -> Unit, actions: @Composable() (RowScope.() -> Unit), @@ -173,7 +173,7 @@ fun SettingsLazyScaffold( .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SettingsScaffoldTopBar( + SimpleScaffoldTopBar( title = title, scrolledColor = scrolledColor, navigationIconInteractionSource = navigationIconInteractionSource, @@ -205,7 +205,7 @@ fun SettingsLazyScaffold( } @Composable -fun SettingsLazyScaffold( +fun SimpleLazyListScaffold( modifier: Modifier = Modifier, topBar: @Composable (scrolledColor: Color, navigationInteractionSource: MutableInteractionSource, scrollBehavior: TopAppBarScrollBehavior, statusBarColor: Int, colorTransitionFraction: Float, contrastColor: Color) -> Unit, contentPadding: PaddingValues = PaddingValues(0.dp), @@ -254,7 +254,7 @@ fun SettingsLazyScaffold( } @Composable -fun SettingsLazyScaffold( +fun SimpleLazyListScaffold( modifier: Modifier = Modifier, darkStatusBarIcons: Boolean = true, customTopBar: @Composable (scrolledColor: Color, navigationInteractionSource: MutableInteractionSource, scrollBehavior: TopAppBarScrollBehavior, statusBarColor: Int, colorTransitionFraction: Float, contrastColor: Color) -> Unit, @@ -286,9 +286,9 @@ fun SettingsLazyScaffold( @MyDevices @Composable -private fun SettingsLazyScaffoldPreview() { +private fun SimpleLazyListScaffoldPreview() { AppThemeSurface { - SettingsLazyScaffold(title = "About", goBack = {}) { + SimpleLazyListScaffold(title = "About", goBack = {}) { item { ListItem(headlineContent = { Text(text = "Some text") }, leadingContent = { diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffoldTopBar.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleScaffoldTopBar.kt similarity index 90% rename from commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffoldTopBar.kt rename to commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleScaffoldTopBar.kt index 195efe15c..78be5d22d 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/settings/scaffold/SettingsScaffoldTopBar.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/lists/SimpleScaffoldTopBar.kt @@ -1,4 +1,4 @@ -package com.simplemobiletools.commons.compose.settings.scaffold +package com.simplemobiletools.commons.compose.lists import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource @@ -23,7 +23,7 @@ import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.SimpleTheme @Composable -fun SettingsScaffoldTopBar( +fun SimpleScaffoldTopBar( modifier: Modifier = Modifier, title: String, scrolledColor: Color, @@ -47,21 +47,21 @@ fun SettingsScaffoldTopBar( ) }, navigationIcon = { - SettingsNavigationIcon( + SimpleNavigationIcon( goBack = goBack, navigationIconInteractionSource = navigationIconInteractionSource, iconColor = scrolledColor ) }, scrollBehavior = scrollBehavior, - colors = topAppBarColors(statusBarColor, colorTransitionFraction, contrastColor), + colors = simpleTopAppBarColors(statusBarColor, colorTransitionFraction, contrastColor), modifier = modifier.topAppBarPaddings(), windowInsets = topAppBarInsets() ) } @Composable -fun SettingsScaffoldTopBar( +fun SimpleScaffoldTopBar( modifier: Modifier = Modifier, title: @Composable (scrolledColor: Color) -> Unit, scrolledColor: Color, @@ -77,21 +77,21 @@ fun SettingsScaffoldTopBar( title(scrolledColor) }, navigationIcon = { - SettingsNavigationIcon( + SimpleNavigationIcon( goBack = goBack, navigationIconInteractionSource = navigationIconInteractionSource, iconColor = scrolledColor ) }, scrollBehavior = scrollBehavior, - colors = topAppBarColors(statusBarColor, colorTransitionFraction, contrastColor), + colors = simpleTopAppBarColors(statusBarColor, colorTransitionFraction, contrastColor), modifier = modifier.topAppBarPaddings(), windowInsets = topAppBarInsets() ) } @Composable -fun SettingsScaffoldTopBar( +fun SimpleScaffoldTopBar( modifier: Modifier = Modifier, title: @Composable (scrolledColor: Color) -> Unit, actions: @Composable RowScope.() -> Unit, @@ -108,7 +108,7 @@ fun SettingsScaffoldTopBar( title(scrolledColor) }, navigationIcon = { - SettingsNavigationIcon( + SimpleNavigationIcon( goBack = goBack, navigationIconInteractionSource = navigationIconInteractionSource, iconColor = scrolledColor @@ -116,14 +116,14 @@ fun SettingsScaffoldTopBar( }, actions = actions, scrollBehavior = scrollBehavior, - colors = topAppBarColors(statusBarColor, colorTransitionFraction, contrastColor), + colors = simpleTopAppBarColors(statusBarColor, colorTransitionFraction, contrastColor), modifier = modifier.topAppBarPaddings(), windowInsets = topAppBarInsets() ) } @Composable -fun topAppBarColors( +fun simpleTopAppBarColors( statusBarColor: Int, colorTransitionFraction: Float, contrastColor: Color @@ -149,7 +149,7 @@ fun Modifier.topAppBarPaddings( } @Composable -fun SettingsNavigationIcon( +fun SimpleNavigationIcon( modifier: Modifier = Modifier, navigationIconInteractionSource: MutableInteractionSource = rememberMutableInteractionSource(), goBack: () -> Unit, @@ -166,12 +166,12 @@ fun SettingsNavigationIcon( ) ) { goBack() } ) { - BackIcon(iconColor) + SimpleBackIcon(iconColor) } } @Composable -fun BackIcon(iconColor: Color?) { +fun SimpleBackIcon(iconColor: Color?) { if (iconColor == null) { Icon( imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(id = R.string.back), @@ -189,9 +189,9 @@ fun BackIcon(iconColor: Color?) { @Composable @MyDevices -private fun SettingsScaffoldTopBarPreview() { +private fun SimpleScaffoldTopBarPreview() { AppThemeSurface { - SettingsScaffoldTopBar( + SimpleScaffoldTopBar( title = "SettingsScaffoldTopBar", scrolledColor = Color.Black, navigationIconInteractionSource = rememberMutableInteractionSource(), diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/AboutScreen.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/AboutScreen.kt index 1625de25c..dfa9ae5a2 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/AboutScreen.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/AboutScreen.kt @@ -9,11 +9,11 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.simplemobiletools.commons.R import com.simplemobiletools.commons.compose.extensions.MyDevices +import com.simplemobiletools.commons.compose.lists.SimpleColumnScaffold import com.simplemobiletools.commons.compose.settings.SettingsGroup import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider import com.simplemobiletools.commons.compose.settings.SettingsListItem import com.simplemobiletools.commons.compose.settings.SettingsTitleTextComponent -import com.simplemobiletools.commons.compose.settings.scaffold.SettingsScaffold import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.SimpleTheme @@ -27,7 +27,7 @@ internal fun AboutScreen( socialSection: @Composable () -> Unit, otherSection: @Composable () -> Unit, ) { - SettingsScaffold(title = stringResource(id = R.string.about), goBack = goBack) { + SimpleColumnScaffold(title = stringResource(id = R.string.about), goBack = goBack) { aboutSection() helpUsSection() socialSection() diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/ContributorsScreen.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/ContributorsScreen.kt index cf25b76da..f2e7287f9 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/ContributorsScreen.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/ContributorsScreen.kt @@ -17,11 +17,11 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.simplemobiletools.commons.R import com.simplemobiletools.commons.compose.extensions.MyDevices +import com.simplemobiletools.commons.compose.lists.SimpleLazyListScaffold import com.simplemobiletools.commons.compose.settings.SettingsGroupTitle import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider import com.simplemobiletools.commons.compose.settings.SettingsListItem import com.simplemobiletools.commons.compose.settings.SettingsTitleTextComponent -import com.simplemobiletools.commons.compose.settings.scaffold.SettingsLazyScaffold import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.SimpleTheme import com.simplemobiletools.commons.models.LanguageContributor @@ -36,7 +36,7 @@ internal fun ContributorsScreen( showContributorsLabel: Boolean, contributors: ImmutableList ) { - SettingsLazyScaffold( + SimpleLazyListScaffold( title = { scrolledColor -> Text( text = stringResource(id = R.string.contributors), diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/FAQScreen.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/FAQScreen.kt index c4486a0cf..99e939c98 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/FAQScreen.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/FAQScreen.kt @@ -21,8 +21,8 @@ import androidx.compose.ui.unit.sp import androidx.compose.ui.viewinterop.AndroidView import com.simplemobiletools.commons.R import com.simplemobiletools.commons.compose.extensions.MyDevices +import com.simplemobiletools.commons.compose.lists.SimpleLazyListScaffold import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider -import com.simplemobiletools.commons.compose.settings.scaffold.SettingsLazyScaffold import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.SimpleTheme import com.simplemobiletools.commons.extensions.removeUnderlines @@ -35,7 +35,7 @@ internal fun FAQScreen( goBack: () -> Unit, faqItems: ImmutableList, ) { - SettingsLazyScaffold( + SimpleLazyListScaffold( title = stringResource(id = R.string.frequently_asked_questions), goBack = goBack, contentPadding = PaddingValues(bottom = SimpleTheme.dimens.margin.medium) diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/LicenseScreen.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/LicenseScreen.kt index c6c49e27e..ace9c863b 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/LicenseScreen.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/LicenseScreen.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import com.simplemobiletools.commons.R import com.simplemobiletools.commons.compose.extensions.MyDevices +import com.simplemobiletools.commons.compose.lists.SimpleLazyListScaffold import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider -import com.simplemobiletools.commons.compose.settings.scaffold.SettingsLazyScaffold import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.SimpleTheme import com.simplemobiletools.commons.helpers.* @@ -27,7 +27,7 @@ internal fun LicenseScreen( thirdPartyLicenses: ImmutableList, onLicenseClick: (urlId: Int) -> Unit, ) { - SettingsLazyScaffold( + SimpleLazyListScaffold( title = stringResource(id = R.string.third_party_licences), goBack = goBack ) { diff --git a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/ManageBlockedNumbersScreen.kt b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/ManageBlockedNumbersScreen.kt index ee6cca051..4f3ad3ccc 100644 --- a/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/ManageBlockedNumbersScreen.kt +++ b/commons/src/main/kotlin/com/simplemobiletools/commons/compose/screens/ManageBlockedNumbersScreen.kt @@ -44,12 +44,12 @@ import androidx.compose.ui.unit.sp import com.simplemobiletools.commons.R import com.simplemobiletools.commons.compose.components.SimpleDropDownMenuItem import com.simplemobiletools.commons.compose.extensions.* +import com.simplemobiletools.commons.compose.lists.* import com.simplemobiletools.commons.compose.menus.ActionItem import com.simplemobiletools.commons.compose.menus.ActionMenu import com.simplemobiletools.commons.compose.menus.OverflowMode import com.simplemobiletools.commons.compose.settings.SettingsCheckBoxComponent import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider -import com.simplemobiletools.commons.compose.settings.scaffold.* import com.simplemobiletools.commons.compose.system_ui_controller.rememberSystemUiController import com.simplemobiletools.commons.compose.theme.* import com.simplemobiletools.commons.compose.theme.model.Theme @@ -96,7 +96,7 @@ internal fun ManageBlockedNumbersScreen( clearSelection() } - SettingsLazyScaffold( + SimpleLazyListScaffold( darkStatusBarIcons = !isInActionMode, customTopBar = { scrolledColor: Color, navigationInteractionSource: MutableInteractionSource, @@ -470,7 +470,7 @@ private fun ActionModeToolbar( }, navigationIcon = { - SettingsNavigationIcon(navigationIconInteractionSource = navigationIconInteractionSource, goBack = onBackClick, iconColor = textColor) + SimpleNavigationIcon(navigationIconInteractionSource = navigationIconInteractionSource, goBack = onBackClick, iconColor = textColor) }, actions = { BlockedNumberActionMenu(selectedIdsCount = selectedIdsCount, onDelete = onDelete, onCopy = onCopy, iconColor = textColor) @@ -543,7 +543,7 @@ private fun NonActionModeToolbar( onImportBlockedNumbers: () -> Unit, onExportBlockedNumbers: () -> Unit ) { - SettingsScaffoldTopBar( + SimpleScaffoldTopBar( title = { scrolledTextColor -> Text( text = stringResource(id = R.string.manage_blocked_numbers), diff --git a/commons/src/main/res/values-sr/strings.xml b/commons/src/main/res/values-sr/strings.xml index 66c6ed3af..3ed148192 100644 --- a/commons/src/main/res/values-sr/strings.xml +++ b/commons/src/main/res/values-sr/strings.xml @@ -722,7 +722,7 @@ Виџети Увек користи исто време за успављивање Време успављивања - Вибрирајте притиснути дугметом + Вибрација при притиску на дугме Премести ставке у канту за отпатке уместо брисања Временски интервал за чишћење канте за отпатке Испразни канту за смеће @@ -1153,7 +1153,7 @@ Your trial expires soon. Unlock the app for one final day Welcome to %s! - Thank you for using our app. You can use this unlocked version for <font color=\'#FFFFFF\'>%d days</font>. Once the trial ends, please consider upgrading to the Pro version. It has a huge amount of new features, modern design, no ads and many other improvements. + Thank you for using our app. You can use this unlocked version for <font color=\'#FFFFFF\'>%d days</font>. Once the trial ends, please consider upgrading to the Pro version. It has a huge amount of new features, modern design, no ads and many other improvements. \n\nYou just have to pay for it once in a lifetime and if you won\'t be satisfied, you can uninstall it and get a refund.\n\nHope you\'ll like it :) Please upgrade to the Pro version to enjoy the app to the fullest.\n\nYou just have to pay for it once in a lifetime and if you won\'t be satisfied, you can uninstall it and get a refund.\n\nSee you there :) @@ -1165,4 +1165,4 @@ Не заборавите да ако деинсталирате било коју плаћену апликацију у року од 2 сата, новац ће вам аутоматски бити враћен. Ако желите повраћај новца било када касније, само нас контактирајте на hello@simplemobiletools.com и добићете га. То олакшава испробавање :) Група једноставних Андроид апликација отвореног кода са прилагодљивим виџетима, без огласа и непотребних дозвола. - + \ No newline at end of file diff --git a/commons/src/main/res/values-vi/strings.xml b/commons/src/main/res/values-vi/strings.xml index 6145ce5a0..31bae4f75 100644 --- a/commons/src/main/res/values-vi/strings.xml +++ b/commons/src/main/res/values-vi/strings.xml @@ -2,7 +2,7 @@ OK Hủy bỏ - Close + Đóng Quay lại Không có gì Sau @@ -49,7 +49,7 @@ Ứng dụng không có quyền thực hiện cuộc gọi điện thoại, vui lòng cấp quyền đó trong cài đặt thiết bị Chèn văn bản vào đây Gọi %s - Confirm calling %s + Xác nhận gọi %s Zero One Hai @@ -68,16 +68,16 @@ Từ chối trách nhiệm Chụp ảnh Chọn hình ảnh - Choose video - Choose contact - Choose file + Chọn video + Chọn liên hệ + Chọn tập tin Ghi âm Quay video Đang cập nhật… Bộ nhớ điện thoại Bộ nhớ điện thoại (không hiển thị bởi các ứng dụng khác) Audio - Scanning… + Đang quét… Ngày sinh nhật Dịp kỉ niệm @@ -87,22 +87,22 @@ Mobile Chính - Work Fax + Fax công việc Home Fax Pager - No phone number has been found + Không có số điện thoại nào được tìm thấy Thay đổi kiểu xem Lưới Lưới (Pro) - Uneven Grid + Ô không đồng đều Danh sách Tăng số lượng cột Giảm số lượng cột - Column count - Row count - Portrait column count - Landscape column count + Số cột + Số hàng + Số cột màn hình dọc + Số cột màn hình ngang Thay đổi ảnh bìa Chọn ảnh @@ -114,29 +114,29 @@ %d rows - Manage blocked numbers - You are not blocking anyone. - Add a blocked number + Quản lý số bị chặn + Bạn hiện tại không chặn ai. + Thêm số bị chặn Block number - Block numbers - Blocked numbers - Export blocked numbers - Import blocked numbers - You have to make this app the default dialer app to make use of blocked numbers. + Chặn số + Số bị chặn + Xuất số bị chặn + Nhập số bị chặn + Bạn cần phải đặt ứng dụng này thành ứng dụng quay số mặc định để có thể chặn số điện thoại. Set as default - Are you sure you want to block \"%s\"? - Block calls from not stored contacts - Block calls from hidden numbers - Block messages from not stored contacts - Block messages from hidden numbers - Enter a number or a pattern (e.g. *12345*, +1*8888) to block all calls and messages from numbers matching the pattern. - Can\'t block unknown numbers without caller ID permission. + Bạn có chắc là muốn chặn \"%s\"\? + Chặn cuộc gọi từ liên hệ không có trong danh bạ lưu trữ + Chặn cuộc gọi từ số ẩn + Chặn tin nhắn từ số không có trong danh bạ lưu trữ + Chặn tin nhắn từ số ẩn + Nhập một số hoặc mẫu (vd: *12345*, +1*8888) để chặn tất cả các cuộc gọi và tin nhắn từ các số khớp với mẫu. + Không thể chặn số chưa biết mà không có quyền ID người gọi. Block contact - Contact blocked - Contact could not be blocked - Unblock contact - Contact unblocked - Contact could not be unblocked + Đã chặn liên hệ + Liên hệ không thể bị chặn + Bỏ chặn liên hệ + Đã bỏ chặn liên hệ + Không thể bỏ chặn liên hệ Yêu thích Thêm mục yêu thích @@ -144,26 +144,26 @@ Loại bỏ khỏi mục ưa thích Tìm kiếm - Search in %s + Tìm trong %s Nhập ít nhất 2 ký tự để bắt đầu tìm kiếm. - Show a search bar + Hiển thị thanh tìm kiếm Tìm liên hệ Tìm kiếm yêu thích - Search apps - Search events + Tìm kiếm ứng dụng + Tìm kiếm sự kiện Tìm nhóm - Search history - Search calls - Search files - Search folders - Search files and folders - Search playlists - Search artists - Search albums - Search tracks - Search text - Search conversations - Search recordings + Tìm kiếm lịch sử + Tìm kiếm cuộc gọi + Tìm kiếm tập tin + Tìm kiếm thư mục + Tìm kiếm tập tin và thư mục + Tìm kiếm danh sách phát + Tìm kiếm nghệ sĩ + Tìm kiếm album + Tìm kiếm bản nhạc + Tìm kiếm văn bản + Tìm kiếm cuộc hội thoại + Tìm kiếm bản ghi Bộ lọc Bộ lọc (Pro) @@ -174,20 +174,20 @@ Cần quyền truy cập danh bạ Cần quyền truy cập máy ảnh Cần quyền truy cập âm thanh - No permission - You must allow the app displaying notifications, else it cannot show reminders. - You must allow the app displaying full screen notifications, else you may miss some reminders. - You must allow the app displaying notifications, else it cannot show the progress bar. - You must allow the app displaying notifications, else it cannot play songs. - You must allow the app displaying notifications, else it cannot record audio. - You must allow the app displaying notifications, else it cannot show incoming calls. - You must allow the app displaying full screen notifications, else you may miss some incoming calls. - You must allow the app displaying notifications, else it cannot show incoming messages. - You must allow the app accessing internal alarms, else it cannot send scheduled messages. - You must allow the app accessing internal alarms, else it cannot turn off the application after sleep timer. - You must allow the app accessing your location, else it won\'t know it. - Grant Permission - Permission Required + Không có quyền + Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể hiển thị lời nhắc. + Bạn cần phải cho phép ứng dụng hiển thị thông báo toàn màn hình, nếu không bạn có thể bỏ lở một vài lời nhắc. + Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể hiển thị thanh tiến trình. + Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể phát bài hát. + Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể ghi âm. + Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể hiển thị cuộc gọi đến. + Bạn cần phải cho phép ứng dụng hiển thị thông báo toàn màn hình, nếu không bạn có thể sẽ bỏ lỡ một vài cuộc gọi đến. + Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không hiển thị tin nhắn đến. + Bạn cần phải cho phép ứng dụng truy cập báo thức nội bộ, nếu không ứng dụng không thể gửi tin nhắn được lên lịch. + Bạn cần phải cho phép ứng dụng truy cập báo thức nội bộ, nếu không ứng dụng không thể tắt ứng dụng sau khi hẹn giờ ngủ. + Bạn cần phải cho phép ứng dụng truy cập vị trí của bạn, nếu không ứng dụng sẽ không biết được vị trí của bạn. + Cấp quyền + Yêu cầu quyền Đổi tên tập tin Đổi tên thư mục @@ -209,10 +209,10 @@ Mẫu Chuỗi để thêm %Y - năm\n%M - tháng\n%D - ngày\n%h - giờ\n%m - phút\n%s - giây\n%i - số tăng từ 1 - Filename (without .txt) - Filename (without .json) - Filename (without .zip) - Starting from Android 11 you cannot hide files and folders like that anymore + Tên tập tin (không có đuôi .txt) + Tên tập tin (không có đuôi .json) + Tên tập tin (không có đuôi .zip) + Bắt đầu từ Android 11, bạn không thể ẩn tập tin và thư mục như thế được nữa Sao chép Di chuyển @@ -229,11 +229,11 @@ Không thể sao chép các tập tin Đang sao chép... Tập tin được sao chép thành công - File copied successfully + Tập tin được sao chép thành công Đã xảy ra lỗi - Di chuyển... + Di chuyển… Tập tin đã được chuyển thành công - File moved successfully + Tập tin được di chuyển thành công Một số tệp không thể di chuyển Một số tệp không thể sao chép Không có tập tin nào được chọn @@ -242,7 +242,7 @@ Không thể tạo tệp %s Không có mục mới được tìm thấy Đích đến không có đủ dung lượng khả dụng.\nRequired %1$s, khả dụng %2$s - System service for selecting files and folders is unavailable + Dịch vụ hệ thống để chọn tập tin và thư mục không khả dụng Tạo mới Thư mục @@ -259,27 +259,27 @@ Kết hợp Giữ cả hai Ghi đè - Skip + Bỏ qua Nối với \'_1\' Áp dụng cho tất cả - The system does not allow the operation in this folder, please pick another one - The system does not allow copying into this folder, please pick another one - The system does not allow renaming in this folder - Cannot rename folders directly on internal storage, only subfolders + Hệ thống không cho phép thao tác tại thư mục này, vui lòng chọn một thư mục khác + Hệ thống không cho phép sao chép vào thư mục này, vui lòng chọn thư mục khác + Hệ thống không cho phép đổi tên trong thư mục này + Không thể đổi tên thư mục trực tiếp trên bộ nhớ trong, chỉ các thư mục con Không thể đổi tên thư mục này Chọn một thư mục Chọn một tập tin Xác nhận truy cập bộ nhớ ngoài - Confirm folder access + Xác nhận quyền truy cập thư mục Vui lòng chọn thư mục trên cùng của thẻ SD trên màn hình tiếp theo, để cấp quyền truy cập ghi Nếu bạn không thấy thẻ SD, hãy thử điều này - Please allow the app accessing the selected storage on the next screen by pressing \'Use this folder\' at the bottom. - Please allow accessing \'<b>%s</b>\' on the next screen by pressing \'<b>Use this folder</b>\' at the bottom. - Please press \'<b>Save</b>\' at the bottom of the next screen to create the new folder. + Vui lòng cho phép ứng dụng truy cập vào bộ nhớ đã chọn trên màn hình tiếp theo bằng cách nhấn \'Sử dụng thư mục này\' ở dưới cùng. + Vui lòng cho phép \'%s\' trên màn hình tiếp theo bằng cách nhấn \'Sử dụng thư mục này\' ở dưới cùng. + Vui lòng nhấn \'Lưu\' ở dưới cùng của màn hình tiếp theo để tạo thư mục mới. Xác nhận lựa chọn - Loading… - Please grant our app access to all your files, it might not work well without it. + Đang tải… + Vui lòng cấp quyền cho ứng dụng của chúng tôi để truy cập mọi tập tin của bạn, ứng dụng có thể không hoạt động ổn định nếu không có quyền đó. %d item %d items @@ -300,16 +300,16 @@ Chọn nơi lưu trữ - Storage + Bộ nhớ Bộ nhớ trong - Internal Storage + Bộ nhớ trong Thẻ SD Root Đã chọn sai thư mục, vui lòng chọn thư mục gốc của thẻ SD của bạn Đường dẫn thẻ SD và thiết bị USB không thể giống nhau Bạn dường như đã cài đặt ứng dụng trên thẻ SD, điều đó làm cho các widget ứng dụng không khả dụng. Bạn thậm chí sẽ không nhìn thấy chúng trong danh sách các widget có sẵn.          Đây là một giới hạn hệ thống, vì vậy nếu bạn muốn sử dụng các widget, bạn phải di chuyển ứng dụng vào bộ nhớ trong. - Wrong folder selected, please select path \'%s\' + Chọn sai thư mục, vui lòng chọn đường dẫn \'%s\' Chi tiết Đường dẫn @@ -325,20 +325,20 @@ Thời gian phơi sáng Tốc độ ISO F-number - Camera + Máy ảnh EXIF Tên bài hát tọa độ GPS Độ cao - Remove EXIF - Are you sure you want to remove EXIF values like GPS coordinates, camera model etc? - EXIF values removed successfully + Xóa EXIF + Bạn có chắc là muốn xóa giá trị EXIF như tọa độ GPS, kiểu máy ảnh,... không\? + Giá trị EXIF đã được xóa thành công Màu nền Màu văn bản Màu chính - Accent color of white theme - Accent color of Black & White theme + Màu nhấn của chủ đề màu chắn + Màu nhấn của chủ đề Đen & Trắng Màu nền Màu biểu tượng ứng dụng Màu thanh điều hướng phía dưới @@ -358,7 +358,7 @@ CẢNH BÁO: Một số trình khởi chạy không xử lý tùy chỉnh biểu tượng ứng dụng đúng cách. Trong trường hợp biểu tượng biến mất, hãy thử khởi chạy ứng dụng qua Google Play hoặc một số tiện ích, nếu có.          Sau khi khởi chạy, chỉ cần đặt lại biểu tượng màu cam mặc định #F57C00. Bạn có thể phải cài đặt lại ứng dụng trong trường hợp xấu nhất. Màu sắc được cập nhật thành công. Một chủ đề mới có tên \'Shared\' đã được thêm vào, vui lòng sử dụng chủ đề đó để cập nhật tất cả các màu của ứng dụng trong tương lai. - Note that even though you are using the Pro app version, you still need Simple Thank You for technical reasons. It takes care of the color synchronization. + Chú ý rằng mặc dù bạn đang dùng phiên bản Pro, bạn vẫn cần Simple Cám ơn vì lý do kỹ thuật. Nó đảm nhiệm việc đồng bộ hóa màu sắc. Simple Thank You để mở khóa tính năng này và hỗ trợ nhà phát triển. Cảm ơn! @@ -368,7 +368,7 @@ Sáng Tối Auto - Auto light / dark + Sáng / tối tự động Solarized Đỏ sẫm White @@ -377,8 +377,8 @@ Đã chia sẻ System default - Có gì mới ? - * chỉ các bản cập nhật lớn hơn được liệt kê ở đây, luôn luôn cũng có một số cải tiến nhỏ hơn + Có gì mới + * chỉ các bản cập nhật lớn được liệt kê ở đây, luôn luôn cũng có một số cải tiến nhỏ Xóa bỏ Xóa @@ -387,50 +387,50 @@ Chia sẻ qua Thay đổi kích thước Chọn tất cả - Select text + Chọn văn bản Ẩn Bỏ ẩn Ẩn thư mục Bỏ ẩn thư mục Tạm thời hiển thị mục đã ẩn Dừng hiển thị mục đã ẩn - Allow access to more media + Cho phép truy cập nhiều phương tiện hơn Bạn không thể chia sẻ nhiều nội dung này cùng một lúc Làm trống và tắt Thùng rác Hoàn tác Khôi phục In In (Pro) - Shortcut + Phím tắt Tạo phím tắt Tạo phím tắt (Pro) Thêm số để liên hệ View contact details - Call from SIM 1 - Call from SIM 2 + Gọi từ SIM 1 + Gọi từ SIM 2 Chuyển đổi khả năng hiển thị tên tệp - Move to the top - Move to the bottom + Di chuyển lên trên cùng + Di chuyển xuống dưới cùng Pin item - Unpin item + Bỏ ghim mục Send SMS Send email - Call + Gọi Contact details Add contact - Wallpapers - Show line numbers - Hide line numbers - Sleep timer - Unblock + Hình nền + Hiển thị số dòng + Ẩn số dòng + Hẹn giờ ngủ + Bỏ chặn Sắp xếp theo Tên Kích thước Sửa đổi lần cuối - Date created + Ngày tạo Ngày chụp - Date added + Ngày thêm Tiêu đề Tên tệp Phần mở rộng @@ -440,13 +440,13 @@ Giảm dần Chỉ sử dụng cho thư mục này Sắp xếp các phần số theo giá trị thực - First name + Tên Middle name - Surname + Họ Full name - Use custom sorting - Change order - More options + Sử dụng sắp xếp tùy chỉnh + Thay đổi thứ tự + Thêm tùy chọn Bạn có chắc chắn muốn tiến hành xóa? @@ -457,7 +457,7 @@ Bạn có chắc bạn muốn xóa mục này? Bạn có chắc chắn muốn chuyển mục này vào Thùng rác không? Đừng hỏi lại trong phần này - Do not show again + Không hiện lại Không Có lẽ @@ -470,19 +470,20 @@ Nhập PIN Vui lòng nhập mã PIN PIN sai - PIN must be at least 4 digits long - Too many incorrect unlock attempts.\nTry again in %d seconds. + Mã PIN phải dài ít nhất 4 chữ số + Quá nhiều lần thử sai. +\nThử lại sau %d giây. Lặp lại mã PIN Mẫu hình Chèn mẫu hình Mẫu hình sai Lặp lại mẫu hình - Biometrics + Sinh trắc học Vân tay Thêm dấu vân tay Vui lòng đặt ngón tay của bạn trên cảm biến vân tay - Open biometric ID verification dialog - Authenticate + Mở họp thoại xác thực ID sinh trắc học + Xác thực Quá trình xác thực đã thất bại Xác thực bị chặn, vui lòng thử lại sau giây lát Bạn chưa đăng ký dấu vân tay, vui lòng thêm trong Cài đặt của thiết bị @@ -496,15 +497,15 @@ Enter password Password Add password - Please enter a password - Please enter the password - Incorrect password + Vui lòng nhập mật khẩu + Vui lòng nhập mật khẩu + Mật khẩu sai Hôm qua Hôm nay Ngày mai - Every day - Hide year + Mỗi ngày + Ẩn năm giây phút giờ @@ -631,7 +632,8 @@ Thời gian còn lại cho đến khi báo thức kêu: \n%s Thời gian còn lại cho đến khi nhắc nhở kích hoạt: \n%s - Time remaining:\n%s + Thời gian còn lại: +\n%s Hãy chắc chắn rằng báo thức hoạt động đúng trước khi dựa vào nó. Nó có thể hoạt động sai do hạn chế hệ thống liên quan đến tiết kiệm pin. Hãy chắc chắn rằng các lời nhắc hoạt động đúng trước khi dựa vào chúng. Chúng có thể hoạt động sai do hạn chế hệ thống liên quan đến tiết kiệm pin. Thông báo của ứng dụng này đã bị vô hiệu hóa. Vui lòng vào cài đặt thiết bị của bạn để kích hoạt chúng. @@ -645,22 +647,22 @@ Âm báo của bạn Thêm một âm báo mới Không có âm báo - During the day at hh:mm - During the day at %02d:%02d + Trong ngày lúc hh:mm + Trong ngày lúc %02d:%02d Cài đặt Cảm ơn vì đã mua hàng Simple General - Color customization - Improved color customization + Tùy chỉnh màu sắc + Cải thiện tùy chỉnh màu sắc Tùy chỉnh màu sắc Tùy chỉnh màu sắc (Locked) - Locked + Đã khóa Tùy chỉnh màu widget - Customize notifications + Tùy chỉnh thông báo Notification sound Sử dụng tiếng anh - Language + Ngôn ngữ Hiển thị các mục ẩn Cỡ chữ Nhỏ @@ -678,7 +680,7 @@ Sử dụng định dạng 24 giờ Thay đổi định dạng ngày giờ Bắt đầu tuần vào chủ nhật - Start week on + Tuần bắt đầu vào Widgets Luôn luôn sử dụng cùng thời gian báo lại Thời gian báo lại @@ -691,41 +693,41 @@ Nhập cài đặt Cài đặt được xuất thành công Cài đặt được nhập thành công - Start name with surname - Clear cache - Show a call confirmation dialog before initiating a call + Tên bắt đầu với họ + Xóa bộ nhớ đệm + Hiển thị hộp thoại xác nhận gọi trước khi bắt đầu cuộc gọi Hiển thị Bảo vệ Cuộn Thao tác tập tin Thùng rác - Đang lưu… + Đang lưu Mở đầu Văn bản Di chuyển - Quality - Main screen - Thumbnails + Chất lượng + Màn hình chính + Hình thu nhỏ List view Loại trừ - Exclude folder + Loại trừ thư mục Các thư mục bị loại trừ (loại trừ) Quản lý các thư mục loại trừ Xóa tất cả Xóa tất cả các thư mục khỏi danh sách loại trừ\? Điều này sẽ không xóa các thư mục. - Temporarily show excluded - Stop showing excluded + Tạm thời hiển thị bị loại trừ + Ngưng hiển thị bị loại trừ - Manage shown tabs - Tab to open at app start + Quản lý thẻ đang hiển thị + Thẻ để mở khi bắt đầu ứng dụng Contacts - Favorites - Call History - Groups - Last used one + Yêu thích + Lịch sử gọi + Nhóm + Cái được sử dụng cuối cùng Files Recent files @@ -739,8 +741,8 @@ Di chuyển mục trong Thùng rác bị vô hiệu hóa, vui lòng sử dụng Khôi phục Hiển thị thùng rác Ẩn thùng rác - Open the Recycle Bin - Skip the Recycle Bin, delete files directly + Mở Thùng rác + Bỏ qua Thùng rác, xóa tập tin trực tiếp Moving %d item into the Recycle Bin Moving %d items into the Recycle Bin @@ -755,11 +757,11 @@ Nhập một số mục không thành công Xuất một số mục không thành công Không có mục để nhập được tìm thấy - No new entries for importing have been found + Không có mục nhập mới để nhập nào được tìm thấy Không có mục nào để xuất được tìm thấy - Backups - Enable automatic backups - Manage automatic backups + Sao lưu + Bật sao lưu tự động + Quản lý sao lưu tự động You can use the following patterns to name your file automatically:\n\n%Y - year\n%M - month\n%D - day\n%h - hour\n%m - minute\n%s - second USB @@ -833,13 +835,39 @@ Thêm thông tin Nâng cấp Bạn phải di chuyển thủ công các sự kiện được lưu trữ cục bộ thông qua xuất trong tệp .ics, sau đó nhập. Bạn có thể tìm thấy cả hai nút xuất / nhập ở menu màn hình chính. - Hello,\n\nseems like you just upgraded from the free version. Once you are happy with this one and maybe migrated your settings and favorites over, you can uninstall the old free one to avoid launching it accidentally as you will not need it anymore.\n\nThanks! + Xin chào +\n +\ncó vẻ như bạn mới nâng cấp từ phiên bản miễn phí. Một khi bạn cảm thấy hài lòng với ứng dụng này và có lẽ đã di chuyển thông tin cài đặt và yêu thích qua, bạn có thể gỡ cài đặt phiên bản miễn phí để tránh mở nó lên, vì bạn không còn cần nó nữa. Việc đó cũng sẽ ngăn hộp thoại này xuất hiện. +\n +\nCám ơn! Hello,\n\nseems like you already have the Pro app version too. Once you are happy with it and maybe migrated your settings and favorites over, you can uninstall this one to avoid launching it accidentally as you will not need it anymore.\n\nThanks! - Hello,\n\nseems like you just upgraded from the free version. Once you are happy with this one and maybe migrated your data over, you can uninstall the old free one to avoid launching it accidentally as you will not need it anymore.\n\nThanks! + Xin chào +\n +\ncó vẻ như bạn mới nâng cấp từ phiên bản miễn phí. Một khi bạn đã hài lòng với ứng dụng này và có lẽ cũng đã di chuyển dữ liệu qua, bạn có thể gỡ cài đặt phiên bản miễn phí để tránh việc mở nó lên, vì bạn không còn cần nó nữa. Việc đó cũng sẽ ngăn hộp thoại này xuất hiện. +\n +\nCám ơn! Hello,\n\nseems like you already have the Pro app version too. Once you are happy with it and maybe migrated your data over, you can uninstall this one to avoid launching it accidentally as you will not need it anymore.\n\nThanks! - Hello,\n\nseems like you just upgraded from the free version. If you want to migrate your locally stored events over, you have to do it manually by exporting them into an .ics file in the free app version and importing here through the top menu. \n\nOnce you are satisfied with your setup in the Pro version, you can uninstall the old free one as you won\'t need it anymore.\n\nThanks! - Hello,\n\nseems like you just upgraded from the free version. If you had any contacts stored under \"%s\", you have to migrate them manually by exporting in a .vcf file from the free app version and importing here through the top menu.\n\nOnce you are satisfied with your setup in the Pro version, you can uninstall the old free one as you won\'t need it anymore.\n\nThanks! - Hello,\n\nseems like you just upgraded from the free version. If you want to migrate your notes over, you have to do it manually by exporting them into a file in the free app version and importing here through the top menu. \n\nOnce you are satisfied with your setup in the Pro version, you can uninstall the old free one as you won\'t need it anymore.\n\nThanks! + Xin chào, +\n +\ncó vẻ như bạn vừa mới nâng cấp lên từ phiên bản miễn phí. Nếu như bạn muốn di chuyển các sự kiện được lưu trữ nội bộ của bạn qua, bạn phải làm việc đó một cách thủ công bằng cách xuất chúng sang một tập tin .ics trong phiên bản miễn phí và nhập chúng tại đây thông qua menu ở trên cùng. +\n +\nMột khi bạn hài lòng với các thiết lập của mình ở bản Pro, bạn có thể gỡ cài đặt phiên bản miễn phí bởi bạn không còn cần nó nữa, việc đó cũng sẽ ngăn hộp thoại này xuất hiện. +\n +\nCám ơn! + Xin chào, +\n +\ncó vẻ như bạn vừa mới nâng cấp từ phiên bản miễn phí. Nếu như bạn có bất kỳ liên hệ vào được lưu trữ dưới \"%s\", bạn cần phải di chuyển chúng thủ công bằng cách xuất sang tập tin .vcf từ phiên bản miễn phí và nhập chúng tại đây thông qua menu ở trên cùng. +\n +\nSau khi bạn hài lòng với thiết lập của mình tại phiên bản Pro, bạn có thể gỡ cài đặt phiên bản miễn phí bởi bạn không còn cần nó nữa, việc này cũng sẽ ngăn cho hộp thoại này xuất hiện. +\n +\nCám ơn! + Xin chào, +\n +\ncó vẻ như bạn vừa mới nâng cấp từ phiên bản miễn phí. Nếu như bạn muốn di chuyển ghi chú qua, bạn cần phải làm thủ công bằng cách xuất chúng thành một tập tin trong phiên bản miễn phí và nhập chúng tại đây thông qua menu trên cùng. +\n +\nSau khi bạn hài lòng với thiết lập của mình, bạn có thể gỡ cài đặt phiên bản miễn phí bởi bạn không còn cần đến nó nữa, việc đó cũng sẽ ngăn cho hộp thoại này xuất hiện. +\n +\nCám ơn! Thông tin Website @@ -1131,4 +1159,4 @@ Đừng quên rằng nếu bạn gỡ cài đặt bất kỳ ứng dụng phải trả tiền nào trong vòng 2 giờ, bạn sẽ tự động được hoàn lại tiền. Nếu bạn muốn hoàn lại tiền bất cứ lúc nào sau đó, chỉ cần liên hệ với chúng tôi tại hello@simplemobiletools.com và bạn sẽ nhận được nó.Thật dễ dàng đúng không :) A group of simple, open source Android apps with customizable widgets, without ads and unnecessary permissions. - + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8470dd867..d66e53797 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] #jetbrains kotlin = "1.9.10" -kotlin-immutable-collections = "0.3.5" +kotlin-immutable-collections = "0.3.6" #KSP kotlinxSerializationJson = "1.5.1" ksp = "1.9.10-1.0.13" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f09f9d77e..e9570e01b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip