diff --git a/app/src/main/java/com/agileburo/anytype/ui/page/PageFragment.kt b/app/src/main/java/com/agileburo/anytype/ui/page/PageFragment.kt index 26ba574852..d783bdaa3b 100644 --- a/app/src/main/java/com/agileburo/anytype/ui/page/PageFragment.kt +++ b/app/src/main/java/com/agileburo/anytype/ui/page/PageFragment.kt @@ -189,7 +189,7 @@ open class PageFragment : onProfileIconClicked = vm::onProfileIconClicked, onTogglePlaceholderClicked = vm::onTogglePlaceholderClicked, onToggleClicked = vm::onToggleClicked, - onMarkupActionClicked = vm::onMarkupActionClicked, + onContextMenuStyleClick = vm::onEditorContextMenuStyleClicked, onTitleTextInputClicked = vm::onTitleTextInputClicked, onClickListener = vm::onClickListener, clipboardInterceptor = this, diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Bulleted.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Bulleted.kt index 02cbf368a3..f682e51b72 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Bulleted.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Bulleted.kt @@ -19,7 +19,7 @@ import kotlinx.android.synthetic.main.item_block_bulleted.view.* class Bulleted( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Text(view), SupportNesting { val indent: View = itemView.bulletIndent @@ -29,7 +29,7 @@ class Bulleted( override val root: View = itemView init { - setup(onMarkupActionClicked, ContextMenuType.TEXT) + setup(onContextMenuStyleClick) } fun bind( diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Checkbox.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Checkbox.kt index 572b41dc9f..070a22561e 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Checkbox.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Checkbox.kt @@ -20,7 +20,7 @@ import kotlinx.android.synthetic.main.item_block_checkbox.view.* class Checkbox( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Text(view), SupportNesting { var mode = BlockView.Mode.EDIT @@ -31,7 +31,7 @@ class Checkbox( override val root: View = itemView init { - setup(onMarkupActionClicked, ContextMenuType.TEXT) + setup(onContextMenuStyleClick) } fun bind( diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderOne.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderOne.kt index 23f635ff25..674a0d111f 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderOne.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderOne.kt @@ -9,7 +9,7 @@ import kotlinx.android.synthetic.main.item_block_header_one.view.* class HeaderOne( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Header(view) { override val header: TextInputWidget = itemView.headerOne @@ -17,7 +17,7 @@ class HeaderOne( override val root: View = itemView init { - setup(onMarkupActionClicked, ContextMenuType.HEADER) + setup(onContextMenuStyleClick) } override fun getMentionImageSizeAndPadding(): Pair = with(itemView) { diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderThree.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderThree.kt index 873edfbb28..ea438d9503 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderThree.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderThree.kt @@ -9,7 +9,7 @@ import kotlinx.android.synthetic.main.item_block_header_three.view.* class HeaderThree( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Header(view) { override val header: TextInputWidget = itemView.headerThree @@ -17,7 +17,7 @@ class HeaderThree( override val root: View = itemView init { - setup(onMarkupActionClicked, ContextMenuType.HEADER) + setup(onContextMenuStyleClick) } override fun getMentionImageSizeAndPadding(): Pair = with(itemView) { diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderTwo.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderTwo.kt index 9caa58964c..66c6ebf5cd 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderTwo.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/HeaderTwo.kt @@ -9,7 +9,7 @@ import kotlinx.android.synthetic.main.item_block_header_two.view.* class HeaderTwo( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Header(view) { override val header: TextInputWidget = itemView.headerTwo @@ -17,7 +17,7 @@ class HeaderTwo( override val root: View = itemView init { - setup(onMarkupActionClicked, ContextMenuType.HEADER) + setup(onContextMenuStyleClick) } override fun getMentionImageSizeAndPadding(): Pair = with(itemView) { diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Highlight.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Highlight.kt index 1abb4a3c51..456e059e2e 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Highlight.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Highlight.kt @@ -17,7 +17,7 @@ import kotlinx.android.synthetic.main.item_block_highlight.view.* class Highlight( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Text(view), BlockViewHolder.IndentableHolder { override val content: TextInputWidget = itemView.highlightContent @@ -27,7 +27,7 @@ class Highlight( init { content.setSpannableFactory(DefaultSpannableFactory()) - setup(onMarkupActionClicked, ContextMenuType.HIGHLIGHT) + setup(onContextMenuStyleClick) } fun bind( diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Numbered.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Numbered.kt index d8c9691a5c..e9f185774e 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Numbered.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Numbered.kt @@ -16,7 +16,7 @@ import kotlinx.android.synthetic.main.item_block_numbered.view.* class Numbered( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Text(view), SupportNesting { private val container = itemView.numberedBlockContentContainer @@ -25,7 +25,7 @@ class Numbered( override val root: View = itemView init { - setup(onMarkupActionClicked, ContextMenuType.TEXT) + setup(onContextMenuStyleClick) } fun bind( diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Paragraph.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Paragraph.kt index cfcf269123..2f0c351638 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Paragraph.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Paragraph.kt @@ -13,14 +13,14 @@ import kotlinx.android.synthetic.main.item_block_text.view.* class Paragraph( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Text(view), SupportNesting { override val root: View = itemView override val content: TextInputWidget = itemView.textContent init { - setup(onMarkupActionClicked, ContextMenuType.TEXT) + setup(onContextMenuStyleClick) } fun bind( diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Toggle.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Toggle.kt index a97f382c52..6954722a45 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Toggle.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/editor/holders/text/Toggle.kt @@ -13,7 +13,7 @@ import kotlinx.android.synthetic.main.item_block_toggle.view.* class Toggle( view: View, - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit + onContextMenuStyleClick: (IntRange) -> Unit ) : Text(view), SupportNesting { private var mode = BlockView.Mode.EDIT @@ -26,7 +26,7 @@ class Toggle( override val root: View = itemView init { - setup(onMarkupActionClicked, ContextMenuType.TEXT) + setup(onContextMenuStyleClick) } fun bind( 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 a6e53216f3..1dc022b6e1 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 @@ -88,7 +88,7 @@ class BlockAdapter( private val onProfileIconClicked: () -> Unit, private val onTogglePlaceholderClicked: (String) -> Unit, private val onToggleClicked: (String) -> Unit, - private val onMarkupActionClicked: (Markup.Type, IntRange) -> Unit, + private val onContextMenuStyleClick: (IntRange) -> Unit, private val clipboardInterceptor: ClipboardInterceptor, private val onMentionEvent: (MentionEvent) -> Unit ) : RecyclerView.Adapter() { @@ -107,7 +107,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } HOLDER_TITLE -> { @@ -135,7 +135,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } HOLDER_HEADER_TWO -> { @@ -145,7 +145,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } HOLDER_HEADER_THREE -> { @@ -155,7 +155,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } HOLDER_CODE_SNIPPET -> { @@ -174,7 +174,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } HOLDER_BULLET -> { @@ -184,7 +184,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } HOLDER_NUMBERED -> { @@ -194,7 +194,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } HOLDER_TOGGLE -> { @@ -204,7 +204,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } HOLDER_FILE -> { @@ -367,7 +367,7 @@ class BlockAdapter( parent, false ), - onMarkupActionClicked = onMarkupActionClicked + onContextMenuStyleClick = onContextMenuStyleClick ) } else -> throw IllegalStateException("Unexpected view type: $viewType") diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/TextBlockHolder.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/TextBlockHolder.kt index f00e706444..ff44c64c5c 100644 --- a/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/TextBlockHolder.kt +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/features/page/TextBlockHolder.kt @@ -7,8 +7,7 @@ import com.agileburo.anytype.core_ui.extensions.cursorYBottomCoordinate import com.agileburo.anytype.core_ui.extensions.preserveSelection import com.agileburo.anytype.core_ui.extensions.range import com.agileburo.anytype.core_ui.features.editor.holders.`interface`.TextHolder -import com.agileburo.anytype.core_ui.menu.ContextMenuType -import com.agileburo.anytype.core_ui.menu.TextBlockContextMenu +import com.agileburo.anytype.core_ui.menu.EditorContextMenu import com.agileburo.anytype.core_ui.tools.DefaultSpannableFactory import com.agileburo.anytype.core_ui.tools.DefaultTextWatcher import com.agileburo.anytype.core_ui.tools.MentionTextWatcher @@ -23,12 +22,11 @@ import timber.log.Timber interface TextBlockHolder : TextHolder { fun setup( - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit, - menuType: ContextMenuType + onContextMenuStyleClick: (IntRange) -> Unit ) { with(content) { setSpannableFactory(DefaultSpannableFactory()) - setupSelectionActionMode(onMarkupActionClicked, menuType) + setupSelectionActionMode(onContextMenuStyleClick) } } @@ -211,29 +209,17 @@ interface TextBlockHolder : TextHolder { } private fun setupSelectionActionMode( - onMarkupActionClicked: (Markup.Type, IntRange) -> Unit, - menuType: ContextMenuType + onContextMenuStyleClick: (IntRange) -> Unit ) { with(content) { - customSelectionActionModeCallback = TextBlockContextMenu( - menuType = menuType, - onTextColorClicked = { mode -> + customSelectionActionModeCallback = EditorContextMenu( + onStyleClick = { preserveSelection { content.hideKeyboard() - onMarkupActionClicked(Markup.Type.TEXT_COLOR, content.range()) - mode.finish() + onContextMenuStyleClick.invoke(content.range()) + //todo maybe add mode.finish } - false - }, - onBackgroundColorClicked = { mode -> - preserveSelection { - content.hideKeyboard() - onMarkupActionClicked(Markup.Type.BACKGROUND_COLOR, content.range()) - mode.finish() - } - false - }, - onMenuItemClicked = { onMarkupActionClicked(it, content.range()) } + } ) } } diff --git a/core-ui/src/main/java/com/agileburo/anytype/core_ui/menu/EditorContextMenu.kt b/core-ui/src/main/java/com/agileburo/anytype/core_ui/menu/EditorContextMenu.kt new file mode 100644 index 0000000000..3f6f2ca68c --- /dev/null +++ b/core-ui/src/main/java/com/agileburo/anytype/core_ui/menu/EditorContextMenu.kt @@ -0,0 +1,55 @@ +package com.agileburo.anytype.core_ui.menu + +import android.os.Build +import android.view.ActionMode +import android.view.Menu +import android.view.MenuItem +import com.agileburo.anytype.core_ui.R + +class EditorContextMenu( + private val onStyleClick: () -> Unit +) : ActionMode.Callback2(){ + + override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + menu.apply { + add(0, android.R.id.textAssist, 0, TITLE_STYLE) + } + } else { + menu.apply { + add(0, R.id.menuStyle, 3, TITLE_STYLE) + } + } + return true + } + + override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean = + when (item.itemId) { + android.R.id.textAssist -> { + when (item.title) { + TITLE_STYLE -> { + onStyleClick() + //mode.finish() + true + } + else -> false + } + } + R.id.menuStyle -> { + onStyleClick() + //mode.finish() + true + } + else -> false + } + + override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean { + return false + } + + override fun onDestroyActionMode(mode: ActionMode?) {} + + companion object { + const val TITLE_STYLE = "Style" + } +} \ No newline at end of file diff --git a/core-ui/src/main/res/values/ids.xml b/core-ui/src/main/res/values/ids.xml new file mode 100644 index 0000000000..4dc6599a90 --- /dev/null +++ b/core-ui/src/main/res/values/ids.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/core-ui/src/test/java/com/agileburo/anytype/core_ui/BlockAdapterTest.kt b/core-ui/src/test/java/com/agileburo/anytype/core_ui/BlockAdapterTest.kt index 0962a8fca7..c6bdbc4aa0 100644 --- a/core-ui/src/test/java/com/agileburo/anytype/core_ui/BlockAdapterTest.kt +++ b/core-ui/src/test/java/com/agileburo/anytype/core_ui/BlockAdapterTest.kt @@ -3367,7 +3367,7 @@ class BlockAdapterTest { onTextBlockTextChanged = {}, onTitleTextChanged = onTitleTextChanged, onEndLineEnterTitleClicked = onEndLineEnterTitleClicked, - onMarkupActionClicked = { _, _ -> }, + onContextMenuStyleClick = {}, onTitleTextInputClicked = {}, onClickListener = {}, clipboardInterceptor = clipboardInterceptor, diff --git a/core-ui/src/test/java/com/agileburo/anytype/core_ui/HeaderBlockTest.kt b/core-ui/src/test/java/com/agileburo/anytype/core_ui/HeaderBlockTest.kt index d199a7268b..9815cce85f 100644 --- a/core-ui/src/test/java/com/agileburo/anytype/core_ui/HeaderBlockTest.kt +++ b/core-ui/src/test/java/com/agileburo/anytype/core_ui/HeaderBlockTest.kt @@ -374,7 +374,7 @@ class HeaderBlockTest { onTextBlockTextChanged = {}, onTitleTextChanged = onTitleTextChanged, onEndLineEnterTitleClicked = onEndLineEnterTitleClicked, - onMarkupActionClicked = { _, _ -> }, + onContextMenuStyleClick = {}, onTitleTextInputClicked = {}, onClickListener = {}, clipboardInterceptor = clipboardInterceptor, diff --git a/core-ui/src/test/java/com/agileburo/anytype/core_ui/HighlightingBlockTest.kt b/core-ui/src/test/java/com/agileburo/anytype/core_ui/HighlightingBlockTest.kt index 3b9d3b74f7..e4484e4b36 100644 --- a/core-ui/src/test/java/com/agileburo/anytype/core_ui/HighlightingBlockTest.kt +++ b/core-ui/src/test/java/com/agileburo/anytype/core_ui/HighlightingBlockTest.kt @@ -111,7 +111,7 @@ class HighlightingBlockTest { onTextBlockTextChanged = {}, onTitleTextChanged = onTitleTextChanged, onEndLineEnterTitleClicked = onEndLineEnterTitleClicked, - onMarkupActionClicked = { _, _ -> }, + onContextMenuStyleClick = {}, onTitleTextInputClicked = {}, onClickListener = {}, clipboardInterceptor = clipboardInterceptor, diff --git a/core-ui/src/test/java/com/agileburo/anytype/core_ui/features/editor/BlockAdapterCursorBindingTest.kt b/core-ui/src/test/java/com/agileburo/anytype/core_ui/features/editor/BlockAdapterCursorBindingTest.kt index f4735d7948..729627e5a3 100644 --- a/core-ui/src/test/java/com/agileburo/anytype/core_ui/features/editor/BlockAdapterCursorBindingTest.kt +++ b/core-ui/src/test/java/com/agileburo/anytype/core_ui/features/editor/BlockAdapterCursorBindingTest.kt @@ -375,7 +375,7 @@ class BlockAdapterCursorBindingTest { onTextBlockTextChanged = {}, onTitleTextChanged = onTitleTextChanged, onEndLineEnterTitleClicked = onEndLineEnterTitleClicked, - onMarkupActionClicked = { _, _ -> }, + onContextMenuStyleClick = {}, onTitleTextInputClicked = {}, onClickListener = {}, clipboardInterceptor = clipboardInterceptor, diff --git a/core-ui/src/test/java/com/agileburo/anytype/core_ui/features/editor/BlockAdapterTestSetup.kt b/core-ui/src/test/java/com/agileburo/anytype/core_ui/features/editor/BlockAdapterTestSetup.kt index df65222c2d..f2014b5644 100644 --- a/core-ui/src/test/java/com/agileburo/anytype/core_ui/features/editor/BlockAdapterTestSetup.kt +++ b/core-ui/src/test/java/com/agileburo/anytype/core_ui/features/editor/BlockAdapterTestSetup.kt @@ -47,7 +47,7 @@ open class BlockAdapterTestSetup { onTextBlockTextChanged = onTextBlockTextChanged, onTitleTextChanged = onTitleTextChanged, onEndLineEnterTitleClicked = onEndLineEnterTitleClicked, - onMarkupActionClicked = { _, _ -> }, + onContextMenuStyleClick = {}, onTitleTextInputClicked = {}, onClickListener = {}, clipboardInterceptor = clipboardInterceptor, 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 f7f7886adf..daf6a784b3 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 @@ -804,6 +804,19 @@ class PageViewModel( ) } + fun onEditorContextMenuStyleClicked(selection: IntRange) { + val target = blocks.first { it.id == orchestrator.stores.focus.current().id } + val config = target.getStyleConfig(focus = true, selection = selection) + _error.value = "Style menu clicked" +// controlPanelInteractor.onEvent( +// ControlPanelMachine.Event.OnMarkupContextMenuStyleClicked( +// target = target, +// selection = selection, +// config = config +// ) +// ) + } + fun onMarkupActionClicked(markup: Markup.Type, selection: IntRange) { when (markup) { Markup.Type.BACKGROUND_COLOR -> {