diff --git a/clipboard/src/main/java/com/anytypeio/anytype/clipboard/AnytypeClipboard.kt b/clipboard/src/main/java/com/anytypeio/anytype/clipboard/AnytypeClipboard.kt index dd55a76bbf..c548a47978 100644 --- a/clipboard/src/main/java/com/anytypeio/anytype/clipboard/AnytypeClipboard.kt +++ b/clipboard/src/main/java/com/anytypeio/anytype/clipboard/AnytypeClipboard.kt @@ -13,10 +13,9 @@ class AnytypeClipboard( private val cm: ClipboardManager ) : ClipboardDataStore.System { - override suspend fun put(text: String, html: String?) { - + override suspend fun put(text: String, html: String?, ignoreHtml: Boolean) { val uri = Uri.parse(ANYTYPE_CLIPBOARD_URI) - if (html != null) + if (!ignoreHtml && html != null) cm.setPrimaryClip( ClipData.newHtmlText(ANYTYPE_CLIPBOARD_LABEL, text, html).apply { addItem(ClipData.Item(uri)) diff --git a/clipboard/src/test/java/com/anytypeio/anytype/clipboard/AndroidClipboardTest.kt b/clipboard/src/test/java/com/anytypeio/anytype/clipboard/AndroidClipboardTest.kt index 23306deeaa..4d4c2ddfc4 100644 --- a/clipboard/src/test/java/com/anytypeio/anytype/clipboard/AndroidClipboardTest.kt +++ b/clipboard/src/test/java/com/anytypeio/anytype/clipboard/AndroidClipboardTest.kt @@ -37,7 +37,8 @@ class AndroidClipboardTest { runBlocking { clipboard.put( text = text, - html = null + html = null, + ignoreHtml = MockDataFactory.randomBoolean() ) } @@ -50,6 +51,33 @@ class AndroidClipboardTest { assertNotNull(cm.primaryClip?.getItemAt(1)?.uri) } + @Test + fun `should put text, ignore html and put uri as second item`() { + val text = MockDataFactory.randomString() + val html = MockDataFactory.randomString() + + runBlocking { + clipboard.put( + text = text, + html = html, + ignoreHtml = true + ) + } + + assertEquals( + expected = text, + actual = cm.primaryClip?.getItemAt(0)?.text + ) + + assertEquals( + expected = null, + actual = cm.primaryClip?.getItemAt(0)?.htmlText + ) + + assertNull(cm.primaryClip?.getItemAt(0)?.uri) + assertNotNull(cm.primaryClip?.getItemAt(1)?.uri) + } + @Test fun `should put text, html as first item and uri as second item`() { val text = MockDataFactory.randomString() @@ -58,7 +86,8 @@ class AndroidClipboardTest { runBlocking { clipboard.put( text = text, - html = html + html = html, + ignoreHtml = false ) } diff --git a/data/src/main/java/com/anytypeio/anytype/data/auth/repo/clipboard/ClipboardDataRepository.kt b/data/src/main/java/com/anytypeio/anytype/data/auth/repo/clipboard/ClipboardDataRepository.kt index 67ec25c0b8..c6dca6ec5a 100644 --- a/data/src/main/java/com/anytypeio/anytype/data/auth/repo/clipboard/ClipboardDataRepository.kt +++ b/data/src/main/java/com/anytypeio/anytype/data/auth/repo/clipboard/ClipboardDataRepository.kt @@ -14,7 +14,8 @@ class ClipboardDataRepository( ) factory.system.put( text = text, - html = html + html = html, + ignoreHtml = true ) } diff --git a/data/src/main/java/com/anytypeio/anytype/data/auth/repo/clipboard/ClipboardDataStore.kt b/data/src/main/java/com/anytypeio/anytype/data/auth/repo/clipboard/ClipboardDataStore.kt index 0766ad4b12..744b7e3535 100644 --- a/data/src/main/java/com/anytypeio/anytype/data/auth/repo/clipboard/ClipboardDataStore.kt +++ b/data/src/main/java/com/anytypeio/anytype/data/auth/repo/clipboard/ClipboardDataStore.kt @@ -20,7 +20,7 @@ interface ClipboardDataStore { /** * Stores copied [text] and optionally a [html] representation on the systen clipboard. */ - suspend fun put(text: String, html: String?) + suspend fun put(text: String, html: String?, ignoreHtml: Boolean) /** * @return current clip on the clipboard. diff --git a/middleware/src/main/java/com/anytypeio/anytype/middleware/mappers/ToMiddlewareModelMappers.kt b/middleware/src/main/java/com/anytypeio/anytype/middleware/mappers/ToMiddlewareModelMappers.kt index 8d762b25bf..08f2071ef9 100644 --- a/middleware/src/main/java/com/anytypeio/anytype/middleware/mappers/ToMiddlewareModelMappers.kt +++ b/middleware/src/main/java/com/anytypeio/anytype/middleware/mappers/ToMiddlewareModelMappers.kt @@ -239,7 +239,13 @@ fun Block.Content.Text.Mark.toMiddlewareModel(): MBMark = when (type) { param_ = param.orEmpty() ) } - else -> throw IllegalStateException("Unsupported mark type: ${type.name}") + Block.Content.Text.Mark.Type.EMOJI -> { + MBMark( + range = range.range(), + type = MBMarkType.Emoji, + param_ = param.orEmpty() + ) + } } fun IntRange.range(): Range = Range(from = first, to = last)