Status Update
Comments
ti...@google.com <ti...@google.com> #2
Branch: androidx-master-dev
commit c60f33e229e31ab328ef6b59dab63b264954831c
Author: Alexandre Elias <aelias@google.com>
Date: Fri Jul 10 16:23:09 2020
Semantics no-op cleanups
Partly in response to lmr's broad code review, I did a pass of
superficial API/implementation cleanup. The main changes are:
- I changed each Boolean SemanticsProperty where false is equivalent to
not being present to take "Unit" instead. This is conceptually
clearer: it avoids questions like "can I cancel out a semantics from a
merged child by setting it to false?" Because "property = Unit" looks
weird, I also changed the style of these to "property()".
- I moved the Semantics id generator closer to where it's used, in
SemanticsModifierCore. I made it internal and an AtomicInt.
(Note that integer ids are heavily used in the Android
AccessibilityNodeInfo APIs so I can't simply remove them entirely.)
- I deleted dead code. Some examples include SemanticsHintOverrides,
a public API not connected to anything, and SemanticsPropertyKey
merge() open method which is never called. (In both cases I have
a different plan in mind for accessibility.)
Fixes: 145951226
Fixes: 145955412
Test: existing tests
Relnote: "Single-value semantics properties now use a calling style.
For example, 'semantics { hidden = true }' is now written as:
'semantics { hidden() }'."
Change-Id: Ic1afd12ea22c926babc9662f1804d80b33aa0cfc
M ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/LayoutNodeModifierBenchmark.kt
M ui/ui-core/api/0.1.0-dev15.txt
M ui/ui-core/api/current.txt
M ui/ui-core/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-core/api/public_plus_experimental_current.txt
M ui/ui-core/api/restricted_0.1.0-dev15.txt
M ui/ui-core/api/restricted_current.txt
M ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/graphics/vector/VectorTest.kt
M ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/semantics/SemanticsTests.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidActuals.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Expect.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsConfiguration.kt
D ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsHintOverrides.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsModifier.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsOwner.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsWrapper.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
M ui/ui-foundation/api/0.1.0-dev15.txt
M ui/ui-foundation/api/current.txt
M ui/ui-foundation/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-foundation/api/public_plus_experimental_current.txt
M ui/ui-foundation/api/restricted_0.1.0-dev15.txt
M ui/ui-foundation/api/restricted_current.txt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Clickable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Dialog.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Scroller.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Selectable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/semantics/FoundationSemanticsProperties.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/CardTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxScreenshotTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonScreenshotTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ScaffoldTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/SnackbarTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/SurfaceTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ripple/RippleIndicationTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
M ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
M ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/CallSemanticsActionTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/ScrollToTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
M ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
M ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
M ui/ui-text/api/0.1.0-dev15.txt
M ui/ui-text/api/current.txt
M ui/ui-text/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-text/api/public_plus_experimental_current.txt
M ui/ui-text/api/restricted_0.1.0-dev15.txt
M ui/ui-text/api/restricted_current.txt
M ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreTextField.kt
M ui/ui-text/src/commonMain/kotlin/androidx/ui/text/TextSemanticsProperties.kt
al...@gmail.com <al...@gmail.com> #3
An S+ only developer option would be better than nothing IMO!
ta...@mercury.com <ta...@mercury.com> #4
Android 12 has a "Remove animations" accessibility preference which Compose doesn't appear to honor. Would this issue be related?
kl...@google.com <kl...@google.com> #5
For a start, could we at least introduce an animation scale composition local at least to allow apps to change their own compose animations? Then if we want to integrate with system settings in the future, we already have the hook we need into compose's animation system. Some other platforms let you adjust the animation speed at the OS level as well, so Android might not be the only platform on which we need to support this feature.
ti...@google.com <ti...@google.com> #6
Re #5:
It's a good point that the durataion scale could be useful for other platforms. Though I'm not sure about making it a composition local, as that would open doors to unexpected behaviors where at different levels of the tree the animation is playing at different rate.
The good news is, it seems like we are able to read the Settings.Global.TRANSITION_ANIMATION_SCALE
without requiring any permission. We should be able to wire that up with the internal duration scale that we are using and be backward compatible.
Re #4:
Yes. Accesibility does seem to be modifying the same settings as the duration scale in developer options:
ap...@google.com <ap...@google.com> #7
Branch: androidx-main
commit f253fe11ef6d1deda386a0b48cbceca01e1d5e38
Author: Doris Liu <tianliu@google.com>
Date: Fri Feb 11 11:42:29 2022
Wire up animation scale in Dev Options with Compose animation
This CL introduced a MotionDurationScale CoroutineContext.Element. This
allows the duration scale to be put in the coroutine context used
by Recomposer. At the same time, user code can define their own
duration scale and add it to a coroutine context. It will impact
all the animations in that coroutine context.
Fixes: 161675988
Test: Included. Also added a benchmark.
RelNote: "Horray! Compose animation now supports
'Animator duration scale' setting from Developer Options."
Change-Id: I31c2425ff560949f24ef873559057e14f6916a39
A compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/MotionDurationScale.kt
M compose/animation/animation-core/build.gradle
M compose/ui/ui/api/restricted_current.txt
M compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/InfiniteTransition.kt
M compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SuspendAnimation.kt
M compose/ui/ui/api/current.txt
A compose/animation/animation-core/src/test/java/androidx/compose/animation/core/DurationScaleTest.kt
A compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/LifecycleAwareWindowRecomposerBenchmark.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/WindowRecomposer.android.kt
M compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
M compose/ui/ui/api/public_plus_experimental_current.txt
ae...@google.com <ae...@google.com> #8
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit 23d09b5d5044d10cff93db84f5b59209f56d7e72
Author: Doris Liu <tianliu@google.com>
Date: Fri Feb 11 11:42:29 2022
Animation scale from settings expressed as a SateFlow
This CL introduced a MotionDurationScale CoroutineContext.Element. This
allows the duration scale to be put in the coroutine context used
by Recomposer. At the same time, user code can define their own
duration scale and add it to a coroutine context. It will impact
all the animations in that coroutine context.
Animation duration scale is now expressed as a global StateFlow per
application, with one ContentObserver that emits new values as
the settings change.
Fixes: 161675988
Test: Included. Also added a benchmark.
RelNote: "Horray! Compose animation now supports
'Animator duration scale' setting from Developer Options."
Change-Id: I5a4fc779a3fbfbcb2926ac1624cd679bb9b912ce
A compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/MotionDurationScale.kt
M compose/animation/animation-core/build.gradle
M compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/InfiniteTransition.kt
M compose/ui/ui/api/restricted_current.txt
M compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/SuspendAnimation.kt
A compose/animation/animation-core/src/test/java/androidx/compose/animation/core/DurationScaleTest.kt
M compose/ui/ui/api/current.txt
A compose/ui/ui/benchmark/src/androidTest/java/androidx/compose/ui/benchmark/LifecycleAwareWindowRecomposerBenchmark.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/WindowRecomposer.android.kt
M compose/animation/animation-core/src/commonMain/kotlin/androidx/compose/animation/core/Transition.kt
M compose/ui/ui/api/public_plus_experimental_current.txt
Description
- Window animation scale
- Transition animation scale
- Animator duration scale
in Developer options has no effect on transitions right now.
Not sure if there's a public API for them but they're important for debugging.