Skip to content

Instantly share code, notes, and snippets.

@moffpage
Created September 5, 2024 08:14
Show Gist options
  • Save moffpage/5849f2efcf6d1241b546bc76f0432bce to your computer and use it in GitHub Desktop.
Save moffpage/5849f2efcf6d1241b546bc76f0432bce to your computer and use it in GitHub Desktop.
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.layout.boundsInWindow
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.autofill.AutofillNode
import androidx.compose.ui.autofill.AutofillType
import androidx.compose.ui.platform.LocalAutofill
import androidx.compose.ui.platform.LocalAutofillTree
@ExperimentalComposeUiApi
public fun Modifier.autofill(
autofillTypes: List<AutofillType>,
onFill: (String) -> Unit
): Modifier = composed {
val autofill = LocalAutofill.current
val autofillNode = AutofillNode(
onFill = onFill,
autofillTypes = autofillTypes
)
LocalAutofillTree.current += autofillNode
this.onGloballyPositioned { layoutCoordinates ->
autofillNode.boundingBox = layoutCoordinates.boundsInWindow()
}.onFocusChanged { focusState ->
if (autofill != null) {
if (focusState.isFocused) {
autofill.requestAutofillForNode(
autofillNode = autofillNode
)
} else {
autofill.cancelAutofillForNode(
autofillNode = autofillNode
)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment