From 4dca554967788274f71cbecd038488cdc42a7deb Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 10 Mar 2022 16:41:20 -0400 Subject: [PATCH] Add better text reflow as font changes. --- .../v2/text/AutoSizeEmojiEditText.kt | 19 ++++++++++++------- .../v2/text/TextStoryPostCreationState.kt | 2 -- .../securesms/stories/StoryTextPostView.kt | 1 - .../res/layout/stories_text_post_view.xml | 7 ++++--- app/src/main/res/values/attrs.xml | 4 ++++ 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/AutoSizeEmojiEditText.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/AutoSizeEmojiEditText.kt index 665ddd2e30..5aa78e5a80 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/AutoSizeEmojiEditText.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/AutoSizeEmojiEditText.kt @@ -5,9 +5,11 @@ import android.text.Editable import android.text.TextWatcher import android.util.AttributeSet import android.util.TypedValue +import androidx.core.content.res.use import androidx.core.view.doOnNextLayout import org.signal.core.util.DimensionUnit import org.signal.core.util.EditTextUtil +import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.emoji.EmojiEditText import kotlin.math.abs import kotlin.math.max @@ -50,7 +52,16 @@ class AutoSizeEmojiEditText @JvmOverloads constructor( init { EditTextUtil.addGraphemeClusterLimitFilter(this, 700) - addTextChangedListener(watcher) + + if (attrs != null) { + context.obtainStyledAttributes(attrs, R.styleable.AutoSizeEmojiEditText).use { typedArray -> + if (typedArray.getBoolean(R.styleable.AutoSizeEmojiEditText_aseet_EnforceLineCount, true)) { + addTextChangedListener(watcher) + } + } + } else { + addTextChangedListener(watcher) + } } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { @@ -58,12 +69,6 @@ class AutoSizeEmojiEditText @JvmOverloads constructor( if (isInEditMode) return - if (checkCountAndAddListener()) { - // TODO [stories] infinite measure loop when font change pushes us over the line count limit - measure(widthMeasureSpec, heightMeasureSpec) - return - } - try { val operation = getNextAutoSizeOperation() val newSize = when (operation) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/TextStoryPostCreationState.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/TextStoryPostCreationState.kt index ef9654d93f..e4f7fe1afd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/TextStoryPostCreationState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/TextStoryPostCreationState.kt @@ -6,7 +6,6 @@ import androidx.annotation.ColorInt import androidx.annotation.IntRange import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize -import org.signal.core.util.DimensionUnit import org.thoughtcrime.securesms.conversation.colors.ChatColors import org.thoughtcrime.securesms.fonts.TextFont import org.thoughtcrime.securesms.scribbles.HSVColorSlider @@ -18,7 +17,6 @@ data class TextStoryPostCreationState( val textColor: Int = HSVColorSlider.getLastColor(), val textColorStyle: TextColorStyle = TextColorStyle.NO_BACKGROUND, val textAlignment: TextAlignment = if (FeatureFlags.storiesTextFunctions()) TextAlignment.START else TextAlignment.CENTER, - val textSize: Float = DimensionUnit.DP.toPixels(32f), val textFont: TextFont = TextFont.REGULAR, @IntRange(from = 0, to = 100) val textScale: Int = 50, val backgroundColor: ChatColors = TextStoryBackgroundColors.getInitialBackgroundColor(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt index 08e546893a..286003e679 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt @@ -130,7 +130,6 @@ class StoryTextPostView @JvmOverloads constructor( ) setTextColor(state.textForegroundColor) - setTextSize(state.textSize) setTextBackgroundColor(state.textBackgroundColor) setTextGravity(state.textAlignment) setTextScale(state.textScale) diff --git a/app/src/main/res/layout/stories_text_post_view.xml b/app/src/main/res/layout/stories_text_post_view.xml index 64d2c23a5b..6c6bf0925b 100644 --- a/app/src/main/res/layout/stories_text_post_view.xml +++ b/app/src/main/res/layout/stories_text_post_view.xml @@ -12,9 +12,10 @@ android:layout_height="match_parent" app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Story.Text" /> - diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index bb64b23b1f..68c438f097 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -23,6 +23,10 @@ + + + +