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.

adding daily weekly goal time selection

razeeman (Dec 17, 2022, 3:15 PM +0300) c56f7d0f 15f56e65

+336 -116
+2 -2
core/src/main/res/values-de/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Einen Namen wählen</string> 120 120 <string name="change_record_type_categories_empty">Keine Kategorien hinzugefügt</string> 121 121 <string name="change_record_type_goal_time_disabled">Deaktiviert</string> 122 - <string name="change_record_type_goal_time">Zielzeit</string> 123 - <string name="change_record_type_goal_time_hint">Benachrichtigung nach der angegebenen Zeit der Erfassung dieser Aktivität anzeigen.</string> 122 + <string name="change_record_type_goal_time_hint">Zielzeit</string> 123 + <string name="change_record_type_goal_time_description">Benachrichtigung nach der angegebenen Zeit der Erfassung dieser Aktivität anzeigen.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filter entfernt</string>
+2 -2
core/src/main/res/values-es/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Escoja un nombre</string> 120 120 <string name="change_record_type_categories_empty">No se añadieron categorías</string> 121 121 <string name="change_record_type_goal_time_disabled">Deshabilitado</string> 122 - <string name="change_record_type_goal_time">Objetivo</string> 123 - <string name="change_record_type_goal_time_hint">Mostrar notificación después del tiempo de segimiento especificado de esta actividad.</string> 122 + <string name="change_record_type_goal_time_hint">Objetivo</string> 123 + <string name="change_record_type_goal_time_description">Mostrar notificación después del tiempo de segimiento especificado de esta actividad.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filtro eliminado</string>
+2 -2
core/src/main/res/values-fr/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Choisissez un nom</string> 120 120 <string name="change_record_type_categories_empty">Aucune catégorie ajoutée</string> 121 121 <string name="change_record_type_goal_time_disabled">Désactivé</string> 122 - <string name="change_record_type_goal_time">Objectif de durée</string> 123 - <string name="change_record_type_goal_time_hint">Afficher une notification dès que la durée spécifiée de suivi de cette activité est dépassée.</string> 122 + <string name="change_record_type_goal_time_hint">Objectif de durée</string> 123 + <string name="change_record_type_goal_time_description">Afficher une notification dès que la durée spécifiée de suivi de cette activité est dépassée.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filtre supprimé</string>
+2 -2
core/src/main/res/values-hi/strings.xml
··· 119 119 <string name="change_record_message_choose_name">एक नाम चुनो</string> 120 120 <string name="change_record_type_categories_empty">कोई श्रेणियां नहीं जोड़ी</string> 121 121 <string name="change_record_type_goal_time_disabled">अक्षम</string> 122 - <string name="change_record_type_goal_time">लक्ष्य काल</string> 123 - <string name="change_record_type_goal_time_hint">इस गतिविधि को ट्रैक करने के निर्सधारित समय के बाद सूचना दिखाएं।</string> 122 + <string name="change_record_type_goal_time_hint">लक्ष्य काल</string> 123 + <string name="change_record_type_goal_time_description">इस गतिविधि को ट्रैक करने के निर्सधारित समय के बाद सूचना दिखाएं।</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">फ़िल्टर हटा दिया गया</string>
+2 -2
core/src/main/res/values-in/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Pilih sebuah nama</string> 120 120 <string name="change_record_type_categories_empty">Tidak ada kategori yang ditambahkan</string> 121 121 <string name="change_record_type_goal_time_disabled">Dinonaktifkan</string> 122 - <string name="change_record_type_goal_time">Waktu tujuan</string> 123 - <string name="change_record_type_goal_time_hint">Tampilkan notifikasi setelah waktu yang ditentukan dalam melacak kegiatan ini.</string> 122 + <string name="change_record_type_goal_time_hint">Waktu tujuan</string> 123 + <string name="change_record_type_goal_time_description">Tampilkan notifikasi setelah waktu yang ditentukan dalam melacak kegiatan ini.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filter dihapus</string>
+2 -2
core/src/main/res/values-it/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Scegli un nome</string> 120 120 <string name="change_record_type_categories_empty">Nessuna categoria aggiunta</string> 121 121 <string name="change_record_type_goal_time_disabled">Disabilitato</string> 122 - <string name="change_record_type_goal_time">Obiettivo temporale</string> 123 - <string name="change_record_type_goal_time_hint">Mostra notifiche dopo il tempo di tracciamento specificato per questa attività.</string> 122 + <string name="change_record_type_goal_time_hint">Obiettivo temporale</string> 123 + <string name="change_record_type_goal_time_description">Mostra notifiche dopo il tempo di tracciamento specificato per questa attività.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filtro rimosso</string>
+2 -2
core/src/main/res/values-ja/strings.xml
··· 119 119 <string name="change_record_message_choose_name">名称を入力してください</string> 120 120 <string name="change_record_type_categories_empty">カテゴリが追加されていません</string> 121 121 <string name="change_record_type_goal_time_disabled">未設定</string> 122 - <string name="change_record_type_goal_time">目標時間</string> 123 - <string name="change_record_type_goal_time_hint">このアクティビティを追跡して指定時間後に通知を表示します。</string> 122 + <string name="change_record_type_goal_time_hint">目標時間</string> 123 + <string name="change_record_type_goal_time_description">このアクティビティを追跡して指定時間後に通知を表示します。</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">フィルターを取り外しました</string>
+2 -2
core/src/main/res/values-nl/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Kies een naam</string> 120 120 <string name="change_record_type_categories_empty">Geen categorieën toegevoegd</string> 121 121 <string name="change_record_type_goal_time_disabled">Uitgeschakeld</string> 122 - <string name="change_record_type_goal_time">Doeltijd</string> 123 - <string name="change_record_type_goal_time_hint">Melding weergeven na het opgegeven tijdstip waarop deze activiteit is gevolgd.</string> 122 + <string name="change_record_type_goal_time_hint">Doeltijd</string> 123 + <string name="change_record_type_goal_time_description">Melding weergeven na het opgegeven tijdstip waarop deze activiteit is gevolgd.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filter verwijderd</string>
+2 -2
core/src/main/res/values-pt/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Escolha um nome</string> 120 120 <string name="change_record_type_categories_empty">Nenhuma categoria adicionada</string> 121 121 <string name="change_record_type_goal_time_disabled">Desativado</string> 122 - <string name="change_record_type_goal_time">Meta</string> 123 - <string name="change_record_type_goal_time_hint">Mostrar notificação após atingir o tempo determinado para monitorar esta atividade.</string> 122 + <string name="change_record_type_goal_time_hint">Meta</string> 123 + <string name="change_record_type_goal_time_description">Mostrar notificação após atingir o tempo determinado para monitorar esta atividade.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filtro removido</string>
+2 -2
core/src/main/res/values-ru/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Выберите имя</string> 120 120 <string name="change_record_type_categories_empty">Категории не добавлены</string> 121 121 <string name="change_record_type_goal_time_disabled">Выкл.</string> 122 - <string name="change_record_type_goal_time">Время цели</string> 123 - <string name="change_record_type_goal_time_hint">Показывать уведомление после указанного времени отслеживания этой активности.</string> 122 + <string name="change_record_type_goal_time_hint">Время цели</string> 123 + <string name="change_record_type_goal_time_description">Показывать уведомление после указанного времени отслеживания этой активности.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Фильтр удален</string>
+2 -2
core/src/main/res/values-sv/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Ange ett namn</string> 120 120 <string name="change_record_type_categories_empty">Inga kategorier har lagts till</string> 121 121 <string name="change_record_type_goal_time_disabled">Inaktiverad</string> 122 - <string name="change_record_type_goal_time">Tidsmål</string> 123 - <string name="change_record_type_goal_time_hint">Visa notis efter att aktivitet uppnått sitt tidsmål.</string> 122 + <string name="change_record_type_goal_time_hint">Tidsmål</string> 123 + <string name="change_record_type_goal_time_description">Visa notis efter att aktivitet uppnått sitt tidsmål.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filter borttaget</string>
+2 -2
core/src/main/res/values-tr/strings.xml
··· 119 119 <string name="change_record_message_choose_name">İsim seçin</string> 120 120 <string name="change_record_type_categories_empty">Kategori eklenmedi</string> 121 121 <string name="change_record_type_goal_time_disabled">Devre dışı</string> 122 - <string name="change_record_type_goal_time">Hedef süre</string> 123 - <string name="change_record_type_goal_time_hint">Bu aktivite belirtilen süre kadar takip edildiğinde bildirim göster.</string> 122 + <string name="change_record_type_goal_time_hint">Hedef süre</string> 123 + <string name="change_record_type_goal_time_description">Bu aktivite belirtilen süre kadar takip edildiğinde bildirim göster.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Filtre kaldırıldı</string>
+2 -2
core/src/main/res/values-uk/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Оберіть ім\'я</string> 120 120 <string name="change_record_type_categories_empty">Категорії не додано</string> 121 121 <string name="change_record_type_goal_time_disabled">Відключено</string> 122 - <string name="change_record_type_goal_time">Час цілі</string> 123 - <string name="change_record_type_goal_time_hint">Показувати сповіщення після вказаного часу відстеження цієї дії.</string> 122 + <string name="change_record_type_goal_time_hint">Час цілі</string> 123 + <string name="change_record_type_goal_time_description">Показувати сповіщення після вказаного часу відстеження цієї дії.</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">Фільтр видалений</string>
+2 -2
core/src/main/res/values-zh/strings.xml
··· 119 119 <string name="change_record_message_choose_name">请填写名称</string> 120 120 <string name="change_record_type_categories_empty">未添加任何类别</string> 121 121 <string name="change_record_type_goal_time_disabled">不启用</string> 122 - <string name="change_record_type_goal_time">目标时间</string> 123 - <string name="change_record_type_goal_time_hint">追踪此活动经过指定时间后显示通知。</string> 122 + <string name="change_record_type_goal_time_hint">目标时间</string> 123 + <string name="change_record_type_goal_time_description">追踪此活动经过指定时间后显示通知。</string> 124 124 125 125 <!-- Activity filters --> 126 126 <string name="change_activity_filter_removed">过滤器已移除</string>
+5 -2
core/src/main/res/values/strings.xml
··· 119 119 <string name="change_record_message_choose_name">Choose a name</string> 120 120 <string name="change_record_type_categories_empty">No categories added</string> 121 121 <string name="change_record_type_goal_time_disabled">Disabled</string> 122 - <string name="change_record_type_goal_time">Goal time</string> 123 - <string name="change_record_type_goal_time_hint">Show notification after specified time of tracking this activity.</string> 122 + <string name="change_record_type_goal_time_hint">Goal time</string> 123 + <string name="change_record_type_goal_time_description">Show notification after specified time of tracking this activity.</string> 124 + <string name="change_record_type_session_goal_time">Session</string> 125 + <string name="change_record_type_daily_goal_time">Day</string> 126 + <string name="change_record_type_weekly_goal_time">Week</string> 124 127 125 128 <!-- Activity filters --> 126 129 <string name="change_activity_filter_removed">Filter removed</string>
+195 -69
features/feature_change_record_type/src/main/res/layout/change_record_type_fragment.xml
··· 65 65 style="@style/InputFieldCard" 66 66 android:layout_width="0dp" 67 67 android:layout_height="@dimen/input_field_height" 68 - android:layout_marginHorizontal="@dimen/input_field_margin" 68 + android:layout_marginStart="@dimen/input_field_margin" 69 69 android:layout_marginTop="3dp" 70 - app:layout_constraintEnd_toEndOf="parent" 70 + app:layout_constraintEnd_toStartOf="@id/fieldChangeRecordTypeIcon" 71 71 app:layout_constraintStart_toStartOf="parent" 72 - app:layout_constraintTop_toBottomOf="@id/inputChangeRecordTypeName"> 72 + app:layout_constraintTop_toBottomOf="@id/inputChangeRecordTypeName" 73 + app:layout_goneMarginEnd="@dimen/input_field_margin"> 73 74 74 75 <androidx.constraintlayout.widget.ConstraintLayout 75 76 android:layout_width="match_parent" ··· 108 109 style="@style/InputFieldCard" 109 110 android:layout_width="0dp" 110 111 android:layout_height="@dimen/input_field_height" 111 - android:layout_marginStart="@dimen/input_field_margin" 112 - app:layout_constraintEnd_toStartOf="@id/fieldChangeRecordTypeCategory" 113 - app:layout_constraintStart_toStartOf="parent" 114 - app:layout_constraintTop_toBottomOf="@id/fieldChangeRecordTypeColor" 115 - app:layout_goneMarginEnd="@dimen/input_field_margin"> 112 + android:layout_marginTop="3dp" 113 + android:layout_marginEnd="@dimen/input_field_margin" 114 + app:layout_constraintEnd_toEndOf="parent" 115 + app:layout_constraintStart_toEndOf="@id/fieldChangeRecordTypeColor" 116 + app:layout_constraintTop_toBottomOf="@id/inputChangeRecordTypeName" 117 + app:layout_goneMarginStart="@dimen/input_field_margin"> 116 118 117 119 <androidx.constraintlayout.widget.ConstraintLayout 118 120 android:layout_width="match_parent" ··· 151 153 style="@style/InputFieldCard" 152 154 android:layout_width="0dp" 153 155 android:layout_height="@dimen/input_field_height" 154 - android:layout_marginEnd="@dimen/input_field_margin" 155 - app:layout_constraintEnd_toEndOf="parent" 156 - app:layout_constraintStart_toEndOf="@id/fieldChangeRecordTypeIcon" 156 + android:layout_marginStart="@dimen/input_field_margin" 157 + app:layout_constraintEnd_toStartOf="@id/fieldChangeRecordTypeGoalTime" 158 + app:layout_constraintStart_toStartOf="parent" 157 159 app:layout_constraintTop_toBottomOf="@id/fieldChangeRecordTypeColor" 158 - app:layout_goneMarginStart="@dimen/input_field_margin"> 160 + app:layout_goneMarginEnd="@dimen/input_field_margin"> 159 161 160 162 <androidx.constraintlayout.widget.ConstraintLayout 161 163 android:layout_width="match_parent" ··· 189 191 190 192 </androidx.cardview.widget.CardView> 191 193 192 - <androidx.constraintlayout.widget.Barrier 193 - android:id="@+id/barrierChangeRecordTypeGoalTime" 194 - android:layout_width="match_parent" 195 - android:layout_height="wrap_content" 196 - app:barrierDirection="bottom" 197 - app:constraint_referenced_ids="fieldChangeRecordTypeIcon, fieldChangeRecordTypeCategory" /> 194 + <androidx.cardview.widget.CardView 195 + android:id="@+id/fieldChangeRecordTypeGoalTime" 196 + style="@style/InputFieldCard" 197 + android:layout_width="0dp" 198 + android:layout_height="@dimen/input_field_height" 199 + android:layout_marginEnd="@dimen/input_field_margin" 200 + app:layout_constraintEnd_toEndOf="parent" 201 + app:layout_constraintStart_toEndOf="@id/fieldChangeRecordTypeCategory" 202 + app:layout_constraintTop_toBottomOf="@id/fieldChangeRecordTypeColor" 203 + app:layout_goneMarginStart="@dimen/input_field_margin"> 198 204 199 - <androidx.constraintlayout.widget.ConstraintLayout 200 - android:id="@+id/containerChangeRecordTypeGoalTime" 201 - android:layout_width="match_parent" 202 - android:layout_height="wrap_content" 203 - android:layout_marginHorizontal="20dp" 204 - android:layout_marginTop="8dp" 205 - app:layout_constraintTop_toBottomOf="@id/barrierChangeRecordTypeGoalTime"> 206 - 207 - <androidx.appcompat.widget.AppCompatTextView 208 - android:id="@+id/tvChangeRecordTypeGoalTime" 209 - style="@style/SettingsText" 210 - android:layout_width="0dp" 211 - android:layout_height="wrap_content" 212 - android:padding="0dp" 213 - android:text="@string/change_record_type_goal_time" 214 - app:layout_constraintEnd_toStartOf="@id/groupChangeRecordTypeGoalTime" 215 - app:layout_constraintStart_toStartOf="parent" 216 - app:layout_constraintTop_toTopOf="parent" /> 217 - 218 - <androidx.appcompat.widget.AppCompatTextView 219 - style="@style/SettingsSecondaryText" 220 - android:layout_width="0dp" 221 - android:layout_height="wrap_content" 222 - android:padding="0dp" 223 - android:text="@string/change_record_type_goal_time_hint" 224 - app:layout_constraintEnd_toStartOf="@id/groupChangeRecordTypeGoalTime" 225 - app:layout_constraintStart_toStartOf="parent" 226 - app:layout_constraintTop_toBottomOf="@id/tvChangeRecordTypeGoalTime" /> 227 - 228 - <androidx.appcompat.widget.LinearLayoutCompat 229 - android:id="@+id/groupChangeRecordTypeGoalTime" 230 - android:layout_width="wrap_content" 231 - android:layout_height="wrap_content" 232 - android:orientation="horizontal" 233 - app:layout_constraintEnd_toEndOf="parent" 234 - app:layout_constraintTop_toTopOf="parent"> 205 + <androidx.constraintlayout.widget.ConstraintLayout 206 + android:layout_width="match_parent" 207 + android:layout_height="match_parent" 208 + android:background="?appInputFieldBorder"> 235 209 236 210 <androidx.appcompat.widget.AppCompatTextView 237 - android:id="@+id/tvChangeRecordTypeGoalTimeTime" 238 - android:layout_width="wrap_content" 239 - android:layout_height="wrap_content" 240 - android:gravity="end|center_vertical" 241 - android:paddingHorizontal="8dp" 242 - android:textColor="?appTextPrimaryColor" 243 - tools:text="99h 99m 99s" /> 244 - 245 - <androidx.appcompat.widget.AppCompatImageView 246 - android:layout_width="24dp" 211 + style="@style/InputFieldCardText" 212 + android:layout_width="0dp" 247 213 android:layout_height="match_parent" 214 + android:ellipsize="end" 215 + android:gravity="center_vertical" 216 + android:maxLines="1" 217 + android:text="@string/change_record_type_goal_time_hint" 218 + app:layout_constraintEnd_toStartOf="@id/arrowChangeRecordTypeGoalTime" 219 + app:layout_constraintStart_toStartOf="parent" /> 220 + 221 + <ImageView 222 + android:id="@+id/arrowChangeRecordTypeGoalTime" 223 + android:layout_width="24dp" 224 + android:layout_height="24dp" 225 + android:layout_marginEnd="8dp" 248 226 android:background="?selectableItemBackgroundBorderless" 249 227 android:src="?appArrow" 228 + app:layout_constraintBottom_toBottomOf="parent" 229 + app:layout_constraintEnd_toEndOf="parent" 230 + app:layout_constraintTop_toTopOf="parent" 250 231 tools:ignore="ContentDescription" /> 251 232 252 - </androidx.appcompat.widget.LinearLayoutCompat> 233 + </androidx.constraintlayout.widget.ConstraintLayout> 253 234 254 - </androidx.constraintlayout.widget.ConstraintLayout> 235 + </androidx.cardview.widget.CardView> 255 236 256 237 </androidx.constraintlayout.widget.ConstraintLayout> 257 238 ··· 267 248 android:overScrollMode="never" 268 249 android:visibility="gone" 269 250 app:layout_constraintBottom_toTopOf="@id/btnChangeRecordTypeSave" 270 - app:layout_constraintStart_toStartOf="parent" 271 251 app:layout_constraintTop_toBottomOf="@id/containerChangeRecordTypeMain" 272 252 tools:itemCount="3" 273 253 tools:listitem="@layout/item_color_layout" ··· 282 262 android:background="?android:colorBackground" 283 263 android:visibility="gone" 284 264 app:layout_constraintBottom_toTopOf="@id/btnChangeRecordTypeSave" 285 - app:layout_constraintEnd_toEndOf="parent" 286 265 app:layout_constraintTop_toBottomOf="@id/containerChangeRecordTypeMain" 287 266 tools:visibility="gone"> 288 267 ··· 354 333 android:overScrollMode="never" 355 334 android:visibility="gone" 356 335 app:layout_constraintBottom_toTopOf="@id/btnChangeRecordTypeSave" 357 - app:layout_constraintEnd_toEndOf="parent" 358 336 app:layout_constraintTop_toBottomOf="@id/containerChangeRecordTypeMain" 359 337 tools:itemCount="3" 360 338 tools:listitem="@layout/item_category_layout" 361 339 tools:visibility="gone" /> 340 + 341 + <androidx.core.widget.NestedScrollView 342 + android:id="@+id/containerChangeRecordTypeGoalTime" 343 + android:layout_width="match_parent" 344 + android:layout_height="0dp" 345 + android:layout_marginHorizontal="@dimen/color_icon_recycler_margin" 346 + android:layout_marginTop="8dp" 347 + android:background="?android:colorBackground" 348 + android:visibility="gone" 349 + app:layout_constraintBottom_toTopOf="@id/btnChangeRecordTypeSave" 350 + app:layout_constraintTop_toBottomOf="@id/containerChangeRecordTypeMain" 351 + tools:visibility="visible"> 352 + 353 + <androidx.constraintlayout.widget.ConstraintLayout 354 + android:layout_width="match_parent" 355 + android:layout_height="0dp" 356 + android:layout_marginHorizontal="12dp"> 357 + 358 + <androidx.appcompat.widget.AppCompatTextView 359 + android:id="@+id/tvChangeRecordTypeGoalTimeDescription" 360 + style="@style/SettingsSecondaryText" 361 + android:layout_width="match_parent" 362 + android:layout_height="wrap_content" 363 + android:gravity="center" 364 + android:padding="0dp" 365 + android:text="@string/change_record_type_goal_time_description" 366 + app:layout_constraintTop_toTopOf="parent" /> 367 + 368 + <androidx.appcompat.widget.AppCompatTextView 369 + android:id="@+id/tvChangeRecordTypeSessionGoalTimeTitle" 370 + style="@style/SettingsText" 371 + android:layout_width="0dp" 372 + android:layout_height="wrap_content" 373 + android:layout_marginTop="16dp" 374 + android:padding="0dp" 375 + android:text="@string/change_record_type_session_goal_time" 376 + app:layout_constraintEnd_toStartOf="@id/groupChangeRecordTypeSessionGoalTime" 377 + app:layout_constraintStart_toStartOf="parent" 378 + app:layout_constraintTop_toBottomOf="@id/tvChangeRecordTypeGoalTimeDescription" /> 379 + 380 + <androidx.appcompat.widget.LinearLayoutCompat 381 + android:id="@+id/groupChangeRecordTypeSessionGoalTime" 382 + android:layout_width="wrap_content" 383 + android:layout_height="wrap_content" 384 + android:orientation="horizontal" 385 + app:layout_constraintBottom_toBottomOf="@id/tvChangeRecordTypeSessionGoalTimeTitle" 386 + app:layout_constraintEnd_toEndOf="parent" 387 + app:layout_constraintTop_toTopOf="@id/tvChangeRecordTypeSessionGoalTimeTitle"> 388 + 389 + <androidx.appcompat.widget.AppCompatTextView 390 + android:id="@+id/tvChangeRecordTypeSessionGoalTime" 391 + android:layout_width="wrap_content" 392 + android:layout_height="wrap_content" 393 + android:gravity="end|center_vertical" 394 + android:paddingHorizontal="8dp" 395 + android:textColor="?appTextPrimaryColor" 396 + tools:text="99h 99m 99s" /> 397 + 398 + <androidx.appcompat.widget.AppCompatImageView 399 + android:layout_width="24dp" 400 + android:layout_height="match_parent" 401 + android:background="?selectableItemBackgroundBorderless" 402 + android:src="?appArrow" 403 + tools:ignore="ContentDescription" /> 404 + 405 + </androidx.appcompat.widget.LinearLayoutCompat> 406 + 407 + <androidx.appcompat.widget.AppCompatTextView 408 + android:id="@+id/tvChangeRecordTypeDailyGoalTimeTitle" 409 + style="@style/SettingsText" 410 + android:layout_width="0dp" 411 + android:layout_height="wrap_content" 412 + android:layout_marginTop="16dp" 413 + android:padding="0dp" 414 + android:text="@string/change_record_type_daily_goal_time" 415 + app:layout_constraintEnd_toStartOf="@id/groupChangeRecordTypeDailyGoalTime" 416 + app:layout_constraintStart_toStartOf="parent" 417 + app:layout_constraintTop_toBottomOf="@id/tvChangeRecordTypeSessionGoalTimeTitle" /> 418 + 419 + <androidx.appcompat.widget.LinearLayoutCompat 420 + android:id="@+id/groupChangeRecordTypeDailyGoalTime" 421 + android:layout_width="wrap_content" 422 + android:layout_height="wrap_content" 423 + android:orientation="horizontal" 424 + app:layout_constraintBottom_toBottomOf="@id/tvChangeRecordTypeDailyGoalTimeTitle" 425 + app:layout_constraintEnd_toEndOf="parent" 426 + app:layout_constraintTop_toTopOf="@id/tvChangeRecordTypeDailyGoalTimeTitle"> 427 + 428 + <androidx.appcompat.widget.AppCompatTextView 429 + android:id="@+id/tvChangeRecordTypeDailyGoalTime" 430 + android:layout_width="wrap_content" 431 + android:layout_height="wrap_content" 432 + android:gravity="end|center_vertical" 433 + android:paddingHorizontal="8dp" 434 + android:textColor="?appTextPrimaryColor" 435 + tools:text="99h 99m 99s" /> 436 + 437 + <androidx.appcompat.widget.AppCompatImageView 438 + android:layout_width="24dp" 439 + android:layout_height="match_parent" 440 + android:background="?selectableItemBackgroundBorderless" 441 + android:src="?appArrow" 442 + tools:ignore="ContentDescription" /> 443 + 444 + </androidx.appcompat.widget.LinearLayoutCompat> 445 + 446 + <androidx.appcompat.widget.AppCompatTextView 447 + android:id="@+id/tvChangeRecordTypeWeeklyGoalTimeTitle" 448 + style="@style/SettingsText" 449 + android:layout_width="0dp" 450 + android:layout_height="wrap_content" 451 + android:layout_marginTop="16dp" 452 + android:padding="0dp" 453 + android:text="@string/change_record_type_weekly_goal_time" 454 + app:layout_constraintEnd_toStartOf="@id/groupChangeRecordTypeWeeklyGoalTime" 455 + app:layout_constraintStart_toStartOf="parent" 456 + app:layout_constraintTop_toBottomOf="@id/tvChangeRecordTypeDailyGoalTimeTitle" /> 457 + 458 + <androidx.appcompat.widget.LinearLayoutCompat 459 + android:id="@+id/groupChangeRecordTypeWeeklyGoalTime" 460 + android:layout_width="wrap_content" 461 + android:layout_height="wrap_content" 462 + android:orientation="horizontal" 463 + app:layout_constraintBottom_toBottomOf="@id/tvChangeRecordTypeWeeklyGoalTimeTitle" 464 + app:layout_constraintEnd_toEndOf="parent" 465 + app:layout_constraintTop_toTopOf="@id/tvChangeRecordTypeWeeklyGoalTimeTitle"> 466 + 467 + <androidx.appcompat.widget.AppCompatTextView 468 + android:id="@+id/tvChangeRecordTypeWeeklyGoalTime" 469 + android:layout_width="wrap_content" 470 + android:layout_height="wrap_content" 471 + android:gravity="end|center_vertical" 472 + android:paddingHorizontal="8dp" 473 + android:textColor="?appTextPrimaryColor" 474 + tools:text="99h 99m 99s" /> 475 + 476 + <androidx.appcompat.widget.AppCompatImageView 477 + android:layout_width="24dp" 478 + android:layout_height="match_parent" 479 + android:background="?selectableItemBackgroundBorderless" 480 + android:src="?appArrow" 481 + tools:ignore="ContentDescription" /> 482 + 483 + </androidx.appcompat.widget.LinearLayoutCompat> 484 + 485 + </androidx.constraintlayout.widget.ConstraintLayout> 486 + 487 + </androidx.core.widget.NestedScrollView> 362 488 363 489 <com.google.android.material.button.MaterialButton 364 490 android:id="@+id/btnChangeRecordTypeSave"
+15 -3
features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt
··· 45 45 import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeChooserState.State.Category 46 46 import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeChooserState.State.Closed 47 47 import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeChooserState.State.Color 48 + import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeChooserState.State.GoalTime 48 49 import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeChooserState.State.Icon 49 50 import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeIconCategoryInfoViewData 50 51 import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeIconStateViewData ··· 182 183 fieldChangeRecordTypeColor.setOnClick(viewModel::onColorChooserClick) 183 184 fieldChangeRecordTypeIcon.setOnClick(viewModel::onIconChooserClick) 184 185 fieldChangeRecordTypeCategory.setOnClick(viewModel::onCategoryChooserClick) 185 - groupChangeRecordTypeGoalTime.setOnClick(viewModel::onGoalTimeClick) 186 + fieldChangeRecordTypeGoalTime.setOnClick(viewModel::onGoalTimeChooserClick) 187 + groupChangeRecordTypeSessionGoalTime.setOnClick(viewModel::onSessionGoalTimeClick) 188 + groupChangeRecordTypeDailyGoalTime.setOnClick(viewModel::onDailyGoalTimeClick) 189 + groupChangeRecordTypeWeeklyGoalTime.setOnClick(viewModel::onWeeklyGoalTimeClick) 186 190 btnChangeRecordTypeSave.setOnClick(viewModel::onSaveClick) 187 191 btnChangeRecordTypeDelete.setOnClick(viewModel::onDeleteClick) 188 192 btnChangeRecordTypeIconSwitch.listener = { ··· 214 218 iconCategories.observe(iconCategoriesAdapter::replace) 215 219 iconsTypeViewData.observe(btnChangeRecordTypeIconSwitch.adapter::replace) 216 220 categories.observe(categoriesAdapter::replace) 217 - goalTimeViewData.observe(tvChangeRecordTypeGoalTimeTime::setText) 221 + sessionGoalTimeViewData.observe(tvChangeRecordTypeSessionGoalTime::setText) 222 + dailyGoalTimeViewData.observe(tvChangeRecordTypeDailyGoalTime::setText) 223 + weeklyGoalTimeViewData.observe(tvChangeRecordTypeWeeklyGoalTime::setText) 218 224 chooserState.observe(::updateChooserState) 219 225 keyboardVisibility.observe { visible -> 220 226 if (visible) showKeyboard(etChangeRecordTypeName) else hideKeyboard() ··· 303 309 chooserView = fieldChangeRecordTypeCategory, 304 310 chooserArrow = arrowChangeRecordTypeCategory 305 311 ) 312 + updateChooser<GoalTime>( 313 + state = state, 314 + chooserData = containerChangeRecordTypeGoalTime, 315 + chooserView = fieldChangeRecordTypeGoalTime, 316 + chooserArrow = arrowChangeRecordTypeGoalTime 317 + ) 306 318 307 319 val isClosed = state.current is Closed 308 320 inputChangeRecordTypeName.isVisible = isClosed 309 - containerChangeRecordTypeGoalTime.isVisible = isClosed 310 321 311 322 // Chooser fields 312 323 fieldChangeRecordTypeColor.isVisible = isClosed || state.current is Color 313 324 fieldChangeRecordTypeIcon.isVisible = isClosed || state.current is Icon 314 325 fieldChangeRecordTypeCategory.isVisible = isClosed || state.current is Category 326 + fieldChangeRecordTypeGoalTime.isVisible = isClosed || state.current is GoalTime 315 327 } 316 328 317 329 private inline fun <reified T : ChangeRecordTypeChooserState.State> updateChooser(
+1
features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeChooserState.kt
··· 10 10 object Color : State 11 11 object Icon : State 12 12 object Category : State 13 + object GoalTime : State 13 14 } 14 15 }
+92 -14
features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt
··· 107 107 initial 108 108 } 109 109 } 110 - val goalTimeViewData: LiveData<String> by lazy { 110 + val sessionGoalTimeViewData: LiveData<String> by lazy { 111 111 MutableLiveData<String>().let { initial -> 112 112 viewModelScope.launch { 113 - initial.value = loadGoalTimeViewData() 113 + initial.value = loadSessionGoalTimeViewData() 114 + } 115 + initial 116 + } 117 + } 118 + val dailyGoalTimeViewData: LiveData<String> by lazy { 119 + MutableLiveData<String>().let { initial -> 120 + viewModelScope.launch { 121 + initial.value = loadDailyGoalTimeViewData() 122 + } 123 + initial 124 + } 125 + } 126 + val weeklyGoalTimeViewData: LiveData<String> by lazy { 127 + MutableLiveData<String>().let { initial -> 128 + viewModelScope.launch { 129 + initial.value = loadWeeklyGoalTimeViewData() 114 130 } 115 131 initial 116 132 } ··· 165 181 166 182 fun onCategoryChooserClick() { 167 183 onNewChooserState(ChangeRecordTypeChooserState.State.Category) 184 + } 185 + 186 + fun onGoalTimeChooserClick() { 187 + onNewChooserState(ChangeRecordTypeChooserState.State.GoalTime) 168 188 } 169 189 170 190 fun onColorClick(item: ColorViewData) { ··· 285 305 } 286 306 } 287 307 288 - fun onGoalTimeClick() { 308 + fun onSessionGoalTimeClick() { 289 309 router.navigate( 290 310 DurationDialogParams( 291 - tag = GOAL_TIME_DIALOG_TAG, 311 + tag = SESSION_GOAL_TIME_DIALOG_TAG, 292 312 duration = newGoalTime 313 + ) 314 + ) 315 + } 316 + 317 + fun onDailyGoalTimeClick() { 318 + router.navigate( 319 + DurationDialogParams( 320 + tag = DAILY_GOAL_TIME_DIALOG_TAG, 321 + duration = newDailyGoalTime 322 + ) 323 + ) 324 + } 325 + 326 + fun onWeeklyGoalTimeClick() { 327 + router.navigate( 328 + DurationDialogParams( 329 + tag = WEEKLY_GOAL_TIME_DIALOG_TAG, 330 + duration = newWeeklyGoalTime 293 331 ) 294 332 ) 295 333 } 296 334 297 335 fun onDurationSet(tag: String?, duration: Long) { 298 336 when (tag) { 299 - GOAL_TIME_DIALOG_TAG -> viewModelScope.launch { 337 + SESSION_GOAL_TIME_DIALOG_TAG -> viewModelScope.launch { 300 338 newGoalTime = duration 301 - updateGoalTimeViewData() 339 + updateSessionGoalTimeViewData() 340 + } 341 + DAILY_GOAL_TIME_DIALOG_TAG -> viewModelScope.launch { 342 + newDailyGoalTime = duration 343 + updateDailyGoalTimeViewData() 344 + } 345 + WEEKLY_GOAL_TIME_DIALOG_TAG -> viewModelScope.launch { 346 + newWeeklyGoalTime = duration 347 + updateWeeklyGoalTimeViewData() 302 348 } 303 349 } 304 350 } 305 351 306 352 fun onDurationDisabled(tag: String?) { 307 353 when (tag) { 308 - GOAL_TIME_DIALOG_TAG -> viewModelScope.launch { 354 + SESSION_GOAL_TIME_DIALOG_TAG -> viewModelScope.launch { 309 355 newGoalTime = 0 310 - updateGoalTimeViewData() 356 + updateSessionGoalTimeViewData() 357 + } 358 + DAILY_GOAL_TIME_DIALOG_TAG -> viewModelScope.launch { 359 + newDailyGoalTime = 0 360 + updateDailyGoalTimeViewData() 361 + } 362 + WEEKLY_GOAL_TIME_DIALOG_TAG -> viewModelScope.launch { 363 + newWeeklyGoalTime = 0 364 + updateWeeklyGoalTimeViewData() 311 365 } 312 366 } 313 367 } ··· 441 495 newIconName = it.icon 442 496 newColor = it.color 443 497 newGoalTime = it.goalTime 498 + newDailyGoalTime = it.dailyGoalTime 499 + newWeeklyGoalTime = it.weeklyGoalTime 444 500 updateIcons() 445 501 updateColors() 446 - updateGoalTimeViewData() 502 + updateSessionGoalTimeViewData() 503 + updateDailyGoalTimeViewData() 504 + updateWeeklyGoalTimeViewData() 447 505 } 448 506 } 449 507 ··· 525 583 return viewDataInteractor.getCategoriesViewData(newCategories) 526 584 } 527 585 528 - private fun updateGoalTimeViewData() { 529 - val data = loadGoalTimeViewData() 530 - goalTimeViewData.set(data) 586 + private fun updateSessionGoalTimeViewData() { 587 + val data = loadSessionGoalTimeViewData() 588 + sessionGoalTimeViewData.set(data) 531 589 } 532 590 533 - private fun loadGoalTimeViewData(): String { 591 + private fun loadSessionGoalTimeViewData(): String { 534 592 return newGoalTime.let(changeRecordTypeMapper::toGoalTimeViewData) 593 + } 594 + 595 + private fun updateDailyGoalTimeViewData() { 596 + val data = loadDailyGoalTimeViewData() 597 + dailyGoalTimeViewData.set(data) 598 + } 599 + 600 + private fun loadDailyGoalTimeViewData(): String { 601 + return newDailyGoalTime.let(changeRecordTypeMapper::toGoalTimeViewData) 602 + } 603 + 604 + private fun updateWeeklyGoalTimeViewData() { 605 + val data = loadWeeklyGoalTimeViewData() 606 + weeklyGoalTimeViewData.set(data) 607 + } 608 + 609 + private fun loadWeeklyGoalTimeViewData(): String { 610 + return newWeeklyGoalTime.let(changeRecordTypeMapper::toGoalTimeViewData) 535 611 } 536 612 537 613 private fun updateIconScrollPosition(position: Int) { ··· 544 620 } 545 621 546 622 companion object { 547 - private const val GOAL_TIME_DIALOG_TAG = "goal_time_dialog_tag" 623 + private const val SESSION_GOAL_TIME_DIALOG_TAG = "session_goal_time_dialog_tag" 624 + private const val DAILY_GOAL_TIME_DIALOG_TAG = "daily_goal_time_dialog_tag" 625 + private const val WEEKLY_GOAL_TIME_DIALOG_TAG = "weekly_goal_time_dialog_tag" 548 626 } 549 627 }