diff --git a/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt b/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt
index eef42b8..91c6589 100644
--- a/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt
+++ b/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt
@@ -680,6 +680,9 @@ class UrikInputMethodService :
},
onDeleteAll = {
handleClipboardDeleteAll()
+ },
+ onClose = {
+ dismissClipboardPanel()
}
)
}
diff --git a/app/src/main/java/com/urik/keyboard/ui/keyboard/components/ClipboardPanel.kt b/app/src/main/java/com/urik/keyboard/ui/keyboard/components/ClipboardPanel.kt
index 43cb53d..c182cc0 100644
--- a/app/src/main/java/com/urik/keyboard/ui/keyboard/components/ClipboardPanel.kt
+++ b/app/src/main/java/com/urik/keyboard/ui/keyboard/components/ClipboardPanel.kt
@@ -2,6 +2,7 @@ package com.urik.keyboard.ui.keyboard.components
import android.content.Context
import android.graphics.drawable.GradientDrawable
+import android.util.TypedValue
import android.view.Gravity
import android.view.View
import android.widget.Button
@@ -29,6 +30,8 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) :
private var onItemDeleted: ((ClipboardItem) -> Unit)? = null
private var onDeleteAllUnpinned: (() -> Unit)? = null
+ private var onClose: (() -> Unit)? = null
+
private val transientOverlayA11yDelegate =
object : AccessibilityDelegateCompat() {
override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) {
@@ -73,6 +76,8 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) :
private val pinnedTab: Button
private val recentTab: Button
+ private val closeButton: TextView
+
private val pinnedListContainer: ScrollView =
ScrollView(context).apply {
isVisible = false
@@ -169,9 +174,27 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) :
1f
)
}
+ val emojiTextSize = calculateResponsiveSuggestionTextSize()
+ val minTouchTarget = context.resources.getDimensionPixelSize(R.dimen.minimum_touch_target)
+ closeButton =
+ TextView(context).apply {
+ text = "✕"
+ setTextSize(TypedValue.COMPLEX_UNIT_SP, emojiTextSize)
+ gravity = Gravity.CENTER
+ contentDescription = context.getString(R.string.clipboard_panel_close)
+ setOnClickListener {
+ onClose?.invoke()
+ }
+ layoutParams =
+ LinearLayout.LayoutParams(
+ minTouchTarget,
+ minTouchTarget
+ )
+ }
tabContainer.addView(pinnedTab)
tabContainer.addView(recentTab)
+ tabContainer.addView(closeButton)
pinnedListContainer.addView(pinnedList)
recentListContainer.addView(recentList)
@@ -227,6 +250,16 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) :
}
}
+ // took from SwipeKeyboardView
+ private fun calculateResponsiveSuggestionTextSize(): Float {
+ val keyHeight = context.resources.getDimensionPixelSize(R.dimen.key_height)
+ val baseTextSize = keyHeight * 0.40f / context.resources.displayMetrics.density
+ val minSize = 15f
+ val maxSize = 19f
+
+ return baseTextSize.coerceIn(minSize, maxSize)
+ }
+
private fun createButtonBackground(): GradientDrawable {
val density = context.resources.displayMetrics.density
val cornerRadius = 8 * density
@@ -277,12 +310,14 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) :
onItemClick: (String) -> Unit,
onPinToggle: (ClipboardItem) -> Unit,
onDelete: (ClipboardItem) -> Unit,
- onDeleteAll: () -> Unit
+ onDeleteAll: () -> Unit,
+ onClose: () -> Unit
) {
this.onItemSelected = onItemClick
this.onItemPinToggled = onPinToggle
this.onItemDeleted = onDelete
this.onDeleteAllUnpinned = onDeleteAll
+ this.onClose = onClose
consentScreen.isVisible = false
clipboardContentScreen.isVisible = true
@@ -509,6 +544,14 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) :
onItemDeleted?.invoke(item)
}
}
+
+ closeButton.apply {
+ setTextColor(themeManager.currentTheme.value.colors.keyTextAction)
+ contentDescription = context.getString(R.string.clipboard_panel_close)
+ setOnClickListener {
+ onClose?.invoke()
+ }
+ }
}
private fun showDeleteAllConfirmation() {
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 6c46a0e..75c2df0 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -296,7 +296,7 @@
Supprimer tous les éléments non épinglés du presse-papiers ?
Urik peut lire et stocker indéfiniment le contenu du presse-papiers. Si vous ne le souhaitez pas, rendez-vous dans les paramètres et désactivez l\'historique du presse-papiers.
Fermer le presse-papier
-
+
Élément du presse-papiers : %1$s
Épingler l\'élément du presse-papiers