BIT-1955: Autofill Brings User to the Incorrect Page on Pre Android 11 (#1157)

This commit is contained in:
Ramsey Smith 2024-03-19 09:17:34 -07:00 committed by Álison Fernandes
parent b2f8d89de4
commit f9edd70beb
2 changed files with 23 additions and 5 deletions

View file

@ -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

View file

@ -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 <reified T> 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 <reified T> Bundle.getSafeParcelableExtra(name: String): T? =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
getParcelable(
name,
T::class.java,
)
} else {
@Suppress("DEPRECATION")
getParcelable(name)
}