mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-07 21:37:02 +09:00
Editor | Fix | Delete colors from ThemeColor.kt (#2284)
This commit is contained in:
parent
4132e0cb4e
commit
39046f787f
27 changed files with 196 additions and 154 deletions
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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<TestRelationOptionValueDVAddFragment> {
|
||||
return launchFragmentInContainer<TestRelationOptionValueDVAddFragment>(
|
||||
return launchFragmentInContainer(
|
||||
fragmentArgs = args,
|
||||
themeResId = R.style.AppTheme
|
||||
)
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<Id, Block.Fields> = 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)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
|
@ -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))
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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<CheckedCheckboxColorSpan>(0)
|
||||
|
|
|
@ -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<Any> = mutableListOf(
|
||||
|
@ -74,7 +75,7 @@ class BlockAdapterTextColorTest : BlockAdapterTestSetup() {
|
|||
|
||||
assertEquals(
|
||||
actual = holder.content.currentTextColor,
|
||||
expected = ThemeColor.DEFAULT.text
|
||||
expected = context.resources.dark(ThemeColor.DEFAULT)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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!!)
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
);
|
||||
}
|
|
@ -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<String>? = 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
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)))
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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<View, TextView>(TextView::class.java) {
|
||||
class WithTextColor(
|
||||
@ColorInt
|
||||
private val expectedColor: Int
|
||||
) :
|
||||
BoundedMatcher<View, TextView>(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, TextV
|
|||
}
|
||||
}
|
||||
|
||||
class WithBackgroundColor(private val expected: Int) : BoundedMatcher<View, View>(View::class.java) {
|
||||
class WithBackgroundColor(
|
||||
@ColorInt
|
||||
private val expected: Int
|
||||
) : BoundedMatcher<View, View>(View::class.java) {
|
||||
override fun describeTo(description: Description) {
|
||||
description.appendText("with background color:")
|
||||
description.appendValue(expected)
|
||||
|
@ -48,14 +56,16 @@ class WithoutBackgroundColor : BoundedMatcher<View, View>(View::class.java) {
|
|||
}
|
||||
}
|
||||
|
||||
class WithChildViewCount(private val expectedCount: Int) : BoundedMatcher<View, ViewGroup>(ViewGroup::class.java) {
|
||||
class WithChildViewCount(private val expectedCount: Int) :
|
||||
BoundedMatcher<View, ViewGroup>(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<View, ViewGroup>(ViewGroup::class.java) {
|
||||
class HasViewGroupChildViewWithText(private val pos: Int, val text: String) :
|
||||
BoundedMatcher<View, ViewGroup>(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<View, RecyclerView>(RecyclerView::class.java) {
|
||||
class HasChildViewWithText(private val pos: Int, val text: String, val target: Int) :
|
||||
BoundedMatcher<View, RecyclerView>(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<View, TextView>(TextView::class.java) {
|
||||
class WithTextColorRes(
|
||||
@ColorRes
|
||||
private val expectedColorRes: Int
|
||||
) :
|
||||
BoundedMatcher<View, TextView>(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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue