? = 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