Skip to content

Commit 65d2e65

Browse files
committed
fix(emoji): grey out the backspace button when there is nothing to delete
EmojiPickerPanel gains backspaceActionAvailable, which the host toggles independently of backspaceEnabled (which only controls whether the button shows at all). MessageInputFragment now keeps it in sync with whether the message input actually has text, since the panel itself has no knowledge of the host's text field content. Assisted-by: Claude Code:claude-sonnet-5 Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
1 parent 998cfcf commit 65d2e65

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ class MessageInputFragment : Fragment() {
468468
val text = binding.fragmentMessageInputView.messageInput.text.toString()
469469
chatActivity.chatViewModel.messageDraft.messageCursor = cursor
470470
chatActivity.chatViewModel.messageDraft.messageText = text
471+
binding.emojiPickerPanel.backspaceActionAvailable = s.isNotEmpty()
471472
handleButtonsVisibility()
472473
}
473474
})
@@ -893,6 +894,7 @@ class MessageInputFragment : Fragment() {
893894
emojiPickerPanel.setRecentEmojiProvider(recentEmojiProvider)
894895
emojiPickerPanel.onEmojiPicked = { emoji -> insertEmoji(emoji) }
895896
emojiPickerPanel.onBackspaceClicked = { deleteEmojiOrCharacterBeforeCursor() }
897+
emojiPickerPanel.backspaceActionAvailable = inputEditText.text?.isNotEmpty() == true
896898

897899
viewThemeUtils.talk.themeEmojiPicker(emojiPickerPanel)
898900
updateSmileyButtonIcon()

app/src/main/java/com/nextcloud/talk/emojipicker/EmojiPickerPanel.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ class EmojiPickerPanel @JvmOverloads constructor(
6060
updateSearchRowVisibility()
6161
}
6262

63+
/** Whether the host's target text actually has something for the backspace button to delete. */
64+
var backspaceActionAvailable: Boolean = true
65+
set(value) {
66+
field = value
67+
binding.emojiBackspaceButton.isEnabled = value
68+
binding.emojiBackspaceButton.alpha = if (value) ENABLED_ALPHA else DISABLED_ALPHA
69+
}
70+
6371
var onEmojiPicked: ((String) -> Unit)? = null
6472
var onBackspaceClicked: (() -> Unit)? = null
6573

@@ -70,6 +78,7 @@ class EmojiPickerPanel @JvmOverloads constructor(
7078
binding.emojiSearchFieldGroup.isVisible = searchEnabled
7179
updateBackspaceVisibility()
7280
updateSearchRowVisibility()
81+
binding.emojiBackspaceButton.alpha = ENABLED_ALPHA
7382

7483
binding.emojiPicker.setOnEmojiPickedListener { item -> onEmojiPicked?.invoke(item.emoji) }
7584
binding.emojiSearchInput.doAfterTextChanged { editable -> onSearchTextChanged(editable?.toString().orEmpty()) }
@@ -201,5 +210,7 @@ class EmojiPickerPanel @JvmOverloads constructor(
201210
private const val SEARCH_DEBOUNCE_MS = 150L
202211
private const val RESULT_TEXT_SIZE_SP = 28f
203212
private const val RESULT_PADDING_DP = 8
213+
private const val ENABLED_ALPHA = 1f
214+
private const val DISABLED_ALPHA = 0.38f
204215
}
205216
}

0 commit comments

Comments
 (0)