Status Update
Comments
ki...@google.com <ki...@google.com>
si...@google.com <si...@google.com>
ja...@gmail.com <ja...@gmail.com> #2
<transition xmlns:android="
<item android:drawable="@drawable/test_drawable_blue"/>
<item android:drawable="@drawable/test_drawable_green"/>
</transition>
where blue/green drawables look like this:
<shape
xmlns:android="
android:shape="rectangle">
<size
android:width="@dimen/drawable_large_size"
android:height="@dimen/drawable_small_size" />
<solid
android:color="@color/test_blue" />
</shape>
Then added this test:
@Test
public void testMutateTransitionDrawable() {
Drawable drawable = ResourcesCompat.getDrawable(mResources,
R.drawable.test_transition_drawable, null);
assertTrue(drawable instanceof TransitionDrawable);
Drawable mutated = drawable.mutate();
assertTrue(drawable instanceof TransitionDrawable);
assertTrue(mutated instanceof TransitionDrawable);
}
It passes on the device. Going to also try on other earlier devices a bit later in the day once they are charged.
ru...@gcpsoftware.com <ru...@gcpsoftware.com> #3
e....@gmail.com <e....@gmail.com> #4
jh...@themeetgroup.com <jh...@themeetgroup.com> #5
I see that the above CL has had some movement recently, which is great!
Out of curiosity, will this enable picking up fontWeight and/or textFontWeight from view styles/TextAppearance automatically (at least in AppCompatTextView)? Or is this only going to enable TypefaceCompat.create()? The code seems to be implementing only the Typeface side of this, but not actually utilizing that in AppCompatTextView.
Our concern has been that there's no way to define a proper font-family
resource, set it once, and then let the View/style/TextAppearance select the right weight from there. That is, the way that the framework fonts.xml font families work.
ap...@google.com <ap...@google.com> #6
Branch: androidx-main
commit daf12216d3afba24fe01e87573da6785044a2d26
Author: Sean McQuillan <seanmcq@google.com>
Date: Fri Apr 08 14:13:29 2022
When TypefaceCompat.create fallback fails don't throw
Previously: Reflection invocation could error in unknown circumstances
Now: Typeface fallback will silently defer to legacy implementation.
Bug:
Test: ./gradlew :core:core:cAT
Change-Id: I8ac8ecb9ba3a631c17bab53e44e73ecd024589ad
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatBaseImpl.java
M core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi21.java
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AccessibilityIteratorsTest.kt
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/CursorAnchorInfoBuilderTest.kt
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidFontResourceLoaderTest.kt
M core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi26.java
ap...@google.com <ap...@google.com> #7
Branch: androidx-main
commit 1f602ac9318d4c7368a64af93a5c53f88b795628
Author: Sean McQuillan <seanmcq@google.com>
Date: Wed Jun 29 12:38:11 2022
Move ui-test-font to testutils-fonts
This allows the test fonts to be used by both Compose and non-compose
androidx modules.
Update TypefaceCompat.create tests to use new fonts.
Bug:
Test: ./gradlew cAT test
Change-Id: Ief0d672c9571a13e5471ed03e1f35fb00cc5347f
A testutils/testutils-fonts/src/commonMain/java/androidx/testutils/WeightStyleFont.kt
M compose/ui/ui-text/build.gradle
A testutils/testutils-fonts/build.gradle
D compose/ui/ui-test-font/api/1.1.0-beta05.txt
M testutils/testutils-fonts/src/commonMain/resources/font/kern_font.ttf
M testutils/testutils-fonts/src/font_ttx/test_400_italic.ttx
M testutils/testutils-fonts/src/font_ttx/test_800_italic.ttx
D compose/ui/ui-test-font/api/res-1.0.0-beta07.txt
D compose/ui/ui-test-font/build.gradle
D compose/ui/ui-test-font/api/res-1.1.0-beta03.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalMultiLineTest.kt
D compose/ui/ui-test-font/api/public_plus_experimental_1.2.0-beta02.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_800_regular.ttf
D compose/ui/ui-test-font/api/1.0.0-beta02.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_700_italic.ttf
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta05.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta09.txt
M testutils/testutils-fonts/src/font_ttx/test_400_regular.ttx
M testutils/testutils-fonts/src/font_ttx/test_200_regular.ttx
D compose/ui/ui-test-font/api/restricted_1.0.0-beta05.txt
D compose/ui/ui-test-font/api/restricted_1.1.0-beta05.txt
M testutils/testutils-fonts/src/font_ttx/test_900_regular.ttx
D compose/ui/ui-test-font/api/res-1.2.0-beta04.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_300_regular.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/FontPaddingWithCustomFallbackTest.kt
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/input/CursorAnchorInfoBuilderTest.kt
D compose/ui/ui-test-font/api/res-1.1.0-beta05.txt
D compose/ui/ui-test-font/api/res-1.0.0-beta05.txt
D compose/ui/ui-test-font/api/res-1.0.0-beta03.txt
M compose/ui/ui/build.gradle
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta07.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt
D compose/ui/ui-test-font/api/1.0.0-beta09.txt
D compose/ui/ui-test-font/api/restricted_1.2.0-beta04.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt
D compose/ui/ui-test-font/api/1.2.0-beta01.txt
D compose/ui/ui-test-font/api/restricted_1.1.0-beta03.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta03.txt
M compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/FontTestData.kt
D compose/ui/ui-test-font/api/res-1.2.0-beta02.txt
M testutils/testutils-fonts/src/font_ttx/tall_font.ttx
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta08.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.1.0-beta04.txt
D compose/ui/ui-test-font/api/restricted_1.2.0-beta02.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta02.txt
D compose/ui/ui-test-font/api/1.0.0-beta06.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.1.0-beta02.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_600_italic.ttf
M testutils/testutils-fonts/src/commonMain/resources/font/test_800_italic.ttf
D compose/ui/ui-test-font/api/res-1.0.0-beta02.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_100_regular.ttf
D compose/ui/ui-test-font/api/res-current.txt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextTestExtensions.kt
D compose/ui/ui-test-font/api/res-1.0.0-beta09.txt
D compose/ui/ui-test-font/api/1.1.0-beta03.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_400_italic.ttf
M testutils/testutils-fonts/src/commonMain/resources/font/test_200_italic.ttf
D compose/ui/ui-test-font/api/1.0.0-beta10.txt
D compose/ui/ui-test-font/api/1.2.0-beta04.txt
D compose/ui/ui-test-font/api/1.0.0-beta04.txt
M testutils/testutils-fonts/src/font_ttx/kern_font.ttx
D compose/ui/ui-test-font/api/current.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta03.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta07.txt
M testutils/testutils-fonts/src/font_ttx/sample_font.ttx
M testutils/testutils-fonts/src/font_ttx/test_200_italic.ttx
M testutils/testutils-fonts/src/font_ttx/test_300_regular.ttx
M testutils/testutils-fonts/src/commonMain/resources/font/test_900_regular.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/PaintBoundsTest.kt
M testutils/testutils-fonts/src/commonMain/resources/font/test_400_regular.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutFillBoundingBoxesTest.kt
M testutils/testutils-fonts/src/font_ttx/asset_font.ttx
D compose/ui/ui-test-font/api/public_plus_experimental_1.2.0-beta03.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta08.txt
M testutils/testutils-fonts/src/font_ttx/test_600_italic.ttx
M text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta04.txt
M testutils/testutils-fonts/src/font_ttx/test_800_regular.ttx
D compose/ui/ui-test-font/api/restricted_1.1.0-beta02.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta06.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta02.txt
M compose/ui/ui-inspection/src/androidTest/java/androidx/compose/ui/inspection/inspector/LayoutInspectorTreeTest.kt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta10.txt
D compose/ui/ui-test-font/api/res-1.1.0-beta02.txt
D compose/ui/ui-test-font/api/res-1.0.0-beta06.txt
D compose/ui/ui-test-font/api/public_plus_experimental_current.txt
M testutils/testutils-fonts/src/commonMain/resources/font/tall_font.ttf
D compose/ui/ui-test-font/api/res-1.1.0-beta04.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_900_italic.ttf
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta06.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.2.0-beta01.txt
M core/core/build.gradle
D compose/ui/ui-test-font/api/1.0.0-beta08.txt
D compose/ui/ui-test-font/api/1.2.0-beta02.txt
D compose/ui/ui-test-font/api/restricted_1.1.0-beta04.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta04.txt
M testutils/testutils-fonts/OWNERS
M testutils/testutils-fonts/src/commonMain/resources/font/sample_font.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/FontPaddingTest.kt
M compose/foundation/foundation/build.gradle
M testutils/testutils-fonts/src/font_ttx/test_500_regular.ttx
M testutils/testutils-fonts/src/commonMain/resources/font/test_700_regular.ttf
M testutils/testutils-fonts/src/font_ttx/test_100_regular.ttx
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AccessibilityIteratorsTest.kt
D compose/ui/ui-test-font/api/restricted_1.2.0-beta03.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutIntrinsicWidthTest.kt
M testutils/testutils-fonts/src/commonMain/resources/font/test_200_regular.ttf
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidFontResourceLoaderTest.kt
D compose/ui/ui-test-font/api/res-1.0.0-beta04.txt
M testutils/testutils-fonts/src/font_ttx/test_100_italic.ttx
M text/text/build.gradle
M testutils/testutils-fonts/src/androidMain/assets/subdirectory/asset_font.ttf
D compose/ui/ui-test-font/api/restricted_current.txt
M testutils/testutils-fonts/src/commonMain/resources/font/sample_font2.ttf
M text/text/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt
M core/core/src/androidTest/res/font/weighttestfont.xml
D compose/ui/ui-test-font/api/public_plus_experimental_1.1.0-beta03.txt
M testutils/testutils-fonts/src/font_ttx/test_500_italic.ttx
D compose/ui/ui-test-font/api/res-1.0.0-beta10.txt
D compose/ui/ui-test-font/api/1.0.0-beta05.txt
M testutils/testutils-fonts/src/font_ttx/test_700_italic.ttx
M testutils/testutils-fonts/src/font_ttx/test_900_italic.ttx
D compose/ui/ui-test-font/api/res-1.2.0-beta01.txt
D compose/ui/ui-test-font/api/res-1.2.0-beta03.txt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldTest.kt
M core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
M testutils/testutils-fonts/src/font_ttx/test_600_regular.ttx
M testutils/testutils-fonts/src/commonMain/resources/font/test_600_regular.ttf
D compose/ui/ui-test-font/api/1.1.0-beta02.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.0.0-beta09.txt
D compose/ui/ui-test-font/api/restricted_1.0.0-beta10.txt
D compose/ui/ui-test-font/api/public_plus_experimental_1.1.0-beta05.txt
D compose/ui/ui-test-font/api/1.0.0-beta07.txt
D compose/ui/ui-test-font/api/restricted_1.2.0-beta01.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt
M testutils/testutils-fonts/src/androidMain/AndroidManifest.xml
D compose/ui/ui-test-font/api/1.2.0-beta03.txt
M settings.gradle
D compose/ui/ui-test-font/api/1.0.0-beta03.txt
M testutils/testutils-fonts/src/commonMain/resources/font/test_500_italic.ttf
M testutils/testutils-fonts/src/commonMain/resources/font/test_500_regular.ttf
M testutils/testutils-fonts/src/font_ttx/test_700_regular.ttx
M testutils/testutils-fonts/src/commonMain/resources/font/test_300_italic.ttf
D compose/ui/ui-test-font/api/1.1.0-beta04.txt
M text/text/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
M testutils/testutils-fonts/src/commonMain/resources/font/test_100_italic.ttf
M testutils/testutils-fonts/src/commonMain/resources/font/invalid_font.ttf
M docs-tip-of-tree/build.gradle
D compose/ui/ui-test-font/api/public_plus_experimental_1.2.0-beta04.txt
M compose/ui/ui-inspection/build.gradle
D compose/ui/ui-test-font/api/res-1.0.0-beta08.txt
M testutils/testutils-fonts/src/font_ttx/test_300_italic.ttx
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit 76a0566121b58e1d9722352ac1e70e35dd1098fe
Author: Sean McQuillan <seanmcq@google.com>
Date: Tue Mar 29 15:07:23 2022
TypefaceCompat create falls back to Typeface.create
On API 14-20 fall back to platform Typeface.create if compat impl cannot
resolve.
Also remove extra logging from TypefaceCompat.create path.
Test: ./gradlew :core;core:cAT
Bug:
Relnote: "TypefaceCompate.create(..., weight, italic) will fallback to
platform Typeface.create when compat impl cannot resolve on API 14-20"
Change-Id: I1ee34c7e38fc36174151d88d363adaee4371cb51
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatBaseImpl.java
M core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
M core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi21.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompat.java
M core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi26.java
M core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi14.java
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit 553679730518b7cf295642500603b4adb90191d3
Author: Eugen Pechanec <e.pechanec@gmail.com>
Date: Sun Mar 28 13:56:43 2021
Backport Typeface.create(Typeface, int weight, boolean italic)
API 28+ uses public API.
API 26-27 uses existing private JNI method.
API 21-25 does this in two steps, first create Typeface with matching
italics, then adjust weight, both using existing private JNI methods.
API < 19 leverages the fact that the only place a Typeface family with
multiple weights could come from is TypefaceCompat.
All implementations use a small cache that mimics the one on API 28.
Fallback to API < 19 implementation, if new private API isn't available,
or return unaltered input, if that fails.
Typeface#isBold works on API 26+ (same as public API) so that any font
with *requested* weight 600+ is bold. This is not possible to mimic
on API 21+ without diverging from intended font weight resolution path.
On API < 21 (loading font from temp file) setting style is impossible.
Relnote: Backported `Typeface#create(Typeface, int, boolean)` which allows creating typeface with specific weight from a font family
Test: Run TypefaceCompatTest#testTypeFaceCompatCreateWithExactStyle
BUG: 145311058
Change-Id: I342dc928edd1e8e5dbc018ca5375cceb047425e5
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatBaseImpl.java
A core/core/src/androidTest/res/font/weighttestfont.xml
M core/core/api/public_plus_experimental_current.txt
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java
M core/core/api/current.txt
A core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi26.java
M core/core/api/restricted_current.txt
M core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
A core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi21.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompat.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java
A core/core/src/main/java/androidx/core/graphics/WeightTypefaceApi14.java
e....@gmail.com <e....@gmail.com> #10
This can be closed now
xa...@gmail.com <xa...@gmail.com> #11
TypefaceCompat.create was backported
but TextView textFontWeight attribute seams not
why?
Description
Motivation:
With android:textFontWeight backported (backed by the above-mentioned method) we could use text appearances with different weights - by referencing font family and weight - since API 16 (?) in AppCompatTextView.
This is currently only possible since API 28.
Another potential use is a future TypeAppearanceSpanCompat.
Example:
res/font/raleway.xml
<font-family xmlns:app="
<font
app:font="@font/raleway_thin"
app:fontStyle="normal"
app:fontWeight="100" />
<font
app:font="@font/raleway_thin_italic"
app:fontStyle="italic"
app:fontWeight="100" />
<font
app:font="@font/raleway_regular"
app:fontStyle="normal"
app:fontWeight="400" />
</font-family>
res/values/styles.xml
<resources>
<style name="TextAppearance.Raleway.Regular" parent="TextAppearance.AppCompat">
<item name="android:fontFamily">@font/raleway</item>
<item name="android:textFontWeight">400</item>
<item name="textFontWeight">400</item>
</style>
<style name="TextAppearance.Raleway.Thin" parent="TextAppearance.AppCompat">
<item name="android:fontFamily">@font/raleway</item>
<item name="android:textFontWeight">100</item>
<item name="textFontWeight">100</item>
</style>
<style name="TextAppearance.Raleway.Thin.Italic" parent="TextAppearance.AppCompat">
<item name="android:fontFamily">@font/raleway</item>
<item name="android:textFontWeight">100</item>
<item name="textFontWeight">100</item>
<item name="android:textStyle">italic</item>
</style>
</resources>
Example implementation:
On API 26-27 we could re-implement Typeface.create mentioned above as the backing JNI method already exists.
See
On API 21-25 we'd need to first create a Typeface with matching italic (using the Typeface.create with style API) and then use the JNI method to create weight alias.
See
On API 20 and below we could leverage the fact that the only place weight typefaces could come from are from ResourcesCompat.getFont so we use TypefaceCompat internals to find the font family and look for best match in Java.
See