Skip to content

Commit 991de54

Browse files
committed
add icons to some settings blocks
1 parent 73a5984 commit 991de54

File tree

19 files changed

+298
-35
lines changed

19 files changed

+298
-35
lines changed

features/feature_change_record_type/src/main/res/layout/change_record_type_fragment.xml

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -381,15 +381,36 @@
381381

382382
</androidx.cardview.widget.CardView>
383383

384+
<com.google.android.material.textfield.TextInputLayout
385+
android:id="@+id/inputChangeRecordTypeNote"
386+
style="@style/ChangeItemInputField"
387+
android:layout_width="0dp"
388+
android:layout_height="wrap_content"
389+
android:layout_marginHorizontal="@dimen/edit_screen_margin_horizontal"
390+
android:layout_marginTop="-2dp"
391+
app:layout_constraintEnd_toEndOf="parent"
392+
app:layout_constraintStart_toStartOf="parent"
393+
app:layout_constraintTop_toBottomOf="@id/fieldChangeRecordTypeGoalTime">
394+
395+
<com.google.android.material.textfield.TextInputEditText
396+
android:id="@+id/etChangeRecordTypeNote"
397+
style="@style/EditTextMultiLine"
398+
android:layout_width="match_parent"
399+
android:layout_height="wrap_content"
400+
android:hint="@string/change_record_type_note_hint" />
401+
402+
</com.google.android.material.textfield.TextInputLayout>
403+
384404
<androidx.cardview.widget.CardView
385405
android:id="@+id/fieldChangeRecordTypeAdditional"
386406
style="@style/InputFieldCard"
387407
android:layout_width="0dp"
388408
android:layout_height="@dimen/input_field_height"
389409
android:layout_marginHorizontal="@dimen/edit_screen_field_margin_horizontal"
390410
app:layout_constraintEnd_toEndOf="parent"
411+
android:layout_marginTop="4dp"
391412
app:layout_constraintStart_toStartOf="parent"
392-
app:layout_constraintTop_toBottomOf="@id/fieldChangeRecordTypeGoalTime"
413+
app:layout_constraintTop_toBottomOf="@id/inputChangeRecordTypeNote"
393414
app:layout_goneMarginTop="@dimen/edit_screen_field_top_margin">
394415

395416
<androidx.constraintlayout.widget.ConstraintLayout
@@ -417,32 +438,12 @@
417438

418439
</androidx.cardview.widget.CardView>
419440

420-
<com.google.android.material.textfield.TextInputLayout
421-
android:id="@+id/inputChangeRecordTypeNote"
422-
style="@style/ChangeItemInputField"
423-
android:layout_width="0dp"
424-
android:layout_height="wrap_content"
425-
android:layout_marginHorizontal="@dimen/edit_screen_margin_horizontal"
426-
android:layout_marginTop="-2dp"
427-
app:layout_constraintEnd_toEndOf="parent"
428-
app:layout_constraintStart_toStartOf="parent"
429-
app:layout_constraintTop_toBottomOf="@id/fieldChangeRecordTypeAdditional">
430-
431-
<com.google.android.material.textfield.TextInputEditText
432-
android:id="@+id/etChangeRecordTypeNote"
433-
style="@style/EditTextMultiLine"
434-
android:layout_width="match_parent"
435-
android:layout_height="wrap_content"
436-
android:hint="@string/change_record_type_note_hint" />
437-
438-
</com.google.android.material.textfield.TextInputLayout>
439-
440441
<View
441442
android:id="@+id/dividerChangeRecordTypeBottom"
442443
style="@style/EditScreenDivider"
443444
android:layout_width="match_parent"
444445
android:layout_marginTop="@dimen/edit_screen_field_top_margin"
445-
app:layout_constraintTop_toBottomOf="@id/inputChangeRecordTypeNote" />
446+
app:layout_constraintTop_toBottomOf="@id/fieldChangeRecordTypeAdditional" />
446447

