diff --git a/.github/repo_photos/inter-banner.png b/.github/repo_photos/inter-banner.png new file mode 100644 index 0000000..89c282a Binary files /dev/null and b/.github/repo_photos/inter-banner.png differ diff --git a/.github/repo_photos/open-runde-banner.png b/.github/repo_photos/open-runde-banner.png deleted file mode 100644 index 0291710..0000000 Binary files a/.github/repo_photos/open-runde-banner.png and /dev/null differ diff --git a/README.md b/README.md index 3e85865..2bbc547 100644 --- a/README.md +++ b/README.md @@ -94,9 +94,8 @@ translating this project into languages you know. ## Download -- **Google Play Store** (recommended): Tomato will soon be available (currently in closed testing) - on the Google Play Store. - [You can find it through this link](https://play.google.com/store/apps/details?id=org.nsh07.pomodoro). +- **Google Play Store** (recommended): Tomato is available on the Google Play Store. + [You can download it through this link](https://play.google.com/store/apps/details?id=org.nsh07.pomodoro). - **F-Droid** (recommended): Tomato is available on the official F-Droid repository. Simply open your preferred F-Droid app and search for Tomato. Updates on F-Droid are generally a week late. To get faster updates, you can install it through @@ -109,7 +108,7 @@ translating this project into languages you know. > To [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK > downloaded from GitHub, use the following signing certificate fingerprints: > ``` -> SHA1: B1:4E:17:93:11:E8:DB:D5:35:EF:8D:E9:FB:8F:FF:08:F8:EC:65:08 +> SHA1: B1:4E:17:93:11:E8:DB:D5:35:EF:8D:E9:FB:8F:FF:08:F8:EC:65:08 > SHA256: 07:BE:F3:05:81:BA:EE:8F:45:EC:93:E4:7E:E6:8E:F2:08:74:E5:0E:F5:70:9C:78:B2:EE:67:AC:86:BE:4C:3D > ``` > The SHA256 and MD5 hashes of the individual APK files are also available in the `checksum.txt` @@ -143,8 +142,8 @@ This app was made possible by the following libraries: - [Roboto Flex](https://fonts.google.com/specimen/Roboto+Flex) by Google
-- [Open Runde](https://github.com/lauridskern/open-runde) by Laurids - Kern
+- [Inter](https://rsms.me/inter/) by + Rasmus Andersson
## Star History diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 713c0f0..434191e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -43,10 +43,14 @@ android { applicationId = "org.nsh07.pomodoro" minSdk = 27 targetSdk = 36 - versionCode = 17 - versionName = "1.6.2" + versionCode = 18 + versionName = "1.6.3" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + + androidResources { + generateLocaleConfig = true + } } buildTypes { diff --git a/app/src/foss/java/org/nsh07/pomodoro/billing/TomatoPlusPaywallDialog.kt b/app/src/foss/java/org/nsh07/pomodoro/billing/TomatoPlusPaywallDialog.kt index 6df4870..0d261bc 100644 --- a/app/src/foss/java/org/nsh07/pomodoro/billing/TomatoPlusPaywallDialog.kt +++ b/app/src/foss/java/org/nsh07/pomodoro/billing/TomatoPlusPaywallDialog.kt @@ -78,7 +78,7 @@ fun TomatoPlusPaywallDialog( ) Spacer(Modifier.height(16.dp)) Button(onClick = { uriHandler.openUri("https://coff.ee/nsh07") }) { - Text("Buy Me A Coffee") + Text(stringResource(R.string.bmc)) } } } diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/AlwaysOnDisplay.kt b/app/src/main/java/org/nsh07/pomodoro/ui/AlwaysOnDisplay.kt index f5d4af4..8ed8dcb 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/AlwaysOnDisplay.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/AlwaysOnDisplay.kt @@ -52,7 +52,6 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalView import androidx.compose.ui.platform.LocalWindowInfo import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Density @@ -65,7 +64,7 @@ import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import androidx.navigation3.ui.LocalNavAnimatedContentScope import kotlinx.coroutines.delay -import org.nsh07.pomodoro.ui.theme.AppFonts.openRundeClock +import org.nsh07.pomodoro.ui.theme.AppFonts.interClock import org.nsh07.pomodoro.ui.theme.TomatoTheme import org.nsh07.pomodoro.ui.timerScreen.TimerScreen import org.nsh07.pomodoro.ui.timerScreen.viewModel.TimerMode @@ -249,10 +248,10 @@ fun SharedTransitionScope.AlwaysOnDisplay( Text( text = timerState.timeStr, style = TextStyle( - fontFamily = openRundeClock, - fontWeight = FontWeight.Bold, + fontFamily = interClock, fontSize = 56.sp, - letterSpacing = (-2).sp + letterSpacing = (-2).sp, + fontFeatureSettings = "tnum" ), textAlign = TextAlign.Center, color = onSurface, diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/SettingsScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/SettingsScreen.kt index 2f8d2dd..e523c16 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/SettingsScreen.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/SettingsScreen.kt @@ -18,8 +18,10 @@ package org.nsh07.pomodoro.ui.settingsScreen import android.annotation.SuppressLint +import android.app.LocaleManager import android.content.Intent import android.net.Uri +import android.os.Build import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInHorizontally @@ -46,8 +48,10 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -68,6 +72,7 @@ import org.nsh07.pomodoro.service.TimerService import org.nsh07.pomodoro.ui.Screen import org.nsh07.pomodoro.ui.settingsScreen.components.AboutCard import org.nsh07.pomodoro.ui.settingsScreen.components.ClickableListItem +import org.nsh07.pomodoro.ui.settingsScreen.components.LocaleBottomSheet import org.nsh07.pomodoro.ui.settingsScreen.components.PlusPromo import org.nsh07.pomodoro.ui.settingsScreen.screens.AlarmSettings import org.nsh07.pomodoro.ui.settingsScreen.screens.AppearanceSettings @@ -76,6 +81,7 @@ import org.nsh07.pomodoro.ui.settingsScreen.viewModel.PreferencesState import org.nsh07.pomodoro.ui.settingsScreen.viewModel.SettingsViewModel import org.nsh07.pomodoro.ui.settingsScreens import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar +import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors import org.nsh07.pomodoro.ui.theme.CustomColors.topBarColors @@ -182,6 +188,22 @@ private fun SettingsScreen( val context = LocalContext.current val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior() + val currentLocales = + if (Build.VERSION.SDK_INT >= 33) { + context + .getSystemService(LocaleManager::class.java) + .applicationLocales + } else null + val currentLocalesSize = currentLocales?.size() ?: 0 + + var showLocaleSheet by remember { mutableStateOf(false) } + + if (showLocaleSheet && currentLocales != null) + LocaleBottomSheet( + currentLocales = currentLocales, + setShowSheet = { showLocaleSheet = it } + ) + NavDisplay( backStack = backStack, onBack = backStack::removeLastOrNull, @@ -266,6 +288,30 @@ private fun SettingsScreen( } item { Spacer(Modifier.height(12.dp)) } + + if (currentLocales != null) + item { + ClickableListItem( + leadingContent = { + Icon( + painterResource(R.drawable.language), + contentDescription = null + ) + }, + headlineContent = { Text(stringResource(R.string.language)) }, + supportingContent = { + Text( + if (currentLocalesSize > 0) currentLocales.get(0).displayName + else stringResource(R.string.system_default) + ) + }, + colors = listItemColors, + items = 1, + index = 0 + ) { showLocaleSheet = true } + } + + item { Spacer(Modifier.height(12.dp)) } } } } diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/AboutCard.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/AboutCard.kt index 1f85c76..14028fe 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/AboutCard.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/AboutCard.kt @@ -129,11 +129,11 @@ fun AboutCard( ) { Icon( painterResource(R.drawable.bmc), - contentDescription = "Buy me a coffee", + contentDescription = null, modifier = Modifier.height(24.dp) ) - Text(text = "Buy me a coffee") + Text(text = stringResource(R.string.bmc)) } } @@ -147,11 +147,11 @@ fun AboutCard( ) { Icon( painterResource(R.drawable.play_store), - contentDescription = "Rate on Google Play", + contentDescription = null, modifier = Modifier.size(20.dp) ) - Text(text = "Rate on Google Play") + Text(text = stringResource(R.string.rate_on_google_play)) } } } diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/LocaleBottomSheet.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/LocaleBottomSheet.kt new file mode 100644 index 0000000..2872fcf --- /dev/null +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/LocaleBottomSheet.kt @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2025 Nishant Mishra + * + * This file is part of Tomato - a minimalist pomodoro timer for Android. + * + * Tomato is free software: you can redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * Tomato is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tomato. + * If not, see . + */ + +package org.nsh07.pomodoro.ui.settingsScreen.components + +import android.app.LocaleConfig +import android.app.LocaleManager +import android.os.Build +import android.os.LocaleList +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi +import androidx.compose.material3.Icon +import androidx.compose.material3.ListItem +import androidx.compose.material3.ListItemDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.MaterialTheme.colorScheme +import androidx.compose.material3.MaterialTheme.shapes +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Text +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import kotlinx.coroutines.launch +import org.nsh07.pomodoro.R +import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors +import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.bottomListItemShape +import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.middleListItemShape +import org.nsh07.pomodoro.ui.theme.TomatoShapeDefaults.topListItemShape +import java.util.Locale + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) +@Composable +fun LocaleBottomSheet( + currentLocales: LocaleList, + setShowSheet: (Boolean) -> Unit, + modifier: Modifier = Modifier +) { + val context = LocalContext.current + val scope = rememberCoroutineScope() + + val supportedLocales = remember { + if (Build.VERSION.SDK_INT >= 33) { + LocaleConfig(context).supportedLocales + } else null + } + val supportedLocalesSize = supportedLocales?.size() ?: 0 + + val supportedLocalesList: List? = remember { + if (supportedLocales != null) { + buildList { + for (i in 0 until supportedLocalesSize) { + add(AppLocale(supportedLocales.get(i), supportedLocales.get(i).displayName)) + } + sortWith(compareBy { it.name }) + } + } else null + } + + val bottomSheetState = rememberModalBottomSheetState() + val listState = rememberLazyListState() + + ModalBottomSheet( + onDismissRequest = { setShowSheet(false) }, + sheetState = bottomSheetState, + modifier = modifier + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + text = stringResource(R.string.choose_language), + style = MaterialTheme.typography.labelLarge, + modifier = Modifier.padding(bottom = 16.dp) + ) + if (supportedLocalesList != null) { + LazyColumn( + verticalArrangement = Arrangement.spacedBy(2.dp), + state = listState, + modifier = Modifier + .padding(horizontal = 16.dp) + .clip(shapes.largeIncreased) + ) { + item { + ListItem( + headlineContent = { + Text(stringResource(R.string.system_default)) + }, + trailingContent = { + if (currentLocales.isEmpty) + Icon( + painterResource(R.drawable.check), + contentDescription = stringResource(R.string.selected) + ) + }, + colors = + if (currentLocales.isEmpty) + ListItemDefaults.colors( + containerColor = colorScheme.primaryContainer.copy( + 0.3f + ) + ) + else listItemColors, + modifier = Modifier + .clip(if (currentLocales.isEmpty) CircleShape else shapes.largeIncreased) + .clickable( + onClick = { + scope + .launch { bottomSheetState.hide() } + .invokeOnCompletion { + if (Build.VERSION.SDK_INT >= 33) { + context + .getSystemService(LocaleManager::class.java) + .applicationLocales = LocaleList() + } + setShowSheet(false) + } + } + ) + ) + } + item { + Spacer(Modifier.height(12.dp)) + } + itemsIndexed( + supportedLocalesList, + key = { _: Int, it: AppLocale -> it.name } + ) { index, it -> + ListItem( + headlineContent = { + Text(it.name) + }, + trailingContent = { + if (!currentLocales.isEmpty && it.locale == currentLocales.get(0)) + Icon( + painterResource(R.drawable.check), + tint = colorScheme.primary, + contentDescription = stringResource(R.string.selected) + ) + }, + colors = + if (!currentLocales.isEmpty && it.locale == currentLocales.get(0)) + ListItemDefaults.colors(containerColor = colorScheme.primaryContainer) + else listItemColors, + modifier = Modifier + .clip( + if (!currentLocales.isEmpty && it.locale == currentLocales.get(0)) + CircleShape + else when (index) { + 0 -> topListItemShape + supportedLocalesSize - 1 -> bottomListItemShape + else -> middleListItemShape + } + ) + .clickable( + onClick = { + scope + .launch { bottomSheetState.hide() } + .invokeOnCompletion { _ -> + if (Build.VERSION.SDK_INT >= 33) { + context.getSystemService(LocaleManager::class.java) + .applicationLocales = + LocaleList(it.locale) + } + setShowSheet(false) + } + } + ) + ) + } + } + } + } + } +} + +data class AppLocale( + val locale: Locale, + val name: String +) \ No newline at end of file diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/MinuteInputField.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/MinuteInputField.kt index 1b1f449..f34a694 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/MinuteInputField.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/MinuteInputField.kt @@ -34,13 +34,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import org.nsh07.pomodoro.ui.theme.AppFonts.openRundeClock +import org.nsh07.pomodoro.ui.theme.AppFonts.interClock import org.nsh07.pomodoro.ui.theme.CustomColors.listItemColors @OptIn(ExperimentalMaterial3ExpressiveApi::class) @@ -61,8 +60,7 @@ fun MinuteInputField( imeAction = imeAction ), textStyle = TextStyle( - fontFamily = openRundeClock, - fontWeight = FontWeight.Bold, + fontFamily = interClock, fontSize = 57.sp, letterSpacing = (-2).sp, color = colorScheme.onSurfaceVariant, diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/MinutesTransformation.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/MinutesTransformation.kt index 7598168..e9df5af 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/MinutesTransformation.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/components/MinutesTransformation.kt @@ -33,10 +33,9 @@ object MinutesInputTransformation : InputTransformation { object MinutesOutputTransformation : OutputTransformation { override fun TextFieldBuffer.transformOutput() { - if (this.length == 0) { - insert(0, "00") - } else if (this.toString().toInt() < 10) { - insert(0, "0") + when (this.length) { + 0 -> insert(0, "00") + 1 -> insert(0, "0") } } } \ No newline at end of file diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt index 27051d9..2d9b7df 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt @@ -1,8 +1,18 @@ /* * Copyright (c) 2025 Nishant Mishra * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This file is part of Tomato - a minimalist pomodoro timer for Android. + * + * Tomato is free software: you can redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * Tomato is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tomato. + * If not, see . */ package org.nsh07.pomodoro.ui.statsScreen @@ -65,7 +75,7 @@ import org.nsh07.pomodoro.BuildConfig import org.nsh07.pomodoro.R import org.nsh07.pomodoro.data.Stat import org.nsh07.pomodoro.ui.statsScreen.viewModel.StatsViewModel -import org.nsh07.pomodoro.ui.theme.AppFonts.openRundeClock +import org.nsh07.pomodoro.ui.theme.AppFonts.interClock import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar import org.nsh07.pomodoro.ui.theme.TomatoTheme import org.nsh07.pomodoro.utils.millisecondsToHoursMinutes @@ -209,7 +219,7 @@ fun StatsScreen( millisecondsToHoursMinutes(todayStat?.totalFocusTime() ?: 0) }, style = typography.displaySmall, - fontFamily = openRundeClock, + fontFamily = interClock, color = colorScheme.onPrimaryContainer, maxLines = 1, autoSize = TextAutoSize.StepBased(maxFontSize = typography.displaySmall.fontSize) @@ -236,7 +246,7 @@ fun StatsScreen( millisecondsToHoursMinutes(todayStat?.breakTime ?: 0) }, style = typography.displaySmall, - fontFamily = openRundeClock, + fontFamily = interClock, color = colorScheme.onTertiaryContainer, maxLines = 1, autoSize = TextAutoSize.StepBased(maxFontSize = typography.displaySmall.fontSize) @@ -270,7 +280,7 @@ fun StatsScreen( } ), style = typography.displaySmall, - fontFamily = openRundeClock + fontFamily = interClock ) Text( stringResource(R.string.focus_per_day_avg), @@ -346,7 +356,7 @@ fun StatsScreen( } ), style = typography.displaySmall, - fontFamily = openRundeClock + fontFamily = interClock ) Text( text = stringResource(R.string.focus_per_day_avg), @@ -423,7 +433,7 @@ fun StatsScreen( } ), style = typography.displaySmall, - fontFamily = openRundeClock + fontFamily = interClock ) Text( text = stringResource(R.string.focus_per_day_avg), diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/theme/Type.kt b/app/src/main/java/org/nsh07/pomodoro/ui/theme/Type.kt index 8231eb0..40005d4 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/theme/Type.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/theme/Type.kt @@ -1,59 +1,85 @@ /* * Copyright (c) 2025 Nishant Mishra * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This file is part of Tomato - a minimalist pomodoro timer for Android. + * + * Tomato is free software: you can redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * Tomato is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Tomato. + * If not, see . */ package org.nsh07.pomodoro.ui.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.ExperimentalTextApi -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontVariation import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp import org.nsh07.pomodoro.R +import org.nsh07.pomodoro.ui.theme.AppFonts.interBody +import org.nsh07.pomodoro.ui.theme.AppFonts.interLabel import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexHeadline import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTitle +val TYPOGRAPHY = Typography() + // Set of Material typography styles to start with val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ), - headlineSmall = TextStyle( - fontFamily = robotoFlexHeadline, - fontSize = 24.sp, - lineHeight = 32.sp, - letterSpacing = 0.sp, - ), - titleMedium = TextStyle( - fontFamily = robotoFlexTitle, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.15.sp, - ), - titleSmall = TextStyle( - fontFamily = robotoFlexTitle, - fontSize = 14.sp, - lineHeight = 20.sp, - letterSpacing = 0.1.sp - ) + displayLarge = TYPOGRAPHY.displayLarge.copy(fontFamily = robotoFlexHeadline), + displayMedium = TYPOGRAPHY.displayMedium.copy(fontFamily = robotoFlexHeadline), + displaySmall = TYPOGRAPHY.displaySmall.copy(fontFamily = robotoFlexHeadline), + headlineLarge = TYPOGRAPHY.headlineLarge.copy(fontFamily = robotoFlexHeadline), + headlineMedium = TYPOGRAPHY.headlineMedium.copy(fontFamily = robotoFlexHeadline), + headlineSmall = TYPOGRAPHY.headlineSmall.copy(fontFamily = robotoFlexHeadline), + titleLarge = TYPOGRAPHY.titleLarge.copy(fontFamily = robotoFlexTitle), + titleMedium = TYPOGRAPHY.titleMedium.copy(fontFamily = robotoFlexTitle), + titleSmall = TYPOGRAPHY.titleSmall.copy(fontFamily = robotoFlexTitle), + bodyLarge = TYPOGRAPHY.bodyLarge.copy(fontFamily = interBody), + bodyMedium = TYPOGRAPHY.bodyMedium.copy(fontFamily = interBody), + bodySmall = TYPOGRAPHY.bodySmall.copy(fontFamily = interBody), + labelLarge = TYPOGRAPHY.labelLarge.copy(fontFamily = interLabel), + labelMedium = TYPOGRAPHY.labelMedium.copy(fontFamily = interLabel), + labelSmall = TYPOGRAPHY.labelSmall.copy(fontFamily = interLabel) ) +@OptIn(ExperimentalTextApi::class) object AppFonts { - val openRundeClock = FontFamily( - Font(R.font.open_runde_bold_clock_only, FontWeight.Bold) + val interClock = FontFamily( + Font( + R.font.inter_variable, variationSettings = FontVariation.Settings( + FontWeight.Bold, + FontStyle.Normal + ) + ) + ) + + val interBody = FontFamily( + Font( + R.font.inter_variable, variationSettings = FontVariation.Settings( + FontWeight.Normal, + FontStyle.Normal + ) + ) + ) + + val interLabel = FontFamily( + Font( + R.font.inter_variable, variationSettings = FontVariation.Settings( + FontWeight.Medium, + FontStyle.Normal + ) + ) ) - @OptIn(ExperimentalTextApi::class) val robotoFlexTopBar = FontFamily( Font( R.font.roboto_flex_variable, @@ -73,7 +99,6 @@ object AppFonts { ) ) - @OptIn(ExperimentalTextApi::class) val robotoFlexHeadline = FontFamily( Font( R.font.roboto_flex_variable, @@ -85,7 +110,6 @@ object AppFonts { ) ) - @OptIn(ExperimentalTextApi::class) val robotoFlexTitle = FontFamily( Font( R.font.roboto_flex_variable, diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/AlarmDialog.kt b/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/AlarmDialog.kt index 7d13fa7..1adb99a 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/AlarmDialog.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/AlarmDialog.kt @@ -17,29 +17,35 @@ package org.nsh07.pomodoro.ui.timerScreen +import androidx.compose.foundation.background import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.wrapContentHeight -import androidx.compose.foundation.layout.wrapContentWidth -import androidx.compose.material3.AlertDialogDefaults -import androidx.compose.material3.BasicAlertDialog +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme.colorScheme import androidx.compose.material3.MaterialTheme.typography -import androidx.compose.material3.Surface import androidx.compose.material3.Text -import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties import org.nsh07.pomodoro.R +import org.nsh07.pomodoro.ui.theme.TomatoTheme @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -47,42 +53,57 @@ fun AlarmDialog( modifier: Modifier = Modifier, stopAlarm: () -> Unit ) { - BasicAlertDialog( + Dialog( onDismissRequest = stopAlarm, - modifier = modifier + properties = DialogProperties( + usePlatformDefaultWidth = false, + decorFitsSystemWindows = false + ) ) { - Surface( - modifier = Modifier - .wrapContentWidth() - .wrapContentHeight() - .clickable(onClick = stopAlarm), - shape = MaterialTheme.shapes.extraLarge, - tonalElevation = AlertDialogDefaults.TonalElevation, + Box( + contentAlignment = Alignment.Center, + modifier = modifier + .fillMaxSize() + .background(colorScheme.primaryContainer) + .clickable(onClick = stopAlarm) ) { - Column(modifier = Modifier.padding(24.dp)) { - Icon( - painter = painterResource(R.drawable.alarm), - contentDescription = stringResource(R.string.alarm), - modifier = Modifier.align(Alignment.CenterHorizontally) - ) - Spacer(Modifier.height(16.dp)) - Text( - text = stringResource(R.string.stop_alarm_question), - style = typography.headlineSmall, - modifier = Modifier.align(Alignment.CenterHorizontally) - ) - Spacer(Modifier.height(16.dp)) - Text( - text = stringResource(R.string.stop_alarm_dialog_text) - ) - Spacer(modifier = Modifier.height(24.dp)) - TextButton( - onClick = stopAlarm, - modifier = Modifier.align(Alignment.End), - ) { - Text(stringResource(R.string.stop_alarm)) + CompositionLocalProvider(LocalContentColor provides colorScheme.onPrimaryContainer) { + Column(modifier = Modifier.padding(24.dp)) { + Icon( + painter = painterResource(R.drawable.alarm), + contentDescription = stringResource(R.string.alarm), + modifier = Modifier + .align(Alignment.CenterHorizontally) + .size(40.dp) + ) + Spacer(Modifier.height(16.dp)) + Text( + text = stringResource(R.string.stop_alarm_question), + style = typography.headlineSmall, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + Spacer(Modifier.height(16.dp)) + Text( + text = stringResource(R.string.stop_alarm_dialog_text), + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.height(24.dp)) + Button( + onClick = stopAlarm, + modifier = Modifier.align(Alignment.End), + ) { + Text(stringResource(R.string.stop_alarm)) + } } } } } } + +@Preview +@Composable +fun AlarmDialogPreview() { + TomatoTheme { + AlarmDialog(stopAlarm = {}) + } +} diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/TimerScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/TimerScreen.kt index a1a44f4..1119189 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/TimerScreen.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/timerScreen/TimerScreen.kt @@ -87,7 +87,6 @@ import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Devices import androidx.compose.ui.tooling.preview.Preview @@ -95,7 +94,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation3.ui.LocalNavAnimatedContentScope import org.nsh07.pomodoro.R -import org.nsh07.pomodoro.ui.theme.AppFonts.openRundeClock +import org.nsh07.pomodoro.ui.theme.AppFonts.interClock import org.nsh07.pomodoro.ui.theme.AppFonts.robotoFlexTopBar import org.nsh07.pomodoro.ui.theme.TomatoTheme import org.nsh07.pomodoro.ui.timerScreen.viewModel.TimerAction @@ -283,10 +282,10 @@ fun SharedTransitionScope.TimerScreen( Text( text = timerState.timeStr, style = TextStyle( - fontFamily = openRundeClock, - fontWeight = FontWeight.Bold, + fontFamily = interClock, fontSize = 72.sp, - letterSpacing = (-2).sp + letterSpacing = (-2).sp, + fontFeatureSettings = "tnum" ), textAlign = TextAlign.Center, maxLines = 1, @@ -308,7 +307,7 @@ fun SharedTransitionScope.TimerScreen( timerState.currentFocusCount, timerState.totalFocusCount ), - fontFamily = openRundeClock, + fontFamily = interClock, style = typography.titleLarge, color = colorScheme.outline ) @@ -498,8 +497,7 @@ fun SharedTransitionScope.TimerScreen( Text( it, style = TextStyle( - fontFamily = openRundeClock, - fontWeight = FontWeight.Bold, + fontFamily = interClock, fontSize = 22.sp, lineHeight = 28.sp, color = if (timerState.nextTimerMode == TimerMode.FOCUS) colorScheme.primary else colorScheme.tertiary, diff --git a/app/src/main/res/drawable/language.xml b/app/src/main/res/drawable/language.xml new file mode 100644 index 0000000..c1ab95e --- /dev/null +++ b/app/src/main/res/drawable/language.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/app/src/main/res/font/inter_variable.ttf b/app/src/main/res/font/inter_variable.ttf new file mode 100644 index 0000000..4ab79e0 Binary files /dev/null and b/app/src/main/res/font/inter_variable.ttf differ diff --git a/app/src/main/res/font/open_runde_bold_clock_only.otf b/app/src/main/res/font/open_runde_bold_clock_only.otf deleted file mode 100644 index 1c18ecf..0000000 Binary files a/app/src/main/res/font/open_runde_bold_clock_only.otf and /dev/null differ diff --git a/app/src/main/res/resources.properties b/app/src/main/res/resources.properties new file mode 100644 index 0000000..d694416 --- /dev/null +++ b/app/src/main/res/resources.properties @@ -0,0 +1,17 @@ +# +# Copyright (c) 2025 Nishant Mishra +# +# This file is part of Tomato - a minimalist pomodoro timer for Android. +# +# Tomato is free software: you can redistribute it and/or modify it under the terms of the GNU +# General Public License as published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# Tomato is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even +# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along with Tomato. +# If not, see . +# +unqualifiedResLocale=en \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4f8636e..061574a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -57,11 +57,20 @@ Timer Timer-Fortschritt Always-On Display - Tippe irgendwo, während der Timer angezeigt wird, um in den AOD-Modus zu wechseln. + Tippe irgendwo, während der Timer angezeigt wird, um in den AOD-Modus zu wechseln Letztes Jahr Aussehen Dauer Sound Bitte nicht stören ‚Bitte nicht stören‘ aktivieren, wenn ein Fokus-Timer läuft + Hole dir Tomato+ + Dynamische Farben + Design an Hintergrundbild anpassen + Tomato FOSS + In dieser Version sind alle Funktionen freigeschaltet. Wenn dir die App gefällt, kannst du mich gerne mit einer Spende auf %1$s unterstützen. + Sprache + Sprache wählen + Im Play Store bewerten + Ausgewählt diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e4112f4..3515de3 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -66,8 +66,12 @@ Activer le mode ne pas déranger pendant un minuteur de concentration Couleur dynamique Adapter les couleurs à celles de votre fond d\'écran - Toutes les fonctionnalités sont déverrouillées dans cette version. Si mon application a fait une différence dans votre vie, veuillez envisager de me soutenir en faisant un don de %1$s. + Toutes les fonctionnalités sont déverrouillées dans cette version. Si mon application a fait une différence dans votre vie, veuillez envisager de me soutenir en faisant un don sur %1$s. Tomato+ Obtenir Tomato+ Tomato FOSS + Langue + Choisissez la langue + Noter sur Google Play + Selectionné diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml new file mode 100644 index 0000000..55344e5 --- /dev/null +++ b/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e857b72..0d845ec 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -18,7 +18,7 @@ Esquema de cores Dinâmico Cor - Padrão do sistema + Sistema Alarme Claro Escuro @@ -29,7 +29,7 @@ Tema escuro Use um tema preto escuro puro Tocar o alarme quando um timer for concluído - Vibrar + Vibração Vibrar quanto um timer for concluído Tema Configurações @@ -56,4 +56,21 @@ Próximo Timer Progresso do timer + Always On Display + Toque em qualquer lugar da tela enquanto visualiza o cronômetro para alternar para o modo Always On Display + Último ano + Aparência + Durações + Som + Não perturbar + Ative o modo Não Perturbe ao usar o cronômetro de foco + Obtenha o Tomato+ + Cor dinâmica + Adapte as cores do tema à partir do seu papel de parede + Tomato FOSS + Todos os recursos estão desbloqueados nesta versão. Se meu app fez a diferença na sua vida, considere me apoiar fazendo uma doação em %1$s. + Idioma + Escolher idioma + Avalie no Google Play + Selecionado diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000..f2b8052 --- /dev/null +++ b/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,76 @@ + + + Сигнал + Воспроизвести сигнал по окончании таймера + Звук сигнала + Всегда Включенный Экран + Переходить в режим Всегда Включенный Экран при нажатии на любое место при просмотре таймера + Чёрная тема + Использовать чёрный цвет в тёмной теме + Перерыв + Выбрать цветовую схему + Выбрать тему + Цвет + Цветовая схема + Готово + Тёмная + Динамическая + Выход + Фокус + Фокусировок в день (среднее) + Последний месяц + Последняя неделя + Последний год + Светлая + Долгий перерыв + %1$s минут осталось + Анализ месячной продуктивности + Ещё + Больше информации + Ок + Пауза + Приостановлено + Пуск + Сессия — это последовательность интервалов помодоро, которые содержат интервалы фокусировки, короткие интервалы перерыва и длинный интервал перерыва. Последний перерыв в сеансе — всегда долгий перерыв. + Анализ продуктивности + Продолжительность фокусировки в разное время дня + Перезапуск + Длинна сессии + Интервалы фокусировки в одной сессии: %1$d + Настройки + Короткий перерыв + Пропустить + Перейти далее + Начать + Начать далее + Статистика + Стоп + Сигнал остановки + Текущая сессия завершена. Нажмите в любое место для остановки сигнала. + Остановить сигнал? + Система + Тема + Таймер + Прогресс таймера + %1$d из %2$d + Сегодня + Далее + Далее: %1$s (%2$s) + Вибрация + Вибрация при завершении таймера + Анализ недельной продуктивности + Звук + Не беспокоить + Включить режим Не беспокоить во время таймера фокусировки + Получить Tomato+ + Динамические цвета + Использовать цвета темы в соответствии с вашими обоями + В этой версии разблокированы все функции. Если моё приложение изменило вашу жизнь, пожалуйста, рассмотрите возможность поддержать меня, сделав пожертвование на %1$s. + Язык + Выбрать язык + Оценить в Google Play + Выбрано + Длительности + Отображение + Tomato (свободное и открытое программное обеспечение) + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e4d397e..2930c2c 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -64,4 +64,13 @@ Ses Rahatsız Etmeyin Odaklanma sayacı çalışırken RE\'yi aç + Tomato+ edin + Dinamik renk + Tema renklerini duvar kağıdınızdan alın + Tomato FOSS + Bu sürümde tüm özelliklerin kilidi açılmıştır. Uygulamam hayatınızda bir fark yarattıysa, lütfen %1$s üzerinden bağış yaparak beni desteklemeyi düşünün. + Dil + Dil seç + Google Play\'de değerlendir + Seçilen diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 6b782fa..efe42b7 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -70,4 +70,8 @@ Адаптуйте кольори теми зі своїх шпалер Tomato FOSS Усі функції розблоковано в цій версії. Якщо мій додаток допоміг Вам у житті, будь ласка, підтримайте мене, зробивши пожертву на %1$s. + Мова + Вибрати мову + Оцінити на Google Play + Обрано diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 53dfcb2..2bf6203 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -64,4 +64,13 @@ 声音 勿扰模式 运行「专注」计时器时打开勿扰 + 获取 Tomato+ + 动态颜色 + 从你的壁纸中提取主题色 + Tomato FOSS + 所有功能在此版本中处于解锁状态。如果我的应用让你的生活有所不同,请考虑在 %1$s 上捐款支持我。 + 语言 + 选择语言 + 在 Google Play 上评价 + 已选中 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index ee44adb..098513d 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1,73 +1,78 @@ - 開始 - 停止 - 專注 - 短休息 - 長休息 - 退出 - 跳過 - 停止鬧鐘 - 剩餘%1$s - 已暫停 - 已完成 - 下一個: %1$s (%2$s) - 開始下一個 - 選擇配色方案 - 好的 - 配色方案 - 動態 - 顏色 - 系統 鬧鐘 - 亮色 - 暗色 - 選擇主題 - 生產力分析 - 一天中不同時間的專注持續時間 - 鬧鐘鈴聲 + 計時器結束時響鈴 + 鬧鐘聲音 + 螢幕長亮模式 + 在計時畫面任意點擊以切換至螢幕長亮模式 + Tomato 純黑主題 - 使用純黑色主題 - 計時器完成時響起鬧鈴 - 振動 - 當計時器完成時震動 - 主题 - 设置 - 会话时长 - 单次专注时间间隔: %1$d - 一个“会话”是由多个番茄钟组成的序列,其中包含专注时间段、短休息和长休息。一个会话中的最后一次休息必然是长休息。 - 统计 - 今天 + 使用純黑的深色主題 休息 - 上周 - 每天平均專注時間 - 更多資訊 - 每週生產力分析 - 上月 - 每月生产力分析 - 停止鬧鐘? - 當前計時器會話已經完成。 點擊任意位置停止鬧鐘。 - %1$d of %2$d + 選擇配色方案 + 選擇主題 + 顏色 + 配色方案 + 已完成 + 深色 + 動態 + 離開 + 專注 + 每日平均專注次數 + 上個月 + 上週 + 去年 + 淺色 + 長休息 + 剩餘 %1$s 分鐘 + 每月生產力分析 更多 - 暂停 - 开始 - 重置 - 跳至下一个 - 接下来 - 计时 - 计时进度 - 上年 - 熄屏模式 + 更多資訊 + 確定 + 暫停 + 已暫停 + 開始 + 「循環」是一系列番茄工作階段的組合,包含專注時間、短休息與長休息。每個循環的最後一段休息都是長休息。 + 生產力分析 + 分析一天中不同時段的專注時長 + 重新開始 + 循環長度 + 每個循環中的專注次數:%1$d + 設定 + 短休息 + 跳過 + 跳至下一個 + 開始 + 開始下一個 + 統計 + 停止 + 停止鬧鐘 + 目前的計時已完成。輕觸螢幕任意位置以停止鬧鐘。 + 要停止鬧鐘嗎? + 系統預設 + 主題 + 計時器 + 計時進度 + 第 %1$d / 共 %2$d + 今天 + 下一個 + 下一個:%1$s(%2$s) + 震動 + 計時器結束時震動提醒 + 每週生產力分析 外觀 - 在查看計時器時,點擊任意位置即可切換至熄屏模式 - 持續時間 + 時長 聲音 請勿打擾 - 在執行專注計時器時開啟勿擾模式 - 獲取 Tomato+ + 執行專注計時器時自動開啟請勿打擾模式 Tomato+ - 動態顔色 - 調整主題顏色為你的壁紙顔色 + 取得 Tomato+ + 動態配色 + 根據桌布自動調整主題顏色 Tomato FOSS - 所有功能在此版本中均已解鎖。如果我的應用程式改變了您的生活,請考慮透過捐贈 %1$s 來支持我。 + 此版本已解鎖所有功能。若這個 App 對你有所幫助,歡迎至 %1$s 贊助支持開發者。 + 語言 + 選擇語言 + 在 Google Play 上評分 + 已選擇 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 79d3d99..a608b21 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -87,4 +87,9 @@ Adapt theme colors from your wallpaper Tomato FOSS All features are unlocked in this version. If my app made a difference in your life, please consider supporting me by donating on %1$s. + Language + Choose language + Rate on Google Play + BuyMeACoffee + Selected \ No newline at end of file diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt index a6e9c5e..7fd544d 100644 --- a/fastlane/metadata/android/de-DE/full_description.txt +++ b/fastlane/metadata/android/de-DE/full_description.txt @@ -1,6 +1,6 @@ Tomato ist ein minimalistischer Pomodoro-Timer für Android, der auf Material 3 Expressive basiert. -Tomato ist vollständig kostenlos und Open Source, für immer. Unter https://github.com/nsh07/Tomato finden Sie den Quellcode und können Fehler melden oder Funktionen vorschlagen +Tomato ist vollständig kostenlos und Open Source, für immer. Unter https://github.com/nsh07/Tomato finden Sie den Quellcode und können Fehler melden oder Funktionen vorschlagen Funktionen: -Einfache, minimalistische Benutzeroberfläche, die auf den neuesten Material 3 Expressive-Richtlinien basiert diff --git a/fastlane/metadata/android/en-US/changelogs/18.txt b/fastlane/metadata/android/en-US/changelogs/18.txt new file mode 100644 index 0000000..656c639 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/18.txt @@ -0,0 +1,11 @@ +New features: +- New redesigned alarm screen +- New font used across the UI +- Language selection for Android 13+ + +Fixes: +- Fixed a crash that occurred when editing the time in settings +- Clock now stays in place even when the time changes + +Enhancements: +- Updated translations \ No newline at end of file diff --git a/fastlane/metadata/android/pt-BR/full_description.txt b/fastlane/metadata/android/pt-BR/full_description.txt index b9e7b5b..bd6c8e8 100644 --- a/fastlane/metadata/android/pt-BR/full_description.txt +++ b/fastlane/metadata/android/pt-BR/full_description.txt @@ -1 +1,12 @@ -

Tomato é um timer Pomodoro minimalista para Android baseado em Material 3 Expressive.


Funções:

  • Simples, interface minimalista baseada nas últimas diretrizes do Material 3 Expressive
  • Estatísticas detalhadas de tempo de trabalho/estudo de um jeito fácil de entender
    • Estatísticas do dia atual visíveis num relance
    • Estatísticas da última semana e do último mês mostrados de um jeito fácil de ler em um gráfico limpo
    • Estatísticas adicionais da última semana e mês mostrando que hora do dia você é mais produtivo
  • Parâmetros do timer customizáveis
+Tomato é um timer Pomodoro minimalista para Android baseado em Material 3 Expressive. + +Tomato é totalmente gratuito e de código aberto, para sempre. Você pode encontrar o código-fonte e reportar bugs ou sugerir melhorias em https://github.com/nsh07/Tomato + +Funções: +- Simples, interface minimalista baseada nas últimas diretrizes do Material 3 Expressive +- Estatísticas detalhadas de tempo de trabalho/estudo de um jeito fácil de entender + - Estatísticas do dia atual visíveis num relance + - Estatísticas da última semana e do último mês mostrados de um jeito fácil de ler em um gráfico limpo + - Estatísticas adicionais da última semana e mês mostrando que hora do dia você é mais produtivo +- Parâmetros do timer customizáveis +- Suporte para as últimas atualizações do Android 16 diff --git a/fastlane/metadata/android/ru-RU/full_description.txt b/fastlane/metadata/android/ru-RU/full_description.txt new file mode 100644 index 0000000..07b29aa --- /dev/null +++ b/fastlane/metadata/android/ru-RU/full_description.txt @@ -0,0 +1,12 @@ +Tomato — это минималистичный помодоро таймер для Android, основанный на Material 3 Expressive. + +Tomato полностью бесплатный и open-source для всех. Вы можете найти исходный код и сообщить о проблемах или предложить функции на https://github.com/nsh07/Tomato + +Особенности: +- Простой и минималистичный интерфейс, основанный на последних рекомендациях Material 3 Expressive +- Детальная статистика времени работы/учёбы в лёгкой для понимания форме + - Статистика текущего дня видна сразу + - Статистика за последнюю неделю и месяц показана на легко читаемом, чистом графике + - Дополнительная статистика за последнюю неделю и месяц, показывающая, в какое время дня вы наиболее продуктивны +- Настраиваемые параметры таймера +- Поддержка Android 16 Live Updates diff --git a/fastlane/metadata/android/ru-RU/short_description.txt b/fastlane/metadata/android/ru-RU/short_description.txt new file mode 100644 index 0000000..9e19005 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/short_description.txt @@ -0,0 +1 @@ +Минималистичный помодоро таймер diff --git a/fastlane/metadata/android/uk/full_description.txt b/fastlane/metadata/android/uk/full_description.txt index 175d3c5..fac0173 100644 --- a/fastlane/metadata/android/uk/full_description.txt +++ b/fastlane/metadata/android/uk/full_description.txt @@ -1,6 +1,6 @@ Tomato - мінімалістичний Pomodoro таймер для Android на базі Material 3 Expressive. -Tomato повністю безкоштовний та з відкритим вихідним кодом. Ви можете знайти вихідний код і повідомляти про помилки й пропонувати функції на GitHub: https://github.com/nsh07/Tomato. +Tomato повністю безкоштовний та з відкритим вихідним кодом, назавжди. Ви можете знайти вихідний код і повідомляти про помилки й пропонувати функції на GitHub: https://github.com/nsh07/Tomato. Особливості: - Простий, мінімалістичний інтерфейс на основі останніх рекомендацій Material 3 Expressive