From bde1a337389aecd586d21c00b60024f6d4878096 Mon Sep 17 00:00:00 2001 From: Gabin Lefranc Date: Sun, 15 Mar 2026 20:49:06 +0100 Subject: [PATCH 1/6] Add onClose lambda --- .../main/java/com/urik/keyboard/UrikInputMethodService.kt | 3 +++ .../urik/keyboard/ui/keyboard/components/ClipboardPanel.kt | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt b/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt index e7b59d7..dbc8f7f 100644 --- a/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt +++ b/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt @@ -679,6 +679,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 be65ba9..58869c9 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 @@ -32,6 +33,8 @@ class ClipboardPanel( private var onItemDeleted: ((ClipboardItem) -> Unit)? = null private var onDeleteAllUnpinned: (() -> Unit)? = null + private var onClose: (() -> Unit)? = null + private val transientOverlayA11yDelegate = object : AccessibilityDelegateCompat() { override fun onInitializeAccessibilityNodeInfo( @@ -281,11 +284,13 @@ class ClipboardPanel( onPinToggle: (ClipboardItem) -> Unit, onDelete: (ClipboardItem) -> 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 From 786f6c29e308bbb8b9b671a3352a7abf88617df5 Mon Sep 17 00:00:00 2001 From: Gabin Lefranc Date: Sun, 15 Mar 2026 20:49:20 +0100 Subject: [PATCH 2/6] Add close button UI --- .../ui/keyboard/components/ClipboardPanel.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) 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 58869c9..9501548 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 @@ -82,6 +82,8 @@ class ClipboardPanel( private val pinnedTab: Button private val recentTab: Button + private val closeButton: TextView + private val pinnedListContainer: ScrollView = ScrollView(context).apply { isVisible = false @@ -134,7 +136,14 @@ class ClipboardPanel( PINNED, RECENT, } + 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) + } init { val density = context.resources.displayMetrics.density @@ -175,9 +184,27 @@ class ClipboardPanel( 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) @@ -527,6 +554,14 @@ class ClipboardPanel( 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() { From 114f74aad85b0b000887acb94c0085454d7f8244 Mon Sep 17 00:00:00 2001 From: Gabin Lefranc Date: Sun, 15 Mar 2026 20:50:37 +0100 Subject: [PATCH 3/6] Update strings.xml only EN and FR --- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c661c4b..75c2df0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -295,6 +295,7 @@ Supprimer tout 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 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ac2d67e..6f019e0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -304,6 +304,7 @@ Delete All Delete all unpinned clipboard items? Urik can read and store clipboard contents indefinitely. If you do not want this, go to settings and turn off clipboard history. + Close clipboard Clipboard item: %1$s From 6c90d5c8183ee8d01e527b86a3155ffa4d76b17c Mon Sep 17 00:00:00 2001 From: Gabin Lefranc Date: Sun, 15 Mar 2026 23:33:11 +0100 Subject: [PATCH 4/6] fix code quality --- app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt | 2 +- .../com/urik/keyboard/ui/keyboard/components/ClipboardPanel.kt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt b/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt index dbc8f7f..022d76b 100644 --- a/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt +++ b/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt @@ -681,7 +681,7 @@ class UrikInputMethodService : }, 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 9501548..8758714 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 @@ -136,6 +136,7 @@ class ClipboardPanel( PINNED, RECENT, } + private fun calculateResponsiveSuggestionTextSize(): Float { val keyHeight = context.resources.getDimensionPixelSize(R.dimen.key_height) val baseTextSize = keyHeight * 0.40f / context.resources.displayMetrics.density @@ -144,6 +145,7 @@ class ClipboardPanel( return baseTextSize.coerceIn(minSize, maxSize) } + init { val density = context.resources.displayMetrics.density From 4e99a6494d375a158360431d0f7a1eefb9665e73 Mon Sep 17 00:00:00 2001 From: Gabin Lefranc Date: Mon, 16 Mar 2026 01:07:24 +0100 Subject: [PATCH 5/6] fix code quality --- app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt | 2 +- .../urik/keyboard/ui/keyboard/components/ClipboardPanel.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt b/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt index 660966b..91c6589 100644 --- a/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt +++ b/app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt @@ -683,7 +683,7 @@ class UrikInputMethodService : }, 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 2920dda..8120801 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 @@ -197,7 +197,7 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) : layoutParams = LinearLayout.LayoutParams( minTouchTarget, - minTouchTarget, + minTouchTarget ) } @@ -310,7 +310,7 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) : onPinToggle: (ClipboardItem) -> Unit, onDelete: (ClipboardItem) -> Unit, onDeleteAll: () -> Unit, - onClose: () -> Unit, + onClose: () -> Unit ) { this.onItemSelected = onItemClick this.onItemPinToggled = onPinToggle From cb588dfd8f003e2a66cb1b3a4bc96d5e2fc90639 Mon Sep 17 00:00:00 2001 From: Gabin Lefranc Date: Mon, 16 Mar 2026 14:45:59 +0100 Subject: [PATCH 6/6] fix detekt lint test --- .../ui/keyboard/components/ClipboardPanel.kt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) 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 8120801..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 @@ -134,15 +134,6 @@ class ClipboardPanel(context: Context, private val themeManager: ThemeManager) : RECENT } - 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) - } - init { val density = context.resources.displayMetrics.density @@ -259,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