Fixed
Status Update
Comments
il...@google.com <il...@google.com> #2
Project: platform/frameworks/support
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
https://android-review.googlesource.com/1360099
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
co...@google.com <co...@google.com> #3
Ah that makes sense. We're using it for the latter -- knowing whether or not the Fragment is being recreated. Is there a better way to test for that?
il...@google.com <il...@google.com> #4
No, that's the best way. You can store a value in your state (i.e., outState.putBoolean("restored", true)) as a workaround, but we should just change it to send you an empty Bundle on restore (even if under the hood we're actually nulling things out to avoid bloating the save instance state). I'll leave this bug open to cover that work.
ke...@gmail.com <ke...@gmail.com> #5
Sounds good, we'll just go with that workaround for now. Thanks!
il...@google.com <il...@google.com>
il...@google.com <il...@google.com> #6
This has been fixed by https://android-review.googlesource.com/845020 and will be available in Fragments 1.1.0-alpha03 - Fragments will always have a non-null Bundle when restored from instance state.
Description
Version used: 1.1.0-alplha01
Devices/Android versions reproduced on: Essential PH-1, Android 9.0 (PPR1.181005.034)
Attached a sample project to reproduce the issue. Essentially, given the component structure:
Activity:
supportFragmentManager -> HeadlessFragment
HeadlessFragment:
childFragmentManager -> HeadlessChildFragment
When the Activity is recreated, the state provided to the HeadlessChildFragment when recreating is null. However, logging the calls to onSaveInstanceState() it's clear that the Fragment's state is being saved, it's just failing to be restored. Running with FragmentManager.enableDebugLogging(true) gives the following output:
2018-11-20 12:59:46.293 17352-17352/ D/MainActivity: 218206560: onCreate(): savedInstanceState == null
2018-11-20 12:59:46.315 17352-17352/ V/FragmentManager: Commit: BackStackEntry{bc270bf}
2018-11-20 12:59:46.316 17352-17352/ D/FragmentManager: mName=null mIndex=-1 mCommitted=false
2018-11-20 12:59:46.316 17352-17352/ D/FragmentManager: Operations:
2018-11-20 12:59:46.316 17352-17352/ D/FragmentManager: Op #0: ADD ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:46.340 17352-17352/ V/FragmentManager: Run: BackStackEntry{bc270bf}
2018-11-20 12:59:46.343 17352-17352/ V/FragmentManager: add: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:46.343 17352-17352/ V/FragmentManager: Added fragment to active set ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:46.343 17352-17352/ V/FragmentManager: moveto CREATED: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:46.343 17352-17352/ D/ParentHeadlessFragment: 48128908: onCreate() with savedInstanceState = null
2018-11-20 12:59:46.345 17352-17352/ V/FragmentManager: Commit: BackStackEntry{85b9824}
2018-11-20 12:59:46.345 17352-17352/ D/FragmentManager: mName=null mIndex=-1 mCommitted=false
2018-11-20 12:59:46.345 17352-17352/ D/FragmentManager: Operations:
2018-11-20 12:59:46.345 17352-17352/ D/FragmentManager: Op #0: ADD ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:46.345 17352-17352/ V/FragmentManager: moveto ACTIVITY_CREATED: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:46.345 17352-17352/ V/FragmentManager: Run: BackStackEntry{85b9824}
2018-11-20 12:59:46.346 17352-17352/ V/FragmentManager: add: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:46.346 17352-17352/ V/FragmentManager: Added fragment to active set ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:46.346 17352-17352/ V/FragmentManager: moveto CREATED: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:46.346 17352-17352/ D/ChildHeadlessFragment: 120778637: onCreate() with savedInstanceState = null
2018-11-20 12:59:46.346 17352-17352/ V/FragmentManager: moveto ACTIVITY_CREATED: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:46.347 17352-17352/ V/FragmentManager: moveto STARTED: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:46.347 17352-17352/ V/FragmentManager: moveto STARTED: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:46.383 17352-17352/ W/ildfragmenttes: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2018-11-20 12:59:46.384 17352-17352/ W/ildfragmenttes: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2018-11-20 12:59:46.394 17352-17352/ V/FragmentManager: moveto RESUMED: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:46.394 17352-17352/ V/FragmentManager: moveto RESUMED: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
// Configuration changed:
2018-11-20 12:59:58.045 17352-17352/ V/FragmentManager: movefrom RESUMED: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.045 17352-17352/ V/FragmentManager: movefrom RESUMED: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.048 17352-17352/ V/FragmentManager: movefrom STARTED: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.048 17352-17352/ V/FragmentManager: movefrom STARTED: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.048 17352-17352/ D/MainActivity: 218206560: onSaveInstanceState()
2018-11-20 12:59:58.050 17352-17352/ D/ParentHeadlessFragment: 48128908: onSaveInstanceState()
2018-11-20 12:59:58.050 17352-17352/ D/ChildHeadlessFragment: 120778637: onSaveInstanceState()
// I suspect the issue is here, where the Bundle listed in the log is null:
2018-11-20 12:59:58.051 17352-17352/ V/FragmentManager: Saved state of ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}: null
2018-11-20 12:59:58.051 17352-17352/ V/FragmentManager: saveAllState: adding fragment (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e): ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.051 17352-17352/ V/FragmentManager: Saved state of ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}: Bundle[{android:support:fragments=androidx.fragment.app.FragmentManagerState@beee1bb}]
2018-11-20 12:59:58.051 17352-17352/ V/FragmentManager: saveAllState: adding fragment (c94b7470-c453-471f-9231-254d296d2ab1): ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.052 17352-17352/ V/FragmentManager: movefrom ACTIVITY_CREATED: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.052 17352-17352/ V/FragmentManager: movefrom ACTIVITY_CREATED: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.054 17352-17352/ V/FragmentManager: movefrom CREATED: ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.054 17352-17352/ V/FragmentManager: movefrom CREATED: ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.054 17352-17352/ V/FragmentManager: Removed fragment from active set ChildHeadlessFragment{732ef8d (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.055 17352-17352/ V/FragmentManager: Removed fragment from active set ParentHeadlessFragment{2de638c (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.088 17352-17352/ D/MainActivity: 178784293: onCreate(): savedInstanceState == Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@7ee69, 2131165191=androidx.appcompat.widget.Toolbar$SavedState@c3ab0ee, 2131165193=android.view.AbsSavedState$1@7ee69, 2131165199=android.view.AbsSavedState$1@7ee69, 2131165231=android.view.AbsSavedState$1@7ee69}}], android:support:fragments=androidx.fragment.app.FragmentManagerState@cfa098f, android:lastAutofillId=1073741823, android:fragments=android.app.FragmentManagerState@8f9d41c}]
2018-11-20 12:59:58.091 17352-17352/ V/FragmentManager: Instantiated fragment ParentHeadlessFragment{917afab (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.092 17352-17352/ V/FragmentManager: restoreAllState: active (c94b7470-c453-471f-9231-254d296d2ab1): ParentHeadlessFragment{917afab (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.092 17352-17352/ V/FragmentManager: restoreAllState: added (c94b7470-c453-471f-9231-254d296d2ab1): ParentHeadlessFragment{917afab (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.092 17352-17352/ V/FragmentManager: moveto CREATED: ParentHeadlessFragment{917afab (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.092 17352-17352/ D/ParentHeadlessFragment: 152547243: onCreate() with savedInstanceState = Bundle[{android:support:fragments=androidx.fragment.app.FragmentManagerState@beee1bb}]
2018-11-20 12:59:58.093 17352-17352/ V/FragmentManager: Instantiated fragment ChildHeadlessFragment{e7601a1 (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.093 17352-17352/ V/FragmentManager: restoreAllState: active (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e): ChildHeadlessFragment{e7601a1 (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.093 17352-17352/ V/FragmentManager: restoreAllState: added (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e): ChildHeadlessFragment{e7601a1 (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.093 17352-17352/ V/FragmentManager: moveto CREATED: ChildHeadlessFragment{e7601a1 (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.093 17352-17352/ D/ChildHeadlessFragment: 242614689: onCreate() with savedInstanceState = null
2018-11-20 12:59:58.107 17352-17352/ V/FragmentManager: moveto ACTIVITY_CREATED: ParentHeadlessFragment{917afab (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.107 17352-17352/ V/FragmentManager: moveto ACTIVITY_CREATED: ChildHeadlessFragment{e7601a1 (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.108 17352-17352/ V/FragmentManager: moveto STARTED: ParentHeadlessFragment{917afab (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.108 17352-17352/ V/FragmentManager: moveto STARTED: ChildHeadlessFragment{e7601a1 (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}
2018-11-20 12:59:58.127 17352-17352/ V/FragmentManager: moveto RESUMED: ParentHeadlessFragment{917afab (c94b7470-c453-471f-9231-254d296d2ab1) parent}
2018-11-20 12:59:58.127 17352-17352/ V/FragmentManager: moveto RESUMED: ChildHeadlessFragment{e7601a1 (e67b23a6-fe18-484d-b8d0-db2da9ee2a7e) child}