diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index c151c27..447478e 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -25,7 +25,7 @@ jobs: run: ./gradlew testFossDebugUnitTest - name: Upload debug APK artifact - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: tomato-debug path: ./app/build/outputs/apk/debug/app-debug.apk diff --git a/app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt b/app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt index 87877ea..3690012 100644 --- a/app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt +++ b/app/src/main/java/org/nsh07/pomodoro/data/StatDao.kt @@ -71,4 +71,7 @@ interface StatDao { @Query("SELECT date FROM stat ORDER BY date DESC LIMIT 1") suspend fun getLastDate(): LocalDate? + + @Query("DELETE FROM stat") + suspend fun clearAll() } \ No newline at end of file diff --git a/app/src/main/java/org/nsh07/pomodoro/data/StatRepository.kt b/app/src/main/java/org/nsh07/pomodoro/data/StatRepository.kt index 438fb48..3b1373e 100644 --- a/app/src/main/java/org/nsh07/pomodoro/data/StatRepository.kt +++ b/app/src/main/java/org/nsh07/pomodoro/data/StatRepository.kt @@ -43,6 +43,8 @@ interface StatRepository { fun getLastNDaysAverageFocusTimes(n: Int): Flow suspend fun getLastDate(): LocalDate? + + suspend fun deleteAllStats() } /** @@ -118,4 +120,8 @@ class AppStatRepository( statDao.getLastNDaysAvgStats(n) override suspend fun getLastDate(): LocalDate? = statDao.getLastDate() + + override suspend fun deleteAllStats() = + statDao.clearAll() + } \ No newline at end of file diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/ResetDataDialog.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/ResetDataDialog.kt new file mode 100644 index 0000000..b0d6729 --- /dev/null +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/ResetDataDialog.kt @@ -0,0 +1,107 @@ +package org.nsh07.pomodoro.ui.settingsScreen + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Card +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi +import androidx.compose.material3.Icon +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.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 org.nsh07.pomodoro.R +import org.nsh07.pomodoro.ui.theme.TomatoTheme + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) +@Composable +fun ResetDataDialog( + modifier: Modifier = Modifier, + onDismiss: () -> Unit, + resetData: () -> Unit +) { + Dialog( + onDismissRequest = onDismiss, + ) { + Card( + modifier = modifier + .clickable(onClick = onDismiss), + shape = RoundedCornerShape(16.dp), + ) { + Column(modifier = Modifier.padding(24.dp)) { + Icon( + painter = painterResource(R.drawable.clear), + contentDescription = null, + modifier = Modifier + .align(Alignment.CenterHorizontally) + .size(40.dp) + ) + Spacer(Modifier.height(16.dp)) + Text( + text = stringResource(R.string.reset_data), + textAlign = TextAlign.Center, + style = typography.headlineSmall, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + Spacer(Modifier.height(16.dp)) + Text( + text = stringResource(R.string.reset_data_dialog_text), + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.height(24.dp)) + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End + ) { + TextButton(onClick = onDismiss) { + Text(stringResource(android.R.string.cancel)) + } + + Spacer(modifier = Modifier.width(8.dp)) + + Button( + onClick = resetData, + shapes = ButtonDefaults.shapes(), + ) { + Text(stringResource(android.R.string.ok)) + } + } + } + + } + } +} + +@Preview +@Composable +fun PreviewResetDataDialog() { + TomatoTheme { + Surface { + ResetDataDialog( + onDismiss = { }, + resetData = { } + ) + } + } +} \ No newline at end of file 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 79dbda2..9ab8ae8 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 @@ -27,9 +27,11 @@ import androidx.compose.animation.slideOutHorizontally import androidx.compose.animation.togetherWith import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn @@ -42,6 +44,7 @@ import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.Scaffold import androidx.compose.material3.SliderState import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable @@ -170,6 +173,14 @@ private fun SettingsScreen( setShowSheet = { showLocaleSheet = it } ) + if(settingsState.isShowingEraseDataDialog){ + ResetDataDialog(resetData = { + onAction(SettingsAction.EraseData) + }, onDismiss = { + onAction(SettingsAction.CancelEraseData) + }) + } + NavDisplay( backStack = backStack, onBack = backStack::removeLastOrNull, @@ -294,6 +305,20 @@ private fun SettingsScreen( } item { Spacer(Modifier.height(12.dp)) } + + item { + Box( + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center + ){ + + TextButton( + onClick = { onAction(SettingsAction.AskEraseData) }, + ) { + Text(stringResource(R.string.reset_data)) + } + } + } } } } diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsAction.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsAction.kt index f7ee061..aa79399 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsAction.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsAction.kt @@ -33,4 +33,7 @@ sealed interface SettingsAction { data class SaveAlarmSound(val uri: Uri?) : SettingsAction data class SaveTheme(val theme: String) : SettingsAction data class SaveColorScheme(val color: Color) : SettingsAction + data object AskEraseData : SettingsAction + data object CancelEraseData : SettingsAction + data object EraseData : SettingsAction } diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsState.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsState.kt index c6fb3ea..390a8fe 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsState.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsState.kt @@ -35,6 +35,7 @@ data class SettingsState( val singleProgressBar: Boolean = false, val autostartNextSession: Boolean = false, val secureAod: Boolean = true, + val isShowingEraseDataDialog: Boolean = false, val focusTime: Long = 25 * 60 * 1000L, val shortBreakTime: Long = 5 * 60 * 1000L, diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsViewModel.kt b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsViewModel.kt index 99cee0e..3f772f2 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsViewModel.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/settingsScreen/viewModel/SettingsViewModel.kt @@ -47,6 +47,7 @@ import kotlinx.coroutines.launch import org.nsh07.pomodoro.TomatoApplication import org.nsh07.pomodoro.billing.BillingManager import org.nsh07.pomodoro.data.PreferenceRepository +import org.nsh07.pomodoro.data.StatRepository import org.nsh07.pomodoro.data.StateRepository import org.nsh07.pomodoro.service.ServiceHelper import org.nsh07.pomodoro.ui.Screen @@ -59,6 +60,7 @@ class SettingsViewModel( private val billingManager: BillingManager, private val preferenceRepository: PreferenceRepository, private val stateRepository: StateRepository, + private val statRepository: StatRepository, private val serviceHelper: ServiceHelper, private val time: MutableStateFlow ) : ViewModel() { @@ -120,6 +122,25 @@ class SettingsViewModel( is SettingsAction.SaveTheme -> saveTheme(action.theme) is SettingsAction.SaveBlackTheme -> saveBlackTheme(action.enabled) is SettingsAction.SaveAodEnabled -> saveAodEnabled(action.enabled) + is SettingsAction.AskEraseData -> askEraseData() + is SettingsAction.CancelEraseData -> cancelEraseData() + is SettingsAction.EraseData -> deleteStats() + } + } + + private fun cancelEraseData() { + viewModelScope.launch(Dispatchers.IO) { + _settingsState.update { currentState -> + currentState.copy(isShowingEraseDataDialog = false) + } + } + } + + private fun askEraseData() { + viewModelScope.launch(Dispatchers.IO) { + _settingsState.update { currentState -> + currentState.copy(isShowingEraseDataDialog = true) + } } } @@ -137,6 +158,17 @@ class SettingsViewModel( } } + private fun deleteStats() { + viewModelScope.launch(Dispatchers.IO) { + + serviceHelper.startService(TimerAction.ResetTimer) + statRepository.deleteAllStats() + _settingsState.update { + it.copy(isShowingEraseDataDialog = false) + } + } + } + fun runTextFieldFlowCollection() { focusFlowCollectionJob = viewModelScope.launch(Dispatchers.IO) { snapshotFlow { focusTimeTextFieldState.text } @@ -458,6 +490,7 @@ class SettingsViewModel( val appPreferenceRepository = application.container.appPreferenceRepository val serviceHelper = application.container.serviceHelper val stateRepository = application.container.stateRepository + val statRepository = application.container.appStatRepository val time = application.container.time SettingsViewModel( @@ -465,7 +498,8 @@ class SettingsViewModel( preferenceRepository = appPreferenceRepository, serviceHelper = serviceHelper, stateRepository = stateRepository, - time = time + statRepository = statRepository, + time = time, ) } } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 34fc3e1..48c3e2f 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -46,13 +46,13 @@ الشهر الماضي تحليل الإنتاجية الشهري إيقاف المنبه؟ - مؤقت الجلسة الحالية انتهي. اضغط في أي مكان لإيقاف المنبه. + المؤقت الحالي انتهي. اضغط في أي مكان لإيقاف المنبه. %1$d من %2$d أكثر إيقاف أبدا إعادة التعيين - تخطي الي التالي + تخطي إلى التالي القادم المؤقت تقدم المؤقت @@ -78,7 +78,7 @@ %1$dس %2$dد %1$dس %1$dد - عن + عن البرنامج ترجم Tomato إلى لغتك هل أعجبك التطبيق؟ اكتب مراجعة! ادعمني بتبرع صغير @@ -86,12 +86,12 @@ الترخيص وضع سماعات الرأس يعمل فقط على سماعات الرأس. إذا كانت سماعات الرأس مفصولة، يصدر المنبه عبر سماعة الهاتف عند مستوى صوت الوسائط. - التقدم في الجلسة فقط - عرض التقدم للجلسة الحالية بدلا من سلسلة الجلسات كلها + تقدم مبسط + عرض التقدم للمؤقت الحالي فقط في الإشعارات، وليس الجلسة بأكملها ابدأ المؤقت التالي بعد إيقاف المنبه التشغيل التلقائي في المؤقت القادم AOD الآمن قم بقفل جهازك تلقائيا بعد انتهاء الوقت، مع إبقاء AOD مرئياً - إعادة ضبط المؤقت + أُعيد ضبط المؤقت تراجع diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml new file mode 100644 index 0000000..c0126c4 --- /dev/null +++ b/app/src/main/res/values-bn/strings.xml @@ -0,0 +1,85 @@ + + + আলার্ম + টাইমার শেষ হলে এলার্ম বাজাও + এলার্মের শব্দ + অলওয়েজ অন ডিসপ্লে + Aod মোড এ যেতে টাইমার দেখার সময় যেকোনো জায়গায় চাপ দিন + রূপ + ব্ল্যাক থিম + পুরো কালো থিম ব্যবহার করুন + বিরতি + রং নির্বাচন করুন + ভাষা নির্বাচন করুন + থীম নির্ধারণ করুন + রং + রং বিন্যাস + সম্পূর্ণ + কালো + ডু নট ডিস্টার্ব + ফোকাস টাইমার চলাকালে ডিএনডি চালু করুন + সময়কাল + সামঞ্জস্যপূর্ণ + সামঞ্জস্যপূর্ণ রং + ওয়ালপেপার থেকে থিম এর রং গ্রহণ করুন + বের হন + মনোযোগ দিন + দৈনিক ফোকাস (গড়ে) + Tomato+ নিন + Tomato অনুবাদ করতে সাহায্য করুন + ভাষা + গত মাস + গত সপ্তাহ + গত বছর + উজ্জ্বল + দীর্ঘ বিরতি + %1$s মিনিট অবশিষ্ট + মাসিক উৎপাদনশীলতা বিশ্লেষণ + আরো + আরো তথ্য + ঠিক আছে + থামুন + স্থির + চালু + \"সেশন\" হলো Pomodoro এর একটি ক্রম যার মধ্যে ফোকাস সময়, ছোট বিরতি এবং একটি দীর্ঘ বিরতি ব্থাকে। একটি সেশন এর শেষ বিরতি সর্বদা একটি দীর্ঘ বিরতি। + উৎপাদনশীলতা বিশ্লেষণ + দিনের ভিন্ন ভিন্ন সময় ফোকাস স্থিতিকাল + গুগল প্লে তে রেট করুন + পুনরায় শুরু করুন + নির্ধারিত + সেশন দৈর্ঘ্য + প্রতি সেশনে ফোকাস দৈর্ঘ্য: %1$d + সেটিংস্ + ক্ষুদ্র বিরতি + বাদ দিন + পরবর্তীতে যান + শব্দ + শুরু + পরবর্তী শুরু করুন + তথ্য + থামুন + এলার্ম বন্ধ করুন + বর্তমান টাইমার শেষ হয়েছে। এলার্ম বন্ধ করতে যেকোনো জায়গায় চাপ দিন + এলার্ম বন্ধ করুন? + সিস্টেম + থীম + টাইমার + টাইমার গতি + %2$d এর %1$d + সেটিংস পরিবর্তন করতে টাইমার রিসেট দিন + আজকে + সব ফিচার এই ভার্সন এ উন্মুক্ত। আমার অ্যাপ আপনার জীবনে পরিবর্তন এনে থাকলে, আমাকে %1$s এ অনুদান দিয়ে সমর্থন করুন + এরপর + এরপর: %1$s (%2$s) + ভাইব্রেশন + টাইমার শেষ হলে ভাইব্রেট করবে + সাপ্তাহিক উৎপাদনশীলতার বিশ্লেষণ + এবাউট + আপনার ভাষায় Tomato অনুবাদ করুন + অ্যাপটি পছন্দ হয়েছে? রিভিউ দিন! + ছোট অনুদান দিয়ে সাহায্য করুন + Tomato+ দিয়ে আরো কাস্টোমাইজ করুন + লাইসেন্স + হেডফোন মোড + শুধুমাত্র হেডফোন এ বাজে। হেডফোন ডিসকানেক্টেড হলে, স্পিকার দিয়ে এলার্ম বাজে মিডিয়া ভলিউম এ + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ed12735..14832a9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -46,7 +46,7 @@ Letzter Monat Monatliche Produktivität Alarm stoppen? - Die aktuelle Timer-Sitzung ist beendet. Tippen Sie auf eine beliebige Stelle, um den Alarm zu stoppen. + Der aktuelle Timer ist beendet. Tippen Sie auf eine beliebige Stelle, um den Alarm zu stoppen. %1$d von %2$d Mehr Pausieren @@ -75,8 +75,8 @@ Ausgewählt Hilf beim Übersetzen von Tomato Den Timer zurücksetzen um Einstellungen zu ändern - %1$dh%2$ddm - %1$dh + %1$dh %2$dm + %1$d %1$dm Über Übersetze Tomato in deine Sprache @@ -86,6 +86,12 @@ Lizenz Kopfhörer Modus Spielt nur auf Kopfhörern. Wenn die Kopfhörer getrennt sind, wieder Alarm in Medienlautstärke abgespielt. - Sitzungs-Fortschritt - Zeige in den Benachrichtigungen nur den Fortschritt der aktuellen Sitzung an, nicht die gesamte Sequenz. + Vereinfachter Fortschritt + Zeige in den Benachrichtigungen nur den aktuellen Timer an, nicht die gesamte Sitzung + Starte den nächsten Timer nach dem Stoppen des Alarms + Nächsten Timer automatisch starten + Sicheres AOD + Sperrt dein Gerät nach einer bestimmten Zeit automatisch, während das AOD weiterhin sichtbar bleibt + Timer wurde zurückgesetzt + Rückgängig diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ff21f28..7ac1293 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -35,7 +35,7 @@ Mes pasado Análisis de productividad mensual ¿Parar Alarma? - La sesión actual del temporizador ha finalizado. Toque en cualquier lugar para detener la alarma. + El temporizador actual ha finalizado. Toca en cualquier lugar para detener la alarma. %1$d de %2$d Más Pausa @@ -67,11 +67,30 @@ Idioma Seleccionar idioma Seleccionado - Ayudar con la traducción + Ayuda a traducir Tomato Always On Display Toca en cualquier lugar mientras ves el temporizador para cambiar al modo AOD Activar NM al ejecutar un temporizador de concentración Todas las funciones están desbloqueadas en esta versión. Si mi aplicación ha marcado una diferencia en tu vida, por favor, considera apoyarme donando en %1$s. Valorar en Google Play Reinicia el temporizador para cambiar la configuración + %1$dh %2$dm + %1$dh + %1$dm + Acerca de + Traduce Tomato a tu idioma + ¿Te ha gustado la aplicación? ¡Escribe una reseña! + Apóyame con una pequeña donación + Personaliza aún más con Tomato+ + Licencia + Modo auriculares + Solo suena en los auriculares. Si se desconectan los auriculares, la alarma suena a través del altavoz al volumen multimedia. + Progreso simplificado + Mostrar solo el progreso del temporizador actual en las notificaciones, en lugar de toda la sesión + Iniciar el siguiente temporizador después de detener una alarma + Inicio automático del siguiente temporizador + AOD Seguro + Bloquea automáticamente tu dispositivo tras un tiempo de inactividad, manteniendo visible AOD (pantalla siempre encendida) + Reiniciar temporizador + Deshacer diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 998d998..751918b 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -1,8 +1,98 @@ - + هشدار زنگ هشدار هنگام پایان تایمر صدای زنگ نمایشگر همیشه روشن روی هر نقطه هنگام مشاهده تایمر ضربه بزنید تا به حالت نمایشگر همیشه روشن (AOD) بروید + ظاهر + تم مشکی + از تم کاملا مشکی تیره استفاده کنید + وقفه + انتخاب ترکیب رنگ + انتخاب زبان + انتخاب تم + رنگ + ترکیب رنگ + تکمیل شده + تاریک + مزاحم نشو + روشن کردن «مزاحم نشو» هنگام اجرای تایمر تمرکز + مدت ها + متغیر + رنگ متغیر + استفاده از رنگ های والپیپر برای تم + خروج + تمرکز + تمرکز روزانه (میانگین) + خرید گوجه+ + کمک برای ترجمه گوجه + %1$dس + زبان + آخرین ماه + آخرین هفته + آخرین سال + روشن + استراحت بلند + آنالیز خلاقیت ماهانه + بیشتر + اطلاعات بیشتر + باشه + توقف + متوقف شده + پخش + «جلسه» دنباله ای از فواصل پومودورو است که شامل فواصل فوکوس، وقفه های کوتاه و یک وقفه استراحت طولانی می باشد. آخرین استراحت جلسه همیشه یک استراحت طولانی است. + تحلیل بهره وری + %1$dس %2$dد + %1$s دقیقه باقیمانده + %1$dد + مدت زمان تمرکز در زمان های مختلف روز + امتیاز دادن در گوگل پلی + راه اندازی مجدد + انتخاب شده + طول جلسه + فواصل تمرکز در یک جلسه: %1$d + تنظیمات + استراحت کوتاه + رد کردن + برو به بعدی + صدا + شروع + شروع بعدی + آمار + توقف + توقف هشدار + تایمر فعلی کامل است. هر جایی را بزنید تا آلارم قطع شود. + هشدار متوقف شود؟ + سیستم + تم + تایمر + پیشرفت تایمر + %1$d از %2$d + تایمر را ریست کنید تا تنظیمات تغییر کند + امروز + تمام ویژگی ها در این نسخه باز شده اند. اگر اپلیکیشن من در زندگی شما تأثیری داشت، لطفا با کمک مالی به میزان %1$s از من حمایت کنید. + بعدی + بعدی: %1$s (%2$s) + ویبره + ویبره در اتمام تایمر + تحلیل بهره وری هفتگی + درباره + «گوجه فرنگی» را به زبان خود ترجمه کنید + اپلیکیشن را دوست داشتید؟ یک نقد بنویسید! + با یک کمک مالی کوچک از من حمایت کنید + شخصی سازی بیشتر با Tomato+ + مجوز + حالت هدفون + فقط با هدفون پخش می شود. اگر هدفون قطع شود، آلارم از بلندگو با حجم صدای media پخش می شود. + پیشرفت ساده شده + پیشرفت تایمر فعلی را فقط در اعلان ها نشان دهید، نه کل جلسه + بعد از قطع زنگ هشدار، تایمر بعدی را شروع کنید + استارت خودکار تایمر بعدی + (صفحه همیشه روشن) امن + دستگاه خود را به طور خودکار پس از یک تایم اوت قفل کنید، در حالی که AOD قابل مشاهده باقی می ماند + ریست تایمر + بازگردان + بازنشانی آمار + مطمئنی می خوای همه آمارهات رو ریست کنی؟ diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 566622e..c3d5877 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -86,4 +86,6 @@ Progression de la session uniquement Montre uniquement la progression de la session actuelle, au lieu de la séquence entière. Fonctionne uniquement avec un casque. Si le casque est déconnecté, l\'alarme retentit via le haut-parleur au volume des médias. + Réinitialiser les données + Êtes-vous sûr de vouloir réinitialiser toutes vos données ? diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 6903f56..6806015 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -1,96 +1,96 @@ - प्रारंभ करें - विराम करें - ध्यान + शुरू करें + रोकें + फोकस अलार्म - टाइमर पूरा होने पर अलार्म बजाएँ - अलार्म ध्वनि + टाइमर पूरा होने पर अलार्म बजाएं + अलार्म की आवाज ऑलवेज ऑन डिस्प्ले - AOD मोड चालू करने के लिए टाइमर देखते समय कहीं भी टैप करें + एओडी मोड ऑन करने के लिए टाइमर देखते समय कहीं भी टैप करें काली थीम - पूर्णतः काले रंग की थीम का उपयोग करें - विश्राम - रंग स्कीम चुनें + गहरे काले रंग की थीम का इस्तेमाल करें + ब्रेक + रंग चुनें थीम चुनें रंग - रंग स्कीम - पूर्ण - काला + रंग + पूरा हो गया + डार्क डायनामिक बंद करें - प्रतिदिन ध्यान (औसत) + हर दिन कितना फोकस करते है (औसत) पिछले महीने - पिछले सप्ताह - ध्वनि + पिछले हफ्ते + आवाज पिछले साल - सफ़ेद - दीर्घ विश्राम - %1$s मिनट शेष - मासिक उत्पादकता विश्लेषण - अधिक - अधिक जानकारी + लाइट + लंबा ब्रेक + %1$s मिनट बाकी + महीने का प्रोडक्टिविटी एनालिसिस + और + और जानकारी ठीक - रोकें - रुका हुआ + पॉज करें + पॉज किया हुआ है शुरू करें - एक \"सत्र\" पोमोडोरो अंतरालों का एक क्रम होता है जिसमें ध्यान अंतराल, लघु विश्राम अंतराल और एक दीर्घ विश्राम अंतराल शामिल होता है। सत्र का अंतिम विश्राम हमेशा एक दीर्घ विश्राम होता है। - उत्पादकता विश्लेषण - दिन के अलग-अलग समय पर ध्यान अवधि - पुनः शुरू करें - सत्र की अवधि - एक सत्र में ध्यान अंतराल: %1$d + \"पीरियड\" पोमोडोरो इंटरवल का एक सिक्वेंस होता है जिसमें फोकस इंटरवल, छोटे ब्रेक के इंटरवल और एक लंबे ब्रेक का इंटरवल होते है। पीरियड का आखिरी ब्रेक हमेशा एक लंबा ब्रेक होता है। + प्रोडक्टिविटी अनालिसिस + दिन के अलग-अलग समय पर फोकस की ड्यूरेशन + वापस शुरू करें + पीरियड की लंबाई + एक पीरियड में फोकस इंटरवल: %1$d सेटिंग - लघु विश्राम - अगला अंतराल - अगले पर जाएं + छोटा ब्रेक + स्किप करें + अगले पर स्किप करें अगला शुरू करें - आँकड़े + आंकड़े अलार्म बंद करें - वर्तमान टाइमर पूरा हो गया है। अलार्म बंद करने के लिए कहीं भी टैप करें। + मौजूदा टाइमर पूरा हो गया है। अलार्म बंद करने के लिए कहीं भी टैप करें। अलार्म बंद करें? सिस्टम थीम टाइमर - टाइमर पूर्णता + टाइमर प्रॉग्रेस %2$d में से %1$d आज - आगामी - आगामी: %1$s (%2$s) - वाइब्रेट + आने वाला + आने वाला: %1$s (%2$s) + वाइब्रेशन टाइमर पूरा होने पर वाइब्रेट करें - साप्ताहिक उत्पादकता विश्लेषण - दिखावट - अवधियां - परेशान न करें - फ़ोकस टाइमर चलाते समय \'परेशान न करें\' मोड चालू करें - Tomato+ प्राप्त करें + हफ्ते का प्रोडक्टिविटी अनालिसिस + रंग-रूप + ड्यूरेशन + डू नॉट डिस्टर्ब + फोकस टाइमर चलते समय \'डू नॉट डिस्टर्ब\' मोड ऑन करें + Tomato+ लें डायनामिक रंग - अपने वॉलपेपर से थीम रंग अनुकूलित करें - इस संस्करण में सभी सुविधाएँ अनलॉक हैं। अगर मेरे ऐप ने आपके जीवन में कोई बदलाव लाया है, तो कृपया %1$s पर दान करके मेरी मदद करें। + अपने वॉलपेपर से रंग चुनें + इस वर्जन में सभी फीचर अनलॉक हैं। अगर मेरे ऐप ने आपके लाइफ में कोई अंतर लाया है, तो प्लीज %1$s पर डोनेशन देकर मेरी मदद करें। भाषा भाषा चुनें Google Play पर रेटिंग दें - चयनित - Tomato के अनुवाद में मदद करें - सेटिंग्स बदलने के लिए टाइमर रीसेट करें + चुने गए + Tomato के ट्रांस्लेशन में मदद करें + सेटिंग बदलने के लिए टाइमर रीसेट करें %1$dघं %2$dमि %1$dघं %1$dमि ऐप के बारे में - Tomato का अपनी भाषा में अनुवाद करें + Tomato का अपनी भाषा में ट्रांस्लेशन करें ऐप पसंद आया? रिव्यू लिखें! - एक छोटे से दान से मेरी मदद करें - Tomato+ के साथ और कस्टमाइज़ करें + एक छोटे से डोनेशन से मेरी मदद करें + Tomato+ के साथ और कस्टमाइज करें लाइसेंस - हेडफ़ोन मोड - अलार्म सिर्फ़ हेडफ़ोन पर बजता है. अगर हेडफ़ोन कनेक्ट नहीं हैं, तो अलार्म मीडिया वॉल्यूम पर स्पीकर से बजता है। - सरलीकृत प्रगति - पूरे सत्र के बजाय, नोटिफ़िकेशन में केवल मौजूदा टाइमर की प्रगति दिखाएँ + हेडफोन मोड + अलार्म सिर्फ हेडफोन में बजेगा। अगर हेडफोन कनेक्ट नहीं हैं, तो अलार्म मीडिया वॉल्यूम पर स्पीकर से बजेगा। + सिम्पल प्रॉग्रेस + पूरे पीरियड के बजाए, सिर्फ मौजूदा टाइमर का प्रॉग्रेस नोटिफिकेशन में दिखाएं अलार्म बंद करने के बाद अगला टाइमर शुरू करें - टाइमर स्वयं आरंभ - सुरक्षित AOD - तय समय के बाद डिवाइस को स्वयं लॉक कर दें, जबकि AOD दिखता रहे + अगला टाइमर अपने-आप शुरू करें + सेक्योर ऑल्वेज ऑन डिस्प्ले + ऑल्वेज ऑन डिस्प्ले को ऑन रखते हुए कुछ समय के बाद डिवाइस को अपने-आप लॉक करें टाइमर रीसेट किया गया - पूर्ववत् करें + अंडू करें diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 86998c6..ebf967c 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -46,7 +46,7 @@ 先月 先月の生産性の分析 アラームを停止しますか? - 現在のタイマーセッションは終了しました。アラームを停止するには、任意の場所をタップしてください。 + 現在のタイマーは終了しました。アラームを停止するには、任意の場所をタップしてください。 %1$d / %2$d 追加 一時停止 @@ -85,4 +85,12 @@ ライセンス ヘッドホンモード ヘッドホンで再生します。ヘッドホンが接続されていない場合はスピーカーからメディアボリュームで再生されます。 + 簡素な進行状況 + 通知にセッション全体ではなく、現在のタイマーのみの進行状況を表示します + アラームを停止した後に次のアラームを開始します + 次のタイマーを自動的に開始 + 安全な常時表示ディスプレイ + 常時表示ディスプレイは見られるように維持したまま、タイムアウト後に自動的に端末をロックします + 戻す + タイマーはリセットされました diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 9a3cfe2..a514714 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -67,7 +67,7 @@ Wystaw ocenę na Google Play Dostosuj kolory motywu do swojej tapety Uzyskaj wersję Tomato+ - %dg %dm + %dh %dm %dg %dm „Sesja” to szereg interwałów pomodoro, który obejmuje interwały skupienia, krótkie przerwy i długą przerwę. Ostatnia przerwa w sesji to zawsze długa przerwa. diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml new file mode 100644 index 0000000..55344e5 --- /dev/null +++ b/app/src/main/res/values-ro/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b86b40d..743236d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -46,7 +46,7 @@ Статистика Стоп Сигнал остановки - Текущая сессия завершена. Нажмите в любое место для остановки сигнала. + Текущая таймер завершен. Нажмите в любое место для остановки сигнала. Остановить сигнал? Система Тема @@ -73,6 +73,25 @@ Длительности Отображение Tomato (свободное и открытое программное обеспечение) - Помочь с переводом + Помочь перевести Tomato Сбросить таймер для изменения настроек + %1$dч %2$dмин + %1$dч + %1$dмин + О приложении + Переведите Tomato на ваш язык + Понравилось приложение? Оставьте отзыв! + Поддержать меня небольшим донатом + Больше кастомизации с Tomato+ + Лицензия + Режим \"В наушниках\" + Воспроизведение только в наушниках. Если наушники не подключены, сигнал воспроизводится через основной динамик с громкостью медиа. + Упрощённый прогресс + Отображать в уведомлении прогресс только текущего таймера, а не всей сессии целиком. + Запускать следующий таймер после остановки сигнала + Автозапуск следующего таймера + Безопасный Всегда Включенный Экран + Автоматически блокировать устройство по истечении времени во время отображения Всегда Включенного Экрана + Таймер сброшен + Отменить diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index ab188e3..57e6fe8 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -45,7 +45,7 @@ Geçen ay Aylık verimlilik analizi Alarmı Durdur? - Mevcut zamanlayıcı oturumu tamamlandı. Alarmı durdurmak için herhangi bir yere dokunun. + Mevcut zamanlayıcı tamamlandı. Alarmı durdurmak için herhangi bir yere dokunun. %1$d / %2$d Daha fazla Duraklat @@ -86,6 +86,14 @@ Lisans Kulaklık modu Sadece kulaklıktan oynatır. Eğer kulaklık devre dışı ise alarmı direkt medya sesi düzeyinde hoparlörden oynatır. - Yalnızca bu oturumun ilerlemesi - Bildirimlerde tüm ilerlemeyi göstermektense yalnızca bu oturuma ait ilerlemeyi gösterir. + Basitleştirilmiş ilerleme + Bildirimlerde tüm oturumu göstermektense yalnızca bu zamanlayıcıya ait ilerlemeyi gösterir. + Alarmı durdurduktan hemen sonra bir sonraki zamanlayıcıyı başlat + Sonraki zamanlayıcıyı otomatik başlat + Güvenli AOD + Belirli bir zamandan sonra cihazınızı otomatik olarak kilitler, AOD\'u halen görünür tutar + Zamanlayıcı sıfırlandı + Geri al + İstatistikleri sıfırla + Tüm istatistiklerini sıfırlamak istediğinden eminmisin? diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c9b77da..e09872c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -46,7 +46,7 @@ 上月 月生产力分析 要停止响铃吗? - 当前计时小节已完成. 轻触任何位置来停止响铃. + 当前计时已完成. 轻触任何位置来停止响铃. 更多 暂停 开始 @@ -86,6 +86,6 @@ 许可证 耳机模式 仅在插入耳机时播放。如果耳机连接断开,闹铃以媒体音量通过扬声器播放。 - 仅会话进度 - 在通知中只显示当前会话的进度,而非完整序列的进度。 + 简化进度 + 在通知中只显示当前计时器的进度,而非完整会话的进度。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9965c7a..d5c4f47 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -88,6 +88,14 @@ 授權條款 耳機模式 僅透過耳機播放。若耳機斷線,鬧鐘將以媒體音量從喇叭播放。 - 僅顯示工作階段進度 - 在通知中僅顯示目前工作階段的進度,而非完整流程。 + 簡化進度顯示 + 在通知中僅顯示目前計時的進度,而非整個工作階段。 + 復原 + 重置統計資料 + 你確定要重置統計資料嗎? + 停止鬧鐘後自動開始下一個計時 + 自動開始下一個計時 + 螢幕長亮模式安全鎖定 + 在逾時後自動鎖定裝置,同時維持螢幕長亮模式顯示 + 計時已重設 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 37aa7f9..a65a91e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -120,4 +120,6 @@ Focus history of the past year. Deeper colors represent a longer duration. Cells are grouped by month. Tap on cells for more info. Focus history calendar Focus history of the past month. Days of the previous month are marked with a different color. Click on a date for more info. + Reset stats + Are you sure you want to reset all your stats? \ No newline at end of file diff --git a/fastlane/metadata/android/tr-TR/full_description.txt b/fastlane/metadata/android/tr-TR/full_description.txt index e61dc3e..2a6187e 100644 --- a/fastlane/metadata/android/tr-TR/full_description.txt +++ b/fastlane/metadata/android/tr-TR/full_description.txt @@ -1,11 +1,11 @@ -Tomato, Material 3 Expressive tabanlı, Android için minimalist bir Pomodoro sayacıdır. +Tomato, Material 3 Expressive tabanlı, Android için minimal bir Pomodoro sayacıdır. Tomato tamamen ücretsizdir ve sonsuza kadar açık kaynaklı kalacaktır. Kaynak koduna ulaşmak, hata bildirmek veya özellik önermek için: https://github.com/nsh07/Tomato Özellikler: - En son Material 3 Expressive yönergelerine dayalı basit, minimalist kullanıcı arayüzü -- Çalışma/ders çalışma sürelerinizin kolay anlaşılır şekilde sunulan ayrıntılı istatistikleri - - Güncel güne ait istatistikler bir bakışta görülebilir +- Çalışma/ders çalışma sürelerinizin kolay anlaşılır şekilde sunulan ayrıntılı istatistikler + - Güncel günün istatistikleri bir bakışta görülebilir - Son hafta ve son aya ait istatistikler, okunması kolay ve temiz bir grafikte gösterilir - Son hafta ve son aya ait, günün hangi saatinde en üretken olduğunuzu gösteren ek istatistikler - Özelleştirilebilir zamanlayıcı parametreleri diff --git a/fastlane/metadata/android/tr-TR/short_description.txt b/fastlane/metadata/android/tr-TR/short_description.txt index bac83fe..c4127e6 100644 --- a/fastlane/metadata/android/tr-TR/short_description.txt +++ b/fastlane/metadata/android/tr-TR/short_description.txt @@ -1 +1 @@ -Minimalist Pomodoro sayacı +Minimal Pomodoro zamanlayıcısı