1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-474 Editor | Enhancement | Support nested decoration for file block in state "done" (#2652)

This commit is contained in:
Evgenii Kozlov 2022-10-13 13:50:28 +03:00 committed by GitHub
parent 37d21a9ea5
commit 662eeabdfa
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 7 deletions

View file

@ -6,7 +6,10 @@ import android.text.format.Formatter
import android.text.style.ForegroundColorSpan
import android.text.style.RelativeSizeSpan
import android.view.View
import android.widget.FrameLayout
import android.widget.TextView
import androidx.core.view.updateLayoutParams
import com.anytypeio.anytype.core_ui.BuildConfig
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.common.SearchHighlightSpan
import com.anytypeio.anytype.core_ui.common.SearchTargetHighlightSpan
@ -14,13 +17,16 @@ import com.anytypeio.anytype.core_ui.databinding.ItemBlockFileBinding
import com.anytypeio.anytype.core_ui.extensions.color
import com.anytypeio.anytype.core_ui.extensions.getMimeIcon
import com.anytypeio.anytype.core_ui.features.editor.BlockViewDiffUtil
import com.anytypeio.anytype.core_ui.features.editor.decoration.DecoratableViewHolder
import com.anytypeio.anytype.core_ui.features.editor.decoration.EditorDecorationContainer
import com.anytypeio.anytype.core_utils.ext.dimen
import com.anytypeio.anytype.core_utils.ext.removeSpans
import com.anytypeio.anytype.presentation.editor.editor.Markup
import com.anytypeio.anytype.presentation.editor.editor.listener.ListenerType
import com.anytypeio.anytype.presentation.editor.editor.model.BlockView
import timber.log.Timber
class File(val binding: ItemBlockFileBinding) : Media(binding.root) {
class File(val binding: ItemBlockFileBinding) : Media(binding.root), DecoratableViewHolder {
override val container = binding.root
override val root: View = itemView
@ -29,8 +35,12 @@ class File(val binding: ItemBlockFileBinding) : Media(binding.root) {
private val name = binding.text
private val guideline = binding.guideline
override val decoratableContainer: EditorDecorationContainer
get() = binding.decorationContainer
init {
clickContainer.setOnTouchListener { v, e -> editorTouchProcessor.process(v, e) }
applyDefaultOffsets()
}
fun bind(item: BlockView.Media.File, clicked: (ListenerType) -> Unit) {
@ -104,7 +114,9 @@ class File(val binding: ItemBlockFileBinding) : Media(binding.root) {
}
override fun indentize(item: BlockView.Indentable) {
guideline.setGuidelineBegin(item.indent * dimen(R.dimen.indent))
if (!BuildConfig.NESTED_DECORATION_ENABLED) {
guideline.setGuidelineBegin(item.indent * dimen(R.dimen.indent))
}
}
override fun select(isSelected: Boolean) {
@ -118,9 +130,39 @@ class File(val binding: ItemBlockFileBinding) : Media(binding.root) {
if (payload.isSearchHighlightChanged) {
applySearchHighlight(item)
}
if (payload.isBackgroundColorChanged) {
if (payload.isBackgroundColorChanged && !BuildConfig.NESTED_DECORATION_ENABLED) {
applyBackground(item.background)
}
}
}
private fun applyDefaultOffsets() {
if (!BuildConfig.NESTED_DECORATION_ENABLED) {
container.updateLayoutParams<FrameLayout.LayoutParams> {
marginStart = dimen(R.dimen.default_document_item_padding_start)
marginEnd = dimen(R.dimen.default_document_item_padding_end)
topMargin = dimen(R.dimen.default_graphic_text_root_margin_top)
bottomMargin = dimen(R.dimen.default_graphic_text_root_margin_bottom)
}
}
}
override fun applyDecorations(decorations: List<BlockView.Decoration>) {
Timber.w("Trying to apply decorations $decorations")
if (BuildConfig.NESTED_DECORATION_ENABLED) {
decoratableContainer.decorate(decorations) { rect ->
binding.container.updateLayoutParams<FrameLayout.LayoutParams> {
marginStart = dimen(R.dimen.dp_8) + rect.left
marginEnd = dimen(R.dimen.dp_8) + rect.right
bottomMargin = if (rect.bottom > 0) {
rect.bottom
} else {
dimen(R.dimen.dp_2)
}
}
}
}
}
}

View file

@ -3,17 +3,22 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
style="@style/DefaultGraphicTextBlockRootStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:background="@color/anytype_background_green"
tools:context="com.anytypeio.anytype.core_ui.features.editor.holders.media.File">
<com.anytypeio.anytype.core_ui.features.editor.decoration.EditorDecorationContainer
android:id="@+id/decorationContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/container"
style="@style/DefaultGraphicTextBlockContainerStyle"
android:paddingStart="@dimen/default_document_content_padding_start"
android:paddingEnd="@dimen/default_document_content_padding_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/item_block_multi_select_mode_selector"
tools:background="@drawable/item_block_multi_select_selected">
<androidx.constraintlayout.widget.Guideline

View file

@ -644,7 +644,10 @@ class DefaultBlockViewRenderer @Inject constructor(
block = block,
parentScheme = parentScheme,
currentDecoration = DecorationData(
style = DecorationData.Style.Card,
style = if ((content.type == Content.File.Type.FILE || content.type == Content.File.Type.PDF) && content.state == Content.File.State.DONE)
DecorationData.Style.None
else
DecorationData.Style.Card,
background = block.parseThemeBackgroundColor()
)
)