From 56bdb28c2fa77b6536d7296b285ae66365ac6c91 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 3 Apr 2024 11:20:33 -0400 Subject: [PATCH] Fix bug around entering text in the middle of a full note. There's likely other weirdness, but this at least addresses the most commond variation, where entering text in the middle of a full note would start chopping stuff off the end. --- .../securesms/nicknames/NicknameViewModel.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/nicknames/NicknameViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/nicknames/NicknameViewModel.kt index a08c5fc4bc..06f97f8e84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/nicknames/NicknameViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/nicknames/NicknameViewModel.kt @@ -78,15 +78,16 @@ class NicknameViewModel( @MainThread fun onNoteChanged(value: String) { - iteratorCompat.setText(value) - val trimmed = iteratorCompat.take(NOTE_MAX_LENGTH) - val count = iteratorCompat.run { - setText(trimmed) - countBreaks() + if (internalState.value.noteCharactersRemaining == 0 && value.graphemeCount > NOTE_MAX_LENGTH) { + return } + iteratorCompat.setText(value) + val trimmed = iteratorCompat.take(NOTE_MAX_LENGTH) + val count = trimmed.graphemeCount + internalState.value = state.value.copy( - note = iteratorCompat.take(NOTE_MAX_LENGTH).toString(), + note = trimmed.toString(), noteCharactersRemaining = NOTE_MAX_LENGTH - count ) } @@ -125,4 +126,10 @@ class NicknameViewModel( internalState.value = state.value.copy(formState = NicknameState.FormState.SAVED) } } + + private val CharSequence.graphemeCount: Int + get() { + iteratorCompat.setText(this) + return iteratorCompat.countBreaks() + } }