Status Update
Comments
ni...@google.com <ni...@google.com> #2
We have some support in androidx.compose.ui.autofill
Leaving this bug open in case Ralston wants to add more info
ra...@google.com <ra...@google.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?
wa...@reaktor.fi <wa...@reaktor.fi> #5
hv...@gmail.com <hv...@gmail.com> #6
na...@vitruvian.me <na...@vitruvian.me> #7
ra...@google.com <ra...@google.com>
sz...@gmail.com <sz...@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.
ap...@google.com <ap...@google.com> #10
Works perfectly fine on the latest stable and alpha versions. Did you check in my second comment if you enabled everything?
ap...@google.com <ap...@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.
ap...@google.com <ap...@google.com> #12
ap...@google.com <ap...@google.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...
ap...@google.com <ap...@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
ni...@google.com <ni...@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
ap...@google.com <ap...@google.com> #16
ap...@google.com <ap...@google.com> #17
ap...@google.com <ap...@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>
ap...@google.com <ap...@google.com> #19
ap...@google.com <ap...@google.com> #20
ap...@google.com <ap...@google.com> #21
I tried using similar to above example. But its not working & following logs are getting printed.
getAutofillClient(): null on super, trying to find activity thread getAutofillClient(): none of the 1 activities on com.xx@8b0a7bc have focus No AutofillClient for com.xx on context com.xxn@8b0a7bc requestHideFillUi(null): anchor = null
Autofill popup isn't shown because autofill is not available. Did you set up autofill?
- Go to Settings > System > Languages&input > Advanced > Autofill Service
- Pick a service
Did you add an account?
- Go to Settings > System > Languages&input > Advanced
- Click on the settings icon next to the Autofill Service
- Add your account
setSessionFinished(): from ACTIVE to FINISHED; autofillableIds=null
Can anyone help
an...@nrk.no <an...@nrk.no> #22
Please fix 1password and compose
ra...@google.com <ra...@google.com> #23
ap...@google.com <ap...@google.com> #24
Any update? It would be good to fix it asap, please.
ar...@gmail.com <ar...@gmail.com> #25
Any update on this?
It can be overlooked since it is simple but one of the important convenience feature.
ap...@google.com <ap...@google.com> #26
Autofill is currently listed as "In Focus" on our
ra...@google.com <ra...@google.com> #27
compose bom version: 2023.06.01
AS: Giraffe 2022.3.1
na...@vitruvian.me <na...@vitruvian.me> #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)
ra...@google.com <ra...@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
an...@nrk.no <an...@nrk.no> #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.
an...@nrk.no <an...@nrk.no> #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.
fa...@gmail.com <fa...@gmail.com> #32
is...@fubo.tv <is...@fubo.tv> #33
ap...@google.com <ap...@google.com> #34
vr...@gmail.com <vr...@gmail.com> #35
The majority of autofill CLs landed this week. It seems that the next alpha should have this :) 🤞
ra...@google.com <ra...@google.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!
do...@gmail.com <do...@gmail.com> #37
sa...@gmail.com <sa...@gmail.com> #38
#36 are you only currently interested in API shape feedback, or should I be filing issues for non performance related bugs?
pi...@gmail.com <pi...@gmail.com> #39
I would love for the api shape to be the way it was with xml - a simple one lime flag
ra...@google.com <ra...@google.com> #40
na...@google.com <na...@google.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"
pi...@gmail.com <pi...@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
[Deleted User] <[Deleted User]> #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.
ni...@svt.se <ni...@svt.se> #44
With new Compose UI version :
I see a lot of Autofill enhancements
1. The old autofill APIs are deprecated. Use the new semantics-based API instead. (I943ff)
2. Rewrite requestAutofill API to exist outside of autofill manager. (Id1929)
Can you confirm that it fixes the first problem mentioned in the
"One problem is that it only works with the Google autofill service. When using any other service like Microsoft Authenticator or OneKey"
This is something important for us. so please confirm on urgent basis
Thank you
el...@gmail.com <el...@gmail.com> #45
wa...@gmail.com <wa...@gmail.com> #46
Hi Priti,
Thanks for reaching out. The new Autofill APIs were added to 1.8 and you should be able to use them. I tested our demo App and Autofill works with Google Password Manager and LastPass. Can you verify that you try out this sample?
@Composable
fun BasicTextFieldAutofill() {
val autofillManager = LocalAutofillManager.current
Column {
Text(text = "Enter your username and password below.")
BasicTextField(
state = remember { TextFieldState() },
modifier = Modifier.semantics { contentType = ContentType.Username},
)
BasicTextField(
state = remember { TextFieldState() },
modifier = Modifier.semantics { contentType = ContentType.Password },
)
// Submit button
Button(onClick = { autofillManager?.commit() }) { Text("Submit credentials") }
}
}
The entire demo is here:
Source:
Can you try this out and report back if it does not work?
mb...@gmail.com <mb...@gmail.com> #47
#46 Is there some mechanism in autofill to differentiate different login/password combos for the password manager? In my app they can login to different servers they own for different services and I'd like to have some ways for the password manager to only shows the credentials relevant to the current service type.
Description
Add support for moving focus in a LazyList. When we reach the end of the list, the list should automatically scroll.