@@ -10,6 +10,7 @@ import android.content.Intent
1010import android.graphics.*
1111import android.graphics.Paint.Align
1212import android.graphics.drawable.*
13+ import android.os.Build
1314import android.os.Handler
1415import android.os.Looper
1516import android.os.Message
@@ -18,11 +19,14 @@ import android.util.TypedValue
1819import android.view.*
1920import android.view.animation.AccelerateInterpolator
2021import android.view.inputmethod.EditorInfo
22+ import android.widget.LinearLayout
2123import android.widget.PopupWindow
2224import android.widget.TextView
25+ import android.widget.inline.InlineContentView
26+ import androidx.annotation.RequiresApi
2327import androidx.core.animation.doOnEnd
2428import androidx.core.animation.doOnStart
25- import androidx.core.view.ViewCompat
29+ import androidx.core.view.*
2630import androidx.emoji2.text.EmojiCompat
2731import androidx.emoji2.text.EmojiCompat.EMOJI_SUPPORTED
2832import com.simplemobiletools.commons.extensions.*
@@ -308,6 +312,13 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
308312 clearClipboardContent()
309313 toggleClipboardVisibility(false )
310314 }
315+
316+ suggestions_holder.addOnLayoutChangeListener(object : OnLayoutChangeListener {
317+ override fun onLayoutChange (v : View ? , left : Int , top : Int , right : Int , bottom : Int , oldLeft : Int , oldTop : Int , oldRight : Int , oldBottom : Int ) {
318+ updateSuggestionsToolbarLayout()
319+ suggestions_holder.removeOnLayoutChangeListener(this )
320+ }
321+ })
311322 }
312323
313324 val clipboardManager = (context.getSystemService(Context .CLIPBOARD_SERVICE ) as ClipboardManager )
@@ -746,8 +757,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
746757
747758 private fun hideClipboardViews () {
748759 mToolbarHolder?.apply {
749- clipboard_value_holder ?.beGone()
750- clipboard_value_holder ?.alpha = 0f
760+ clipboard_value ?.beGone()
761+ clipboard_value ?.alpha = 0f
751762 clipboard_clear?.beGone()
752763 clipboard_clear?.alpha = 0f
753764 }
@@ -764,10 +775,10 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
764775 }
765776
766777 private fun toggleClipboardVisibility (show : Boolean ) {
767- if ((show && mToolbarHolder?.clipboard_value_holder !! .alpha == 0f ) || (! show && mToolbarHolder?.clipboard_value_holder !! .alpha == 1f )) {
778+ if ((show && mToolbarHolder?.clipboard_value !! .alpha == 0f ) || (! show && mToolbarHolder?.clipboard_value !! .alpha == 1f )) {
768779 val newAlpha = if (show) 1f else 0f
769780 val animations = ArrayList <ObjectAnimator >()
770- val clipboardValueAnimation = ObjectAnimator .ofFloat(mToolbarHolder!! .clipboard_value_holder !! , " alpha" , newAlpha)
781+ val clipboardValueAnimation = ObjectAnimator .ofFloat(mToolbarHolder!! .clipboard_value !! , " alpha" , newAlpha)
771782 animations.add(clipboardValueAnimation)
772783
773784 val clipboardClearAnimation = ObjectAnimator .ofFloat(mToolbarHolder!! .clipboard_clear!! , " alpha" , newAlpha)
@@ -779,13 +790,13 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
779790 animSet.interpolator = AccelerateInterpolator ()
780791 animSet.doOnStart {
781792 if (show) {
782- mToolbarHolder?.clipboard_value_holder ?.beVisible()
793+ mToolbarHolder?.clipboard_value ?.beVisible()
783794 mToolbarHolder?.clipboard_clear?.beVisible()
784795 }
785796 }
786797 animSet.doOnEnd {
787798 if (! show) {
788- mToolbarHolder?.clipboard_value_holder ?.beGone()
799+ mToolbarHolder?.clipboard_value ?.beGone()
789800 mToolbarHolder?.clipboard_clear?.beGone()
790801 }
791802 }
@@ -1381,10 +1392,12 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
13811392
13821393 fun closeClipboardManager () {
13831394 mClipboardManagerHolder?.clipboard_manager_holder?.beGone()
1395+ mToolbarHolder?.suggestions_holder?.showAllInlineContentViews()
13841396 }
13851397
13861398 private fun openClipboardManager () {
13871399 mClipboardManagerHolder!! .clipboard_manager_holder.beVisible()
1400+ mToolbarHolder?.suggestions_holder?.hideAllInlineContentViews()
13881401 setupStoredClips()
13891402 }
13901403
@@ -1614,4 +1627,46 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
16141627 }
16151628 return keyColor
16161629 }
1630+
1631+ @RequiresApi(Build .VERSION_CODES .R )
1632+ fun addToClipboardViews (it : InlineContentView , addToFront : Boolean = false) {
1633+ if (mToolbarHolder?.autofill_suggestions_holder != null ) {
1634+ val newLayoutParams = LinearLayout .LayoutParams (it.layoutParams)
1635+ newLayoutParams.updateMarginsRelative(start = resources.getDimensionPixelSize(R .dimen.normal_margin))
1636+ it.layoutParams = newLayoutParams
1637+ if (addToFront) {
1638+ mToolbarHolder?.autofill_suggestions_holder?.addView(it, 0 )
1639+ } else {
1640+ mToolbarHolder?.autofill_suggestions_holder?.addView(it)
1641+ }
1642+ updateSuggestionsToolbarLayout()
1643+ }
1644+ }
1645+
1646+ @RequiresApi(Build .VERSION_CODES .R )
1647+ fun clearClipboardViews () {
1648+ mToolbarHolder?.autofill_suggestions_holder?.removeAllViews()
1649+ updateSuggestionsToolbarLayout()
1650+ }
1651+
1652+ private fun updateSuggestionsToolbarLayout () {
1653+ mToolbarHolder?.apply {
1654+ if (hasInlineViews()) {
1655+ // make room on suggestion toolbar for inline views
1656+ suggestions_items_holder?.gravity = Gravity .NO_GRAVITY
1657+ clipboard_value?.maxWidth = resources.getDimensionPixelSize(R .dimen.suggestion_max_width)
1658+ } else {
1659+ // restore original clipboard toolbar appearance
1660+ suggestions_items_holder?.gravity = Gravity .CENTER_HORIZONTAL
1661+ suggestions_holder?.measuredWidth?.also { maxWidth ->
1662+ clipboard_value?.maxWidth = maxWidth
1663+ }
1664+ }
1665+ }
1666+ }
1667+
1668+ /* *
1669+ * Returns true if there are [InlineContentView]s in [autofill_suggestions_holder]
1670+ */
1671+ private fun hasInlineViews () = (mToolbarHolder?.autofill_suggestions_holder?.childCount ? : 0 ) > 0
16171672}
0 commit comments