diff --git a/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt b/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt index 0bee896f1..998b8487a 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/autofill/util/AutofillIntentUtils.kt @@ -9,6 +9,7 @@ import android.content.Intent import android.content.IntentSender import android.service.autofill.Dataset import android.view.autofill.AutofillManager +import androidx.core.os.bundleOf import com.x8bit.bitwarden.AutofillTotpCopyActivity import com.x8bit.bitwarden.MainActivity import com.x8bit.bitwarden.data.autofill.model.AutofillAppInfo @@ -21,6 +22,7 @@ import com.x8bit.bitwarden.data.platform.util.getSafeParcelableExtra private const val AUTOFILL_SAVE_ITEM_DATA_KEY = "autofill-save-item-data" private const val AUTOFILL_SELECTION_DATA_KEY = "autofill-selection-data" private const val AUTOFILL_TOTP_COPY_DATA_KEY = "autofill-totp-copy-data" +private const val AUTOFILL_BUNDLE_KEY = "autofill-bundle-key" /** * Creates an [Intent] in order to send the user to a manual selection process for autofill. @@ -36,10 +38,9 @@ fun createAutofillSelectionIntent( ) .apply { putExtra( - AUTOFILL_SELECTION_DATA_KEY, - AutofillSelectionData( - type = type, - uri = uri, + AUTOFILL_BUNDLE_KEY, + bundleOf( + AUTOFILL_SELECTION_DATA_KEY to AutofillSelectionData(type = type, uri = uri), ), ) } @@ -132,7 +133,8 @@ fun Intent.getAutofillSaveItemOrNull(): AutofillSaveItem? = * The [AutofillSelectionData] will be returned when present. */ fun Intent.getAutofillSelectionDataOrNull(): AutofillSelectionData? = - this.getSafeParcelableExtra(AUTOFILL_SELECTION_DATA_KEY) + getBundleExtra(AUTOFILL_BUNDLE_KEY) + ?.getSafeParcelableExtra(AUTOFILL_SELECTION_DATA_KEY) /** * Checks if the given [Intent] contains data for TOTP copying. The [AutofillTotpCopyData] will be diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/util/IntentExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/util/IntentExtensions.kt index 3d4a4dcce..5045b61aa 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/util/IntentExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/util/IntentExtensions.kt @@ -4,6 +4,7 @@ package com.x8bit.bitwarden.data.platform.util import android.content.Intent import android.os.Build +import android.os.Bundle import android.os.Parcelable import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage @@ -21,3 +22,18 @@ inline fun Intent.getSafeParcelableExtra(name: String): T? = @Suppress("DEPRECATION") getParcelableExtra(name) } + +/** + * A means of retrieving a [Parcelable] from a [Bundle] using the given [name] in a manner that + * is safe across SDK versions. + */ +inline fun Bundle.getSafeParcelableExtra(name: String): T? = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + getParcelable( + name, + T::class.java, + ) + } else { + @Suppress("DEPRECATION") + getParcelable(name) + }