mirror of
https://github.com/SimpleMobileTools/Simple-Keyboard.git
synced 2025-06-05 21:49:26 +02:00
Add autofill integration to the keyboard
* Activated autofill support for our input method in method.xml * Implemented required methods in our IME * Styled views as similar as possible to the clipboard item * Added InlineContentViewHorizontalScrollView which properly clips these views, since they are owned by another process and are usually drawn above our views This closes #199
This commit is contained in:
@ -10,6 +10,7 @@ import android.content.Intent
|
||||
import android.graphics.*
|
||||
import android.graphics.Paint.Align
|
||||
import android.graphics.drawable.*
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.Message
|
||||
@ -18,11 +19,14 @@ import android.util.TypedValue
|
||||
import android.view.*
|
||||
import android.view.animation.AccelerateInterpolator
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.PopupWindow
|
||||
import android.widget.TextView
|
||||
import android.widget.inline.InlineContentView
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.core.animation.doOnEnd
|
||||
import androidx.core.animation.doOnStart
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.*
|
||||
import androidx.emoji2.text.EmojiCompat
|
||||
import androidx.emoji2.text.EmojiCompat.EMOJI_SUPPORTED
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
@ -746,8 +750,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||
|
||||
private fun hideClipboardViews() {
|
||||
mToolbarHolder?.apply {
|
||||
clipboard_value_holder?.beGone()
|
||||
clipboard_value_holder?.alpha = 0f
|
||||
clipboard_value?.beGone()
|
||||
clipboard_value?.alpha = 0f
|
||||
clipboard_clear?.beGone()
|
||||
clipboard_clear?.alpha = 0f
|
||||
}
|
||||
@ -764,10 +768,10 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||
}
|
||||
|
||||
private fun toggleClipboardVisibility(show: Boolean) {
|
||||
if ((show && mToolbarHolder?.clipboard_value_holder!!.alpha == 0f) || (!show && mToolbarHolder?.clipboard_value_holder!!.alpha == 1f)) {
|
||||
if ((show && mToolbarHolder?.clipboard_value!!.alpha == 0f) || (!show && mToolbarHolder?.clipboard_value!!.alpha == 1f)) {
|
||||
val newAlpha = if (show) 1f else 0f
|
||||
val animations = ArrayList<ObjectAnimator>()
|
||||
val clipboardValueAnimation = ObjectAnimator.ofFloat(mToolbarHolder!!.clipboard_value_holder!!, "alpha", newAlpha)
|
||||
val clipboardValueAnimation = ObjectAnimator.ofFloat(mToolbarHolder!!.clipboard_value!!, "alpha", newAlpha)
|
||||
animations.add(clipboardValueAnimation)
|
||||
|
||||
val clipboardClearAnimation = ObjectAnimator.ofFloat(mToolbarHolder!!.clipboard_clear!!, "alpha", newAlpha)
|
||||
@ -779,13 +783,13 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||
animSet.interpolator = AccelerateInterpolator()
|
||||
animSet.doOnStart {
|
||||
if (show) {
|
||||
mToolbarHolder?.clipboard_value_holder?.beVisible()
|
||||
mToolbarHolder?.clipboard_value?.beVisible()
|
||||
mToolbarHolder?.clipboard_clear?.beVisible()
|
||||
}
|
||||
}
|
||||
animSet.doOnEnd {
|
||||
if (!show) {
|
||||
mToolbarHolder?.clipboard_value_holder?.beGone()
|
||||
mToolbarHolder?.clipboard_value?.beGone()
|
||||
mToolbarHolder?.clipboard_clear?.beGone()
|
||||
}
|
||||
}
|
||||
@ -1381,10 +1385,12 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||
|
||||
fun closeClipboardManager() {
|
||||
mClipboardManagerHolder?.clipboard_manager_holder?.beGone()
|
||||
mToolbarHolder?.suggestions_holder?.showAllInlineContentViews()
|
||||
}
|
||||
|
||||
private fun openClipboardManager() {
|
||||
mClipboardManagerHolder!!.clipboard_manager_holder.beVisible()
|
||||
mToolbarHolder?.suggestions_holder?.hideAllInlineContentViews()
|
||||
setupStoredClips()
|
||||
}
|
||||
|
||||
@ -1614,4 +1620,25 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||
}
|
||||
return keyColor
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
fun addToClipboardViews(it: InlineContentView, addToFront: Boolean = false) {
|
||||
if (mToolbarHolder?.autofill_suggestions_holder != null) {
|
||||
val newLayoutParams = LinearLayout.LayoutParams(it.layoutParams)
|
||||
newLayoutParams.updateMarginsRelative(start = resources.getDimensionPixelSize(R.dimen.normal_margin))
|
||||
it.layoutParams = newLayoutParams
|
||||
if (addToFront) {
|
||||
mToolbarHolder?.autofill_suggestions_holder?.addView(it, 0)
|
||||
} else {
|
||||
mToolbarHolder?.autofill_suggestions_holder?.addView(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
fun clearClipboardViews() {
|
||||
if (mToolbarHolder?.autofill_suggestions_holder != null) {
|
||||
mToolbarHolder?.autofill_suggestions_holder?.removeAllViews()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user