From 31545d90a59ddfd340442849eee26803a0faeec0 Mon Sep 17 00:00:00 2001 From: razeeman Date: Sat, 18 Dec 2021 20:01:06 +0300 Subject: [PATCH] add color palette recycler item --- .../domain/model/AppColor.kt | 7 +++++++ .../color/ColorPaletteAdapterDelegate.kt | 19 +++++++++++++++++++ .../color/ColorPaletteViewData.kt | 11 +++++++++++ .../src/main/res/drawable/palette.xml | 9 +++++++++ .../res/layout/item_color_palette_layout.xml | 16 ++++++++++++++++ .../ChangeRecordTypeViewDataInteractor.kt | 10 ++-------- .../view/ChangeRecordTypeFragment.kt | 12 ++++++++++-- .../viewModel/ChangeRecordTypeViewModel.kt | 12 +++++++++--- 8 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 domain/src/main/java/com/example/util/simpletimetracker/domain/model/AppColor.kt create mode 100644 features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/color/ColorPaletteAdapterDelegate.kt create mode 100644 features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/color/ColorPaletteViewData.kt create mode 100644 features/feature_base_adapter/src/main/res/drawable/palette.xml create mode 100644 features/feature_base_adapter/src/main/res/layout/item_color_palette_layout.xml diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/model/AppColor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/AppColor.kt new file mode 100644 index 00000000..c92a40c2 --- /dev/null +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/AppColor.kt @@ -0,0 +1,7 @@ +package com.example.util.simpletimetracker.domain.model + +sealed class AppColor { + + data class Id(val colorId: Int) : AppColor() + data class Hex(val colorHex: String) : AppColor() +} \ No newline at end of file diff --git a/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/color/ColorPaletteAdapterDelegate.kt b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/color/ColorPaletteAdapterDelegate.kt new file mode 100644 index 00000000..e19ef508 --- /dev/null +++ b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/color/ColorPaletteAdapterDelegate.kt @@ -0,0 +1,19 @@ +package com.example.util.simpletimetracker.feature_base_adapter.color + +import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate +import com.example.util.simpletimetracker.feature_views.extension.setOnClick +import com.example.util.simpletimetracker.feature_base_adapter.color.ColorPaletteViewData as ViewData +import com.example.util.simpletimetracker.feature_base_adapter.databinding.ItemColorPaletteLayoutBinding as Binding + +fun createColorPaletteAdapterDelegate( + onColorPaletteItemClick: (() -> Unit), +) = createRecyclerBindingAdapterDelegate( + Binding::inflate +) { binding, item, _ -> + + with(binding) { + item as ViewData + + layoutColorPaletteItem.setOnClick(onColorPaletteItemClick) + } +} \ No newline at end of file diff --git a/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/color/ColorPaletteViewData.kt b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/color/ColorPaletteViewData.kt new file mode 100644 index 00000000..d629ba95 --- /dev/null +++ b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/color/ColorPaletteViewData.kt @@ -0,0 +1,11 @@ +package com.example.util.simpletimetracker.feature_base_adapter.color + +import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType + +object ColorPaletteViewData : ViewHolderType { + + // Only one in recycler + override fun getUniqueId(): Long = 1L + + override fun isValidType(other: ViewHolderType): Boolean = other is ColorPaletteViewData +} \ No newline at end of file diff --git a/features/feature_base_adapter/src/main/res/drawable/palette.xml b/features/feature_base_adapter/src/main/res/drawable/palette.xml new file mode 100644 index 00000000..4bd017a7 --- /dev/null +++ b/features/feature_base_adapter/src/main/res/drawable/palette.xml @@ -0,0 +1,9 @@ + + + diff --git a/features/feature_base_adapter/src/main/res/layout/item_color_palette_layout.xml b/features/feature_base_adapter/src/main/res/layout/item_color_palette_layout.xml new file mode 100644 index 00000000..08687c2b --- /dev/null +++ b/features/feature_base_adapter/src/main/res/layout/item_color_palette_layout.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/interactor/ChangeRecordTypeViewDataInteractor.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/interactor/ChangeRecordTypeViewDataInteractor.kt index 7eb84393..e2d3012f 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/interactor/ChangeRecordTypeViewDataInteractor.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/interactor/ChangeRecordTypeViewDataInteractor.kt @@ -10,7 +10,7 @@ import com.example.util.simpletimetracker.domain.interactor.CategoryInteractor import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.model.Category import com.example.util.simpletimetracker.domain.model.IconType -import com.example.util.simpletimetracker.feature_change_record_type.R +import com.example.util.simpletimetracker.feature_base_adapter.color.ColorPaletteViewData import com.example.util.simpletimetracker.feature_change_record_type.mapper.ChangeRecordTypeMapper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -77,13 +77,7 @@ class ChangeRecordTypeViewDataInteractor @Inject constructor( colorInt = colorInt ) } - .plus( - // TODO add palette icon - ColorViewData( - colorId = -1, - colorInt = resourceRepo.getColor(R.color.white) - ) - ) + .plus(ColorPaletteViewData) } suspend fun getIconsViewData( diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt index 3c7132ed..a15072f8 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt @@ -8,6 +8,7 @@ import androidx.fragment.app.viewModels import androidx.recyclerview.widget.GridLayoutManager import com.example.util.simpletimetracker.core.base.BaseFragment import com.example.util.simpletimetracker.core.di.BaseViewModelFactory +import com.example.util.simpletimetracker.core.dialog.ColorSelectionDialogListener import com.example.util.simpletimetracker.core.dialog.DurationDialogListener import com.example.util.simpletimetracker.core.dialog.EmojiSelectionDialogListener import com.example.util.simpletimetracker.core.extension.hideKeyboard @@ -22,6 +23,7 @@ import com.example.util.simpletimetracker.domain.model.IconEmojiType import com.example.util.simpletimetracker.feature_base_adapter.BaseRecyclerAdapter import com.example.util.simpletimetracker.feature_base_adapter.category.createCategoryAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.color.createColorAdapterDelegate +import com.example.util.simpletimetracker.feature_base_adapter.color.createColorPaletteAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.divider.createDividerAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.emoji.createEmojiAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.empty.createEmptyAdapterDelegate @@ -56,7 +58,8 @@ import com.example.util.simpletimetracker.feature_change_record_type.databinding class ChangeRecordTypeFragment : BaseFragment(), DurationDialogListener, - EmojiSelectionDialogListener { + EmojiSelectionDialogListener, + ColorSelectionDialogListener { override val inflater: (LayoutInflater, ViewGroup?, Boolean) -> Binding = Binding::inflate @@ -72,7 +75,8 @@ class ChangeRecordTypeFragment : ) private val colorsAdapter: BaseRecyclerAdapter by lazy { BaseRecyclerAdapter( - createColorAdapterDelegate(viewModel::onColorClick) + createColorAdapterDelegate(viewModel::onColorClick), + createColorPaletteAdapterDelegate(viewModel::onColorPaletteClick) ) } private val iconsAdapter: BaseRecyclerAdapter by lazy { @@ -212,6 +216,10 @@ class ChangeRecordTypeFragment : viewModel.onEmojiSelected(emojiText) } + override fun onColorSelected(colorHex: String) { + viewModel.onCustomColorSelected(colorHex) + } + private fun updateUi(item: RecordTypeViewData) = with(binding) { etChangeRecordTypeName.setText(item.name) etChangeRecordTypeName.setSelection(item.name.length) diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt index cee0b52d..ddf5f2d5 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt @@ -179,9 +179,7 @@ class ChangeRecordTypeViewModel @Inject constructor( fun onColorClick(item: ColorViewData) { viewModelScope.launch { - if (item.colorId == -1) { - router.navigate(ColorSelectionDialogParams) - } else if (item.colorId != newColorId) { + if (item.colorId != newColorId) { newColorId = item.colorId updateRecordPreviewViewData() updateIcons() @@ -189,6 +187,10 @@ class ChangeRecordTypeViewModel @Inject constructor( } } + fun onColorPaletteClick() { + router.navigate(ColorSelectionDialogParams) + } + fun onIconTypeClick(viewData: ButtonsRowViewData) { if (viewData !is ChangeRecordTypeIconSwitchViewData) return viewModelScope.launch { @@ -237,6 +239,10 @@ class ChangeRecordTypeViewModel @Inject constructor( } } + fun onCustomColorSelected(colorHex: String) { + // TODO set custom color + } + fun onGoalTimeClick() { router.navigate( DurationDialogParams( -- 2.51.2