diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d35420155..4466249d1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # Change log for Android @Anytype app. -## Version 0.0.45 (WIP) +## Version 0.0.46 (WIP) + +### New features 🚀 + +* + +### Fixes & tech 🚒 + +* Divider block should be selectable in multi-select and scroll-and-move mode (#778) + +## Version 0.0.45 + +### New features 🚀 * Test flight for turn-into restrictions in edit-mode and multi-select mode (#376) * Styling panel | Switching between block-mode and markup-mode based on selection changes (#594) diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/extensions/BlockExtension.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/extensions/BlockExtension.kt index b6d47f8d30..cf9e898ea7 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/extensions/BlockExtension.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/extensions/BlockExtension.kt @@ -8,7 +8,6 @@ fun BlockView.updateSelection(newSelection: Boolean) = when (this) { is BlockView.Text.Header.Two -> copy(isSelected = newSelection) is BlockView.Text.Header.Three -> copy(isSelected = newSelection) is BlockView.Text.Highlight -> copy(isSelected = newSelection) - is BlockView.Code -> copy(isSelected = newSelection) is BlockView.Text.Checkbox -> copy(isSelected = newSelection) is BlockView.Text.Bulleted -> copy(isSelected = newSelection) is BlockView.Text.Numbered -> copy(isSelected = newSelection) @@ -29,5 +28,7 @@ fun BlockView.updateSelection(newSelection: Boolean) = when (this) { is BlockView.MediaPlaceholder.Picture -> copy(isSelected = newSelection) is BlockView.Error.Picture -> copy(isSelected = newSelection) is BlockView.Upload.Picture -> copy(isSelected = newSelection) + is BlockView.Divider -> copy(isSelected = newSelection) + is BlockView.Code -> copy(isSelected = newSelection) else -> this } \ No newline at end of file diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/other/Divider.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/other/Divider.kt index ccd022a1f9..20ada2ccf6 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/other/Divider.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/other/Divider.kt @@ -1,22 +1,38 @@ package com.agileburo.anytype.core_ui.features.editor.holders.other import android.view.View +import android.widget.FrameLayout +import androidx.core.view.updateLayoutParams +import com.agileburo.anytype.core_ui.R import com.agileburo.anytype.core_ui.features.page.BlockView import com.agileburo.anytype.core_ui.features.page.BlockViewHolder import com.agileburo.anytype.core_ui.features.page.ListenerType import com.agileburo.anytype.core_ui.widgets.text.EditorLongClickListener +import com.agileburo.anytype.core_utils.ext.dimen +import kotlinx.android.synthetic.main.item_block_divider.view.* -class Divider(view: View) : BlockViewHolder(view) { +class Divider(view: View) : BlockViewHolder(view), BlockViewHolder.IndentableHolder { + + val divider: View get() = itemView.divider fun bind( item: BlockView.Divider, clicked: (ListenerType) -> Unit - ) { - itemView.setOnLongClickListener( + ) = with(itemView) { + indentize(item) + isSelected = item.isSelected + setOnClickListener { clicked(ListenerType.DividerClick(item.id)) } + setOnLongClickListener( EditorLongClickListener( t = item.id, click = { onBlockLongClick(itemView, it, clicked) } ) ) } + + override fun indentize(item: BlockView.Indentable) { + divider.updateLayoutParams { + marginStart = item.indent * dimen(R.dimen.indent) + } + } } \ No newline at end of file diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockAdapter.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockAdapter.kt index 220cde08b0..0d501a7910 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockAdapter.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockAdapter.kt @@ -586,6 +586,7 @@ class BlockAdapter( onSelectionChanged = onSelectionChanged ) } + is Divider -> onBindViewHolder(holder, position) else -> throw IllegalStateException("Unexpected view holder: $holder") } } diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockView.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockView.kt index e822098b3b..39c5ac5551 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockView.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/BlockView.kt @@ -711,8 +711,10 @@ sealed class BlockView : ViewType, Parcelable { */ @Parcelize data class Divider( - override val id: String - ) : BlockView() { + override val id: String, + override val isSelected: Boolean = false, + override val indent: Int = 0 + ) : BlockView(), Selectable, Indentable { override fun getViewType() = HOLDER_DIVIDER } diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/ListenerType.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/ListenerType.kt index 01340f3970..0eead91efd 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/ListenerType.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/ListenerType.kt @@ -37,4 +37,6 @@ sealed class ListenerType { data class Page(val target: String): ListenerType() data class Mention(val target: String): ListenerType() + + data class DividerClick(val target: String) : ListenerType() } \ No newline at end of file diff --git a/core-ui/src/main/res/layout/item_block_divider.xml b/core-ui/src/main/res/layout/item_block_divider.xml index fb9edd184e..e7747ed454 100644 --- a/core-ui/src/main/res/layout/item_block_divider.xml +++ b/core-ui/src/main/res/layout/item_block_divider.xml @@ -1,6 +1,10 @@ \ No newline at end of file diff --git a/presentation/src/main/java/com/agileburo/anytype/presentation/page/PageViewModel.kt b/presentation/src/main/java/com/agileburo/anytype/presentation/page/PageViewModel.kt index 56d422b64d..0f112c7e19 100644 --- a/presentation/src/main/java/com/agileburo/anytype/presentation/page/PageViewModel.kt +++ b/presentation/src/main/java/com/agileburo/anytype/presentation/page/PageViewModel.kt @@ -1586,6 +1586,9 @@ class PageViewModel( is Content.File -> { addNewBlockAtTheEnd() } + is Content.Divider -> { + addNewBlockAtTheEnd() + } else -> { Timber.d("Outside-click has been ignored.") } @@ -1955,6 +1958,12 @@ class PageViewModel( ListenerType.TitleBlock -> { //Todo block view refactoring } + is ListenerType.DividerClick -> { + when (mode) { + EditorMode.MULTI_SELECT -> onBlockMultiSelectClicked(clicked.target) + else -> Unit + } + } } fun onPlusButtonPressed() { diff --git a/presentation/src/main/java/com/agileburo/anytype/presentation/page/render/DefaultBlockViewRenderer.kt b/presentation/src/main/java/com/agileburo/anytype/presentation/page/render/DefaultBlockViewRenderer.kt index 1d50aa0f2b..048c8cb8ca 100644 --- a/presentation/src/main/java/com/agileburo/anytype/presentation/page/render/DefaultBlockViewRenderer.kt +++ b/presentation/src/main/java/com/agileburo/anytype/presentation/page/render/DefaultBlockViewRenderer.kt @@ -176,7 +176,7 @@ class DefaultBlockViewRenderer( } is Content.Divider -> { counter.reset() - result.add(divider(block)) + result.add(divider(block, indent)) } is Content.Link -> { counter.reset() @@ -486,7 +486,13 @@ class DefaultBlockViewRenderer( mode = if (mode == EditorMode.EDITING) BlockView.Mode.EDIT else BlockView.Mode.READ ) - private fun divider(block: Block) = BlockView.Divider(id = block.id) + private fun divider( + block: Block, + indent: Int + ) = BlockView.Divider( + id = block.id, + indent = indent + ) private fun file( mode: EditorMode,