Status Update
Comments
so...@google.com <so...@google.com>
yi...@google.com <yi...@google.com> #2
We have some support in androidx.compose.ui.autofill
Leaving this bug open in case Ralston wants to add more info
am...@twitter.com <am...@twitter.com> #3
I found an example
D/Autofill Status: Autofill popup isn't shown because autofill is not available.
Did you set up autofill?
1. Go to Settings > System > Languages&input > Advanced > Autofill Service
2. Pick a service
Did you add an account?
1. Go to Settings > System > Languages&input > Advanced
2. Click on the settings icon next to the Autofill Service
3. Add your account
Is this a bug on your side or do the app developers of these password managers need to change their implementation?
fa...@gmail.com <fa...@gmail.com> #5
yi...@google.com <yi...@google.com> #6
fa...@gmail.com <fa...@gmail.com> #7
fa...@gmail.com <fa...@gmail.com> #8
I setup this modifier:
@OptIn(ExperimentalComposeUiApi::class)
fun Modifier.autofill(
autofillTypes: List<AutofillType>,
onFill: ((String) -> Unit),
) = composed {
val autofill = LocalAutofill.current
val autofillNode = AutofillNode(onFill = onFill, autofillTypes = autofillTypes)
LocalAutofillTree.current += autofillNode
this.onGloballyPositioned {
autofillNode.boundingBox = it.boundsInWindow()
}.onFocusChanged { focusState ->
autofill?.run {
if (focusState.isFocused) {
requestAutofillForNode(autofillNode)
} else {
cancelAutofillForNode(autofillNode)
}
}
}
}
And use it like this:
val emailState = remember { EmailState() }
Email(
modifier = Modifier.autofill(
autofillTypes = listOf(
AutofillType.Username,
AutofillType.EmailAddress
),
onFill = { emailState.text = it },
),
emailState = emailState,
onImeAction = { onForgotPasswordSubmitted(emailState.text) }
)
With these steps, autofill works for me.
yi...@google.com <yi...@google.com> #10
Works perfectly fine on the latest stable and alpha versions. Did you check in my second comment if you enabled everything?
ae...@google.com <ae...@google.com> #11
I believe so?
I copied the modifier and then used
modifier = Modifier.autofill(
autofillTypes = listOf(
AutofillType.Username,
AutofillType.EmailAddress
),
onFill = { emailState.text = it },
)
on my text field.
pw...@google.com <pw...@google.com> #12
fa...@gmail.com <fa...@gmail.com> #13
The auto-filling works for me with the latest alpha version, but I'm never presented with the save dialog though.
I am having exactly same problem. Autofill works, but the Save dialog is never shown...
yi...@google.com <yi...@google.com> #14
Any updates on this? I can't get LastPass to display at all. I can ONLY get the Google Auto-fill service to work
yi...@google.com <yi...@google.com> #15
Same here, autofill in Jetpack Compose only works with the Google auto-fill service. When picking 1Password as the Auto-fill service in Settings, the debug log prints out:
D/Autofill Status: Autofill popup isn't shown because autofill is not available.
Did you set up autofill?
1. Go to Settings > System > Languages&input > Advanced > Autofill Service
2. Pick a service
Did you add an account?
1. Go to Settings > System > Languages&input > Advanced
2. Click on the settings icon next to the Autofill Service
3. Add your account
he...@ataulm.com <he...@ataulm.com> #16
cb...@google.com <cb...@google.com> #17
pb...@google.com <pb...@google.com> #18
1.3.1 won't dialog prompt to save a password for me but will prompt to autofill for google.
As a workaround, you can wrap the TextInputLayout from a layout file to an AndroidView in compose.
@Composable
fun TextFieldView(
modifier: Modifier = Modifier,
textState: MutableState<String>,
@LayoutRes layoutRes: Int,
textChanged: () -> Unit = {},
) {
AndroidView(
modifier = modifier
.fillMaxWidth(),
factory = { context ->
val layout = LayoutInflater.from(context).inflate(layoutRes, null)
layout.findViewById<TextInputEditText>(R.id.tilET).apply {
doAfterTextChanged {
textState.value = safeText
textChanged.invoke()
}
}
layout
},
update = {
}
)
}
val EditText?.safeText: String get() = this?.editableText?.toString().orEmpty().trim()
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.textfield.TextInputLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/til"
style="@style/TextInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/tilET"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="username"
android:imeOptions="actionNext"
android:inputType="textNoSuggestions"
android:selectAllOnFocus="true" />
</com.google.android.material.textfield.TextInputLayout>
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.textfield.TextInputLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/til"
style="@style/TextInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
app:endIconMode="password_toggle">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/tilET"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autofillHints="password"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:selectAllOnFocus="true" />
</com.google.android.material.textfield.TextInputLayout>
yi...@google.com <yi...@google.com>
pw...@google.com <pw...@google.com> #19
fa...@gmail.com <fa...@gmail.com> #20
ro...@gmail.com <ro...@gmail.com> #21
lo...@gmail.com <lo...@gmail.com> #22
Please fix 1password and compose
da...@omadahealth.com <da...@omadahealth.com> #23
al...@dayforce.com <al...@dayforce.com> #24
Any update? It would be good to fix it asap, please.
ae...@google.com <ae...@google.com> #25
Any update on this?
It can be overlooked since it is simple but one of the important convenience feature.
al...@gmail.com <al...@gmail.com> #26
Autofill is currently listed as "In Focus" on our
pw...@google.com <pw...@google.com>
va...@google.com <va...@google.com> #27
compose bom version: 2023.06.01
AS: Giraffe 2022.3.1
ae...@google.com <ae...@google.com> #28
Solution from AutofillManager
launches unsafe intent:
StrictMode policy violation: android.os.strictmode.UnsafeIntentLaunchViolation: Launch of unsafe intent: Intent { (has extras) }
at android.os.StrictMode.onUnsafeIntentLaunch(StrictMode.java:2329)
at android.content.Intent.prepareToLeaveProcess(Intent.java:12589)
at android.content.Intent.prepareToLeaveProcess(Intent.java:12501)
at android.app.Activity.startIntentSenderForResultInner(Activity.java:5973)
at android.app.Activity.startIntentSenderForResult(Activity.java:5915)
at android.view.autofill.AutofillClientController.autofillClientAuthenticate(AutofillClientController.java:484)
at android.view.autofill.AutofillManager.authenticate(AutofillManager.java:2433)
at android.view.autofill.AutofillManager.-$$Nest$mauthenticate(Unknown Source:0)
at android.view.autofill.AutofillManager$AutofillManagerClient.lambda$authenticate$3(AutofillManager.java:3821)
at android.view.autofill.AutofillManager$AutofillManagerClient$$ExternalSyntheticLambda3.run(Unknown Source:12)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8762)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
ap...@google.com <ap...@google.com> #29
We are seeing "Contents can't be autofilled" toast message, when user has other password managers that aren't google, such as Samsung Pass
b....@gmail.com <b....@gmail.com> #30
Could you please post some updates on this?
- it is one year in the roadmap:
https://developer.android.com/jetpack/androidx/compose-roadmap - one CL abandoned more than a year ago:
https://android-review.googlesource.com/c/platform/frameworks/support/+/2434079 - another CL is getting silent:
https://android-review.googlesource.com/c/platform/frameworks/support/+/3009614
It is sad that almost 3 years after a stable release of Compose there is still no support for Autofill.
jo...@gmail.com <jo...@gmail.com> #31
A quick update here -
We built autofill for 1.7 and found that we need to do some substantial rework of the semantics system before it lands (this is ongoing top priority - aiming for hopefully 1.8).
Turning it on caused a large performance drop app-wide. We're working on fixing that, and then will turn autofill on.
It's currently #1 item on all of prioritization for compose feature work. Will give more update when it's getting closer to landing.
ap...@google.com <ap...@google.com> #32
lu...@livefront.com <lu...@livefront.com> #33
See
ae...@google.com <ae...@google.com> #34
lu...@livefront.com <lu...@livefront.com> #35
The majority of autofill CLs landed this week. It seems that the next alpha should have this :) 🤞
lu...@livefront.com <lu...@livefront.com> #36
We'd appreciate any feedback on the API shape. If you want to test the APIs, you can turn on the flag by adding ComposeUiFlags.isSemanticAutofillEnabled = true in your onCreate() method before super.onCreate() and add in the latest Snapshot version in your build.gradle file.
Please note that turning on this flag will lead to performance regressions and also know the API shape may be different when we officially release it.
Happy coding!
ae...@google.com <ae...@google.com> #37
lu...@livefront.com <lu...@livefront.com> #38
#36 are you only currently interested in API shape feedback, or should I be filing issues for non performance related bugs?
ae...@google.com <ae...@google.com> #39
I would love for the api shape to be the way it was with xml - a simple one lime flag
lu...@livefront.com <lu...@livefront.com> #40
lu...@livefront.com <lu...@livefront.com> #41
I agree. Adoption of the flags was not high. Adoption of this will be lower. Users blame the password manager not the apps that have not implemented the simple flags.
"I would love for the api shape to be the way it was with xml - a simple one lime flag"
eg...@gmail.com <eg...@gmail.com> #42
We are accepting all types of feedback, thank you so much to those who have already submitted! We hear your feedback about having autofill be one line and are working to incorporate that into the final version of Autofill in Compose along with the performance improvements. Unfortunately, we can’t communicate any specific timeframe, but stay tuned and we’ll update you here as soon as we can.
Compose Autofill will not solve the StrictModeUnsafeIntentViolation as this is a known issue that lies with the autofill framework team. We have raised this as an issue with the autofill framework team.
-Meghan
ae...@google.com <ae...@google.com> #43
Personally I care less about a 1 liner and more about versatility of the API.
The 1 liner is good if it doesn't limit what can be done.
First and foremost it should be an idiomatic API.
Description
It would be really useful to be able to change focus order as we were able to do it before with accessibilityTraversalAfter accessibilityTraversalBefore.
This feature is a must have, specifically when designing a view on the Z axe to actually specify to talkback in which order to read element.
Moreover, it is also necessary when using a FAB button, if the element behind is an infinite list, we should be able to set the focus to the FAB Button first otherwise the user experience for a blind person is really poor.
Thanks for you work on Jetpack Compose, and keep going !