Status Update
Comments
lo...@gmail.com <lo...@gmail.com> #2
Besides usage in Compose, it'd be great for that API to be less coupled to Activity and Fragment for the cases you want your code to be modular and it relies on activity results.
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.