447448
</androidx.constraintlayout.widget.ConstraintLayout>
448449

features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsAdditionalViewDataInteractor.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class SettingsAdditionalViewDataInteractor @Inject constructor(
3434
suspend fun execute(
3535
isCollapsed: Boolean,
3636
): List<ViewHolderType> {
37+
val isDarkTheme = prefsInteractor.getDarkMode()
3738
val result = mutableListOf<ViewHolderType>()
3839

3940
result += SettingsTopViewData(
@@ -44,6 +45,9 @@ class SettingsAdditionalViewDataInteractor @Inject constructor(
4445
block = SettingsBlock.AdditionalCollapse,
4546
title = resourceRepo.getString(R.string.settings_additional_title),
4647
opened = !isCollapsed,
48+
iconResId = R.drawable.plus,
49+
iconColor = (if (isDarkTheme) R.color.blue_300 else R.color.blue_200)
50+
.let(resourceRepo::getColor),
4751
dividerIsVisible = !isCollapsed,
4852
)
4953

features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsBackupViewDataInteractor.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class SettingsBackupViewDataInteractor @Inject constructor(
2323
suspend fun execute(
2424
isCollapsed: Boolean,
2525
): List<ViewHolderType> {
26+
val isDarkTheme = prefsInteractor.getDarkMode()
2627
val result = mutableListOf<ViewHolderType>()
2728

2829
result += SettingsTopViewData(
@@ -33,6 +34,9 @@ class SettingsBackupViewDataInteractor @Inject constructor(
3334
block = SettingsBlock.BackupCollapse,
3435
title = resourceRepo.getString(R.string.settings_backup_title),
3536
opened = !isCollapsed,
37+
iconResId = R.drawable.save,
38+
iconColor = (if (isDarkTheme) R.color.green_300 else R.color.green_200)
39+
.let(resourceRepo::getColor),
3640
dividerIsVisible = !isCollapsed,
3741
)
3842

features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class SettingsDisplayViewDataInteractor @Inject constructor(
3535
suspend fun execute(
3636
isCollapsed: Boolean,
3737
): List<ViewHolderType> {
38+
val isDarkTheme = prefsInteractor.getDarkMode()
3839
val result = mutableListOf<ViewHolderType>()
3940

4041
result += SettingsTopViewData(
@@ -45,6 +46,9 @@ class SettingsDisplayViewDataInteractor @Inject constructor(
4546
block = SettingsBlock.DisplayCollapse,
4647
title = resourceRepo.getString(R.string.settings_display_title),
4748
opened = !isCollapsed,
49+
iconResId = R.drawable.display,
50+
iconColor = (if (isDarkTheme) R.color.blue_300 else R.color.blue_200)
51+
.let(resourceRepo::getColor),
4852
dividerIsVisible = !isCollapsed,
4953
)
5054

features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsExportViewDataInteractor.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class SettingsExportViewDataInteractor @Inject constructor(
2424
suspend fun execute(
2525
isCollapsed: Boolean,
2626
): List<ViewHolderType> {
27+
val isDarkTheme = prefsInteractor.getDarkMode()
2728
val result = mutableListOf<ViewHolderType>()
2829

2930
result += SettingsTopViewData(
@@ -34,6 +35,9 @@ class SettingsExportViewDataInteractor @Inject constructor(
3435
block = SettingsBlock.ExportCollapse,
3536
title = resourceRepo.getString(R.string.settings_export_title),
3637
opened = !isCollapsed,
38+
iconResId = R.drawable.import_export,
39+
iconColor = (if (isDarkTheme) R.color.green_300 else R.color.green_200)
40+
.let(resourceRepo::getColor),
3741
dividerIsVisible = !isCollapsed,
3842
)
3943

features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsNotificationsViewDataInteractor.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
66
import com.example.util.simpletimetracker.feature_settings.R
77
import com.example.util.simpletimetracker.feature_settings.api.SettingsBlock
88
import com.example.util.simpletimetracker.feature_settings.mapper.SettingsMapper
9-
import com.example.util.simpletimetracker.feature_settings.views.SettingsDurationViewData
109
import com.example.util.simpletimetracker.feature_settings.views.SettingsBottomViewData
1110
import com.example.util.simpletimetracker.feature_settings.views.SettingsCheckboxViewData
1211
import com.example.util.simpletimetracker.feature_settings.views.SettingsCollapseViewData
12+
import com.example.util.simpletimetracker.feature_settings.views.SettingsDurationViewData
1313
import com.example.util.simpletimetracker.feature_settings.views.SettingsRangeViewData
1414
import com.example.util.simpletimetracker.feature_settings.views.SettingsSelectorViewData
1515
import com.example.util.simpletimetracker.feature_settings.views.SettingsTextViewData
@@ -25,6 +25,7 @@ class SettingsNotificationsViewDataInteractor @Inject constructor(
2525
suspend fun execute(
2626
isCollapsed: Boolean,
2727
): List<ViewHolderType> {
28+
val isDarkTheme = prefsInteractor.getDarkMode()
2829
val result = mutableListOf<ViewHolderType>()
2930

3031
result += SettingsTopViewData(
@@ -35,6 +36,9 @@ class SettingsNotificationsViewDataInteractor @Inject constructor(
3536
block = SettingsBlock.NotificationsCollapse,
3637
title = resourceRepo.getString(R.string.settings_notification_title),
3738
opened = !isCollapsed,
39+
iconResId = R.drawable.notifications,
40+
iconColor = (if (isDarkTheme) R.color.blue_300 else R.color.blue_200)
41+
.let(resourceRepo::getColor),
3842
dividerIsVisible = !isCollapsed,
3943
)
4044

features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsRatingViewDataInteractor.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.example.util.simpletimetracker.feature_settings.R
77
import com.example.util.simpletimetracker.feature_settings.api.SettingsBlock
88
import com.example.util.simpletimetracker.feature_settings.views.SettingsBottomViewData
99
import com.example.util.simpletimetracker.feature_settings.views.SettingsTextViewData
10+
import com.example.util.simpletimetracker.feature_settings.views.SettingsTextWithIconViewData
1011
import com.example.util.simpletimetracker.feature_settings.views.SettingsTopViewData
1112
import javax.inject.Inject
1213

@@ -24,10 +25,14 @@ class SettingsRatingViewDataInteractor @Inject constructor(
2425
block = SettingsBlock.RatingTop,
2526
)
2627

27-
result += SettingsTextViewData(
28-
block = SettingsBlock.RateUs,
29-
title = resourceRepo.getString(R.string.settings_rate),
30-
subtitle = resourceRepo.getString(R.string.settings_rate_description),
28+
result += SettingsTextWithIconViewData(
29+
data = SettingsTextViewData(
30+
block = SettingsBlock.RateUs,
31+
title = resourceRepo.getString(R.string.settings_rate),
32+
subtitle = resourceRepo.getString(R.string.settings_rate_description),
33+
),
34+
iconResId = R.drawable.star_border,
35+
iconColor = resourceRepo.getColor(R.color.amber_400),
3136
)
3237

3338
result += SettingsTextViewData(

features/feature_settings/views/src/main/java/com/example/util/simpletimetracker/feature_settings/views/SettingsCollapseAdapterDelegate.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.example.util.simpletimetracker.feature_settings.views
22

3+
import androidx.annotation.ColorInt
4+
import androidx.annotation.DrawableRes
35
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
46
import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
57
import com.example.util.simpletimetracker.feature_settings.api.SettingsBlock
@@ -26,13 +28,17 @@ fun createSettingsCollapseAdapterDelegate(
2628
arrowItemSettingsCollapse.apply { if (!item.opened) rotateDown() else rotateUp() }
2729
onClick(item.block)
2830
}
31+
binding.ivItemSettingsIcon.setImageResource(item.iconResId)
32+
binding.cardItemSettingsIcon.setCardBackgroundColor(item.iconColor)
2933
}
3034
}
3135

3236
data class SettingsCollapseViewData(
3337
val block: SettingsBlock,
3438
val title: String,
3539
val opened: Boolean,
40+
@DrawableRes val iconResId: Int,
41+
@ColorInt val iconColor: Int,
3642
val dividerIsVisible: Boolean = true,
3743
) : ViewHolderType {
3844

features/feature_settings/views/src/main/java/com/example/util/simpletimetracker/feature_settings/views/SettingsTextAdapterDelegate.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ fun textAdapterBindDelegate(
3838
item: ViewData,
3939
title: AppCompatTextView,
4040
subtitle: AppCompatTextView,
41-
hint: AppCompatTextView,
41+
hint: AppCompatTextView?,
4242
spaceTop: Space,
4343
spaceBottom: Space,
4444
divider: View,
@@ -53,12 +53,14 @@ fun textAdapterBindDelegate(
5353
item.subtitleColor.getColor(subtitle.context).let(subtitle::setTextColor)
5454
subtitle.visible = true
5555
}
56-
if (item.hint.isEmpty()) {
57-
hint.visible = false
58-
} else {
59-
hint.text = item.hint
60-
item.hintColor.getColor(hint.context).let(hint::setTextColor)
61-
hint.visible = true
56+
if (hint != null) {
57+
if (item.hint.isEmpty()) {
58+
hint.visible = false
59+
} else {
60+
hint.text = item.hint
61+
item.hintColor.getColor(hint.context).let(hint::setTextColor)
62+
hint.visible = true
63+
}
6264
}
6365
spaceTop.visible = item.topSpaceIsVisible
6466
spaceBottom.visible = item.bottomSpaceIsVisible
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.example.util.simpletimetracker.feature_settings.views
2+
3+
import androidx.annotation.ColorInt
4+
import androidx.annotation.DrawableRes
5+
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
6+
import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
7+
import com.example.util.simpletimetracker.feature_settings.api.SettingsBlock
8+
import com.example.util.simpletimetracker.feature_settings.views.SettingsTextWithIconViewData as ViewData
9+
import com.example.util.simpletimetracker.feature_settings.views.databinding.ItemSettingsTextWithIconBinding as Binding
10+
11+
fun createSettingsTextWithIconAdapterDelegate(
12+
onClick: (block: SettingsBlock) -> Unit,
13+
) = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
14+
Binding::inflate,
15+
) { binding, item, _ ->
16+
17+
with(binding) {
18+
item as ViewData
19+
20+
textAdapterBindDelegate(
21+
item = item.data,
22+
title = tvItemSettingsTitle,
23+
subtitle = tvItemSettingsSubtitle,
24+
hint = null,
25+
spaceTop = spaceItemSettingsTop,
26+
spaceBottom = spaceItemSettingsBottom,
27+
divider = viewItemSettingsDivider,
28+
layout = layoutItemSettingsText,
29+
onClick = onClick,
30+
)
31+
32+
binding.ivItemSettingsIcon.setImageResource(item.iconResId)
33+
binding.cardItemSettingsIcon.setCardBackgroundColor(item.iconColor)
34+
}
35+
}
36+
37+
data class SettingsTextWithIconViewData(
38+
val data: SettingsTextViewData,
39+
@DrawableRes val iconResId: Int,
40+
@ColorInt val iconColor: Int,
41+
) : ViewHolderType {
42+
43+
override fun getUniqueId(): Long = data.block.ordinal.toLong()
44+
45+
override fun isValidType(other: ViewHolderType): Boolean = other is ViewData
46+
}

0 commit comments

Comments
 (0)