Status Update
Comments
lo...@gmail.com <lo...@gmail.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> #3
ez...@gmail.com <ez...@gmail.com> #4
It is tied to the Activity or Fragment's lifecycle, but a Composable's lifecycle is dependand of the Activity or Fragment.
And simply providing the Registery for the Composable will cause an exception because you can only register a new caller before onStart
lo...@gmail.com <lo...@gmail.com> #5
Exactly, the API façade doesn't show it being tied to an Activity or a Fragment, but the actual implementation is definitely coupled to it because of this requirement, which I guess should be replaced with an alternative mechanism that can be registered later on (though the fastest is the best, for the cases where the process was killed).
il...@google.com <il...@google.com> #6
Re #4, #5 - tying it to a Lifecycle
is totally optional convenience and has always been totally optional (that's why there's a register
Lifecycle
).
You'll see from the StackOverflow answer listed in DisposableEffect
and unregistering in onDispose
, no Lifecycle
required.
ap...@google.com <ap...@google.com> #7
Branch: androidx-main
commit 1675fd6d1a791b8b236a2a89af1c85ade809abb8
Author: Jeremy Woods <jbwoods@google.com>
Date: Wed Feb 03 14:21:24 2021
Improve integration between ActivityForResult and Compose
Adding a CompositionLocal for getting an ActivityResultRegistryOwner
from a composable and a registerForActivityResult helper method to make
it easier to get ActivityResults from Composables.
RelNote: "There is a now a Composable registerForActivityResult function
for getting results from activities within composables."
Test: ActivityResultRegistryTest
Bug: 172690553
Change-Id: Ia78515f6693ebf6f1997ee0109df87dcc388dda7
M activity/activity-compose/api/current.txt
M activity/activity-compose/api/public_plus_experimental_current.txt
M activity/activity-compose/api/restricted_current.txt
M activity/activity-compose/build.gradle
A activity/activity-compose/samples/src/main/java/androidx/activity/compose/samples/RegisterForActivityResultSample.kt
A activity/activity-compose/src/androidTest/java/androidx/activity/compose/ActivityResultRegistryTest.kt
A activity/activity-compose/src/main/java/androidx/activity/compose/ActivityComposeUtils.kt
A activity/activity-compose/src/main/java/androidx/activity/compose/ActivityResultRegistry.kt
M activity/activity-compose/src/main/java/androidx/activity/compose/BackHandler.kt
il...@google.com <il...@google.com> #8
This didn't land in Activity Compose 1.3.0-alpha02
, but it will be available in an upcoming Activity Compose 1.3.0-alpha03
release.
no...@gmail.com <no...@gmail.com> #9
After migrating from the old activity.registerForActivityResult
to this mechanism, I received this error from down the call stack:
java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
If someone else has this problem, it can be fixed by adding the following dependency, as suggested in
implementation 'androidx.fragment:fragment:1.3.0'
il...@google.com <il...@google.com> #10
Re #9 - this is also specifically called out in the
Note: when upgrading to Activity
1.2.0
, you must upgrade to Fragment1.3.0
to fix issues with invalid request codes and ensure that permission requests are delivered correctly. TheInvalidFragmentVersionForActivityResult
Lint check will warn you if you do not upgrade to an appropriate Fragment version.
Description
Jetpack Compose release version: 1.0.0-alpha06
The Activity Result API and specifically the and provide an easy to use
ActivityResultRegistry
APIs are currently much easier to work with from activities and fragments as they implementActivityResultCaller
registerForActivityResult()
API.Something similar should be directly available for Composables. I don't think it is important to specifically implement
ActivityResultCaller
, but perhaps just providing a Compose specific version ofregisterForActivityResult()
:As demonstrated in this StackOverflow answer . This would handle the appropriate
register
andunregister
calls given the lifetime of the composable.