A fork of Simple Time Tracker with WearOS support. (Now integrated upstream)
0

Configure Feed

Select the types of activity you want to include in your feed.

add archive to settings

razeeman (May 15, 2021, 11:50 AM +0300) 1b8dbecf cdce5328

+112 -12
+7
app/src/main/java/com/example/util/simpletimetracker/navigation/ScreenResolverImpl.kt
··· 81 81 null, 82 82 navExtras 83 83 ) 84 + Screen.ARCHIVE -> 85 + navController?.navigate( 86 + R.id.action_mainFragment_to_archiveFragment, 87 + null, 88 + null, 89 + navExtras 90 + ) 84 91 Screen.CHANGE_CATEGORY -> 85 92 navController?.navigate( 86 93 R.id.action_categoriesFragment_to_changeCategoryFragment,
+13 -1
app/src/main/res/navigation/nav_graph.xml
··· 45 45 app:exitAnim="@anim/fragment_close_exit" 46 46 app:popEnterAnim="@anim/fragment_open_enter" 47 47 app:popExitAnim="@anim/fragment_close_exit" /> 48 + <action 49 + android:id="@+id/action_mainFragment_to_archiveFragment" 50 + app:destination="@id/archiveFragment" 51 + app:enterAnim="@anim/fragment_open_enter" 52 + app:exitAnim="@anim/fragment_close_exit" 53 + app:popEnterAnim="@anim/fragment_open_enter" 54 + app:popExitAnim="@anim/fragment_close_exit" /> 48 55 </fragment> 49 56 <fragment 50 57 android:id="@+id/changeRecordTypeFragment" ··· 79 86 android:name="com.example.util.simpletimetracker.feature_dialogs.dateTime.DateTimeDialogFragment" 80 87 android:label="DateTimeDialog" 81 88 tools:layout="@layout/date_dialog_fragment" /> 82 - <dialog 89 + <dialog 83 90 android:id="@+id/durationDialog" 84 91 android:name="com.example.util.simpletimetracker.feature_dialogs.duration.view.DurationDialogFragment" 85 92 android:label="DurationDialog" ··· 156 163 android:name="com.example.util.simpletimetracker.feature_change_record_tag.view.ChangeRecordTagFragment" 157 164 android:label="ChangeRecordTagFragment" 158 165 tools:layout="@layout/change_record_tag_fragment" /> 166 + <fragment 167 + android:id="@+id/archiveFragment" 168 + android:name="com.example.util.simpletimetracker.feature_archive.view.ArchiveFragment" 169 + android:label="ArchiveFragment" 170 + tools:layout="@layout/archive_fragment" /> 159 171 </navigation>
+5 -3
core/src/main/res/values-ru/strings.xml
··· 9 9 <string name="day_of_week_saturday">Сб</string> 10 10 <string name="day_of_week_sunday">Вс</string> 11 11 12 + <string name="activity_hint">Активности</string> 13 + <string name="activity_tag_hint">Теги активностей</string> 14 + <string name="record_tag_hint">Теги записей</string> 15 + 12 16 <!-- Range selection --> 13 17 <string name="title_yesterday">Вчера</string> 14 18 <string name="title_today">Сегодня</string> ··· 106 110 <string name="chart_filter_hint">Фильтр</string> 107 111 <string name="types_filter_show_all">Показать все</string> 108 112 <string name="types_filter_hide_all">Скрыть все</string> 109 - <string name="types_filter_activity_hint">Активности</string> 110 - <string name="types_filter_activity_tag_hint">Теги активностей</string> 111 - <string name="types_filter_record_tag_hint">Теги записей</string> 112 113 <string name="chart_filter_type_hint">Тип статистики</string> 113 114 <string name="chart_filter_type_activity">Активности</string> 114 115 <string name="chart_filter_type_category">Теги</string> ··· 146 147 <string name="settings_dark_mode">Темный режим</string> 147 148 <string name="settings_use_military_time">24-часовой формат</string> 148 149 <string name="settings_change_card_size">Изменить размер карточки активности</string> 150 + <string name="settings_archive">Архив</string> 149 151 <string name="settings_edit_categories">Редактировать теги</string> 150 152 <string name="settings_edit_categories_hint">Назначьте теги активностям и записям.</string> 151 153 <string name="settings_rate">Оцените нас</string>
+5 -3
core/src/main/res/values/strings.xml
··· 9 9 <string name="day_of_week_saturday">Sat</string> 10 10 <string name="day_of_week_sunday">Sun</string> 11 11 12 + <string name="activity_hint">Activities</string> 13 + <string name="activity_tag_hint">Activity tags</string> 14 + <string name="record_tag_hint">Record tags</string> 15 + 12 16 <!-- Range selection --> 13 17 <string name="title_yesterday">Yesterday</string> 14 18 <string name="title_today">Today</string> ··· 106 110 <string name="chart_filter_hint">Filter</string> 107 111 <string name="types_filter_show_all">Show all</string> 108 112 <string name="types_filter_hide_all">Hide all</string> 109 - <string name="types_filter_activity_hint">Activities</string> 110 - <string name="types_filter_activity_tag_hint">Activity tags</string> 111 - <string name="types_filter_record_tag_hint">Record tags</string> 112 113 <string name="chart_filter_type_hint">Statistics type</string> 113 114 <string name="chart_filter_type_activity">Activity</string> 114 115 <string name="chart_filter_type_category">Tag</string> ··· 146 147 <string name="settings_dark_mode">Dark mode</string> 147 148 <string name="settings_use_military_time">Use 24-hour format</string> 148 149 <string name="settings_change_card_size">Change activity card size</string> 150 + <string name="settings_archive">Archive</string> 149 151 <string name="settings_edit_categories">Edit tags</string> 150 152 <string name="settings_edit_categories_hint">Assign tags to activities and records.</string> 151 153 <string name="settings_rate">Rate us</string>
+59 -2
feature_archive/src/main/java/com/example/util/simpletimetracker/feature_archive/interactor/ArchiveViewDataInteractor.kt
··· 1 1 package com.example.util.simpletimetracker.feature_archive.interactor 2 2 3 3 import com.example.util.simpletimetracker.core.adapter.ViewHolderType 4 + import com.example.util.simpletimetracker.core.adapter.divider.DividerViewData 5 + import com.example.util.simpletimetracker.core.adapter.hint.HintViewData 6 + import com.example.util.simpletimetracker.core.mapper.CategoryViewDataMapper 7 + import com.example.util.simpletimetracker.core.mapper.RecordTypeViewDataMapper 8 + import com.example.util.simpletimetracker.core.repo.ResourceRepo 9 + import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor 10 + import com.example.util.simpletimetracker.domain.interactor.RecordTagInteractor 11 + import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor 12 + import com.example.util.simpletimetracker.feature_archive.R 4 13 import javax.inject.Inject 5 14 6 - class ArchiveViewDataInteractor @Inject constructor() { 15 + class ArchiveViewDataInteractor @Inject constructor( 16 + private val resourceRepo: ResourceRepo, 17 + // interactors 18 + private val prefsInteractor: PrefsInteractor, 19 + private val recordTypeInteractor: RecordTypeInteractor, 20 + private val recordTagInteractor: RecordTagInteractor, 21 + // mappers 22 + private val recordTypeViewDataMapper: RecordTypeViewDataMapper, 23 + private val categoryViewDataMapper: CategoryViewDataMapper 24 + ) { 7 25 8 26 suspend fun getViewData(): List<ViewHolderType> { 9 - return emptyList() // TODO 27 + val result: MutableList<ViewHolderType> = mutableListOf() 28 + val numberOfCards = prefsInteractor.getNumberOfCards() 29 + val isDarkTheme = prefsInteractor.getDarkMode() 30 + 31 + val types = recordTypeInteractor.getAll().map { it.id to it }.toMap() 32 + val archivedTypes = types.values.filter { it.hidden } 33 + val archivedRecordTags = recordTagInteractor.getAll().filter { it.archived } 34 + 35 + val typesViewData = archivedTypes.map { type -> 36 + recordTypeViewDataMapper.mapFiltered( 37 + recordType = type, 38 + numberOfCards = numberOfCards, 39 + isDarkTheme = isDarkTheme, 40 + isFiltered = false 41 + ) 42 + } 43 + 44 + val recordTagsViewData = archivedRecordTags.mapNotNull { tag -> 45 + categoryViewDataMapper.mapRecordTag( 46 + tag = tag, 47 + type = types[tag.typeId] ?: return@mapNotNull null, 48 + isDarkTheme = isDarkTheme, 49 + isFiltered = false 50 + ) 51 + } 52 + 53 + if (typesViewData.isNotEmpty()) { 54 + HintViewData(resourceRepo.getString(R.string.activity_hint)).let(result::add) 55 + typesViewData.let(result::addAll) 56 + } 57 + 58 + if (recordTagsViewData.isNotEmpty()) { 59 + if (typesViewData.isNotEmpty()) { 60 + DividerViewData(1).let(result::add) 61 + } 62 + HintViewData(resourceRepo.getString(R.string.record_tag_hint)).let(result::add) 63 + recordTagsViewData.let(result::addAll) 64 + } 65 + 66 + return result 10 67 } 11 68 }
+3 -3
feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/typesFilter/viewModel/TypesFilterViewModel.kt
··· 235 235 } 236 236 237 237 if (activityTagsViewData.isNotEmpty()) { 238 - HintViewData(resourceRepo.getString(R.string.types_filter_activity_tag_hint)).let(result::add) 238 + HintViewData(resourceRepo.getString(R.string.activity_tag_hint)).let(result::add) 239 239 activityTagsViewData.let(result::addAll) 240 240 } 241 241 ··· 243 243 if (activityTagsViewData.isNotEmpty()) { 244 244 DividerViewData(1).let(result::add) 245 245 } 246 - HintViewData(resourceRepo.getString(R.string.types_filter_activity_hint)).let(result::add) 246 + HintViewData(resourceRepo.getString(R.string.activity_hint)).let(result::add) 247 247 typesViewData.let(result::addAll) 248 248 } 249 249 250 250 if (recordTagsViewData.isNotEmpty()) { 251 251 DividerViewData(2).let(result::add) 252 - HintViewData(resourceRepo.getString(R.string.types_filter_record_tag_hint)).let(result::add) 252 + HintViewData(resourceRepo.getString(R.string.record_tag_hint)).let(result::add) 253 253 recordTagsViewData.let(result::addAll) 254 254 } 255 255
+1
feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/view/SettingsFragment.kt
··· 63 63 checkboxSettingsUseMilitaryTime.setOnClick(viewModel::onUseMilitaryTimeClicked) 64 64 tvSettingsChangeCardSize.setOnClick(viewModel::onChangeCardSizeClick) 65 65 layoutSettingsEditCategories.setOnClick(viewModel::onEditCategoriesClick) 66 + tvSettingsArchive.setOnClick(viewModel::onArchiveClick) 66 67 layoutSettingsSaveBackup.setOnClick(viewModel::onSaveClick) 67 68 layoutSettingsRestoreBackup.setOnClick(viewModel::onRestoreClick) 68 69 layoutSettingsExportCsv.setOnClick(viewModel::onExportCsvClick)
+4
feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/SettingsViewModel.kt
··· 275 275 router.navigate(Screen.CATEGORIES) 276 276 } 277 277 278 + fun onArchiveClick() { 279 + router.navigate(Screen.ARCHIVE) 280 + } 281 + 278 282 fun onPositiveDialogClick(tag: String?) { 279 283 when (tag) { 280 284 ALERT_DIALOG_TAG -> router.execute(
+14
feature_settings/src/main/res/layout/settings_fragment.xml
··· 189 189 190 190 </LinearLayout> 191 191 192 + <View 193 + style="@style/SettingsDivider" 194 + android:layout_width="match_parent" /> 195 + 196 + <androidx.appcompat.widget.AppCompatTextView 197 + android:id="@+id/tvSettingsArchive" 198 + style="@style/SettingsText" 199 + android:layout_width="match_parent" 200 + android:layout_height="wrap_content" 201 + android:background="?selectableItemBackground" 202 + android:clickable="true" 203 + android:focusable="true" 204 + android:text="@string/settings_archive" /> 205 + 192 206 </LinearLayout> 193 207 194 208 </androidx.cardview.widget.CardView>
+1
navigation/src/main/java/com/example/util/simpletimetracker/navigation/Screen.kt
··· 10 10 CATEGORIES, 11 11 CHANGE_CATEGORY, 12 12 CHANGE_RECORD_TAG, 13 + ARCHIVE, 13 14 14 15 STANDARD_DIALOG, 15 16 DATE_TIME_DIALOG,