Use fallback-based line spacing in TextView etc
In TextView and Switch, version-gate the use of
setUseLineSpacingFromFallbacks() to apps targeting Android P and
later for backward compatibility.
In internal widgets, ImageFloatingTextView and SubtitleView, always
turn it on, since there is no backward compatibility concerns.
Bug: 28963299
Test: bit CtsWidgetTestCases:android.widget.cts.CheckedTextViewTest
Test: bit CtsWidgetTestCases:android.widget.cts.EditTextTest
Test: bit CtsWidgetTestCases:android.widget.cts.SwitchTest
Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest
Test: bit FrameworksCoreTests:android.widget.TextViewTest
Change-Id: Icfe4e71ba26bbc6755ba12ddab72e6bf20b3ce25
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 40253a1..2e1e963 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -33,6 +33,7 @@
import android.graphics.Region.Op;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
+import android.os.Build.VERSION_CODES;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
@@ -111,6 +112,7 @@
private CharSequence mTextOn;
private CharSequence mTextOff;
private boolean mShowText;
+ private boolean mUseFallbackLineSpacing;
private int mTouchMode;
private int mTouchSlop;
@@ -246,6 +248,11 @@
com.android.internal.R.styleable.Switch_switchPadding, 0);
mSplitTrack = a.getBoolean(com.android.internal.R.styleable.Switch_splitTrack, false);
+ // TODO: replace CUR_DEVELOPMENT with P once P is added to android.os.Build.VERSION_CODES.
+ // STOPSHIP if the above TODO is not done.
+ mUseFallbackLineSpacing =
+ context.getApplicationInfo().targetSdkVersion >= VERSION_CODES.CUR_DEVELOPMENT;
+
ColorStateList thumbTintList = a.getColorStateList(
com.android.internal.R.styleable.Switch_thumbTint);
if (thumbTintList != null) {
@@ -894,8 +901,9 @@
int width = (int) Math.ceil(Layout.getDesiredWidth(transformed, 0,
transformed.length(), mTextPaint, getTextDirectionHeuristic()));
- return new StaticLayout(transformed, mTextPaint, width,
- Layout.Alignment.ALIGN_NORMAL, 1.f, 0, true);
+ return StaticLayout.Builder.obtain(transformed, 0, transformed.length(), mTextPaint, width)
+ .setUseLineSpacingFromFallbacks(mUseFallbackLineSpacing)
+ .build();
}
/**