Loading core/java/android/widget/TextView.java +23 −5 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package android.widget; import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.graphics.Paint.NEW_FONT_VARIATION_MANAGEMENT; import static android.view.ContentInfo.FLAG_CONVERT_TO_PLAIN_TEXT; import static android.view.ContentInfo.SOURCE_AUTOFILL; import static android.view.ContentInfo.SOURCE_CLIPBOARD; Loading Loading @@ -5544,13 +5543,32 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return true; } final boolean useFontVariationStore = Flags.typefaceRedesignReadonly() && CompatChanges.isChangeEnabled(NEW_FONT_VARIATION_MANAGEMENT); boolean effective; if (useFontVariationStore) { if (Flags.typefaceRedesignReadonly()) { if (mFontWeightAdjustment != 0 && mFontWeightAdjustment != Configuration.FONT_WEIGHT_ADJUSTMENT_UNDEFINED) { mTextPaint.setFontVariationSettings(fontVariationSettings, mFontWeightAdjustment); List<FontVariationAxis> axes = FontVariationAxis.fromFontVariationSettingsForList( fontVariationSettings); if (axes == null) { return false; // invalid format of the font variation settings. } boolean wghtAdjusted = false; for (int i = 0; i < axes.size(); ++i) { FontVariationAxis axis = axes.get(i); if (axis.getOpenTypeTagValue() == 0x77676874 /* wght */) { axes.set(i, new FontVariationAxis("wght", Math.clamp(axis.getStyleValue() + mFontWeightAdjustment, FontStyle.FONT_WEIGHT_MIN, FontStyle.FONT_WEIGHT_MAX))); wghtAdjusted = true; } } if (!wghtAdjusted) { axes.add(new FontVariationAxis("wght", Math.clamp(400 + mFontWeightAdjustment, FontStyle.FONT_WEIGHT_MIN, FontStyle.FONT_WEIGHT_MAX))); } mTextPaint.setFontVariationSettings( FontVariationAxis.toFontVariationSettings(axes)); } else { mTextPaint.setFontVariationSettings(fontVariationSettings); } Loading graphics/java/android/graphics/Paint.java +4 −50 Original line number Diff line number Diff line Loading @@ -16,9 +16,9 @@ package android.graphics; import static com.android.text.flags.Flags.FLAG_DEPRECATE_ELEGANT_TEXT_HEIGHT_API; import static com.android.text.flags.Flags.FLAG_FIX_LINE_HEIGHT_FOR_LOCALE; import static com.android.text.flags.Flags.FLAG_LETTER_SPACING_JUSTIFICATION; import static com.android.text.flags.Flags.FLAG_DEPRECATE_ELEGANT_TEXT_HEIGHT_API; import static com.android.text.flags.Flags.FLAG_VERTICAL_TEXT_LAYOUT; import android.annotation.ColorInt; Loading @@ -34,7 +34,6 @@ import android.app.compat.CompatChanges; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.compat.annotation.UnsupportedAppUsage; import android.graphics.fonts.FontStyle; import android.graphics.fonts.FontVariationAxis; import android.graphics.text.TextRunShaper; import android.os.Build; Loading Loading @@ -2099,14 +2098,6 @@ public class Paint { return mFontVariationSettings; } /** * A change ID for new font variation settings management. * @hide */ @ChangeId @EnabledSince(targetSdkVersion = 36) public static final long NEW_FONT_VARIATION_MANAGEMENT = 361260253L; /** * Sets TrueType or OpenType font variation settings. The settings string is constructed from * multiple pairs of axis tag and style values. The axis tag must contain four ASCII characters Loading Loading @@ -2136,16 +2127,12 @@ public class Paint { * </li> * </ul> * * <p>Note: If the application that targets API 35 or before, this function mutates the * underlying typeface instance. * * @param fontVariationSettings font variation settings. You can pass null or empty string as * no variation settings. * * @return If the application that targets API 36 or later and is running on devices API 36 or * later, this function always returns true. Otherwise, this function returns true if * the given settings is effective to at least one font file underlying this typeface. * This function also returns true for empty settings string. Otherwise returns false. * @return true if the given settings is effective to at least one font file underlying this * typeface. This function also returns true for empty settings string. Otherwise * returns false * * @throws IllegalArgumentException If given string is not a valid font variation settings * format Loading @@ -2154,39 +2141,6 @@ public class Paint { * @see FontVariationAxis */ public boolean setFontVariationSettings(String fontVariationSettings) { return setFontVariationSettings(fontVariationSettings, 0 /* wght adjust */); } /** * Set font variation settings with weight adjustment * @hide */ public boolean setFontVariationSettings(String fontVariationSettings, int wghtAdjust) { final boolean useFontVariationStore = Flags.typefaceRedesignReadonly() && CompatChanges.isChangeEnabled(NEW_FONT_VARIATION_MANAGEMENT); if (useFontVariationStore) { FontVariationAxis[] axes = FontVariationAxis.fromFontVariationSettings(fontVariationSettings); if (axes == null) { nSetFontVariationOverride(mNativePaint, 0); mFontVariationSettings = null; return true; } long builderPtr = nCreateFontVariationBuilder(axes.length); for (int i = 0; i < axes.length; ++i) { int tag = axes[i].getOpenTypeTagValue(); float value = axes[i].getStyleValue(); if (tag == 0x77676874 /* wght */) { value = Math.clamp(value + wghtAdjust, FontStyle.FONT_WEIGHT_MIN, FontStyle.FONT_WEIGHT_MAX); } nAddFontVariationToBuilder(builderPtr, tag, value); } nSetFontVariationOverride(mNativePaint, builderPtr); mFontVariationSettings = fontVariationSettings; return true; } final String settings = TextUtils.nullIfEmpty(fontVariationSettings); if (settings == mFontVariationSettings || (settings != null && settings.equals(mFontVariationSettings))) { Loading graphics/java/android/graphics/fonts/FontVariationAxis.java +14 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.os.Build; import android.text.TextUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.regex.Pattern; Loading Loading @@ -139,9 +140,19 @@ public final class FontVariationAxis { */ public static @Nullable FontVariationAxis[] fromFontVariationSettings( @Nullable String settings) { if (settings == null || settings.isEmpty()) { List<FontVariationAxis> result = fromFontVariationSettingsForList(settings); if (result.isEmpty()) { return null; } return result.toArray(new FontVariationAxis[0]); } /** @hide */ public static @NonNull List<FontVariationAxis> fromFontVariationSettingsForList( @Nullable String settings) { if (settings == null || settings.isEmpty()) { return Collections.emptyList(); } final ArrayList<FontVariationAxis> axisList = new ArrayList<>(); final int length = settings.length(); for (int i = 0; i < length; i++) { Loading Loading @@ -172,9 +183,9 @@ public final class FontVariationAxis { i = endOfValueString; } if (axisList.isEmpty()) { return null; return Collections.emptyList(); } return axisList.toArray(new FontVariationAxis[0]); return axisList; } /** Loading Loading
core/java/android/widget/TextView.java +23 −5 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package android.widget; import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL; import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.graphics.Paint.NEW_FONT_VARIATION_MANAGEMENT; import static android.view.ContentInfo.FLAG_CONVERT_TO_PLAIN_TEXT; import static android.view.ContentInfo.SOURCE_AUTOFILL; import static android.view.ContentInfo.SOURCE_CLIPBOARD; Loading Loading @@ -5544,13 +5543,32 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return true; } final boolean useFontVariationStore = Flags.typefaceRedesignReadonly() && CompatChanges.isChangeEnabled(NEW_FONT_VARIATION_MANAGEMENT); boolean effective; if (useFontVariationStore) { if (Flags.typefaceRedesignReadonly()) { if (mFontWeightAdjustment != 0 && mFontWeightAdjustment != Configuration.FONT_WEIGHT_ADJUSTMENT_UNDEFINED) { mTextPaint.setFontVariationSettings(fontVariationSettings, mFontWeightAdjustment); List<FontVariationAxis> axes = FontVariationAxis.fromFontVariationSettingsForList( fontVariationSettings); if (axes == null) { return false; // invalid format of the font variation settings. } boolean wghtAdjusted = false; for (int i = 0; i < axes.size(); ++i) { FontVariationAxis axis = axes.get(i); if (axis.getOpenTypeTagValue() == 0x77676874 /* wght */) { axes.set(i, new FontVariationAxis("wght", Math.clamp(axis.getStyleValue() + mFontWeightAdjustment, FontStyle.FONT_WEIGHT_MIN, FontStyle.FONT_WEIGHT_MAX))); wghtAdjusted = true; } } if (!wghtAdjusted) { axes.add(new FontVariationAxis("wght", Math.clamp(400 + mFontWeightAdjustment, FontStyle.FONT_WEIGHT_MIN, FontStyle.FONT_WEIGHT_MAX))); } mTextPaint.setFontVariationSettings( FontVariationAxis.toFontVariationSettings(axes)); } else { mTextPaint.setFontVariationSettings(fontVariationSettings); } Loading
graphics/java/android/graphics/Paint.java +4 −50 Original line number Diff line number Diff line Loading @@ -16,9 +16,9 @@ package android.graphics; import static com.android.text.flags.Flags.FLAG_DEPRECATE_ELEGANT_TEXT_HEIGHT_API; import static com.android.text.flags.Flags.FLAG_FIX_LINE_HEIGHT_FOR_LOCALE; import static com.android.text.flags.Flags.FLAG_LETTER_SPACING_JUSTIFICATION; import static com.android.text.flags.Flags.FLAG_DEPRECATE_ELEGANT_TEXT_HEIGHT_API; import static com.android.text.flags.Flags.FLAG_VERTICAL_TEXT_LAYOUT; import android.annotation.ColorInt; Loading @@ -34,7 +34,6 @@ import android.app.compat.CompatChanges; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.compat.annotation.UnsupportedAppUsage; import android.graphics.fonts.FontStyle; import android.graphics.fonts.FontVariationAxis; import android.graphics.text.TextRunShaper; import android.os.Build; Loading Loading @@ -2099,14 +2098,6 @@ public class Paint { return mFontVariationSettings; } /** * A change ID for new font variation settings management. * @hide */ @ChangeId @EnabledSince(targetSdkVersion = 36) public static final long NEW_FONT_VARIATION_MANAGEMENT = 361260253L; /** * Sets TrueType or OpenType font variation settings. The settings string is constructed from * multiple pairs of axis tag and style values. The axis tag must contain four ASCII characters Loading Loading @@ -2136,16 +2127,12 @@ public class Paint { * </li> * </ul> * * <p>Note: If the application that targets API 35 or before, this function mutates the * underlying typeface instance. * * @param fontVariationSettings font variation settings. You can pass null or empty string as * no variation settings. * * @return If the application that targets API 36 or later and is running on devices API 36 or * later, this function always returns true. Otherwise, this function returns true if * the given settings is effective to at least one font file underlying this typeface. * This function also returns true for empty settings string. Otherwise returns false. * @return true if the given settings is effective to at least one font file underlying this * typeface. This function also returns true for empty settings string. Otherwise * returns false * * @throws IllegalArgumentException If given string is not a valid font variation settings * format Loading @@ -2154,39 +2141,6 @@ public class Paint { * @see FontVariationAxis */ public boolean setFontVariationSettings(String fontVariationSettings) { return setFontVariationSettings(fontVariationSettings, 0 /* wght adjust */); } /** * Set font variation settings with weight adjustment * @hide */ public boolean setFontVariationSettings(String fontVariationSettings, int wghtAdjust) { final boolean useFontVariationStore = Flags.typefaceRedesignReadonly() && CompatChanges.isChangeEnabled(NEW_FONT_VARIATION_MANAGEMENT); if (useFontVariationStore) { FontVariationAxis[] axes = FontVariationAxis.fromFontVariationSettings(fontVariationSettings); if (axes == null) { nSetFontVariationOverride(mNativePaint, 0); mFontVariationSettings = null; return true; } long builderPtr = nCreateFontVariationBuilder(axes.length); for (int i = 0; i < axes.length; ++i) { int tag = axes[i].getOpenTypeTagValue(); float value = axes[i].getStyleValue(); if (tag == 0x77676874 /* wght */) { value = Math.clamp(value + wghtAdjust, FontStyle.FONT_WEIGHT_MIN, FontStyle.FONT_WEIGHT_MAX); } nAddFontVariationToBuilder(builderPtr, tag, value); } nSetFontVariationOverride(mNativePaint, builderPtr); mFontVariationSettings = fontVariationSettings; return true; } final String settings = TextUtils.nullIfEmpty(fontVariationSettings); if (settings == mFontVariationSettings || (settings != null && settings.equals(mFontVariationSettings))) { Loading
graphics/java/android/graphics/fonts/FontVariationAxis.java +14 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.os.Build; import android.text.TextUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.regex.Pattern; Loading Loading @@ -139,9 +140,19 @@ public final class FontVariationAxis { */ public static @Nullable FontVariationAxis[] fromFontVariationSettings( @Nullable String settings) { if (settings == null || settings.isEmpty()) { List<FontVariationAxis> result = fromFontVariationSettingsForList(settings); if (result.isEmpty()) { return null; } return result.toArray(new FontVariationAxis[0]); } /** @hide */ public static @NonNull List<FontVariationAxis> fromFontVariationSettingsForList( @Nullable String settings) { if (settings == null || settings.isEmpty()) { return Collections.emptyList(); } final ArrayList<FontVariationAxis> axisList = new ArrayList<>(); final int length = settings.length(); for (int i = 0; i < length; i++) { Loading Loading @@ -172,9 +183,9 @@ public final class FontVariationAxis { i = endOfValueString; } if (axisList.isEmpty()) { return null; return Collections.emptyList(); } return axisList.toArray(new FontVariationAxis[0]); return axisList; } /** Loading