diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/extension/ViewDataExensions.kt b/core/src/main/java/com/example/util/simpletimetracker/core/extension/ViewDataExensions.kt index 92992ba72..c94497f72 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/extension/ViewDataExensions.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/extension/ViewDataExensions.kt @@ -4,6 +4,7 @@ import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.core.viewData.ChangeRecordDateTimeState import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.RangeLength +import com.example.util.simpletimetracker.domain.model.RecordDataSelectionDialogResult import com.example.util.simpletimetracker.domain.model.RecordsFilter import com.example.util.simpletimetracker.feature_base_adapter.runningRecord.GoalTimeViewData import com.example.util.simpletimetracker.feature_views.viewData.RecordTypeIcon @@ -11,6 +12,7 @@ import com.example.util.simpletimetracker.navigation.params.screen.ChangeRecordD import com.example.util.simpletimetracker.navigation.params.screen.ChangeRunningRecordParams import com.example.util.simpletimetracker.navigation.params.screen.RangeLengthParams import com.example.util.simpletimetracker.navigation.params.screen.RangeParams +import com.example.util.simpletimetracker.navigation.params.screen.RecordTagSelectionParams import com.example.util.simpletimetracker.navigation.params.screen.RecordTypeIconParams import com.example.util.simpletimetracker.navigation.params.screen.RecordsFilterParam @@ -203,3 +205,12 @@ fun RangeLength.toParams(): RangeLengthParams { ) } } + +fun RecordDataSelectionDialogResult.toParams(): List { + return fields.map { + when (it) { + is RecordDataSelectionDialogResult.Field.Tags -> RecordTagSelectionParams.Field.Tags + is RecordDataSelectionDialogResult.Field.Comment -> RecordTagSelectionParams.Field.Comment + } + } +} diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/PrefsRepoImpl.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/PrefsRepoImpl.kt index b1480e2b3..e6969505a 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/PrefsRepoImpl.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/PrefsRepoImpl.kt @@ -316,6 +316,14 @@ class PrefsRepoImpl @Inject constructor( KEY_SHOW_RECORD_TAG_SELECTION_EXCLUDE_ACTIVITIES, emptySet(), ) + override var showCommentInput: Boolean by prefs.delegate( + KEY_SHOW_COMMENT_INPUT, false, + ) + + override var commentInputExcludeActivities: Set by prefs.delegate( + KEY_SHOW_COMMENT_INPUT_EXCLUDE_ACTIVITIES, emptySet(), + ) + override var autostartPomodoroActivities: Set by prefs.delegate( KEY_AUTOSTART_POMODORO_ACTIVITIES, emptySet(), ) @@ -597,6 +605,8 @@ class PrefsRepoImpl @Inject constructor( const val KEY_KEEP_SCREEN_ON = "keepScreenOn" const val KEY_SHOW_RECORD_TAG_SELECTION = "showRecordTagSelection" const val KEY_SHOW_RECORD_TAG_SELECTION_EXCLUDE_ACTIVITIES = "showRecordTagSelectionExcludeActivities" + const val KEY_SHOW_COMMENT_INPUT = "showCommentInput" + const val KEY_SHOW_COMMENT_INPUT_EXCLUDE_ACTIVITIES = "showCommentInputExcludeActivities" const val KEY_AUTOSTART_POMODORO_ACTIVITIES = "autostartPomodoroActivities" const val KEY_RECORD_TAG_SELECTION_CLOSE_AFTER_ONE = "recordTagSelectionCloseAfterOne" const val KEY_AUTOMATED_TRACKING_SEND_EVENTS = "automatedTrackingSendEvents" diff --git a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/BackupPrefsRepo.kt b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/BackupPrefsRepo.kt index e29b088d0..ca4fa8db3 100644 --- a/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/BackupPrefsRepo.kt +++ b/data_local/src/main/java/com/example/util/simpletimetracker/data_local/resolver/BackupPrefsRepo.kt @@ -49,6 +49,8 @@ import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companio import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companion.KEY_REVERSE_ORDER_IN_CALENDAR import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companion.KEY_SHOW_ACTIVITY_FILTERS import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companion.KEY_SHOW_CALENDAR_BUTTON_ON_RECORDS_TAB +import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companion.KEY_SHOW_COMMENT_INPUT +import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companion.KEY_SHOW_COMMENT_INPUT_EXCLUDE_ACTIVITIES import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companion.KEY_SHOW_GOALS_SEPARATELY import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companion.KEY_SHOW_NOTIFICATIONS import com.example.util.simpletimetracker.data_local.repo.PrefsRepoImpl.Companion.KEY_SHOW_NOTIFICATIONS_CONTROLS @@ -202,6 +204,8 @@ class BackupPrefsRepo @Inject constructor( PrefsProcessor(KEY_SHOW_RECORD_TAG_SELECTION, ::showRecordTagSelection), PrefsProcessor(KEY_RECORD_TAG_SELECTION_CLOSE_AFTER_ONE, ::recordTagSelectionCloseAfterOne), PrefsProcessor(KEY_SHOW_RECORD_TAG_SELECTION_EXCLUDE_ACTIVITIES, ::recordTagSelectionExcludeActivities), + PrefsProcessor(KEY_SHOW_COMMENT_INPUT, ::showCommentInput), + PrefsProcessor(KEY_SHOW_COMMENT_INPUT_EXCLUDE_ACTIVITIES, ::commentInputExcludeActivities), PrefsProcessor(KEY_AUTOSTART_POMODORO_ACTIVITIES, ::autostartPomodoroActivities), PrefsProcessor(KEY_AUTOMATED_TRACKING_SEND_EVENTS, ::automatedTrackingSendEvents), PrefsProcessor(KEY_REPEAT_BUTTON_TYPE, ::repeatButtonType), diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/AddRunningRecordMediator.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/AddRunningRecordMediator.kt index 0c4b1b99d..f98f1fda2 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/AddRunningRecordMediator.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/AddRunningRecordMediator.kt @@ -2,6 +2,7 @@ package com.example.util.simpletimetracker.domain.interactor import com.example.util.simpletimetracker.domain.model.Range import com.example.util.simpletimetracker.domain.model.Record +import com.example.util.simpletimetracker.domain.model.RecordDataSelectionDialogResult import com.example.util.simpletimetracker.domain.model.RecordType import com.example.util.simpletimetracker.domain.model.ResultContainer import com.example.util.simpletimetracker.domain.model.RunningRecord @@ -18,7 +19,7 @@ class AddRunningRecordMediator @Inject constructor( private val recordTypeToDefaultTagInteractor: RecordTypeToDefaultTagInteractor, private val notificationGoalCountInteractor: NotificationGoalCountInteractor, private val activityStartedStoppedBroadcastInteractor: ActivityStartedStoppedBroadcastInteractor, - private val shouldShowTagSelectionInteractor: ShouldShowTagSelectionInteractor, + private val shouldShowRecordDataSelectionInteractor: ShouldShowRecordDataSelectionInteractor, private val pomodoroStartInteractor: PomodoroStartInteractor, private val complexRuleProcessActionInteractor: ComplexRuleProcessActionInteractor, private val updateExternalViewsInteractor: UpdateExternalViewsInteractor, @@ -30,13 +31,18 @@ class AddRunningRecordMediator @Inject constructor( suspend fun tryStartTimer( typeId: Long, updateNotificationSwitch: Boolean = true, - onNeedToShowTagSelection: suspend () -> Unit, + commentInputAvailable: Boolean = true, + onNeedToShowTagSelection: suspend (RecordDataSelectionDialogResult) -> Unit, ): Boolean { // Already running if (runningRecordInteractor.get(typeId) != null) return false - return if (shouldShowTagSelectionInteractor.execute(typeId)) { - onNeedToShowTagSelection() + val shouldShowTagSelectionResult = shouldShowRecordDataSelectionInteractor.execute( + typeId = typeId, + commentInputAvailable = commentInputAvailable, + ) + return if (shouldShowTagSelectionResult.fields.isNotEmpty()) { + onNeedToShowTagSelection(shouldShowTagSelectionResult) false } else { startTimer( diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/PrefsInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/PrefsInteractor.kt index 6f62bde61..79c48a3dc 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/PrefsInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/PrefsInteractor.kt @@ -630,6 +630,24 @@ class PrefsInteractor @Inject constructor( .map(Long::toString).toSet() } + suspend fun getShowCommentInput(): Boolean = withContext(Dispatchers.IO) { + prefsRepo.showCommentInput + } + + suspend fun setShowCommentInput(value: Boolean) = withContext(Dispatchers.IO) { + prefsRepo.showCommentInput = value + } + + suspend fun getCommentInputExcludeActivities(): List = withContext(Dispatchers.IO) { + prefsRepo.commentInputExcludeActivities + .mapNotNull(String::toLongOrNull) + } + + suspend fun setCommentInputExcludeActivities(value: List) = withContext(Dispatchers.IO) { + prefsRepo.commentInputExcludeActivities = value + .map(Long::toString).toSet() + } + suspend fun getAutostartPomodoroActivities(): List = withContext(Dispatchers.IO) { prefsRepo.autostartPomodoroActivities .mapNotNull(String::toLongOrNull) diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTypeInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTypeInteractor.kt index 68b24d57e..773c2245d 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTypeInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTypeInteractor.kt @@ -79,6 +79,9 @@ class RecordTypeInteractor @Inject constructor( prefsInteractor.getRecordTagSelectionExcludeActivities().toMutableList() .apply { remove(id) } .let { prefsInteractor.setRecordTagSelectionExcludeActivities(it) } + prefsInteractor.getCommentInputExcludeActivities().toMutableList() + .apply { remove(id) } + .let { prefsInteractor.setCommentInputExcludeActivities(it) } recordRepo.removeByType(id) runningRecordRepo.remove(id) recordTypeCategoryRepo.removeAllByType(id) diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/ShouldShowRecordDataSelectionInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/ShouldShowRecordDataSelectionInteractor.kt new file mode 100644 index 000000000..327c60757 --- /dev/null +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/ShouldShowRecordDataSelectionInteractor.kt @@ -0,0 +1,53 @@ +package com.example.util.simpletimetracker.domain.interactor + +import com.example.util.simpletimetracker.domain.model.RecordDataSelectionDialogResult +import javax.inject.Inject + +class ShouldShowRecordDataSelectionInteractor @Inject constructor( + private val prefsInteractor: PrefsInteractor, + private val getSelectableTagsInteractor: GetSelectableTagsInteractor, +) { + + suspend fun execute( + typeId: Long, + commentInputAvailable: Boolean, + ): RecordDataSelectionDialogResult { + val fields = mutableListOf() + if (needToShowTags(typeId)) { + fields += RecordDataSelectionDialogResult.Field.Tags + } + if (needToShowComment(typeId, commentInputAvailable)) { + fields += RecordDataSelectionDialogResult.Field.Comment + } + return RecordDataSelectionDialogResult(fields) + } + + private suspend fun needToShowTags(typeId: Long): Boolean { + if (!prefsInteractor.getShowRecordTagSelection()) return false + + val excludedActivities = prefsInteractor.getRecordTagSelectionExcludeActivities() + + // Check if activity is excluded from tag dialog. + return if (typeId !in excludedActivities) { + // Check if activity has tags. + val assignableTags = getSelectableTagsInteractor.execute(typeId) + .filterNot { it.archived } + assignableTags.isNotEmpty() + } else { + false + } + } + + private suspend fun needToShowComment( + typeId: Long, + commentInputAvailable: Boolean, + ): Boolean { + if (!commentInputAvailable) return false + if (!prefsInteractor.getShowCommentInput()) return false + + val excludedActivities = prefsInteractor.getCommentInputExcludeActivities() + + // Check if activity is excluded from comment input. + return typeId !in excludedActivities + } +} \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/ShouldShowTagSelectionInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/ShouldShowTagSelectionInteractor.kt deleted file mode 100644 index d5841386a..000000000 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/ShouldShowTagSelectionInteractor.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.example.util.simpletimetracker.domain.interactor - -import javax.inject.Inject - -class ShouldShowTagSelectionInteractor @Inject constructor( - private val prefsInteractor: PrefsInteractor, - private val getSelectableTagsInteractor: GetSelectableTagsInteractor, -) { - - suspend fun execute(typeId: Long): Boolean { - // Check if need to show tag selection - return if (prefsInteractor.getShowRecordTagSelection()) { - val excludedActivities = prefsInteractor.getRecordTagSelectionExcludeActivities() - - // Check if activity is excluded from tag dialog. - if (typeId !in excludedActivities) { - // Check if activity has tags. - val assignableTags = getSelectableTagsInteractor.execute(typeId) - .filterNot { it.archived } - assignableTags.isNotEmpty() - } else { - false - } - } else { - false - } - } -} \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RecordDataSelectionDialogResult.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RecordDataSelectionDialogResult.kt new file mode 100644 index 000000000..f86042e14 --- /dev/null +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/RecordDataSelectionDialogResult.kt @@ -0,0 +1,10 @@ +package com.example.util.simpletimetracker.domain.model + +data class RecordDataSelectionDialogResult( + val fields: List, +) { + sealed interface Field { + object Tags : Field + object Comment : Field + } +} \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/PrefsRepo.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/PrefsRepo.kt index 961a154c6..194b80f35 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/PrefsRepo.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/repo/PrefsRepo.kt @@ -138,6 +138,10 @@ interface PrefsRepo { var recordTagSelectionExcludeActivities: Set + var showCommentInput: Boolean + + var commentInputExcludeActivities: Set + var autostartPomodoroActivities: Set var automatedTrackingSendEvents: Boolean diff --git a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/recordTagSelection/RecordTagSelectionDialogFragment.kt b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/recordTagSelection/RecordTagSelectionDialogFragment.kt index a28dda806..a7bd9ee1d 100644 --- a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/recordTagSelection/RecordTagSelectionDialogFragment.kt +++ b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/recordTagSelection/RecordTagSelectionDialogFragment.kt @@ -27,7 +27,7 @@ class RecordTagSelectionDialogFragment : lateinit var screenFactory: ScreenFactory private val params: RecordTagSelectionParams by fragmentArgumentDelegate( - key = ARGS_PARAMS, default = RecordTagSelectionParams(), + key = ARGS_PARAMS, default = RecordTagSelectionParams.Empty, ) override fun onTagSelected() { diff --git a/features/feature_notification/src/main/java/com/example/util/simpletimetracker/feature_notification/recordType/interactor/ActivityStartStopFromBroadcastInteractor.kt b/features/feature_notification/src/main/java/com/example/util/simpletimetracker/feature_notification/recordType/interactor/ActivityStartStopFromBroadcastInteractor.kt index f1cd0cb80..56140c567 100644 --- a/features/feature_notification/src/main/java/com/example/util/simpletimetracker/feature_notification/recordType/interactor/ActivityStartStopFromBroadcastInteractor.kt +++ b/features/feature_notification/src/main/java/com/example/util/simpletimetracker/feature_notification/recordType/interactor/ActivityStartStopFromBroadcastInteractor.kt @@ -162,6 +162,7 @@ class ActivityStartStopFromBroadcastInteractor @Inject constructor( val started = addRunningRecordMediator.tryStartTimer( typeId = selectedTypeId, updateNotificationSwitch = updateNotificationSwitch, + commentInputAvailable = false, // TODO open activity? ) { // Update to show tag selection. update( diff --git a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt index add999b2f..2d4c3460f 100644 --- a/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt +++ b/features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/viewModel/RunningRecordsViewModel.kt @@ -19,6 +19,7 @@ import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.interactor.RemoveRunningRecordMediator import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor import com.example.util.simpletimetracker.domain.interactor.UpdateRunningRecordFromChangeScreenInteractor +import com.example.util.simpletimetracker.domain.model.RecordDataSelectionDialogResult import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType import com.example.util.simpletimetracker.feature_base_adapter.activityFilter.ActivityFilterViewData import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderViewData @@ -85,7 +86,7 @@ class RunningRecordsViewModel @Inject constructor( // Start running record val wasStarted = addRunningRecordMediator.tryStartTimer( typeId = item.id, - onNeedToShowTagSelection = { showTagSelection(item.id) }, + onNeedToShowTagSelection = { showTagSelection(item.id, it) }, ) if (wasStarted) { onRecordTypeWithDefaultDurationClick(item.id) @@ -244,8 +245,11 @@ class RunningRecordsViewModel @Inject constructor( } } - private fun showTagSelection(typeId: Long) { - router.navigate(RecordTagSelectionParams(typeId)) + private fun showTagSelection( + typeId: Long, + result: RecordDataSelectionDialogResult, + ) { + router.navigate(RecordTagSelectionParams(typeId, result.toParams())) } private fun subscribeToUpdates() { diff --git a/features/feature_settings/api/src/main/java/com/example/util/simpletimetracker/feature_settings/api/SettingsBlock.kt b/features/feature_settings/api/src/main/java/com/example/util/simpletimetracker/feature_settings/api/SettingsBlock.kt index 09d19981b..61b7a9598 100644 --- a/features/feature_settings/api/src/main/java/com/example/util/simpletimetracker/feature_settings/api/SettingsBlock.kt +++ b/features/feature_settings/api/src/main/java/com/example/util/simpletimetracker/feature_settings/api/SettingsBlock.kt @@ -72,6 +72,8 @@ enum class SettingsBlock { AdditionalShowTagSelection, AdditionalTagSelectionExcludeActivities, AdditionalCloseAfterOneTag, + AdditionalShowCommentInput, + AdditionalCommentInputExcludeActivities, AdditionalKeepStatisticsRange, AdditionalRetroactiveTrackingMode, AdditionalKeepScreenOn, diff --git a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsAdditionalViewDataInteractor.kt b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsAdditionalViewDataInteractor.kt index da6c1df1a..ba31f9dd1 100644 --- a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsAdditionalViewDataInteractor.kt +++ b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsAdditionalViewDataInteractor.kt @@ -85,6 +85,20 @@ class SettingsAdditionalViewDataInteractor @Inject constructor( ) } + val showCommentInput = prefsInteractor.getShowCommentInput() + result += SettingsCheckboxWithButtonViewData( + data = SettingsCheckboxViewData( + block = SettingsBlock.AdditionalShowCommentInput, + title = resourceRepo.getString(R.string.settings_show_comment_input), + subtitle = resourceRepo.getString(R.string.settings_show_comment_input_hint), + isChecked = showCommentInput, + bottomSpaceIsVisible = true, + dividerIsVisible = true, + ), + buttonBlock = SettingsBlock.AdditionalCommentInputExcludeActivities, + isButtonVisible = showCommentInput, + ) + result += SettingsCheckboxViewData( block = SettingsBlock.AdditionalKeepStatisticsRange, title = resourceRepo.getString(R.string.settings_keep_statistics_range), diff --git a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/SettingsViewModel.kt b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/SettingsViewModel.kt index 4ce84c186..2c9cafaf6 100644 --- a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/SettingsViewModel.kt +++ b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/SettingsViewModel.kt @@ -190,7 +190,8 @@ class SettingsViewModel @Inject constructor( const val UNTRACKED_RANGE_START_DIALOG_TAG = "untracked_range_start_dialog_tag" const val UNTRACKED_RANGE_END_DIALOG_TAG = "untracked_range_end_dialog_tag" const val START_OF_DAY_DIALOG_TAG = "start_of_day_dialog_tag" - const val EXCLUDE_ACTIVITIES_TYPES_SELECTION = "exclude_activities_types_selection" + const val TAG_EXCLUDE_ACTIVITIES_TYPES_SELECTION = "tag_exclude_activities_types_selection" + const val COMMENT_EXCLUDE_ACTIVITIES_TYPES_SELECTION = "comment_exclude_activities_types_selection" const val SELECT_ACTIVITIES_TO_AUTOSTART_POMODORO = "select_activities_to_autostart_pomodoro" } } diff --git a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsAdditionalViewModelDelegate.kt b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsAdditionalViewModelDelegate.kt index 02d87be00..f0311aa32 100644 --- a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsAdditionalViewModelDelegate.kt +++ b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsAdditionalViewModelDelegate.kt @@ -61,6 +61,8 @@ class SettingsAdditionalViewModelDelegate @Inject constructor( SettingsBlock.AdditionalShowTagSelection -> onShowRecordTagSelectionClicked() SettingsBlock.AdditionalCloseAfterOneTag -> onRecordTagSelectionCloseClicked() SettingsBlock.AdditionalTagSelectionExcludeActivities -> onRecordTagSelectionExcludeActivitiesClicked() + SettingsBlock.AdditionalShowCommentInput -> onShowCommentInputClicked() + SettingsBlock.AdditionalCommentInputExcludeActivities -> onCommentInputExcludeActivitiesClicked() SettingsBlock.AdditionalKeepStatisticsRange -> onKeepStatisticsRangeClicked() SettingsBlock.AdditionalRetroactiveTrackingMode -> onRetroactiveTrackingModeClicked() SettingsBlock.AdditionalSendEvents -> onAutomatedTrackingSendEventsClicked() @@ -194,7 +196,7 @@ class SettingsAdditionalViewModelDelegate @Inject constructor( private fun onRecordTagSelectionExcludeActivitiesClicked() = delegateScope.launch { TypesSelectionDialogParams( - tag = SettingsViewModel.EXCLUDE_ACTIVITIES_TYPES_SELECTION, + tag = SettingsViewModel.TAG_EXCLUDE_ACTIVITIES_TYPES_SELECTION, title = resourceRepo.getString( R.string.record_tag_selection_exclude_activities_title, ), @@ -208,6 +210,30 @@ class SettingsAdditionalViewModelDelegate @Inject constructor( ).let(router::navigate) } + private fun onShowCommentInputClicked() = delegateScope.launch { + delegateScope.launch { + val newValue = !prefsInteractor.getShowCommentInput() + prefsInteractor.setShowCommentInput(newValue) + parent?.updateContent() + } + } + + private fun onCommentInputExcludeActivitiesClicked() = delegateScope.launch { + TypesSelectionDialogParams( + tag = SettingsViewModel.COMMENT_EXCLUDE_ACTIVITIES_TYPES_SELECTION, + title = resourceRepo.getString( + R.string.record_tag_selection_exclude_activities_title, + ), + subtitle = resourceRepo.getString( + R.string.record_tag_selection_exclude_activities_hint, + ), + type = TypesSelectionDialogParams.Type.Activity, + selectedTypeIds = prefsInteractor.getCommentInputExcludeActivities(), + isMultiSelectAvailable = true, + idsShouldBeVisible = emptyList(), + ).let(router::navigate) + } + private fun onAutomatedTrackingSendEventsClicked() { delegateScope.launch { val newValue = !prefsInteractor.getAutomatedTrackingSendEvents() @@ -274,9 +300,12 @@ class SettingsAdditionalViewModelDelegate @Inject constructor( private fun onTypesSelectedDelegate(typeIds: List, tag: String?) = delegateScope.launch { when (tag) { - SettingsViewModel.EXCLUDE_ACTIVITIES_TYPES_SELECTION -> { + SettingsViewModel.TAG_EXCLUDE_ACTIVITIES_TYPES_SELECTION -> { prefsInteractor.setRecordTagSelectionExcludeActivities(typeIds) } + SettingsViewModel.COMMENT_EXCLUDE_ACTIVITIES_TYPES_SELECTION -> { + prefsInteractor.setCommentInputExcludeActivities(typeIds) + } } } } \ No newline at end of file diff --git a/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/interactor/RecordTagSelectionViewDataInteractor.kt b/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/interactor/RecordTagSelectionViewDataInteractor.kt index be32e58d9..ddc7ed67d 100644 --- a/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/interactor/RecordTagSelectionViewDataInteractor.kt +++ b/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/interactor/RecordTagSelectionViewDataInteractor.kt @@ -1,16 +1,12 @@ package com.example.util.simpletimetracker.feature_tag_selection.interactor import com.example.util.simpletimetracker.core.interactor.RecordTagViewDataInteractor -import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType -import com.example.util.simpletimetracker.feature_base_adapter.hint.HintViewData -import com.example.util.simpletimetracker.feature_tag_selection.R import javax.inject.Inject class RecordTagSelectionViewDataInteractor @Inject constructor( private val prefsInteractor: PrefsInteractor, - private val resourceRepo: ResourceRepo, private val recordTagViewDataInteractor: RecordTagViewDataInteractor, ) { @@ -18,9 +14,6 @@ class RecordTagSelectionViewDataInteractor @Inject constructor( val closeAfterOneTagSelected: Boolean = prefsInteractor.getRecordTagSelectionCloseAfterOne() val result: MutableList = mutableListOf() - resourceRepo.getString(R.string.record_tag_selection_hint) - .let(::HintViewData).let(result::add) - recordTagViewDataInteractor.getViewData( selectedTags = selectedTags, typeId = typeId, diff --git a/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/view/RecordTagSelectionFragment.kt b/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/view/RecordTagSelectionFragment.kt index 33c9422db..b34eea062 100644 --- a/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/view/RecordTagSelectionFragment.kt +++ b/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/view/RecordTagSelectionFragment.kt @@ -4,6 +4,8 @@ import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup +import androidx.core.view.isVisible +import androidx.core.widget.doAfterTextChanged import androidx.fragment.app.viewModels import com.example.util.simpletimetracker.core.base.BaseFragment import com.example.util.simpletimetracker.core.dialog.OnTagSelectedListener @@ -14,9 +16,9 @@ import com.example.util.simpletimetracker.feature_base_adapter.BaseRecyclerAdapt import com.example.util.simpletimetracker.feature_base_adapter.category.createCategoryAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.divider.createDividerAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.empty.createEmptyAdapterDelegate -import com.example.util.simpletimetracker.feature_base_adapter.hint.createHintAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.info.createInfoAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.loader.createLoaderAdapterDelegate +import com.example.util.simpletimetracker.feature_tag_selection.viewData.RecordTagSelectionViewState import com.example.util.simpletimetracker.feature_tag_selection.viewModel.RecordTagSelectionViewModel import com.example.util.simpletimetracker.feature_views.extension.setOnClick import com.example.util.simpletimetracker.feature_views.extension.visible @@ -42,7 +44,6 @@ class RecordTagSelectionFragment : BaseFragment() { private val adapter: BaseRecyclerAdapter by lazy { BaseRecyclerAdapter( createLoaderAdapterDelegate(), - createHintAdapterDelegate(), createCategoryAdapterDelegate(viewModel::onCategoryClick), createDividerAdapterDelegate(), createInfoAdapterDelegate(), @@ -50,7 +51,7 @@ class RecordTagSelectionFragment : BaseFragment() { ) } private val params: RecordTagSelectionParams by fragmentArgumentDelegate( - key = ARGS_PARAMS, default = RecordTagSelectionParams(), + key = ARGS_PARAMS, default = RecordTagSelectionParams.Empty, ) private val listeners: MutableList = mutableListOf() @@ -71,6 +72,7 @@ class RecordTagSelectionFragment : BaseFragment() { } override fun initUx() = with(binding) { + etRecordTagSelectionCommentItem.doAfterTextChanged { viewModel.onCommentChange(it.toString()) } btnRecordTagSelectionSave.setOnClick(viewModel::onSaveClick) } @@ -78,7 +80,18 @@ class RecordTagSelectionFragment : BaseFragment() { extra = params viewData.observe(adapter::replace) saveButtonVisibility.observe(binding.btnRecordTagSelectionSave::visible::set) - tagSelected.observe { onTagSelected() } + viewState.observe(::setState) + saveClicked.observe { onTagSelected() } + } + + private fun setState(data: RecordTagSelectionViewState) = with(binding) { + val showComment = RecordTagSelectionViewState.Field.Comment in data.fields + tvRecordTagSelectionCommentHint.isVisible = showComment + inputRecordTagSelectionComment.isVisible = showComment + + val showTags = RecordTagSelectionViewState.Field.Tags in data.fields + tvRecordTagSelectionTagHint.isVisible = showTags + rvRecordTagSelectionList.isVisible = showTags } private fun onTagSelected() { diff --git a/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/viewData/RecordTagSelectionViewState.kt b/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/viewData/RecordTagSelectionViewState.kt new file mode 100644 index 000000000..6e8b77144 --- /dev/null +++ b/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/viewData/RecordTagSelectionViewState.kt @@ -0,0 +1,11 @@ +package com.example.util.simpletimetracker.feature_tag_selection.viewData + +data class RecordTagSelectionViewState( + val fields: List, +) { + + sealed interface Field { + object Tags : Field + object Comment : Field + } +} \ No newline at end of file diff --git a/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/viewModel/RecordTagSelectionViewModel.kt b/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/viewModel/RecordTagSelectionViewModel.kt index e8c262fc5..dffa9ea61 100644 --- a/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/viewModel/RecordTagSelectionViewModel.kt +++ b/features/feature_tag_selection/src/main/java/com/example/util/simpletimetracker/feature_tag_selection/viewModel/RecordTagSelectionViewModel.kt @@ -2,16 +2,18 @@ package com.example.util.simpletimetracker.feature_tag_selection.viewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.example.util.simpletimetracker.domain.extension.addOrRemove +import com.example.util.simpletimetracker.core.base.BaseViewModel +import com.example.util.simpletimetracker.core.extension.lazySuspend import com.example.util.simpletimetracker.core.extension.set +import com.example.util.simpletimetracker.domain.extension.addOrRemove import com.example.util.simpletimetracker.domain.interactor.AddRunningRecordMediator import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType import com.example.util.simpletimetracker.feature_base_adapter.category.CategoryViewData import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderViewData import com.example.util.simpletimetracker.feature_tag_selection.interactor.RecordTagSelectionViewDataInteractor +import com.example.util.simpletimetracker.feature_tag_selection.viewData.RecordTagSelectionViewState import com.example.util.simpletimetracker.navigation.params.screen.RecordTagSelectionParams import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch @@ -22,7 +24,7 @@ class RecordTagSelectionViewModel @Inject constructor( private val viewDataInteractor: RecordTagSelectionViewDataInteractor, private val addRunningRecordMediator: AddRunningRecordMediator, private val prefsInteractor: PrefsInteractor, -) : ViewModel() { +) : BaseViewModel() { lateinit var extra: RecordTagSelectionParams @@ -35,16 +37,11 @@ class RecordTagSelectionViewModel @Inject constructor( initial } } - val saveButtonVisibility: LiveData by lazy { - return@lazy MutableLiveData().let { initial -> - viewModelScope.launch { - initial.value = !prefsInteractor.getRecordTagSelectionCloseAfterOne() - } - initial - } - } - val tagSelected: LiveData = MutableLiveData() + val saveButtonVisibility: LiveData by lazySuspend { loadButtonVisibility() } + val viewState: LiveData by lazySuspend { loadViewState() } + val saveClicked: LiveData = MutableLiveData() + private var newComment: String = "" private var newCategoryIds: MutableList = mutableListOf() fun onCategoryClick(item: CategoryViewData) { @@ -59,7 +56,7 @@ class RecordTagSelectionViewModel @Inject constructor( else -> return@launch } if (prefsInteractor.getRecordTagSelectionCloseAfterOne()) { - tagSelected() + saveClicked() } else { updateViewData() } @@ -68,13 +65,47 @@ class RecordTagSelectionViewModel @Inject constructor( fun onSaveClick() { viewModelScope.launch { - tagSelected() + saveClicked() + } + } + + fun onCommentChange(text: String) { + if (newComment != text) { + newComment = text } } - private suspend fun tagSelected() { - addRunningRecordMediator.startTimer(extra.typeId, newCategoryIds, "") - tagSelected.set(Unit) + private suspend fun saveClicked() { + addRunningRecordMediator.startTimer( + typeId = extra.typeId, + tagIds = newCategoryIds, + comment = newComment, + ) + saveClicked.set(Unit) + } + + private suspend fun loadButtonVisibility(): Boolean { + val closeAfterOneTag = prefsInteractor.getRecordTagSelectionCloseAfterOne() + val showTags = RecordTagSelectionParams.Field.Tags in extra.fields + val showCommentInput = RecordTagSelectionParams.Field.Comment in extra.fields + + return when { + showTags -> !closeAfterOneTag + showCommentInput -> true + else -> false + } + } + + private fun loadViewState(): RecordTagSelectionViewState { + val fields = extra.fields.map { + when (it) { + is RecordTagSelectionParams.Field.Tags -> + RecordTagSelectionViewState.Field.Tags + is RecordTagSelectionParams.Field.Comment -> + RecordTagSelectionViewState.Field.Comment + } + } + return RecordTagSelectionViewState(fields) } private fun updateViewData() = viewModelScope.launch { @@ -83,6 +114,9 @@ class RecordTagSelectionViewModel @Inject constructor( } private suspend fun loadViewData(): List { - return viewDataInteractor.getViewData(extra.typeId, newCategoryIds) + return viewDataInteractor.getViewData( + typeId = extra.typeId, + selectedTags = newCategoryIds, + ) } } diff --git a/features/feature_tag_selection/src/main/res/layout/record_tag_selection_fragment.xml b/features/feature_tag_selection/src/main/res/layout/record_tag_selection_fragment.xml index 5e28df108..0a32e955e 100644 --- a/features/feature_tag_selection/src/main/res/layout/record_tag_selection_fragment.xml +++ b/features/feature_tag_selection/src/main/res/layout/record_tag_selection_fragment.xml @@ -5,16 +5,63 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + + + + , private val addRunningRecordMediator: Lazy, private val recordRepeatInteractor: Lazy, @@ -100,8 +101,12 @@ class WearDataRepo @Inject constructor( override suspend fun queryShouldShowTagSelection( request: WearShouldShowTagSelectionRequest, ): WearShouldShowTagSelectionResponse { + val result = shouldShowRecordDataSelectionInteractor.execute( + typeId = request.id, + commentInputAvailable = false, + ) return WearShouldShowTagSelectionResponse( - shouldShowTagSelectionInteractor.execute(request.id), + shouldShow = RecordDataSelectionDialogResult.Field.Tags in result.fields, ) } diff --git a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleProvider.kt b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleProvider.kt index 050456c4d..43c73ef71 100644 --- a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleProvider.kt +++ b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleProvider.kt @@ -12,6 +12,7 @@ import android.view.ViewGroup import android.widget.RemoteViews import com.example.util.simpletimetracker.core.extension.allowDiskRead import com.example.util.simpletimetracker.core.extension.allowVmViolations +import com.example.util.simpletimetracker.core.extension.toParams import com.example.util.simpletimetracker.core.interactor.CompleteTypesStateInteractor import com.example.util.simpletimetracker.core.interactor.FilterGoalsByDayOfWeekInteractor import com.example.util.simpletimetracker.core.interactor.GetCurrentRecordsDurationInteractor @@ -31,6 +32,7 @@ import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.interactor.RemoveRunningRecordMediator import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor import com.example.util.simpletimetracker.domain.interactor.WidgetInteractor +import com.example.util.simpletimetracker.domain.model.RecordDataSelectionDialogResult import com.example.util.simpletimetracker.feature_views.ColorUtils import com.example.util.simpletimetracker.feature_views.RecordTypeView import com.example.util.simpletimetracker.feature_views.extension.getBitmapFromView @@ -337,18 +339,24 @@ class WidgetSingleProvider : AppWidgetProvider() { // Start running record addRunningRecordMediator.tryStartTimer( typeId = recordTypeId, - onNeedToShowTagSelection = { showTagSelection(context, recordTypeId) }, + onNeedToShowTagSelection = { + showTagSelection(context, recordTypeId, it) + }, ) } } } - private fun showTagSelection(context: Context?, typeId: Long) { + private fun showTagSelection( + context: Context?, + typeId: Long, + result: RecordDataSelectionDialogResult, + ) { context ?: return WidgetSingleTagSelectionActivity.getStartIntent( context = context, - data = RecordTagSelectionParams(typeId), + data = RecordTagSelectionParams(typeId, result.toParams()), ).let(context::startActivity) } diff --git a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleTagSelectionActivity.kt b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleTagSelectionActivity.kt index 8f20ebd43..915d3c0fd 100644 --- a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleTagSelectionActivity.kt +++ b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/single/WidgetSingleTagSelectionActivity.kt @@ -34,7 +34,7 @@ class WidgetSingleTagSelectionActivity : lateinit var screenFactory: ScreenFactory private val params: RecordTagSelectionParams by activityArgumentDelegate( - key = ARGS_PARAMS, default = RecordTagSelectionParams(), + key = ARGS_PARAMS, default = RecordTagSelectionParams.Empty, ) override fun initUi() { diff --git a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/universal/activity/viewModel/WidgetUniversalViewModel.kt b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/universal/activity/viewModel/WidgetUniversalViewModel.kt index 3d2b52704..54823925d 100644 --- a/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/universal/activity/viewModel/WidgetUniversalViewModel.kt +++ b/features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/universal/activity/viewModel/WidgetUniversalViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.util.simpletimetracker.core.extension.set +import com.example.util.simpletimetracker.core.extension.toParams import com.example.util.simpletimetracker.core.interactor.ActivityFilterViewDataInteractor import com.example.util.simpletimetracker.core.interactor.FilterGoalsByDayOfWeekInteractor import com.example.util.simpletimetracker.core.interactor.GetCurrentRecordsDurationInteractor @@ -18,6 +19,7 @@ import com.example.util.simpletimetracker.domain.interactor.RecordTypeGoalIntera import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.interactor.RemoveRunningRecordMediator import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor +import com.example.util.simpletimetracker.domain.model.RecordDataSelectionDialogResult import com.example.util.simpletimetracker.domain.model.RecordType import com.example.util.simpletimetracker.domain.model.RunningRecord import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType @@ -80,7 +82,7 @@ class WidgetUniversalViewModel @Inject constructor( // Start running record wasStarted = addRunningRecordMediator.tryStartTimer( typeId = item.id, - onNeedToShowTagSelection = { showTagSelection(item.id) }, + onNeedToShowTagSelection = { showTagSelection(item.id, it) }, ) if (wasStarted) { onRecordTypeWithDefaultDurationClick(item.id) @@ -134,8 +136,11 @@ class WidgetUniversalViewModel @Inject constructor( } } - private fun showTagSelection(typeId: Long) { - router.navigate(RecordTagSelectionParams(typeId)) + private fun showTagSelection( + typeId: Long, + result: RecordDataSelectionDialogResult, + ) { + router.navigate(RecordTagSelectionParams(typeId, result.toParams())) } private fun updateRecordTypesViewData() = viewModelScope.launch { diff --git a/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/screen/RecordTagSelectionParams.kt b/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/screen/RecordTagSelectionParams.kt index 728a245b6..5577c6ce8 100644 --- a/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/screen/RecordTagSelectionParams.kt +++ b/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/screen/RecordTagSelectionParams.kt @@ -5,5 +5,22 @@ import kotlinx.parcelize.Parcelize @Parcelize data class RecordTagSelectionParams( - val typeId: Long = 0L, -) : Parcelable, ScreenParams + val typeId: Long, + val fields: List, +) : Parcelable, ScreenParams { + + sealed interface Field : Parcelable { + @Parcelize + object Tags : Field + + @Parcelize + object Comment : Field + } + + companion object { + val Empty = RecordTagSelectionParams( + typeId = 0L, + fields = emptyList(), + ) + } +} diff --git a/resources/src/main/res/values-ar/strings.xml b/resources/src/main/res/values-ar/strings.xml index 4a6d18f74..9ca909835 100644 --- a/resources/src/main/res/values-ar/strings.xml +++ b/resources/src/main/res/values-ar/strings.xml @@ -228,7 +228,7 @@ لا تظهر مرة أخرى استبعاد الأنشطة - لن يتم عرض مربع حوار تحديد العلامة للأنشطة المحددة. + لن يتم عرض مربع الحوار للأنشطة المحددة. حدد الأنشطة سيتم بدء تشغيل بومودورو تلقائيًا عند بدء الأنشطة المحددة. @@ -329,6 +329,8 @@ إظهار اختيار وسم التتبع عند بدء تشغيل مؤقت نشاط. إذا كان للنشاط أي وسوم تتبع فسيتم عرض مربع حوار الاختيار. أغلق بعد اختيار وسم واحد. + إظهار إدخال التعليق + عند بدء تشغيل مؤقت - سيتم عرض مربع حوار إدخال التعليق. قيمنا قيم التطبيق واترك مراجعة. دعم التنمية diff --git a/resources/src/main/res/values-ca/strings.xml b/resources/src/main/res/values-ca/strings.xml index 3f3fe9638..b8ee4a640 100644 --- a/resources/src/main/res/values-ca/strings.xml +++ b/resources/src/main/res/values-ca/strings.xml @@ -228,7 +228,7 @@ No tornis a mostrar Exclou activitats - El diàleg de selecció d\'etiquetes no es mostrarà per a les activitats seleccionades. + El diàleg no es mostrarà per a les activitats seleccionades. Seleccioneu activitats Pomodoro s\'iniciarà automàticament quan s\'iniciïn les activitats seleccionades. @@ -329,6 +329,8 @@ Mostra selecció d\'etiquetes d\'enregistrament Quan s\'iniciï un temporitzador, si l\'activitat té una etiqueta d\'enregistrament assignada, podreu triar l\'etiqueta amb una finestra de selecció. Tanca després de seleccionar una etiqueta + Mostra l\'entrada de comentaris + Quan s\'inicia un temporitzador, es mostrarà un diàleg d\'entrada de comentaris. Valoreu-nos Valoreu l\'aplicació i deixeu un comentari Suport al desenvolupament diff --git a/resources/src/main/res/values-de/strings.xml b/resources/src/main/res/values-de/strings.xml index 3a188b395..07703e2f4 100644 --- a/resources/src/main/res/values-de/strings.xml +++ b/resources/src/main/res/values-de/strings.xml @@ -228,7 +228,7 @@ Nicht mehr anzeigen Aktivitäten ausschließen - Der Tag-Auswahldialog wird für ausgewählte Aktivitäten nicht angezeigt. + Für ausgewählte Aktivitäten wird kein Dialog angezeigt. Wählen Sie Aktivitäten aus Pomodoro wird automatisch gestartet, wenn ausgewählte Aktivitäten gestartet werden. @@ -329,6 +329,8 @@ Datensatz-Tag-Auswahl zeigen Beim Starten eines Zählers wird ein Auswahldialog angezeigt, wenn die Aktivität Aufzeichnungs-Tags hat. Schließen nach Auswahl eines Tags + Kommentareingabe anzeigen + Beim Starten eines Timers wird ein Kommentareingabedialog angezeigt. Bewerte uns Bewerten die App und schreibe eine Rezension. Unterstützen Sie die Entwicklung diff --git a/resources/src/main/res/values-es/strings.xml b/resources/src/main/res/values-es/strings.xml index 4961a49ba..7946d9250 100644 --- a/resources/src/main/res/values-es/strings.xml +++ b/resources/src/main/res/values-es/strings.xml @@ -228,7 +228,7 @@ No volver a mostrar Excluir actividades - El cuadro de diálogo de selección de etiquetas no se mostrará para las actividades seleccionadas. + El cuadro de diálogo no se mostrará para las actividades seleccionadas. Seleccionar actividades Pomodoro se iniciará automáticamente cuando se inicien las actividades seleccionadas. @@ -329,6 +329,8 @@ Mostrar selección de etiqueta de registro Cuando se inicie un temporizador, si la actividad tiene asignada alguna etiqueta de registro – se mostrará una ventana de selección. Cerrar después de seleccionar una etiqueta + Mostrar entrada de comentario + Al iniciar un temporizador, se mostrará un cuadro de diálogo para ingresar comentarios. Valórenos Valore la aplicación y deje un comentario. Apoyar el desarrollo diff --git a/resources/src/main/res/values-fa/strings.xml b/resources/src/main/res/values-fa/strings.xml index a8f13fb21..bed84b793 100644 --- a/resources/src/main/res/values-fa/strings.xml +++ b/resources/src/main/res/values-fa/strings.xml @@ -228,7 +228,7 @@ دیگر نشان نده حذف فعالیت ها - گفتگوی انتخاب برچسب برای فعالیت های انتخاب شده نشان داده نخواهد شد. + گفتگو برای فعالیت های انتخابی نشان داده نمی شود. فعالیت ها را انتخاب کنید با شروع فعالیت های انتخاب شده، پومودورو به طور خودکار شروع می شود. @@ -329,6 +329,8 @@ نمایش برچسب تاریخچه انتخابی هنگام شروع یک تایمر ، اگر فعالیت برچسبی داشت- منوی انتخابی ای نمایش داده می شود بستن بعد از انتخاب یک برچسب + نمایش ورودی نظر + هنگام شروع یک تایمر - یک گفتگوی ورودی نظر نشان داده می شود. به ما امتیاز دهید به ما امتیاز دهید و نظر خود را بگذارید پشتیبانی از توسعه diff --git a/resources/src/main/res/values-fr/strings.xml b/resources/src/main/res/values-fr/strings.xml index e34f5a7d8..ef9fd8488 100644 --- a/resources/src/main/res/values-fr/strings.xml +++ b/resources/src/main/res/values-fr/strings.xml @@ -228,7 +228,7 @@ Ne plus montrer Exclure les activités - La boîte de dialogue de sélection de balise ne s\'affichera pas pour les activités sélectionnées. + La boîte de dialogue ne s\'affichera pas pour les activités sélectionnées. Sélectionner des activités Pomodoro sera automatiquement démarré lorsque les activités sélectionnées seront démarrées. @@ -329,6 +329,8 @@ Afficher la sélection d\'étiquette d\'enregistrement Lors du démarrage d\'une activité, afficher une boîte de sélection si l\'activité a des étiquettes d\'enregistrement. Fermer après avoir sélectionné une étiquette + Afficher la saisie des commentaires + Lors du démarrage d\'une minuterie, une boîte de dialogue de saisie de commentaires s\'affichera. Évaluez nous Évaluez l\'application et laissez un avis. Accompagner le développement diff --git a/resources/src/main/res/values-hi/strings.xml b/resources/src/main/res/values-hi/strings.xml index f59017f62..d6d5fab09 100644 --- a/resources/src/main/res/values-hi/strings.xml +++ b/resources/src/main/res/values-hi/strings.xml @@ -228,7 +228,7 @@ दोबारा मत दिखाना गतिविधियाँ बहिष्कृत करें - चयनित गतिविधियों के लिए टैग चयन संवाद नहीं दिखाया जाएगा। + चयनित गतिविधियों के लिए संवाद नहीं दिखाया जाएगा. गतिविधियाँ चुनें चयनित गतिविधियाँ शुरू होने पर पोमोडोरो स्वचालित रूप से शुरू हो जाएगा। @@ -329,6 +329,8 @@ चयन रिकॉर्ड टैग दिखाएं टाइमर शुरू करते समय, यदि गतिविधि में कोई रिकॉर्ड टैग होता है - एक चयन संवाद दिखाया जाएगा। एक टैग का चयन करने के बाद बंद करें। + टिप्पणी इनपुट दिखाएँ + टाइमर प्रारंभ करते समय - एक टिप्पणी इनपुट संवाद दिखाया जाएगा। हमें रेटिंग दें ऐप को रेट करें और एक समीक्षा छोड़ दें। विकास का समर्थन करें diff --git a/resources/src/main/res/values-in/strings.xml b/resources/src/main/res/values-in/strings.xml index 5708d6b4c..c869ce761 100644 --- a/resources/src/main/res/values-in/strings.xml +++ b/resources/src/main/res/values-in/strings.xml @@ -228,7 +228,7 @@ Jangan tampilkan lagi Kecualikan aktivitas - Dialog pemilihan tag tidak akan ditampilkan untuk aktivitas yang dipilih. + Dialog tidak akan ditampilkan untuk aktivitas yang dipilih. Pilih aktivitas Pomodoro akan dimulai secara otomatis ketika aktivitas yang dipilih dimulai. @@ -329,6 +329,8 @@ Tampilkan pilihan label rekor Saat memulai mengatur waktu, jika kegiatan memiliki label rekor apa pun - dialog pemilihan akan ditampilkan. Tutup setelah memilih satu tag + Tampilkan masukan komentar + Saat memulai pengatur waktu - dialog input komentar akan ditampilkan. Nilai kami Nilai aplikasi dan tinggalkan sebuah ulasan. Mendukung pengembangan diff --git a/resources/src/main/res/values-it/strings.xml b/resources/src/main/res/values-it/strings.xml index 86b78fe4e..3cd17f0f6 100644 --- a/resources/src/main/res/values-it/strings.xml +++ b/resources/src/main/res/values-it/strings.xml @@ -228,7 +228,7 @@ Non mostrare più Escludi attività - La finestra di dialogo di selezione dei tag non verrà mostrata per le attività selezionate. + La finestra di dialogo non verrà visualizzata per le attività selezionate. Seleziona le attività Pomodoro verrà avviato automaticamente all\'avvio delle attività selezionate. @@ -329,6 +329,8 @@ Mostra la selezione delle etichette relative alle registrazioni Quando avvii un timer, se l\'attività ha delle etichette relative ad un record, verrà mostrato un dialog di selezione. Chiudi dopo aver selezionato un tag + Mostra l\'input del commento + Quando si avvia un timer, verrà visualizzata una finestra di dialogo per l\'immissione dei commenti. Votaci Valuta l\'app e lascia una recensione. Sostenere lo sviluppo diff --git a/resources/src/main/res/values-iw/strings.xml b/resources/src/main/res/values-iw/strings.xml index 0fd4f03ab..b08b27feb 100644 --- a/resources/src/main/res/values-iw/strings.xml +++ b/resources/src/main/res/values-iw/strings.xml @@ -228,7 +228,7 @@ אל תציג שוב החרג פעילויות - תיבת דו-שיח לבחירת תגית לא תוצג עבור פעילויות נבחרות. + דו-שיח לא יוצג עבור הפעילויות שנבחרו. בחר פעילויות פומודורו יתחיל אוטומטית כאשר פעילויות נבחרות יתחילו. @@ -329,6 +329,8 @@ הצג בחירת תגית רשומה כשמתחילים טיימר, אם לפעילות יש תגיות רשומה כלשהן - תיבת דו-שיח לבחירה תוצג. סגור לאחר בחירת תגית אחת + הצג קלט הערה + בעת הפעלת טיימר - תוצג דו-שיח להזנת הערות. דרג אותנו דרג את היישום והשאר חוות דעת. תמיכה בפיתוח diff --git a/resources/src/main/res/values-ja/strings.xml b/resources/src/main/res/values-ja/strings.xml index aa5b48dd0..9a11806ee 100644 --- a/resources/src/main/res/values-ja/strings.xml +++ b/resources/src/main/res/values-ja/strings.xml @@ -228,7 +228,7 @@ 二度と表示しないでください アクティビティを除外する - 選択したアクティビティに対してタグ選択ダイアログは表示されません。 + 選択したアクティビティに対してダイアログは表示されません。 アクティビティを選択する 選択したアクティビティが開始されると、ポモドーロが自動的に開始されます。 @@ -329,6 +329,8 @@ 記録タグの選択を表示 計測を開始する際、アクティビティに記録タグがある場合、選択ダイアログが表示されます。 タグを1つ選択したら閉じる + コメント入力を表示 + タイマーを開始すると、コメント入力ダイアログが表示されます。 評価する アプリを評価して、レビューを残す。 サポート開発 diff --git a/resources/src/main/res/values-ko/strings.xml b/resources/src/main/res/values-ko/strings.xml index 4c3178533..9e6e2a432 100644 --- a/resources/src/main/res/values-ko/strings.xml +++ b/resources/src/main/res/values-ko/strings.xml @@ -228,7 +228,7 @@ 다시 표시하지 않음 활동 제외 - 선택한 활동에 대해서는 태그 선택 대화 상자가 표시되지 않습니다. + 선택한 활동에 대해서는 대화상자가 표시되지 않습니다. 활동 선택 선택한 활동이 시작되면 Pomodoro가 자동으로 시작됩니다. @@ -329,6 +329,8 @@ 기록 태그 선택 표시 타이머를 시작할 때 활동에 기록 태그가 있는 경우 선택 대화 상자가 표시됩니다. 하나의 태그를 선택한 후 닫기. + 댓글 입력 표시 + 타이머를 시작하면 코멘트 입력 대화상자가 표시됩니다. 평가하기 앱을 평가하고 리뷰를 남겨주세요. 개발 지원 diff --git a/resources/src/main/res/values-nl/strings.xml b/resources/src/main/res/values-nl/strings.xml index 47db0f0c6..819ed9e62 100644 --- a/resources/src/main/res/values-nl/strings.xml +++ b/resources/src/main/res/values-nl/strings.xml @@ -228,7 +228,7 @@ Niet meer laten zien Exclusief activiteiten - Het dialoogvenster voor tagselectie wordt niet weergegeven voor geselecteerde activiteiten. + Dialoogvenster wordt niet weergegeven voor geselecteerde activiteiten. Selecteer activiteiten Pomodoro wordt automatisch gestart wanneer geselecteerde activiteiten worden gestart. @@ -329,6 +329,8 @@ Toon opname label selectie Als bij het starten van een timer, een activiteit opname labels heeft, wordt er een selectiedialoogvenster weergegeven. Sluiten na het selecteren van een label + Toon commentaarinvoer + Bij het starten van een timer wordt een dialoogvenster voor commentaarinvoer weergegeven. Beoordeel ons Beoordeel de app en laat een recensie achter. Ondersteuning van ontwikkeling diff --git a/resources/src/main/res/values-pl/strings.xml b/resources/src/main/res/values-pl/strings.xml index d2c125f1b..0fe807fe7 100644 --- a/resources/src/main/res/values-pl/strings.xml +++ b/resources/src/main/res/values-pl/strings.xml @@ -228,7 +228,7 @@ Nie pokazuj ponownie Wyklucz aktywności - Okno wyboru tagu nie będzie wyświetlane dla wybranych aktywności. + Okno dialogowe nie będzie wyświetlane dla wybranych działań. Wybierz aktywności Pomodoro zostanie automatycznie uruchomione po rozpoczęciu wybranych czynności. @@ -329,6 +329,8 @@ Pokaż wybór tagu dla rekordu Jeśli po uruchomieniu timera aktywność ma jakiekolwiek znaczniki rekordu, zostanie wyświetlone okno dialogowe wyboru. Zamknij po wybraniu jednego tagu + Pokaż wprowadzony komentarz + Po uruchomieniu stopera – zostanie wyświetlone okno dialogowe umożliwiające wprowadzenie komentarza. Oceń nas Oceń aplikację i zostaw recenzję. Wspieraj rozwój diff --git a/resources/src/main/res/values-pt-rPT/strings.xml b/resources/src/main/res/values-pt-rPT/strings.xml index 839696d48..8aa59e5ba 100644 --- a/resources/src/main/res/values-pt-rPT/strings.xml +++ b/resources/src/main/res/values-pt-rPT/strings.xml @@ -228,7 +228,7 @@ Não mostre novamente Excluir atividades - A caixa de diálogo de seleção de tags não será exibida para atividades selecionadas. + A caixa de diálogo não será mostrada para atividades selecionadas. Selecione atividades O Pomodoro será iniciado automaticamente quando as atividades selecionadas forem iniciadas. @@ -329,6 +329,8 @@ Mostrar seleção da etiqueta do registo Ao iniciar um temporizador, se a atividade tiver alguma etiqueta, um diálogo de seleção será exibido. Fechar após selecionar uma etiqueta + Mostrar entrada de comentário + Ao iniciar um cronômetro - uma caixa de diálogo de entrada de comentários será mostrada. Avaliação Avaliação e comentários sobre a aplicação. Apoiar o desenvolvimento diff --git a/resources/src/main/res/values-pt/strings.xml b/resources/src/main/res/values-pt/strings.xml index 696994f73..77b67f03f 100644 --- a/resources/src/main/res/values-pt/strings.xml +++ b/resources/src/main/res/values-pt/strings.xml @@ -228,7 +228,7 @@ Não mostre novamente Excluir atividades - A caixa de diálogo de seleção de tags não será exibida para atividades selecionadas. + A caixa de diálogo não será mostrada para atividades selecionadas. Selecione atividades O Pomodoro será iniciado automaticamente quando as atividades selecionadas forem iniciadas. @@ -329,6 +329,8 @@ Mostrar seleção de tag de registro Ao iniciar um timer, se a atividade tiver alguma tag de registro - uma caixa de diálogo de seleção será exibida. Fechar após selecionar uma tag + Mostrar entrada de comentário + Ao iniciar um cronômetro - uma caixa de diálogo de entrada de comentários será mostrada. Avalie-nos Avalie o aplicativo e deixe um comentário. Apoiar o desenvolvimento diff --git a/resources/src/main/res/values-ro/strings.xml b/resources/src/main/res/values-ro/strings.xml index 2c1a40ccb..a7feab13b 100644 --- a/resources/src/main/res/values-ro/strings.xml +++ b/resources/src/main/res/values-ro/strings.xml @@ -228,7 +228,7 @@ Nu mai arăta Excludeți activități - Dialogul de selecție a etichetelor nu va fi afișat pentru activitățile selectate. + Dialogul nu va fi afișat pentru activitățile selectate. Selectați activități Pomodoro va fi pornit automat atunci când activitățile selectate sunt pornite. @@ -329,6 +329,8 @@ Arată etichetele atașate Când este pornit un cronometru, dacă activitatea are etichete, un dailog de alegere va fi afișat. Închide după alegerea unei etichete + Afișează introducerea comentariilor + La pornirea unui temporizator - va fi afișat un dialog de introducere a comentariilor. Evaluează-ne Evaluează aplicatia și scrie un recenzie. Susține dezvoltarea diff --git a/resources/src/main/res/values-ru/strings.xml b/resources/src/main/res/values-ru/strings.xml index a2a867bf3..a4a50092c 100644 --- a/resources/src/main/res/values-ru/strings.xml +++ b/resources/src/main/res/values-ru/strings.xml @@ -228,7 +228,7 @@ Больше не показывать Исключить активности - Диалог выбора тега не будет отображаться для выбранных активностей. + Диалог не будет отображаться для выбранных активностей. Выбрать активности Pomodoro будет автоматически запускаться при запуске выбранных действий. @@ -329,6 +329,8 @@ Показывать диалог выбора тега для записи При запуске таймера, если у активности есть теги для записей - будет показан диалог для выбора. Закрыть после выбора одного тега + Показать ввод комментариев + При запуске таймера будет показан диалог ввода комментария. Оцените нас Оцените приложение и оставьте отзыв. Поддержать разработку diff --git a/resources/src/main/res/values-sv/strings.xml b/resources/src/main/res/values-sv/strings.xml index 304b2a008..2e19f58b2 100644 --- a/resources/src/main/res/values-sv/strings.xml +++ b/resources/src/main/res/values-sv/strings.xml @@ -228,7 +228,7 @@ Visa inte igen Uteslut aktiviteter - Dialogrutan för val av tagg kommer inte att visas för valda aktiviteter. + Dialogrutan kommer inte att visas för valda aktiviteter. Välj aktiviteter Pomodoro kommer att startas automatiskt när valda aktiviteter startas. @@ -329,6 +329,8 @@ Dialog för händelsetagg Visa dialogruta för val av händelsetaggar om den påbörjade aktiviteten har tilldelade händelsetaggar. Stäng efter att ha valt en tagg + Visa kommentarinmatning + När du startar en timer - en dialogruta för kommentarinmatning visas. Ge oss ett betyg Betygsätt appen och lämna en recension. Stöd utveckling diff --git a/resources/src/main/res/values-tr/strings.xml b/resources/src/main/res/values-tr/strings.xml index fe717ef18..98c1bb38d 100644 --- a/resources/src/main/res/values-tr/strings.xml +++ b/resources/src/main/res/values-tr/strings.xml @@ -228,7 +228,7 @@ Bir daha gösterme Etkinlikleri hariç tut - Seçilen etkinlikler için etiket seçimi iletişim kutusu gösterilmeyecektir. + Seçilen etkinlikler için diyalog gösterilmeyecektir. Etkinlikleri seçin Seçilen aktiviteler başlatıldığında Pomodoro otomatik olarak başlatılacaktır. @@ -329,6 +329,8 @@ Kayıt etiketi seçimini göster Eğer aktivite kayıt etiketine sahipse, zamanlayıcı başlatılırken seçim ekranı görünecek. Bir etiket seçildiğinde seçim ekranını kapat + Yorum girişini göster + Bir zamanlayıcıyı başlatırken, bir yorum girişi iletişim kutusu gösterilecektir. Bizi oylayın Uygulamayı oyla ve bir yorum bırak. Geliştirmeyi destekleyin diff --git a/resources/src/main/res/values-uk/strings.xml b/resources/src/main/res/values-uk/strings.xml index a8914b932..f440369d5 100644 --- a/resources/src/main/res/values-uk/strings.xml +++ b/resources/src/main/res/values-uk/strings.xml @@ -228,7 +228,7 @@ Більше не показувати Виключити активність - Діалогове вікно вибору тегів не відображатиметься для вибраних дій. + Для вибраних дій діалогове вікно не відображатиметься. Вибрати активності Pomodoro буде запущено автоматично, коли розпочнуться вибрані дії. @@ -329,6 +329,8 @@ Показувати діалог вибору тега для запису Під час запуску таймера, якщо у активності є якісь теги для записів, буде показане діалогове вікно вибору. Закрити після вибору одного тегу + Показати введені коментарі + При запуску таймера - буде показано діалогове вікно введення коментаря. Оцініть нас Оцініть програму та залиште відгук. Підтримка розвитку diff --git a/resources/src/main/res/values-vi/strings.xml b/resources/src/main/res/values-vi/strings.xml index e15ccd323..de9d76b2f 100644 --- a/resources/src/main/res/values-vi/strings.xml +++ b/resources/src/main/res/values-vi/strings.xml @@ -228,7 +228,7 @@ Không hiển thị lại Loại trừ các hoạt động - Hộp thoại chọn thẻ sẽ không được hiển thị cho các hoạt động đã chọn. + Hộp thoại sẽ không được hiển thị cho các hoạt động đã chọn. Chọn hoạt động Pomodoro sẽ tự động bắt đầu khi các hoạt động được chọn được bắt đầu. @@ -329,6 +329,8 @@ Hiển thị lựa chọn thẻ bản ghi Khi bắt đầu hẹn giờ, nếu hoạt động có bất kỳ thẻ bản ghi nào - hộp thoại lựa chọn sẽ được hiển thị. Đóng sau khi chọn một thẻ + Hiển thị đầu vào nhận xét + Khi bắt đầu hẹn giờ - hộp thoại nhập nhận xét sẽ được hiển thị. Hãy đánh giá chúng tôi Xếp hạng ứng dụng và để lại đánh giá. Hỗ trợ phát triển diff --git a/resources/src/main/res/values-zh-rTW/strings.xml b/resources/src/main/res/values-zh-rTW/strings.xml index 1773bece4..152be6262 100644 --- a/resources/src/main/res/values-zh-rTW/strings.xml +++ b/resources/src/main/res/values-zh-rTW/strings.xml @@ -228,7 +228,7 @@ 不再顯示 排除活動 - 對於選定的活動,不會顯示標籤選擇對話方塊。 + 對於選定的活動將不會顯示對話方塊。 選擇活動 當選定的活動開始時,番茄工作法將自動啟動。 @@ -329,6 +329,8 @@ 顯示記錄標籤選擇 啟動計時器時,如果活動有任何記錄標籤 - 將顯示一個選擇對話框。 選擇一個標籤後關閉 + 顯示評論輸入 + 啟動計時器時 - 將顯示註解輸入對話方塊。 給我們投票 給我們的應用留下評分 支持發展 diff --git a/resources/src/main/res/values-zh/strings.xml b/resources/src/main/res/values-zh/strings.xml index cd719a464..b93282ebc 100644 --- a/resources/src/main/res/values-zh/strings.xml +++ b/resources/src/main/res/values-zh/strings.xml @@ -228,7 +228,7 @@ 不再显示 排除活动 - 对于选定的活动,不会显示标签选择对话框。 + 对于选定的活动将不会显示对话框。 选择活动 当选定的活动开始时,番茄工作法将自动启动。 @@ -329,6 +329,8 @@ 显示记录标签选择 启动计时器时,如果活动有任何记录标签,则会显示一个选择对话框。 选择一个标签后关闭 + 显示评论输入 + 启动计时器时 - 将显示注释输入对话框。 给我们评分 评价应用程序并留下评论。 支持发展 diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml index fc5af821d..395c74fd1 100644 --- a/resources/src/main/res/values/strings.xml +++ b/resources/src/main/res/values/strings.xml @@ -228,7 +228,7 @@ Don\'t show again Exclude activities - Tag selection dialog will not be shown for selected activities. + Dialog will not be shown for selected activities. Select activities Pomodoro will be automatically started when selected activities are started. @@ -331,6 +331,8 @@ Show record tag selection When starting a timer, if activity has any record tags - a selection dialog will be shown. Close after selecting one tag + Show comment input + When starting a timer - a comment input dialog will be shown. Rate us Rate the app and leave a review. Support development