Status Update
Comments
il...@google.com <il...@google.com>
da...@google.com <da...@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
il...@google.com <il...@google.com>
da...@google.com <da...@google.com> #3
I have a crash workaround that just set all the transitionName again upon click the button.
It still has issue that it does not animate the right panel of the action list.
da...@google.com <da...@google.com> #4
For debugging: add this line to frameworks/support/samples/SupportLeanbackDemos/build.gradle to force it build from fragment library source: implementation(project(":fragment:fragment"))
Then install the sample app on TV emulator: ./gradlew support-leanback-demos:installDebug
There are two menus in the demo app home screen: "Guided Step" and "Guided Step (Support Version)", first is the framework fragment that doesn't crash, second is the support library version fragment that will crash with latest fragment source code.
jb...@google.com <jb...@google.com> #5
Based on the videos, it looks like fragment 1.3.0
is doing the shared element transition for the next button and fragment 1.2.5
is not. In the 1.3.0
, you see the text "Next" does not move, indicating that it is being shared between the two transitioning fragments. From the description, it seems like you don't want all of the transitions in the onAddSharedElementTransition
method action_fragment_background
, (guidedactions_list_background
, or guidedactions_list_background2
, etc.) in other cases.
For the other issue of the shared element being null. It looks like we could be accidentally clearing the transition names of views that were marked as shared element transitions, but actually aren't. This isn't an issue if you use ViewCompat.setTransitionName()
before adding your shared element transition, but if you set it in the view xml as leanback does, it never gets set again. Only adding shared elements for views that are actually doing a sharedElementTransition or calling setTransitionName
before adding shared elements will always work regardless of what fragments does.
jb...@google.com <jb...@google.com>
da...@google.com <da...@google.com> #6
The fragment replace fragment transition is defined here
The reason that GuidedStepFragment want *all* of that to be shared element transition is because ChangeBounds transition needs to change bounds of every view in the hiearchy, from the RecyclerView, up to the root.
da...@google.com <da...@google.com> #7
jb...@google.com <jb...@google.com> #8
We are going to address the issue with clearing the transition names that is causing the crash.
The transitions themselves are working as intended. The old system would only look at named views, not the children at all when targeting the shared element transition. We now look at the entire view hierarchy so children are transitioned properly.
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit ae6aff9326ce2b4f25731635230f600be18a3ba6
Author: Jeremy Woods <jbwoods@google.com>
Date: Thu Mar 04 15:28:27 2021
Ensure Fragments do not clear view transitionNames
When transitioning views are nested within ViewGroups that have
transitionNames but are not transitioning groups, the views are captured
as sharedElement views multiple times within the DefaultSpecialEffects
controller. As a result of this, as we collect and clear the transition
names, we capture a null name and end up restoring the null name to the
view once the shared element transition has finished.
We should only capture each shared element view once and therefore we
only restore it once, with the proper transition name.
RelNote: "Views within in a shared element hierarchy will no longer have
their transition name cleared when doing a shared element transition."
Test: testNestedSharedElementView
Bug: 179934757
Change-Id: I4d4a6d7770d5c6d54e4c647559d5cabae71f0051
A fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentSharedElementTransitionTest.kt
A fragment/fragment/src/androidTest/res/layout/nested_transition_groups.xml
M fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.java
jb...@google.com <jb...@google.com> #10
This has been fixed internally and will be available in the next version of Fragments.
Description
Component used:
When using the above components together, there are two problems:
GuidedSupportFragment.add
.When using Fragment 1.2.5, there is no problem.
Sample project attached.