diff --git a/paymentsheet/src/main/java/com/stripe/android/paymentsheet/addresselement/InlineAutocompleteController.kt b/paymentsheet/src/main/java/com/stripe/android/paymentsheet/addresselement/InlineAutocompleteController.kt index 6e7f9e502b4..dce78396f37 100644 --- a/paymentsheet/src/main/java/com/stripe/android/paymentsheet/addresselement/InlineAutocompleteController.kt +++ b/paymentsheet/src/main/java/com/stripe/android/paymentsheet/addresselement/InlineAutocompleteController.kt @@ -145,6 +145,7 @@ internal class InlineAutocompleteController( limit = AutocompleteViewModel.MAX_DISPLAYED_RESULTS, ) currentCoroutineContext().ensureActive() + if (_inlinePredictionsState.value == AutocompleteAddressInteractor.InlinePredictionsState.Idle) return result.fold( onSuccess = { handleFindPredictionsSuccess(query, it) }, onFailure = { diff --git a/stripe-ui-core/src/main/java/com/stripe/android/uicore/elements/AddressTextFieldController.kt b/stripe-ui-core/src/main/java/com/stripe/android/uicore/elements/AddressTextFieldController.kt index 4a6ecad89bb..e1ca21a3f11 100644 --- a/stripe-ui-core/src/main/java/com/stripe/android/uicore/elements/AddressTextFieldController.kt +++ b/stripe-ui-core/src/main/java/com/stripe/android/uicore/elements/AddressTextFieldController.kt @@ -2,18 +2,10 @@ package com.stripe.android.uicore.elements import androidx.annotation.RestrictTo import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.onSizeChanged -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.unit.dp import com.stripe.android.core.strings.ResolvableString import com.stripe.android.uicore.R import com.stripe.android.uicore.forms.FormFieldEntry @@ -76,19 +68,12 @@ class AddressTextFieldController( lastTextFieldIdentifier: IdentifierSpec? ) { if (inlineAutocompleteHandler != null) { - var fieldWidthDp by remember { mutableStateOf(0.dp) } - val density = LocalDensity.current - - val onClear = remember { { _inlineQuery.value = "" } } + val onClear = { + _inlineQuery.value = "" + inlineAutocompleteHandler.onDismissed() + } - Box( - modifier = modifier - .wrapContentSize(Alignment.TopStart) - .onSizeChanged { size -> - val newWidth = with(density) { size.width.toDp() } - if (newWidth != fieldWidthDp) fieldWidthDp = newWidth - } - ) { + Column(modifier = modifier) { AddressTextFieldUI( controller = this@AddressTextFieldController, enabled = enabled, @@ -100,9 +85,7 @@ class AddressTextFieldController( state = predictionsState, attributionDrawable = inlineAutocompleteHandler .getAttributionDrawable(isDarkTheme), - fieldWidthDp = fieldWidthDp, onPredictionSelected = inlineAutocompleteHandler::onPredictionSelected, - onDismiss = inlineAutocompleteHandler::onDismissed, onClear = onClear, onEnterManually = inlineAutocompleteHandler::onEnterManually, ) diff --git a/stripe-ui-core/src/main/java/com/stripe/android/uicore/elements/InlineAddressPredictionsUI.kt b/stripe-ui-core/src/main/java/com/stripe/android/uicore/elements/InlineAddressPredictionsUI.kt index f8644e06e1f..9ea6ece1553 100644 --- a/stripe-ui-core/src/main/java/com/stripe/android/uicore/elements/InlineAddressPredictionsUI.kt +++ b/stripe-ui-core/src/main/java/com/stripe/android/uicore/elements/InlineAddressPredictionsUI.kt @@ -12,9 +12,9 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.material.Card import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.Divider -import androidx.compose.material.DropdownMenu import androidx.compose.material.LocalContentColor import androidx.compose.material.MaterialTheme import androidx.compose.material.Text @@ -25,10 +25,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.PopupProperties import com.stripe.android.uicore.R import com.stripe.android.uicore.stripeColors import com.stripe.android.uicore.text.annotatedStringResource @@ -38,22 +35,19 @@ import com.stripe.android.uicore.text.annotatedStringResource fun InlineAddressPredictionsUI( state: AutocompleteAddressInteractor.InlinePredictionsState, attributionDrawable: Int?, - fieldWidthDp: Dp, onPredictionSelected: (String) -> Unit, - onDismiss: () -> Unit, onClear: () -> Unit, - onEnterManually: (() -> Unit)? = null, + onEnterManually: (() -> Unit)?, ) { - DropdownMenu( - expanded = shouldShowPredictionsDropdown(state), - onDismissRequest = onDismiss, - offset = DpOffset(x = (-1).dp, y = 0.dp), - modifier = if (fieldWidthDp > 0.dp) { - Modifier.width(fieldWidthDp + 2.dp) - } else { - Modifier.fillMaxWidth() - }, - properties = PopupProperties(focusable = false), + if (!shouldShowPredictionsDropdown(state)) { + return + } + + Card( + elevation = 4.dp, + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp), ) { InlineAddressPredictionsContent( state = state,