diff --git a/api/current.txt b/api/current.txt index a78a4e3b71628..a52c1cc1cd41c 100755 --- a/api/current.txt +++ b/api/current.txt @@ -1403,6 +1403,7 @@ package android { field public static final int textFilterEnabled = 16843007; // 0x10100ff field public static final int textFontWeight = 16844165; // 0x1010585 field public static final int textIsSelectable = 16843542; // 0x1010316 + field public static final int textLocale = 16844178; // 0x1010592 field public static final int textOff = 16843045; // 0x1010125 field public static final int textOn = 16843044; // 0x1010124 field public static final int textScaleX = 16843089; // 0x1010151 @@ -45266,6 +45267,7 @@ package android.text.style { method public int getSpanTypeId(); method public android.content.res.ColorStateList getTextColor(); method public int getTextFontWeight(); + method public android.os.LocaleList getTextLocales(); method public int getTextSize(); method public int getTextStyle(); method public android.graphics.Typeface getTypeface(); diff --git a/core/java/android/text/style/TextAppearanceSpan.java b/core/java/android/text/style/TextAppearanceSpan.java index 648bd1bba20c0..f846a356d8fa4 100644 --- a/core/java/android/text/style/TextAppearanceSpan.java +++ b/core/java/android/text/style/TextAppearanceSpan.java @@ -23,6 +23,7 @@ import android.content.res.TypedArray; import android.graphics.LeakyTypefaceStorage; import android.graphics.Typeface; import android.graphics.fonts.Font; +import android.os.LocaleList; import android.os.Parcel; import android.text.ParcelableSpan; import android.text.TextPaint; @@ -66,6 +67,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl private final Typeface mTypeface; private final int mTextFontWeight; + private final LocaleList mTextLocales; private final float mShadowRadius; private final float mShadowDx; @@ -149,6 +151,19 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl mTextFontWeight = a.getInt(com.android.internal.R.styleable .TextAppearance_textFontWeight, -1); + final String localeString = a.getString(com.android.internal.R.styleable + .TextAppearance_textLocale); + if (localeString != null) { + LocaleList localeList = LocaleList.forLanguageTags(localeString); + if (!localeList.isEmpty()) { + mTextLocales = localeList; + } else { + mTextLocales = null; + } + } else { + mTextLocales = null; + } + mShadowRadius = a.getFloat(com.android.internal.R.styleable .TextAppearance_shadowRadius, 0.0f); mShadowDx = a.getFloat(com.android.internal.R.styleable @@ -201,6 +216,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl mTypeface = null; mTextFontWeight = -1; + mTextLocales = null; mShadowRadius = 0.0f; mShadowDx = 0.0f; @@ -233,6 +249,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl mTypeface = LeakyTypefaceStorage.readTypefaceFromParcel(src); mTextFontWeight = src.readInt(); + mTextLocales = src.readParcelable(LocaleList.class.getClassLoader()); mShadowRadius = src.readFloat(); mShadowDx = src.readFloat(); @@ -285,6 +302,7 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl LeakyTypefaceStorage.writeTypefaceToParcel(mTypeface, dest); dest.writeInt(mTextFontWeight); + dest.writeParcelable(mTextLocales, flags); dest.writeFloat(mShadowRadius); dest.writeFloat(mShadowDx); @@ -348,6 +366,15 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl return mTextFontWeight; } + /** + * Returns the {@link android.os.LocaleList} specified by this span, or null + * if it does not specify one. + */ + @Nullable + public LocaleList getTextLocales() { + return mTextLocales; + } + /** * Returns the typeface specified by this span, or null * if it does not specify one. @@ -487,6 +514,10 @@ public class TextAppearanceSpan extends MetricAffectingSpan implements Parcelabl ds.setTextSize(mTextSize); } + if (mTextLocales != null) { + ds.setTextLocales(mTextLocales); + } + if (mHasElegantTextHeight) { ds.setElegantTextHeight(mElegantTextHeight); } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index f74c2341d816a..3dd6fd1410bde 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -3517,6 +3517,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener ColorStateList mTextColorHint = null; ColorStateList mTextColorLink = null; int mTextSize = -1; + LocaleList mTextLocales = null; String mFontFamily = null; Typeface mFontTypeface = null; boolean mFontFamilyExplicit = false; @@ -3543,6 +3544,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener + " mTextColorHint:" + mTextColorHint + "\n" + " mTextColorLink:" + mTextColorLink + "\n" + " mTextSize:" + mTextSize + "\n" + + " mTextLocales:" + mTextLocales + "\n" + " mFontFamily:" + mFontFamily + "\n" + " mFontTypeface:" + mFontTypeface + "\n" + " mFontFamilyExplicit:" + mFontFamilyExplicit + "\n" @@ -3579,6 +3581,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener com.android.internal.R.styleable.TextAppearance_textColorLink); sAppearanceValues.put(com.android.internal.R.styleable.TextView_textSize, com.android.internal.R.styleable.TextAppearance_textSize); + sAppearanceValues.put(com.android.internal.R.styleable.TextView_textLocale, + com.android.internal.R.styleable.TextAppearance_textLocale); sAppearanceValues.put(com.android.internal.R.styleable.TextView_typeface, com.android.internal.R.styleable.TextAppearance_typeface); sAppearanceValues.put(com.android.internal.R.styleable.TextView_fontFamily, @@ -3652,6 +3656,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener attributes.mTextSize = appearance.getDimensionPixelSize(attr, attributes.mTextSize); break; + case com.android.internal.R.styleable.TextAppearance_textLocale: + final String localeString = appearance.getString(attr); + if (localeString != null) { + final LocaleList localeList = LocaleList.forLanguageTags(localeString); + if (!localeList.isEmpty()) { + attributes.mTextLocales = localeList; + } + } + break; case com.android.internal.R.styleable.TextAppearance_typeface: attributes.mTypefaceIndex = appearance.getInt(attr, attributes.mTypefaceIndex); if (attributes.mTypefaceIndex != -1 && !attributes.mFontFamilyExplicit) { @@ -3738,6 +3751,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener setRawTextSize(attributes.mTextSize, true /* shouldRequestLayout */); } + if (attributes.mTextLocales != null) { + setTextLocales(attributes.mTextLocales); + } + if (attributes.mTypefaceIndex != -1 && !attributes.mFontFamilyExplicit) { attributes.mFontFamily = null; } diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index cdb65edd81e7c..9bedab53bb2c8 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -4551,6 +4551,11 @@ + + @@ -4642,6 +4647,13 @@ + + diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 95517186fe9ef..31212a6ab28f4 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2915,6 +2915,7 @@ +