Fix the gradient drawable orientation is not mirrored for RTL alignment

Root cause: The orientation of the gradient drawable follows the view alignment. It should consider the text alignment.
Solution: Use getLayoutDirectionFromLocale# to get the text alignment to
set the correct orientation of the gradient drawable.

Bug: 278950655
Test: Manual test for RTL and LTR language
Change-Id: If94af75172ace137ac5168763f4cb47951f9e943
Merged-In: If94af75172ace137ac5168763f4cb47951f9e943
(cherry picked from commit 95fbb04106)
This commit is contained in:
menghanli
2023-04-25 13:34:51 +08:00
committed by Menghan Li
parent ccd03c9e70
commit 87bc65c9e4

View File

@@ -34,6 +34,7 @@ import android.widget.TextView;
import androidx.annotation.ColorInt; import androidx.annotation.ColorInt;
import androidx.annotation.IntDef; import androidx.annotation.IntDef;
import androidx.core.text.TextUtilsCompat;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
@@ -49,6 +50,7 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** Preference that easier preview by matching name to color. */ /** Preference that easier preview by matching name to color. */
@@ -156,10 +158,11 @@ public final class PaletteListPreference extends Preference {
mGradientColors.set(Position.END, color); mGradientColors.set(Position.END, color);
final GradientDrawable gradientDrawable = new GradientDrawable(); final GradientDrawable gradientDrawable = new GradientDrawable();
final Locale locale = Locale.getDefault();
final Orientation orientation = final Orientation orientation =
rootView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL TextUtilsCompat.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL
? Orientation.RIGHT_LEFT ? Orientation.RIGHT_LEFT
: Orientation.LEFT_RIGHT; : Orientation.LEFT_RIGHT;
gradientDrawable.setOrientation(orientation); gradientDrawable.setOrientation(orientation);
gradientDrawable.setColors(Ints.toArray(mGradientColors), Floats.toArray(mGradientOffsets)); gradientDrawable.setColors(Ints.toArray(mGradientColors), Floats.toArray(mGradientOffsets));