From 39046f787fe83b6bf1385a181f20b542435d3525 Mon Sep 17 00:00:00 2001 From: Sergey Boishtyan Date: Wed, 18 May 2022 19:27:19 +0300 Subject: [PATCH] Editor | Fix | Delete colors from ThemeColor.kt (#2284) --- .../features/editor/RelationBlockUITesting.kt | 14 +++-- .../relations/AddRelationStatusValueTest.kt | 8 ++- .../relations/AddRelationTagValueTest.kt | 6 +- .../DisplayRelationStatusValueTest.kt | 13 +++-- .../relations/DisplayRelationTagValueTest.kt | 15 +++-- .../relations/EditRelationTagValueTest.kt | 7 ++- .../relations/ObjectRelationListTest.kt | 6 +- .../core_ui/extensions/PaletteExtension.kt | 31 +++++++--- .../dataview/modals/FilterStatusViewHolder.kt | 19 +++---- .../features/editor/holders/other/Code.kt | 4 +- .../holders/placeholders/MediaPlaceholder.kt | 4 +- .../editor/slash/holders/ColorMenuHolder.kt | 14 ++++- .../holders/FeaturedRelationViewHolder.kt | 57 +++++++++++-------- .../core_ui/widgets/text/StatusWidget.kt | 10 +--- .../anytype/core_ui/widgets/text/TagWidget.kt | 15 ++--- .../widgets/text/highlight/HighlightDrawer.kt | 4 +- .../widgets/toolbar/MarkupToolbarWidget.kt | 4 +- .../anytype/core_ui/BlockAdapterTest.kt | 5 +- .../editor/BlockAdapterCheckboxTest.kt | 5 +- .../editor/BlockAdapterTextColorTest.kt | 5 +- .../anytype/core_ui/uitests/TitleBlockTest.kt | 4 +- .../presentation/editor/editor/ThemeColor.kt | 28 --------- .../editor/editor/slash/SlashItem.kt | 13 +---- .../add/BaseAddOptionsRelationViewModel.kt | 8 ++- .../anytype/test_utils/utils/EspressoExt.kt | 8 ++- .../utils/InstrumentationTestContextExt.kt | 11 ++++ .../test_utils/utils/espresso/ViewMatchers.kt | 32 ++++++++--- 27 files changed, 196 insertions(+), 154 deletions(-) create mode 100644 test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/InstrumentationTestContextExt.kt diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/editor/RelationBlockUITesting.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/editor/RelationBlockUITesting.kt index bfa501ca9c..82a3f707c1 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/editor/RelationBlockUITesting.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/editor/RelationBlockUITesting.kt @@ -13,6 +13,7 @@ import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.Relation import com.anytypeio.anytype.core_models.ext.content +import com.anytypeio.anytype.core_ui.extensions.veryLight import com.anytypeio.anytype.emojifier.data.DefaultDocumentEmojiIconProvider import com.anytypeio.anytype.features.editor.base.EditorTestSetup import com.anytypeio.anytype.features.editor.base.TestEditorFragment @@ -29,6 +30,7 @@ import com.anytypeio.anytype.test_utils.utils.checkIsSelected import com.anytypeio.anytype.test_utils.utils.onItem import com.anytypeio.anytype.test_utils.utils.onItemView import com.anytypeio.anytype.test_utils.utils.rVMatcher +import com.anytypeio.anytype.test_utils.utils.resources import com.anytypeio.anytype.ui.editor.EditorFragment import com.anytypeio.anytype.utils.checkHasMarginStart import com.anytypeio.anytype.utils.checkHasPaddingLeft @@ -383,7 +385,7 @@ class RelationBlockUITesting : EditorTestSetup() { id = MockDataFactory.randomUuid(), fields = Block.Fields.empty(), children = emptyList(), - backgroundColor = background2.code, + backgroundColor = background3.code, content = Block.Content.RelationBlock( key = relation3.key ) @@ -393,7 +395,7 @@ class RelationBlockUITesting : EditorTestSetup() { id = MockDataFactory.randomUuid(), fields = Block.Fields.empty(), children = emptyList(), - backgroundColor = background2.code, + backgroundColor = background4.code, content = Block.Content.RelationBlock( key = relation4.key ) @@ -431,10 +433,10 @@ class RelationBlockUITesting : EditorTestSetup() { with(R.id.recycler.rVMatcher()) { checkIsRecyclerSize(7) - onItem(2).checkHasBackgroundColor(background1.background) - onItem(3).checkHasBackgroundColor(background2.background) - onItem(4).checkHasBackgroundColor(background3.background) - onItem(5).checkHasBackgroundColor(background4.background) + onItem(2).checkHasBackgroundColor(resources.veryLight(background1)) + onItem(3).checkHasBackgroundColor(resources.veryLight(background2)) + onItem(4).checkHasBackgroundColor(resources.veryLight(background3)) + onItem(5).checkHasBackgroundColor(resources.veryLight(background4)) onItem(6).checkHasNoBackground() } diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/AddRelationStatusValueTest.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/AddRelationStatusValueTest.kt index 2159b0c7d8..5f80354ccb 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/AddRelationStatusValueTest.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/AddRelationStatusValueTest.kt @@ -12,6 +12,7 @@ import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.Relation +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.domain.`object`.UpdateDetail import com.anytypeio.anytype.domain.block.repo.BlockRepository import com.anytypeio.anytype.domain.config.Gateway @@ -39,6 +40,7 @@ import com.anytypeio.anytype.test_utils.utils.matchView import com.anytypeio.anytype.test_utils.utils.onItemView import com.anytypeio.anytype.test_utils.utils.performClick import com.anytypeio.anytype.test_utils.utils.rVMatcher +import com.anytypeio.anytype.test_utils.utils.resources import com.anytypeio.anytype.test_utils.utils.type import com.anytypeio.anytype.ui.relations.add.BaseAddOptionsRelationFragment import com.anytypeio.anytype.utils.CoroutinesTestRule @@ -407,9 +409,9 @@ class AddRelationStatusValueTest { ) R.id.recycler.rVMatcher().apply { - onItemView(0, R.id.tvStatusName).checkHasText(option1.text) - onItemView(0, R.id.tvStatusName).checkHasTextColor(option1Color.text) checkIsRecyclerSize(1) + onItemView(0, R.id.tvStatusName).checkHasText(option1.text) + onItemView(0, R.id.tvStatusName).checkHasTextColor(resources.dark(option1Color)) } } @@ -624,7 +626,7 @@ class AddRelationStatusValueTest { } private fun launchFragment(args: Bundle): FragmentScenario { - return launchFragmentInContainer( + return launchFragmentInContainer( fragmentArgs = args, themeResId = R.style.AppTheme ) diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/AddRelationTagValueTest.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/AddRelationTagValueTest.kt index e568e8eda3..25c91b8c8a 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/AddRelationTagValueTest.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/AddRelationTagValueTest.kt @@ -12,6 +12,7 @@ import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.Relation +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.domain.`object`.UpdateDetail import com.anytypeio.anytype.domain.block.repo.BlockRepository import com.anytypeio.anytype.domain.config.Gateway @@ -38,6 +39,7 @@ import com.anytypeio.anytype.test_utils.utils.matchView import com.anytypeio.anytype.test_utils.utils.onItemView import com.anytypeio.anytype.test_utils.utils.performClick import com.anytypeio.anytype.test_utils.utils.rVMatcher +import com.anytypeio.anytype.test_utils.utils.resources import com.anytypeio.anytype.test_utils.utils.type import com.anytypeio.anytype.ui.relations.add.BaseAddOptionsRelationFragment import com.anytypeio.anytype.utils.CoroutinesTestRule @@ -318,9 +320,9 @@ class AddRelationTagValueTest { ) R.id.recycler.rVMatcher().apply { - onItemView(0, R.id.tvTagName).checkHasText(option1.text) - onItemView(0, R.id.tvTagName).checkHasTextColor(option1Color.text) checkIsRecyclerSize(1) + onItemView(0, R.id.tvTagName).checkHasText(option1.text) + onItemView(0, R.id.tvTagName).checkHasTextColor(resources.dark(option1Color)) } } diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/DisplayRelationStatusValueTest.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/DisplayRelationStatusValueTest.kt index 0fa9cbbc47..21179e0bec 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/DisplayRelationStatusValueTest.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/DisplayRelationStatusValueTest.kt @@ -17,6 +17,7 @@ import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ObjectType import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.Relation +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.domain.`object`.ObjectTypesProvider import com.anytypeio.anytype.domain.`object`.UpdateDetail import com.anytypeio.anytype.domain.block.repo.BlockRepository @@ -40,8 +41,10 @@ import com.anytypeio.anytype.presentation.util.CopyFileToCacheDirectory import com.anytypeio.anytype.presentation.util.Dispatcher import com.anytypeio.anytype.test_utils.MockDataFactory import com.anytypeio.anytype.test_utils.utils.TestUtils.withRecyclerView -import com.anytypeio.anytype.test_utils.utils.espresso.WithTextColor +import com.anytypeio.anytype.test_utils.utils.checkHasText +import com.anytypeio.anytype.test_utils.utils.checkHasTextColor import com.anytypeio.anytype.test_utils.utils.espresso.WithTextColorRes +import com.anytypeio.anytype.test_utils.utils.resources import com.anytypeio.anytype.ui.relations.RelationValueBaseFragment import com.anytypeio.anytype.utils.CoroutinesTestRule import com.bartoszlipinski.disableanimationsrule.DisableAnimationsRule @@ -102,7 +105,7 @@ class DisplayRelationStatusValueTest { TestRelationValueDVFragment.testVmFactory = RelationValueDVViewModel.Factory( relations = DataViewObjectRelationProvider(state), values = DataViewObjectValueProvider(state, session), - details = object: ObjectDetailProvider { + details = object : ObjectDetailProvider { override fun provide(): Map = state.value.details }, types = object : ObjectTypesProvider { @@ -352,8 +355,8 @@ class DisplayRelationStatusValueTest { val rvMatcher = withRecyclerView(R.id.recycler) onView(rvMatcher.atPositionOnView(0, R.id.tvStatusName)).apply { - check(matches(withText(option2.text))) - check(matches(WithTextColor(option2Color.text))) + checkHasText(option2.text) + checkHasTextColor(resources.dark(option2Color)) } } @@ -433,7 +436,7 @@ class DisplayRelationStatusValueTest { val rvMatcher = withRecyclerView(R.id.recycler) onView(rvMatcher.atPositionOnView(0, R.id.tvStatusName)).apply { - check(matches(WithTextColorRes(R.color.default_filter_tag_text_color))) + check(matches(WithTextColorRes(com.anytypeio.anytype.core_ui.R.color.text_primary))) } } diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/DisplayRelationTagValueTest.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/DisplayRelationTagValueTest.kt index bd9f49c1f8..06d0569578 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/DisplayRelationTagValueTest.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/DisplayRelationTagValueTest.kt @@ -17,6 +17,7 @@ import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ObjectType import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.Relation +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.domain.`object`.ObjectTypesProvider import com.anytypeio.anytype.domain.`object`.UpdateDetail import com.anytypeio.anytype.domain.block.repo.BlockRepository @@ -40,8 +41,10 @@ import com.anytypeio.anytype.presentation.util.CopyFileToCacheDirectory import com.anytypeio.anytype.presentation.util.Dispatcher import com.anytypeio.anytype.test_utils.MockDataFactory import com.anytypeio.anytype.test_utils.utils.TestUtils.withRecyclerView -import com.anytypeio.anytype.test_utils.utils.espresso.WithTextColor +import com.anytypeio.anytype.test_utils.utils.checkHasText +import com.anytypeio.anytype.test_utils.utils.checkHasTextColor import com.anytypeio.anytype.test_utils.utils.espresso.WithTextColorRes +import com.anytypeio.anytype.test_utils.utils.resources import com.anytypeio.anytype.ui.relations.RelationValueBaseFragment import com.anytypeio.anytype.utils.CoroutinesTestRule import com.bartoszlipinski.disableanimationsrule.DisableAnimationsRule @@ -356,13 +359,13 @@ class DisplayRelationTagValueTest { // } onView(rvMatcher.atPositionOnView(0, R.id.tvTagName)).apply { - check(matches(withText(option2.text))) - check(matches(WithTextColor(option2Color.text))) + checkHasText(option2.text) + checkHasTextColor(resources.dark(option2Color)) } onView(rvMatcher.atPositionOnView(1, R.id.tvTagName)).apply { - check(matches(withText(option3.text))) - check(matches(WithTextColorRes(R.color.default_filter_tag_text_color))) + checkHasText(option3.text) + check(matches(WithTextColorRes(com.anytypeio.anytype.core_ui.R.color.text_primary))) } } @@ -442,7 +445,7 @@ class DisplayRelationTagValueTest { val rvMatcher = withRecyclerView(R.id.recycler) onView(rvMatcher.atPositionOnView(0, R.id.tvTagName)).apply { - check(matches(WithTextColorRes(R.color.default_filter_tag_text_color))) + check(matches(WithTextColorRes(com.anytypeio.anytype.core_ui.R.color.text_primary))) } } diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/EditRelationTagValueTest.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/EditRelationTagValueTest.kt index 0eaa9b7910..69b50432ab 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/EditRelationTagValueTest.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/EditRelationTagValueTest.kt @@ -12,6 +12,7 @@ import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.ObjectType import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.Relation +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.domain.`object`.ObjectTypesProvider import com.anytypeio.anytype.domain.`object`.UpdateDetail import com.anytypeio.anytype.domain.block.repo.BlockRepository @@ -43,6 +44,7 @@ import com.anytypeio.anytype.test_utils.utils.matchView import com.anytypeio.anytype.test_utils.utils.onItemView import com.anytypeio.anytype.test_utils.utils.performClick import com.anytypeio.anytype.test_utils.utils.rVMatcher +import com.anytypeio.anytype.test_utils.utils.resources import com.anytypeio.anytype.ui.relations.RelationValueBaseFragment import com.anytypeio.anytype.utils.CoroutinesTestRule import com.bartoszlipinski.disableanimationsrule.DisableAnimationsRule @@ -216,7 +218,7 @@ class EditRelationTagValueTest { with(R.id.recycler.rVMatcher()) { onItemView(0, R.id.tvTagName).checkHasText(option2.text) - onItemView(0, R.id.tvTagName).checkHasTextColor(option2Color.text) + onItemView(0, R.id.tvTagName).checkHasTextColor(resources.dark(option2Color)) onItemView(0, R.id.btnRemoveTag).checkIsNotDisplayed() onItemView(0, R.id.btnDragAndDropTag).checkIsNotDisplayed() onItemView(1, R.id.tvTagName).checkHasText(option3.text) @@ -231,7 +233,7 @@ class EditRelationTagValueTest { with(R.id.recycler.rVMatcher()) { onItemView(0, R.id.tvTagName).checkHasText(option2.text) - onItemView(0, R.id.tvTagName).checkHasTextColor(option2Color.text) + onItemView(0, R.id.tvTagName).checkHasTextColor(resources.dark(option2Color)) onItemView(0, R.id.btnRemoveTag).checkIsDisplayed() onItemView(0, R.id.btnDragAndDropTag).checkIsDisplayed() onItemView(1, R.id.tvTagName).checkHasText(option3.text) @@ -344,7 +346,6 @@ class EditRelationTagValueTest { target = dv.id, record = target, values = mapOf( - ObjectSetConfig.ID_KEY to target, relationKey to listOf(option2.id) ) ) diff --git a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt index f652db0976..895050e16b 100644 --- a/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt +++ b/app/src/androidTest/java/com/anytypeio/anytype/features/relations/ObjectRelationListTest.kt @@ -15,6 +15,7 @@ import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.Relation +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.core_utils.const.DateConst import com.anytypeio.anytype.core_utils.ext.toTimeSeconds import com.anytypeio.anytype.domain.`object`.UpdateDetail @@ -36,6 +37,7 @@ import com.anytypeio.anytype.test_utils.utils.checkHasTextColor import com.anytypeio.anytype.test_utils.utils.checkIsRecyclerSize import com.anytypeio.anytype.test_utils.utils.onItemView import com.anytypeio.anytype.test_utils.utils.rVMatcher +import com.anytypeio.anytype.test_utils.utils.resources import com.anytypeio.anytype.ui.relations.RelationListFragment import com.anytypeio.anytype.utils.CoroutinesTestRule import com.bartoszlipinski.disableanimationsrule.DisableAnimationsRule @@ -501,10 +503,10 @@ class ObjectRelationListTest { onItemView(0, R.id.tvSectionName).checkHasText(R.string.other_relations) onItemView(1, R.id.tvRelationTitle).checkHasText(name1) onItemView(1, R.id.tvRelationValue).checkHasText(option1.text) - onItemView(1, R.id.tvRelationValue).checkHasTextColor(color1.text) + onItemView(1, R.id.tvRelationValue).checkHasTextColor(resources.dark(color1)) onItemView(2, R.id.tvRelationTitle).checkHasText(name2) onItemView(2, R.id.tvRelationValue).checkHasText(option2.text) - onItemView(2, R.id.tvRelationValue).checkHasTextColor(color2.text) + onItemView(2, R.id.tvRelationValue).checkHasTextColor(resources.dark(color2)) checkIsRecyclerSize(3) } } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/extensions/PaletteExtension.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/extensions/PaletteExtension.kt index c84fde07e5..88a5a4f247 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/extensions/PaletteExtension.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/extensions/PaletteExtension.kt @@ -4,11 +4,18 @@ import android.content.Context import android.content.res.Resources import android.view.View import android.widget.TextView +import androidx.annotation.ColorInt import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.presentation.editor.editor.ThemeColor -fun Resources.dark(color: ThemeColor, default: Int): Int = when (color) { - ThemeColor.DEFAULT -> default +@ColorInt +fun Resources.dark( + color: ThemeColor, + @ColorInt + default: Int? = null +): Int = when (color) { + // TODO pass Theme + ThemeColor.DEFAULT -> default ?: getColor(R.color.palette_dark_default, null) ThemeColor.GREY -> getColor(R.color.palette_dark_grey, null) ThemeColor.YELLOW -> getColor(R.color.palette_dark_yellow, null) ThemeColor.ORANGE -> getColor(R.color.palette_dark_orange, null) @@ -21,8 +28,13 @@ fun Resources.dark(color: ThemeColor, default: Int): Int = when (color) { ThemeColor.LIME -> getColor(R.color.palette_dark_lime, null) } -fun Resources.light(color: ThemeColor, default: Int): Int = when (color) { - ThemeColor.DEFAULT -> default +@ColorInt +fun Resources.light( + color: ThemeColor, + @ColorInt + default: Int? = null +): Int = when (color) { + ThemeColor.DEFAULT -> default ?: getColor(R.color.palette_light_default, null) ThemeColor.GREY -> getColor(R.color.palette_light_grey, null) ThemeColor.YELLOW -> getColor(R.color.palette_light_yellow, null) ThemeColor.ORANGE -> getColor(R.color.palette_light_orange, null) @@ -35,8 +47,13 @@ fun Resources.light(color: ThemeColor, default: Int): Int = when (color) { ThemeColor.LIME -> getColor(R.color.palette_light_lime, null) } -fun Resources.lighter(color: ThemeColor, default: Int): Int = when (color) { - ThemeColor.DEFAULT -> default +@ColorInt +fun Resources.veryLight( + color: ThemeColor, + @ColorInt + default: Int? = null +): Int = when (color) { + ThemeColor.DEFAULT -> default ?: getColor(R.color.palette_very_light_default, null) ThemeColor.GREY -> getColor(R.color.palette_very_light_grey, null) ThemeColor.YELLOW -> getColor(R.color.palette_very_light_yellow, null) ThemeColor.ORANGE -> getColor(R.color.palette_very_light_orange, null) @@ -67,7 +84,7 @@ fun View.setBlockBackgroundColor(color: String?) { if (!color.isNullOrEmpty()) { val value = ThemeColor.values().find { value -> value.code == color } if (value != null && value != ThemeColor.DEFAULT) { - setBackgroundColor(resources.lighter(value, 0)) + setBackgroundColor(resources.veryLight(value, 0)) } else { background = null } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/dataview/modals/FilterStatusViewHolder.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/dataview/modals/FilterStatusViewHolder.kt index a43f98a62d..6e7c3d79c9 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/dataview/modals/FilterStatusViewHolder.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/dataview/modals/FilterStatusViewHolder.kt @@ -5,6 +5,7 @@ import android.widget.TextView import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.databinding.ItemDvViewerFilterStatusBinding import com.anytypeio.anytype.core_ui.extensions.color +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.core_utils.ext.invisible import com.anytypeio.anytype.core_utils.ext.visible import com.anytypeio.anytype.presentation.editor.editor.ThemeColor @@ -12,7 +13,8 @@ import com.anytypeio.anytype.presentation.extension.hasValue import com.anytypeio.anytype.presentation.sets.model.FilterView import timber.log.Timber -class FilterStatusViewHolder(val binding: ItemDvViewerFilterStatusBinding) : FilterViewHolder(binding.root) { +class FilterStatusViewHolder(val binding: ItemDvViewerFilterStatusBinding) : + FilterViewHolder(binding.root) { override val textTitle: TextView get() = binding.tvTitle override val textCondition: TextView get() = binding.tvCondition @@ -43,16 +45,11 @@ class FilterStatusViewHolder(val binding: ItemDvViewerFilterStatusBinding) : Fil } private fun setTextColor(view: TextView, color: String) { - if (color.isNotBlank()) { - val value = ThemeColor.values().find { value -> value.code == color } - if (value != null) - view.setTextColor(value.text) - else{ - Timber.e("Could not find value for text color: $color") - view.setTextColor(view.context.color(R.color.black)) - } - } else { - view.setTextColor(view.context.color(R.color.black)) + val defaultColor = view.context.color(R.color.default_filter_tag_text_color) + val value = ThemeColor.values().find { value -> value.code == color } + if (value == null) { + Timber.w("Could not find value for text color: $color") } + view.setTextColor(view.resources.dark(value ?: ThemeColor.DEFAULT, defaultColor)) } } \ No newline at end of file diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/other/Code.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/other/Code.kt index 5787eb46c2..f051618fcf 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/other/Code.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/other/Code.kt @@ -12,7 +12,7 @@ import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.RecyclerView import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.databinding.ItemBlockCodeSnippetBinding -import com.anytypeio.anytype.core_ui.extensions.lighter +import com.anytypeio.anytype.core_ui.extensions.veryLight import com.anytypeio.anytype.core_ui.features.editor.BlockViewDiffUtil import com.anytypeio.anytype.core_ui.features.editor.BlockViewHolder import com.anytypeio.anytype.core_ui.features.editor.EditorTouchProcessor @@ -216,7 +216,7 @@ class Code(val binding: ItemBlockCodeSnippetBinding) : BlockViewHolder(binding.r private fun setBackgroundColor(color: String? = null) { val value = ThemeColor.values().find { value -> value.code == color } if (value != null && value != ThemeColor.DEFAULT) { - (root.background as? ColorDrawable)?.color = root.resources.lighter(value, 0) + (root.background as? ColorDrawable)?.color = root.resources.veryLight(value, 0) } else { val defaultBackgroundColor = content.context.resources.getColor(R.color.shape_tertiary, null) diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/placeholders/MediaPlaceholder.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/placeholders/MediaPlaceholder.kt index c485f1446b..3330e9e387 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/placeholders/MediaPlaceholder.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/holders/placeholders/MediaPlaceholder.kt @@ -7,7 +7,7 @@ import androidx.core.view.updatePadding import androidx.recyclerview.widget.RecyclerView import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.databinding.ItemBlockMediaPlaceholderBinding -import com.anytypeio.anytype.core_ui.extensions.lighter +import com.anytypeio.anytype.core_ui.extensions.veryLight import com.anytypeio.anytype.core_ui.features.editor.BlockViewDiffUtil import com.anytypeio.anytype.core_ui.features.editor.BlockViewHolder import com.anytypeio.anytype.core_ui.features.editor.EditorTouchProcessor @@ -93,7 +93,7 @@ abstract class MediaPlaceholder(binding: ItemBlockMediaPlaceholderBinding) : if (!background.isNullOrEmpty()) { val value = ThemeColor.values().find { value -> value.code == background } if (value != null && value != ThemeColor.DEFAULT) { - card.setCardBackgroundColor(card.resources.lighter(value, 0)) + card.setCardBackgroundColor(card.resources.veryLight(value, 0)) } else { Timber.e("Could not find value for background color: $background, setting background to null") card.setCardBackgroundColor(0) diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/slash/holders/ColorMenuHolder.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/slash/holders/ColorMenuHolder.kt index 025f0c2561..1a4dd98a9d 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/slash/holders/ColorMenuHolder.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/editor/slash/holders/ColorMenuHolder.kt @@ -1,9 +1,13 @@ package com.anytypeio.anytype.core_ui.features.editor.slash.holders import android.content.Context +import android.content.res.Resources +import androidx.annotation.ColorInt import androidx.recyclerview.widget.RecyclerView import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.databinding.ItemSlashWidgetColorBinding +import com.anytypeio.anytype.core_ui.extensions.dark +import com.anytypeio.anytype.core_ui.extensions.veryLight import com.anytypeio.anytype.presentation.editor.editor.ThemeColor import com.anytypeio.anytype.presentation.editor.editor.slash.SlashItem @@ -13,7 +17,7 @@ class ColorMenuHolder( fun bind(item: SlashItem.Color) = with(binding) { circle.isSelected = item.isSelected - circle.innerColor = item.colorHex + circle.innerColor = view.context.resources.getColor(item) val capitalizedTitle = view.context.getTitle(item.themeColor) title.text = when (item) { is SlashItem.Color.Text -> capitalizedTitle @@ -24,6 +28,14 @@ class ColorMenuHolder( } } + @ColorInt + private fun Resources.getColor(item: SlashItem.Color): Int { + return when (item) { + is SlashItem.Color.Text -> dark(item.themeColor) + is SlashItem.Color.Background -> veryLight(item.themeColor) + } + } + private fun Context.getTitle(color: ThemeColor): String { return when (color) { ThemeColor.DEFAULT -> getString(R.string.slash_widget_default_color_title) diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/relations/holders/FeaturedRelationViewHolder.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/relations/holders/FeaturedRelationViewHolder.kt index ff267e49b7..d66d5c1d52 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/relations/holders/FeaturedRelationViewHolder.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/relations/holders/FeaturedRelationViewHolder.kt @@ -8,9 +8,13 @@ import com.anytypeio.anytype.core_ui.databinding.ItemFeaturedRelationDefaultBind import com.anytypeio.anytype.core_ui.databinding.ItemFeaturedRelationStatusBinding import com.anytypeio.anytype.core_ui.databinding.ItemFeaturedRelationTagsBinding import com.anytypeio.anytype.core_ui.extensions.color +import com.anytypeio.anytype.core_ui.extensions.dark +import com.anytypeio.anytype.core_ui.extensions.veryLight import com.anytypeio.anytype.core_utils.ext.setDrawableColor import com.anytypeio.anytype.presentation.editor.editor.ThemeColor import com.anytypeio.anytype.presentation.relations.DocumentRelationView +import com.anytypeio.anytype.presentation.sets.model.StatusView +import com.anytypeio.anytype.presentation.sets.model.TagView sealed class FeaturedRelationViewHolder(view: View) : RecyclerView.ViewHolder(view) { @@ -30,22 +34,24 @@ sealed class FeaturedRelationViewHolder(view: View) : RecyclerView.ViewHolder(vi private val container = binding.featuredRelationTagContainer fun bind(item: DocumentRelationView.Tags) { + // TODO optimize create and delete only diff between views container.removeAllViews() item.tags.forEach { tag -> - container.addView( - TextView(itemView.context).apply { - text = tag.tag - setBackgroundResource(R.drawable.rect_dv_cell_tag_item) - val themeColor = ThemeColor.values().find { it.code == tag.color } - if (themeColor != null) { - background.setDrawableColor(themeColor.background) - setTextColor(themeColor.text) - } else { - background.setDrawableColor(context.color(R.color.default_filter_tag_background_color)) - setTextColor(context.color(R.color.default_filter_tag_text_color)) - } - } - ) + container.addView(createTagView(tag)) + } + } + + private fun createTagView(tag: TagView): View { + val context = itemView.context + val resources = context.resources + val defaultTextColor = context.color(R.color.default_filter_tag_text_color) + val defaultBackgroundColor = context.color(R.color.default_filter_tag_background_color) + val themeColor = ThemeColor.values().find { it.code == tag.color } ?: ThemeColor.DEFAULT + return TextView(context).apply { + text = tag.tag + setBackgroundResource(R.drawable.rect_dv_cell_tag_item) + background.setDrawableColor(resources.veryLight(themeColor, defaultBackgroundColor)) + setTextColor(resources.dark(themeColor, defaultTextColor)) } } } @@ -57,19 +63,20 @@ sealed class FeaturedRelationViewHolder(view: View) : RecyclerView.ViewHolder(vi private val container = binding.featuredRelationStatusContainer fun bind(item: DocumentRelationView.Status) { + // TODO optimize create and delete only diff between views container.removeAllViews() item.status.forEach { status -> - container.addView( - TextView(itemView.context).apply { - text = status.status - val themeColor = ThemeColor.values().find { it.code == status.color } - if (themeColor != null) { - setTextColor(themeColor.text) - } else { - setTextColor(context.color(R.color.default_filter_tag_text_color)) - } - } - ) + container.addView(createStatusView(status)) + } + } + + private fun createStatusView(status: StatusView): View { + val resources = itemView.context.resources + val color = ThemeColor.values().find { it.code == status.color } ?: ThemeColor.DEFAULT + val defaultTextColor = itemView.context.color(R.color.default_filter_tag_text_color) + return TextView(itemView.context).apply { + text = status.status + setTextColor(resources.dark(color, defaultTextColor)) } } } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/StatusWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/StatusWidget.kt index 5670cc6cd8..f66407c90c 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/StatusWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/StatusWidget.kt @@ -14,12 +14,8 @@ class StatusWidget @JvmOverloads constructor( ) : AppCompatTextView(context, attrs, defStyleAttr) { fun setColor(color: String?) { - val defaultTextColor = resources.getColor(R.color.text_primary, null) - val themeColor = ThemeColor.values().find { it.code == color } - if (themeColor != null && themeColor != ThemeColor.DEFAULT) { - setTextColor(resources.dark(themeColor, defaultTextColor)) - } else { - setTextColor(defaultTextColor) - } + val defaultTextColor = context.getColor(R.color.text_primary) + val themeColor = ThemeColor.values().find { it.code == color } ?: ThemeColor.DEFAULT + setTextColor(resources.dark(themeColor, defaultTextColor)) } } \ No newline at end of file diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/TagWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/TagWidget.kt index 62f59e52b5..f2b6da09e0 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/TagWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/TagWidget.kt @@ -34,15 +34,10 @@ class TagWidget @JvmOverloads constructor( } private fun setColor(color: String?) { - val defaultTextColor = resources.getColor(R.color.text_primary, null) - val defaultBackground = resources.getColor(R.color.shape_primary, null) - val themeColor = ThemeColor.values().find { it.code == color } - if (themeColor != null && themeColor != ThemeColor.DEFAULT) { - background.setDrawableColor(resources.light(themeColor, defaultBackground)) - setTextColor(resources.dark(themeColor, defaultTextColor)) - } else { - background.setDrawableColor(defaultBackground) - setTextColor(defaultTextColor) - } + val defaultTextColor = context.getColor(R.color.text_primary) + val defaultBackground = context.getColor(R.color.shape_primary) + val themeColor = ThemeColor.values().find { it.code == color } ?: ThemeColor.DEFAULT + setTextColor(resources.dark(themeColor, defaultTextColor)) + background.setDrawableColor(resources.light(themeColor, defaultBackground)) } } \ No newline at end of file diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/highlight/HighlightDrawer.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/highlight/HighlightDrawer.kt index 7846dd32d9..6235fd77d3 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/highlight/HighlightDrawer.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/highlight/HighlightDrawer.kt @@ -9,7 +9,7 @@ import android.text.Spanned import androidx.core.graphics.drawable.DrawableCompat import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.common.Span -import com.anytypeio.anytype.core_ui.extensions.lighter +import com.anytypeio.anytype.core_ui.extensions.veryLight import com.anytypeio.anytype.presentation.editor.editor.ThemeColor import timber.log.Timber @@ -118,7 +118,7 @@ class HighlightDrawer( val value = ThemeColor.values().find { value -> value.code == span.value } val default = resources.getColor(R.color.background_primary, null) val color = if (value != null && value != ThemeColor.DEFAULT) { - resources.lighter(value, default) + resources.veryLight(value, default) } else { default } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/toolbar/MarkupToolbarWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/toolbar/MarkupToolbarWidget.kt index 275b2412fd..4c52c3b46e 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/toolbar/MarkupToolbarWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/toolbar/MarkupToolbarWidget.kt @@ -8,8 +8,8 @@ import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.databinding.WidgetMarkupToolbarMainBinding import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.core_ui.extensions.light -import com.anytypeio.anytype.core_ui.extensions.lighter import com.anytypeio.anytype.core_ui.extensions.tint +import com.anytypeio.anytype.core_ui.extensions.veryLight import com.anytypeio.anytype.core_ui.reactive.clicks import com.anytypeio.anytype.core_utils.ext.invisible import com.anytypeio.anytype.core_utils.ext.visible @@ -89,7 +89,7 @@ class MarkupToolbarWidget @JvmOverloads constructor( val code = ThemeColor.values().find { it.code == props?.blockBackroundColor } if (code != null) { val default = resources.getColor(R.color.background_primary, null) - val value = resources.lighter(code, default) + val value = resources.veryLight(code, default) backgroundColorCircle.tint(value) } else backgroundColorCircle.backgroundTintList = null diff --git a/core-ui/src/test/java/com/anytypeio/anytype/core_ui/BlockAdapterTest.kt b/core-ui/src/test/java/com/anytypeio/anytype/core_ui/BlockAdapterTest.kt index 4112c2d136..5c049e1632 100644 --- a/core-ui/src/test/java/com/anytypeio/anytype/core_ui/BlockAdapterTest.kt +++ b/core-ui/src/test/java/com/anytypeio/anytype/core_ui/BlockAdapterTest.kt @@ -17,6 +17,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.test.core.app.ApplicationProvider import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Url +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.core_ui.features.editor.BlockAdapter import com.anytypeio.anytype.core_ui.features.editor.BlockViewDiffUtil import com.anytypeio.anytype.core_ui.features.editor.BlockViewDiffUtil.Companion.BACKGROUND_COLOR_CHANGED @@ -196,7 +197,7 @@ class BlockAdapterTest { val color = holder.content.currentTextColor assertEquals( - expected = ThemeColor.BLUE.text, + expected = context.resources.dark(ThemeColor.BLUE), actual = color ) } @@ -344,7 +345,7 @@ class BlockAdapterTest { // Testing assertEquals( - expected = ThemeColor.BLUE.text, + expected = context.resources.dark(ThemeColor.BLUE), actual = holder.content.currentTextColor ) diff --git a/core-ui/src/test/java/com/anytypeio/anytype/core_ui/features/editor/BlockAdapterCheckboxTest.kt b/core-ui/src/test/java/com/anytypeio/anytype/core_ui/features/editor/BlockAdapterCheckboxTest.kt index e3de48dbd4..c214f43d9a 100644 --- a/core-ui/src/test/java/com/anytypeio/anytype/core_ui/features/editor/BlockAdapterCheckboxTest.kt +++ b/core-ui/src/test/java/com/anytypeio/anytype/core_ui/features/editor/BlockAdapterCheckboxTest.kt @@ -5,6 +5,7 @@ import androidx.core.text.getSpans import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.anytypeio.anytype.core_ui.common.CheckedCheckboxColorSpan +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.core_ui.features.editor.holders.text.Bulleted import com.anytypeio.anytype.core_ui.features.editor.holders.text.Checkbox import com.anytypeio.anytype.presentation.editor.editor.Markup @@ -52,7 +53,7 @@ class BlockAdapterCheckboxTest : BlockAdapterTestSetup() { assertEquals( actual = holder.content.currentTextColor, - expected = ThemeColor.DEFAULT.text + expected = context.resources.dark(ThemeColor.DEFAULT) ) } @@ -85,7 +86,7 @@ class BlockAdapterCheckboxTest : BlockAdapterTestSetup() { assertEquals( actual = holder.content.currentTextColor, - expected = ThemeColor.DEFAULT.text + expected = context.resources.dark(ThemeColor.DEFAULT) ) val spans = holder.content.text!!.getSpans(0) diff --git a/core-ui/src/test/java/com/anytypeio/anytype/core_ui/features/editor/BlockAdapterTextColorTest.kt b/core-ui/src/test/java/com/anytypeio/anytype/core_ui/features/editor/BlockAdapterTextColorTest.kt index 587c654c60..e12c6dd9c5 100644 --- a/core-ui/src/test/java/com/anytypeio/anytype/core_ui/features/editor/BlockAdapterTextColorTest.kt +++ b/core-ui/src/test/java/com/anytypeio/anytype/core_ui/features/editor/BlockAdapterTextColorTest.kt @@ -3,6 +3,7 @@ package com.anytypeio.anytype.core_ui.features.editor import android.os.Build import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.anytypeio.anytype.core_ui.extensions.dark import com.anytypeio.anytype.core_ui.features.editor.holders.text.Bulleted import com.anytypeio.anytype.presentation.editor.editor.ThemeColor import com.anytypeio.anytype.presentation.editor.editor.model.BlockView @@ -57,7 +58,7 @@ class BlockAdapterTextColorTest : BlockAdapterTestSetup() { assertEquals( actual = holder.content.currentTextColor, - expected = ThemeColor.BLUE.text + expected = context.resources.dark(ThemeColor.BLUE) ) val payload: MutableList = mutableListOf( @@ -74,7 +75,7 @@ class BlockAdapterTextColorTest : BlockAdapterTestSetup() { assertEquals( actual = holder.content.currentTextColor, - expected = ThemeColor.DEFAULT.text + expected = context.resources.dark(ThemeColor.DEFAULT) ) } } \ No newline at end of file diff --git a/core-ui/src/test/java/com/anytypeio/anytype/core_ui/uitests/TitleBlockTest.kt b/core-ui/src/test/java/com/anytypeio/anytype/core_ui/uitests/TitleBlockTest.kt index 98b2148949..02b6ab6bc7 100644 --- a/core-ui/src/test/java/com/anytypeio/anytype/core_ui/uitests/TitleBlockTest.kt +++ b/core-ui/src/test/java/com/anytypeio/anytype/core_ui/uitests/TitleBlockTest.kt @@ -10,7 +10,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.test.core.app.ApplicationProvider import com.anytypeio.anytype.core_ui.R -import com.anytypeio.anytype.core_ui.extensions.lighter +import com.anytypeio.anytype.core_ui.extensions.veryLight import com.anytypeio.anytype.presentation.editor.editor.ThemeColor import com.anytypeio.anytype.presentation.editor.editor.model.BlockView import com.anytypeio.anytype.test_utils.MockDataFactory @@ -95,7 +95,7 @@ class TitleBlockTest { rvMatcher.apply { onItemView(0, R.id.root).checkIsDisplayed() onItemView(0, R.id.title).checkHasBackgroundColor( - resources.lighter(redBackground, 0) + resources.veryLight(redBackground, 0) ) onItemView(0, R.id.title).checkHasText(title.text!!) } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/ThemeColor.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/ThemeColor.kt index 95e1837dd1..5bb2abc30a 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/ThemeColor.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/ThemeColor.kt @@ -1,70 +1,42 @@ package com.anytypeio.anytype.presentation.editor.editor -import android.graphics.Color - /** * @property code color code name - * @property text text color integer for text styling - * @property background background color integer for background/highlight styling */ enum class ThemeColor( val code: String, - val text: Int, - val background: Int ) { DEFAULT( code = "default", - text = Color.parseColor("#2C2B27"), - background = Color.parseColor("#FFFFFF") ), GREY( code = "grey", - text = Color.parseColor("#929082"), - background = Color.parseColor("#F1F0ED") ), YELLOW( code = "yellow", - text = Color.parseColor("#AFA100"), - background = Color.parseColor("#FCF8D6") ), ORANGE( code = "orange", - text = Color.parseColor("#C38400"), - background = Color.parseColor("#FFF2D7") ), RED( code = "red", - text = Color.parseColor("#E9410B"), - background = Color.parseColor("#FEE7E0") ), PINK( code = "pink", - text = Color.parseColor("#D20D8F"), - background = Color.parseColor("#FBDFF2") ), PURPLE( code = "purple", - text = Color.parseColor("#9F43C1"), - background = Color.parseColor("#F3E7F8") ), BLUE( code = "blue", - text = Color.parseColor("#3E58EB"), - background = Color.parseColor("#E4E8FC") ), ICE( code = "ice", - text = Color.parseColor("#188DCF"), - background = Color.parseColor("#DDF1FC") ), TEAL( code = "teal", - text = Color.parseColor("#0BA599"), - background = Color.parseColor("#D9F6F4") ), LIME( code = "lime", - text = Color.parseColor("#4DAE00"), - background = Color.parseColor("#E5F8D6") ); } \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/slash/SlashItem.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/slash/SlashItem.kt index 328a658088..4a3490d82e 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/slash/SlashItem.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/slash/SlashItem.kt @@ -1,6 +1,5 @@ package com.anytypeio.anytype.presentation.editor.editor.slash -import androidx.annotation.ColorInt import com.anytypeio.anytype.core_models.Url import com.anytypeio.anytype.core_utils.const.SlashConst import com.anytypeio.anytype.core_utils.const.SlashConst.SLASH_OTHER_TOC_ABBREVIATION @@ -404,8 +403,6 @@ sealed class SlashItem { abstract val isSelected: Boolean abstract val themeColor: ThemeColor - @get:ColorInt - abstract val colorHex: Int override fun getSearchName(): String = themeColor.code override fun getAbbreviation(): List? = null @@ -413,18 +410,12 @@ sealed class SlashItem { data class Text( override val themeColor: ThemeColor, override val isSelected: Boolean, - ) : Color() { - @get:ColorInt - override val colorHex: Int = themeColor.text - } + ) : Color() data class Background( override val themeColor: ThemeColor, override val isSelected: Boolean, - ) : Color() { - @get:ColorInt - override val colorHex: Int = themeColor.background - } + ) : Color() } //endregion } \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/add/BaseAddOptionsRelationViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/add/BaseAddOptionsRelationViewModel.kt index 649f95e3ab..4e3fde7e63 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/add/BaseAddOptionsRelationViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/add/BaseAddOptionsRelationViewModel.kt @@ -14,6 +14,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch +import timber.log.Timber abstract class BaseAddOptionsRelationViewModel( @@ -36,6 +37,8 @@ abstract class BaseAddOptionsRelationViewModel( val isMultiple = MutableStateFlow(true) + private val logger = Timber.tag("BaseAddOptionsRelationViewModel") + init { viewModelScope.launch { allRelationOptions.collect { all -> @@ -45,7 +48,10 @@ abstract class BaseAddOptionsRelationViewModel( viewModelScope.launch { choosingRelationOptions.combine(query) { choosing, query -> filterRelationsBy(query, allRelationOptions.value.all, choosing) - }.collect { ui.value = it } + }.collect { + logger.i("Update ui: $it") + ui.value = it + } } } diff --git a/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/EspressoExt.kt b/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/EspressoExt.kt index cbcb11271a..61c61c20fe 100644 --- a/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/EspressoExt.kt +++ b/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/EspressoExt.kt @@ -1,5 +1,7 @@ package com.anytypeio.anytype.test_utils.utils +import androidx.annotation.ColorInt +import androidx.annotation.IdRes import androidx.test.espresso.Espresso.onView import androidx.test.espresso.ViewInteraction import androidx.test.espresso.action.ViewActions @@ -65,15 +67,15 @@ fun ViewInteraction.checkIsNotSelected() { check(matches(not(ViewMatchers.isSelected()))) } -fun ViewInteraction.checkHasText(resId: Int) { +fun ViewInteraction.checkHasText(@IdRes resId: Int) { check(matches(ViewMatchers.withText(resId))) } -fun ViewInteraction.checkHasTextColor(color: Int) { +fun ViewInteraction.checkHasTextColor(@ColorInt color: Int) { check(matches(WithTextColor(color))) } -fun ViewInteraction.checkHasBackgroundColor(color: Int) { +fun ViewInteraction.checkHasBackgroundColor(@ColorInt color: Int) { check(matches(WithBackgroundColor(color))) } diff --git a/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/InstrumentationTestContextExt.kt b/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/InstrumentationTestContextExt.kt new file mode 100644 index 0000000000..fceb5026a6 --- /dev/null +++ b/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/InstrumentationTestContextExt.kt @@ -0,0 +1,11 @@ +package com.anytypeio.anytype.test_utils.utils + +import android.content.Context +import android.content.res.Resources +import androidx.test.platform.app.InstrumentationRegistry + +val context: Context + get() = InstrumentationRegistry.getInstrumentation().targetContext + +val resources: Resources + get() = InstrumentationRegistry.getInstrumentation().targetContext.resources \ No newline at end of file diff --git a/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/espresso/ViewMatchers.kt b/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/espresso/ViewMatchers.kt index 20e0de89b0..86ef4f6f98 100644 --- a/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/espresso/ViewMatchers.kt +++ b/test/android-utils/src/main/java/com/anytypeio/anytype/test_utils/utils/espresso/ViewMatchers.kt @@ -5,6 +5,8 @@ import android.view.View import android.view.ViewGroup import android.widget.EditText import android.widget.TextView +import androidx.annotation.ColorInt +import androidx.annotation.ColorRes import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.UiController @@ -17,8 +19,11 @@ import org.hamcrest.Description import org.hamcrest.Matcher import org.hamcrest.TypeSafeMatcher - -class WithTextColor(private val expectedColor: Int) : BoundedMatcher(TextView::class.java) { +class WithTextColor( + @ColorInt + private val expectedColor: Int +) : + BoundedMatcher(TextView::class.java) { override fun matchesSafely(item: TextView) = item.currentTextColor == expectedColor override fun describeTo(description: Description) { description.appendText("with text color:") @@ -26,7 +31,10 @@ class WithTextColor(private val expectedColor: Int) : BoundedMatcher(View::class.java) { +class WithBackgroundColor( + @ColorInt + private val expected: Int +) : BoundedMatcher(View::class.java) { override fun describeTo(description: Description) { description.appendText("with background color:") description.appendValue(expected) @@ -48,14 +56,16 @@ class WithoutBackgroundColor : BoundedMatcher(View::class.java) { } } -class WithChildViewCount(private val expectedCount: Int) : BoundedMatcher(ViewGroup::class.java) { +class WithChildViewCount(private val expectedCount: Int) : + BoundedMatcher(ViewGroup::class.java) { override fun matchesSafely(item: ViewGroup): Boolean = item.childCount == expectedCount override fun describeTo(description: Description) { description.appendText("ViewGroup with child-count = $expectedCount"); } } -class HasViewGroupChildViewWithText(private val pos: Int, val text: String) : BoundedMatcher(ViewGroup::class.java) { +class HasViewGroupChildViewWithText(private val pos: Int, val text: String) : + BoundedMatcher(ViewGroup::class.java) { private var actual: String? = null @@ -66,6 +76,7 @@ class HasViewGroupChildViewWithText(private val pos: Int, val text: String) : Bo actual = child.text.toString() return actual == text } + override fun describeTo(description: Description) { if (actual != null) { description.appendText("Should have text [$text] at position: $pos but was: $actual"); @@ -73,7 +84,8 @@ class HasViewGroupChildViewWithText(private val pos: Int, val text: String) : Bo } } -class HasChildViewWithText(private val pos: Int, val text: String, val target: Int) : BoundedMatcher(RecyclerView::class.java) { +class HasChildViewWithText(private val pos: Int, val text: String, val target: Int) : + BoundedMatcher(RecyclerView::class.java) { private var actual: String? = null @@ -84,6 +96,7 @@ class HasChildViewWithText(private val pos: Int, val text: String, val target: I actual = target.text.toString() return actual == text } + override fun describeTo(description: Description) { if (actual != null) { description.appendText("Should have text [$text] at position: $pos but was: $actual"); @@ -91,11 +104,16 @@ class HasChildViewWithText(private val pos: Int, val text: String, val target: I } } -class WithTextColorRes(private val expectedColorRes: Int) : BoundedMatcher(TextView::class.java) { +class WithTextColorRes( + @ColorRes + private val expectedColorRes: Int +) : + BoundedMatcher(TextView::class.java) { override fun matchesSafely(item: TextView): Boolean { val color = ContextCompat.getColor(item.context, expectedColorRes) return item.currentTextColor == color } + override fun describeTo(description: Description) { description.appendText("with text color:") description.appendValue(expectedColorRes)