diff --git a/core-ui/build.gradle b/core-ui/build.gradle index 715f02b120..9fd7330b20 100644 --- a/core-ui/build.gradle +++ b/core-ui/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation applicationDependencies.appcompat implementation applicationDependencies.kotlin implementation applicationDependencies.coroutinesAndroid - implementation applicationDependencies.androidxCore + implementation libs.androidxCore implementation applicationDependencies.lifecycleRuntime implementation applicationDependencies.design diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/TextInputWidget.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/TextInputWidget.kt index 14e3b6944b..05c063c402 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/TextInputWidget.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/text/TextInputWidget.kt @@ -2,7 +2,10 @@ package com.anytypeio.anytype.core_ui.widgets.text import android.R.id.copy import android.R.id.paste +import android.content.ClipData +import android.content.ClipboardManager import android.content.Context +import android.content.Context.CLIPBOARD_SERVICE import android.graphics.Canvas import android.text.InputType import android.text.Spanned @@ -12,6 +15,9 @@ import android.util.AttributeSet import android.view.DragEvent import android.view.KeyEvent import android.view.MotionEvent +import android.view.inputmethod.EditorInfo +import android.view.inputmethod.InputConnection +import android.view.inputmethod.InputConnectionWrapper import androidx.appcompat.widget.AppCompatEditText import androidx.core.graphics.withTranslation import com.anytypeio.anytype.core_ui.R @@ -69,6 +75,15 @@ class TextInputWidget : AppCompatEditText { ) } + override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnectionWrapper? { + val defaultInputConnection = super.onCreateInputConnection(outAttrs) + return if (defaultInputConnection == null) { + defaultInputConnection + } else { + TextInputConnection(defaultInputConnection, false) + } + } + private val watchers: MutableList = mutableListOf() private var highlightDrawer: HighlightDrawer? = null @@ -299,4 +314,17 @@ class TextInputWidget : AppCompatEditText { companion object { val DEFAULT_INPUT_WIDGET_ACTION = BlockView.InputAction.NewLine } + + private inner class TextInputConnection( + target: InputConnection, mutable: Boolean + ) : InputConnectionWrapper(target, mutable) { + + private val clipboard = context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager + + override fun commitText(text: CharSequence, newCursorPosition: Int): Boolean { + clipboard.setPrimaryClip(ClipData.newPlainText(null, text)) + onTextContextMenuItem(paste) + return true + } + } } \ No newline at end of file diff --git a/dependencies.gradle b/dependencies.gradle index efe8a0c397..f6a2b32ab9 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,6 @@ ext { kotlinx_serialization_json_version = '1.4.0' // AndroidX - androidx_core_version = '1.7.0' androidx_core_ktx_version = '1.7.0' androidx_test_core_version = '1.4.0' androidx_core_testing_version = '2.1.0' @@ -92,7 +91,6 @@ ext { kotlin: "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version", coroutines: "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version", coroutinesAndroid: "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version", - androidxCore: "androidx.core:core-ktx:$androidx_core_version", fragment: "androidx.fragment:fragment-ktx:$fragment_version", navigation: "androidx.navigation:navigation-fragment-ktx:$navigation_version", navigationUi: "androidx.navigation:navigation-ui-ktx:$navigation_version", diff --git a/device/build.gradle b/device/build.gradle index 49a954df03..9a45363206 100644 --- a/device/build.gradle +++ b/device/build.gradle @@ -11,7 +11,7 @@ dependencies { implementation applicationDependencies.kotlin implementation applicationDependencies.coroutinesAndroid - implementation applicationDependencies.androidxCore + implementation libs.androidxCore implementation applicationDependencies.timber diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a337ce85c0..c1895f03bd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,10 @@ [versions] middleware_version = "v0.24.0" +androidx_core_version = "1.7.0" [libraries] middleware = { module = "io.anytype:android-mw", version.ref = "middleware_version" } +androidxCore = { module = "androidx.core:core-ktx", version.ref = "androidx_core_version" } agp = { module = "com.android.tools.build:gradle", version = "7.3.0" } [bundles] diff --git a/library-page-icon-picker-widget/build.gradle b/library-page-icon-picker-widget/build.gradle index 539c287a9f..6454d7b1e8 100644 --- a/library-page-icon-picker-widget/build.gradle +++ b/library-page-icon-picker-widget/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation applicationDependencies.appcompat implementation applicationDependencies.kotlin implementation applicationDependencies.coroutinesAndroid - implementation applicationDependencies.androidxCore + implementation libs.androidxCore implementation applicationDependencies.emojiCompat implementation applicationDependencies.design diff --git a/library-syntax-highlighter/build.gradle b/library-syntax-highlighter/build.gradle index 0cf44ffedb..9cd9c746a1 100644 --- a/library-syntax-highlighter/build.gradle +++ b/library-syntax-highlighter/build.gradle @@ -11,7 +11,7 @@ dependencies { implementation applicationDependencies.appcompat implementation applicationDependencies.kotlin implementation applicationDependencies.coroutinesAndroid - implementation applicationDependencies.androidxCore + implementation libs.androidxCore implementation applicationDependencies.timber implementation applicationDependencies.kotlinxSerializationJson diff --git a/sample/build.gradle b/sample/build.gradle index 0a722ac070..7cafc3a2f1 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation applicationDependencies.glide implementation applicationDependencies.coroutinesAndroid implementation applicationDependencies.constraintLayout - implementation applicationDependencies.androidxCore + implementation libs.androidxCore implementation applicationDependencies.timber implementation applicationDependencies.fragment implementation applicationDependencies.design diff --git a/test/android-utils/build.gradle b/test/android-utils/build.gradle index 27428efebd..ae09a72332 100644 --- a/test/android-utils/build.gradle +++ b/test/android-utils/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation mainApplication.appcompat implementation mainApplication.kotlin implementation mainApplication.coroutinesAndroid - implementation mainApplication.androidxCore + implementation libs.androidxCore implementation mainApplication.design implementation mainApplication.recyclerView } \ No newline at end of file