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 e4f7fe1afd283dc07c10921777026af17aef831d..02db1646c66da391d5a69f763d9003eae1040a55 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 @@ -4,6 +4,7 @@ import android.graphics.Color import android.os.Parcelable import androidx.annotation.ColorInt import androidx.annotation.IntRange +import androidx.core.graphics.ColorUtils import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import org.thoughtcrime.securesms.conversation.colors.ChatColors @@ -28,14 +29,27 @@ data class TextStoryPostCreationState( val textForegroundColor: Int = when (textColorStyle) { TextColorStyle.NO_BACKGROUND -> textColor TextColorStyle.NORMAL -> textColor - TextColorStyle.INVERT -> Color.WHITE + TextColorStyle.INVERT -> getDefaultColorForLightness(textColor) } @ColorInt @IgnoredOnParcel val textBackgroundColor: Int = when (textColorStyle) { TextColorStyle.NO_BACKGROUND -> Color.TRANSPARENT - TextColorStyle.NORMAL -> Color.WHITE + TextColorStyle.NORMAL -> getDefaultColorForLightness(textColor) TextColorStyle.INVERT -> textColor } + + private fun getDefaultColorForLightness(textColor: Int): Int { + val hsl = floatArrayOf(0f, 0f, 0f) + ColorUtils.colorToHSL(textColor, hsl) + + val lightness = hsl[2] + + return if (lightness >= 0.9f) { + Color.BLACK + } else { + Color.WHITE + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/HSVColorSlider.kt b/app/src/main/java/org/thoughtcrime/securesms/scribbles/HSVColorSlider.kt index 5c26b8f0a554dae26b9dced14079722619ae004c..2bad473fe82e78e57c94260d360aaedb2d684443 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/HSVColorSlider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/HSVColorSlider.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.scribbles +import android.animation.FloatEvaluator import android.graphics.Canvas import android.graphics.Color import android.graphics.ColorFilter @@ -15,6 +16,7 @@ import androidx.annotation.ColorInt import androidx.annotation.Dimension import androidx.appcompat.widget.AppCompatSeekBar import androidx.core.graphics.ColorUtils +import org.thoughtcrime.securesms.scribbles.HSVColorSlider.toHue import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.ViewUtil import org.thoughtcrime.securesms.util.customizeOnDraw @@ -30,29 +32,30 @@ object HSVColorSlider { private const val WHITE_DIVISIONS = 125 private const val MAX_SEEK_DIVISIONS = COLOR_DIVISIONS + BLACK_DIVISIONS + WHITE_DIVISIONS private const val STANDARD_LIGHTNESS = 0.4f + private val EVALUATOR = FloatEvaluator() - private val colors: IntArray = (0..COLOR_DIVISIONS).map { hue -> + private val colors: IntArray = (0..BLACK_DIVISIONS).map { value -> ColorUtils.HSLToColor( floatArrayOf( - hue.toHue(COLOR_DIVISIONS), + MAX_HUE.toFloat(), 1f, - calculateLightness(hue.toFloat(), STANDARD_LIGHTNESS) + value / BLACK_DIVISIONS.toFloat() * STANDARD_LIGHTNESS ) ) - }.toIntArray() + (BLACK_DIVISIONS downTo 0).map { value -> + }.toIntArray() + (0..COLOR_DIVISIONS).map { hue -> ColorUtils.HSLToColor( floatArrayOf( - MAX_HUE.toFloat(), + hue.toHue(COLOR_DIVISIONS), 1f, - value / BLACK_DIVISIONS.toFloat() * STANDARD_LIGHTNESS + calculateLightness(hue.toFloat(), STANDARD_LIGHTNESS) ) ) }.toIntArray() + (0..WHITE_DIVISIONS).map { value -> ColorUtils.HSLToColor( floatArrayOf( - MAX_HUE.toFloat(), - 0f, - value / WHITE_DIVISIONS.toFloat() + COLOR_DIVISIONS.toHue(COLOR_DIVISIONS), + 1f, + EVALUATOR.evaluate(value / WHITE_DIVISIONS.toFloat(), calculateLightness(COLOR_DIVISIONS.toFloat(), STANDARD_LIGHTNESS), 1f) ) ) }.toIntArray() 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 ee156ae8b3520e94f42c10a85420172b41ea87b5..29e34162cfb3ce60800fbaf99b4fb1542881141d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt @@ -60,7 +60,7 @@ class StoryTextPostView @JvmOverloads constructor( textView.typeface = typeface } - fun setPostBackground(drawable: Drawable) { + private fun setPostBackground(drawable: Drawable) { backgroundView.setImageDrawable(drawable) } @@ -72,30 +72,30 @@ class StoryTextPostView @JvmOverloads constructor( } } - fun setText(text: CharSequence, isPlaceholder: Boolean) { + private fun setText(text: CharSequence, isPlaceholder: Boolean) { this.isPlaceholder = isPlaceholder textView.text = text } - fun setTextSize(@Px textSize: Float) { + private fun setTextSize(@Px textSize: Float) { textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize) } - fun setTextGravity(textAlignment: TextAlignment) { + private fun setTextGravity(textAlignment: TextAlignment) { textView.gravity = textAlignment.gravity } - fun setTextScale(scalePercent: Int) { + private fun setTextScale(scalePercent: Int) { val scale = TextStoryScale.convertToScale(scalePercent) textView.scaleX = scale textView.scaleY = scale } - fun setTextVisible(visible: Boolean) { + private fun setTextVisible(visible: Boolean) { textView.visible = visible } - fun setTextBackgroundColor(@ColorInt color: Int) { + private fun setTextBackgroundColor(@ColorInt color: Int) { textView.setWrappedBackgroundColor(color) }