From db82f0efb08befadefa5960737381f05fde5a958 Mon Sep 17 00:00:00 2001 From: razeeman Date: Sat, 18 Dec 2021 21:14:04 +0300 Subject: [PATCH] switch color selection to color int --- .../dialog/ColorSelectionDialogListener.kt | 2 +- .../core/mapper/ColorMapper.kt | 22 ------------------ .../view/ChangeRecordTypeFragment.kt | 4 ++-- .../viewModel/ChangeRecordTypeViewModel.kt | 13 +++++------ .../view/ColorSelectionDialogFragment.kt | 4 ++-- .../viewModel/ColorSelectionViewModel.kt | 23 ++++++++++++------- 6 files changed, 26 insertions(+), 42 deletions(-) diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/dialog/ColorSelectionDialogListener.kt b/core/src/main/java/com/example/util/simpletimetracker/core/dialog/ColorSelectionDialogListener.kt index 321002c3..18d80b81 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/dialog/ColorSelectionDialogListener.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/dialog/ColorSelectionDialogListener.kt @@ -2,5 +2,5 @@ package com.example.util.simpletimetracker.core.dialog interface ColorSelectionDialogListener { - fun onColorSelected(colorHex: String) + fun onColorSelected(colorInt: Int) } \ No newline at end of file diff --git a/core/src/main/java/com/example/util/simpletimetracker/core/mapper/ColorMapper.kt b/core/src/main/java/com/example/util/simpletimetracker/core/mapper/ColorMapper.kt index f2f3c71a..59156d8c 100644 --- a/core/src/main/java/com/example/util/simpletimetracker/core/mapper/ColorMapper.kt +++ b/core/src/main/java/com/example/util/simpletimetracker/core/mapper/ColorMapper.kt @@ -1,7 +1,5 @@ package com.example.util.simpletimetracker.core.mapper -import android.graphics.Color -import androidx.annotation.ColorInt import com.example.util.simpletimetracker.core.R import com.example.util.simpletimetracker.core.repo.ResourceRepo import javax.inject.Inject @@ -62,26 +60,6 @@ class ColorMapper @Inject constructor( }.let(resourceRepo::getColor) } - fun mapColorToHex(@ColorInt colorInt: Int): String { - val currentRed = Color.red(colorInt) - .let(Integer::toHexString).padStart(2, '0') - val currentGreen = Color.green(colorInt) - .let(Integer::toHexString).padStart(2, '0') - val currentBlue = Color.blue(colorInt) - .let(Integer::toHexString).padStart(2, '0') - - return "#$currentRed$currentGreen$currentBlue" - } - - @ColorInt fun mapHexToColor(colorHex: String): Int { - return runCatching { - Color.parseColor(colorHex) - }.fold( - onSuccess = { it }, - onFailure = { Color.BLACK }, - ) - } - companion object { fun getAvailableColors(isDarkTheme: Boolean = false): List { return if (isDarkTheme) availableColorsDark else availableColors 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 a15072f8..015a0eea 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 @@ -216,8 +216,8 @@ class ChangeRecordTypeFragment : viewModel.onEmojiSelected(emojiText) } - override fun onColorSelected(colorHex: String) { - viewModel.onCustomColorSelected(colorHex) + override fun onColorSelected(colorInt: Int) { + viewModel.onCustomColorSelected(colorInt) } private fun updateUi(item: RecordTypeViewData) = with(binding) { 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 1660b4f2..05ab2fe0 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 @@ -38,10 +38,10 @@ import com.example.util.simpletimetracker.feature_change_record_type.viewData.Ch import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeIconViewData import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeScrollViewData import com.example.util.simpletimetracker.navigation.Router -import com.example.util.simpletimetracker.navigation.params.screen.ChangeRecordTypeParams -import com.example.util.simpletimetracker.navigation.params.screen.DurationDialogParams import com.example.util.simpletimetracker.navigation.params.notification.ToastParams +import com.example.util.simpletimetracker.navigation.params.screen.ChangeRecordTypeParams import com.example.util.simpletimetracker.navigation.params.screen.ColorSelectionDialogParams +import com.example.util.simpletimetracker.navigation.params.screen.DurationDialogParams import kotlinx.coroutines.launch import javax.inject.Inject @@ -60,7 +60,6 @@ class ChangeRecordTypeViewModel @Inject constructor( private val changeRecordTypeMapper: ChangeRecordTypeMapper, private val resourceRepo: ResourceRepo, private val iconEmojiMapper: IconEmojiMapper, - private val colorMapper: ColorMapper, ) : ViewModel() { lateinit var extra: ChangeRecordTypeParams @@ -128,7 +127,7 @@ class ChangeRecordTypeViewModel @Inject constructor( private var newIconName: String = "" private var newCategories: MutableList = mutableListOf() private var newColorId: Int = (0..ColorMapper.colorsNumber).random() - private var lastSelectedCustomColor: String = "#FF0000" + private var lastSelectedCustomColor: Int = 0xFF0000 private var newGoalTime: Long = 0L fun onNameChange(name: String) { @@ -191,7 +190,7 @@ class ChangeRecordTypeViewModel @Inject constructor( fun onColorPaletteClick() { ColorSelectionDialogParams( - preselectedColor = colorMapper.mapHexToColor(lastSelectedCustomColor) + preselectedColor = lastSelectedCustomColor ).let(router::navigate) } @@ -243,8 +242,8 @@ class ChangeRecordTypeViewModel @Inject constructor( } } - fun onCustomColorSelected(colorHex: String) { - lastSelectedCustomColor = colorHex + fun onCustomColorSelected(colorInt: Int) { + lastSelectedCustomColor = colorInt } fun onGoalTimeClick() { diff --git a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/view/ColorSelectionDialogFragment.kt b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/view/ColorSelectionDialogFragment.kt index 151b5dd3..763ab008 100644 --- a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/view/ColorSelectionDialogFragment.kt +++ b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/view/ColorSelectionDialogFragment.kt @@ -141,8 +141,8 @@ class ColorSelectionDialogFragment : BaseBottomSheetFragment() { textWatcher?.let(::addTextChangedListener) } - private fun onColorSelected(colorHex: String) { - colorSelectionDialogListener?.onColorSelected(colorHex) + private fun onColorSelected(colorInt: Int) { + colorSelectionDialogListener?.onColorSelected(colorInt) dismiss() } diff --git a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/viewModel/ColorSelectionViewModel.kt b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/viewModel/ColorSelectionViewModel.kt index bbe2c498..6e730eaa 100644 --- a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/viewModel/ColorSelectionViewModel.kt +++ b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/viewModel/ColorSelectionViewModel.kt @@ -6,16 +6,13 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.example.util.simpletimetracker.core.extension.set -import com.example.util.simpletimetracker.core.mapper.ColorMapper import com.example.util.simpletimetracker.feature_dialogs.colorSelection.model.HSVUpdate import com.example.util.simpletimetracker.feature_dialogs.colorSelection.model.RGBUpdate import com.example.util.simpletimetracker.feature_dialogs.colorSelection.viewData.ColorSelectionViewData import com.example.util.simpletimetracker.navigation.params.screen.ColorSelectionDialogParams import javax.inject.Inject -class ColorSelectionViewModel @Inject constructor( - private val colorMapper: ColorMapper, -) : ViewModel() { +class ColorSelectionViewModel @Inject constructor() : ViewModel() { lateinit var extra: ColorSelectionDialogParams @@ -23,7 +20,7 @@ class ColorSelectionViewModel @Inject constructor( initialize() MutableLiveData(loadColorData()) } - val colorSelected: LiveData = MutableLiveData() + val colorSelected: LiveData = MutableLiveData() private var colorHue: Float = 0f // 0..360 private var colorSaturation: Float = 1f // 0..1 @@ -100,8 +97,7 @@ class ColorSelectionViewModel @Inject constructor( } fun onSaveClick() { - // TODO save colorInt instead of hex? It has more definition. - getCurrentColorInt().let(colorMapper::mapColorToHex).let(colorSelected::set) + getCurrentColorInt().let(colorSelected::set) } private fun initialize() { @@ -126,7 +122,7 @@ class ColorSelectionViewModel @Inject constructor( colorHue = colorHue, colorSaturation = colorSaturation, colorValue = colorValue, - colorHex = colorMapper.mapColorToHex(colorInt), + colorHex = mapColorToHex(colorInt), colorRedString = Color.red(colorInt).toString(), colorGreenString = Color.green(colorInt).toString(), colorBlueString = Color.blue(colorInt).toString(), @@ -136,6 +132,17 @@ class ColorSelectionViewModel @Inject constructor( ) } + private fun mapColorToHex(@ColorInt colorInt: Int): String { + val currentRed = Color.red(colorInt) + .let(Integer::toHexString).padStart(2, '0') + val currentGreen = Color.green(colorInt) + .let(Integer::toHexString).padStart(2, '0') + val currentBlue = Color.blue(colorInt) + .let(Integer::toHexString).padStart(2, '0') + + return "#$currentRed$currentGreen$currentBlue" + } + @ColorInt private fun getCurrentColorInt(): Int { return floatArrayOf(colorHue, colorSaturation, colorValue) .let(Color::HSVToColor) -- 2.51.2