Add better text reflow as font changes.

This commit is contained in:
Alex Hart
2022-03-10 16:41:20 -04:00
committed by Cody Henthorne
parent 7c45fb6c17
commit 4dca554967
5 changed files with 20 additions and 13 deletions

View File

@@ -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) {

View File

@@ -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(),

View File

@@ -130,7 +130,6 @@ class StoryTextPostView @JvmOverloads constructor(
)
setTextColor(state.textForegroundColor)
setTextSize(state.textSize)
setTextBackgroundColor(state.textBackgroundColor)
setTextGravity(state.textAlignment)
setTextScale(state.textScale)