diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 000043f60b..5c019d11ec 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -335,6 +335,9 @@
+
+
+
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerImpl.kt
index e6a554a001..bc895430e8 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerImpl.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerImpl.kt
@@ -27,6 +27,7 @@ class AutofillActivityManagerImpl(
private val browserAutofillStatus: BrowserThirdPartyAutofillStatus
get() = BrowserThirdPartyAutofillStatus(
+ braveStableStatusData = browserThirdPartyAutofillManager.stableBraveAutofillStatus,
chromeStableStatusData = browserThirdPartyAutofillManager.stableChromeAutofillStatus,
chromeBetaChannelStatusData = browserThirdPartyAutofillManager.betaChromeAutofillStatus,
)
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerImpl.kt
index 207586ddb8..cccff5116a 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerImpl.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerImpl.kt
@@ -41,6 +41,10 @@ class BrowserThirdPartyAutofillEnabledManagerImpl(
}
private val DEFAULT_STATUS = BrowserThirdPartyAutofillStatus(
+ braveStableStatusData = BrowserThirdPartyAutoFillData(
+ isAvailable = false,
+ isThirdPartyEnabled = false,
+ ),
chromeStableStatusData = BrowserThirdPartyAutoFillData(
isAvailable = false,
isThirdPartyEnabled = false,
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManager.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManager.kt
index 8dea38734d..40d0aa431e 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManager.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManager.kt
@@ -8,6 +8,11 @@ import com.x8bit.bitwarden.data.autofill.model.browser.BrowserThirdPartyAutoFill
*/
interface BrowserThirdPartyAutofillManager {
+ /**
+ * The data representing the status of the stable Brave version
+ */
+ val stableBraveAutofillStatus: BrowserThirdPartyAutoFillData
+
/**
* The data representing the status of the stable Chrome version
*/
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManagerImpl.kt
index 98ae2858e8..839f65e799 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManagerImpl.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillManagerImpl.kt
@@ -21,6 +21,8 @@ private const val THIRD_PARTY_MODE_ACTIONS_URI_PATH = "autofill_third_party_mode
class BrowserThirdPartyAutofillManagerImpl(
private val context: Context,
) : BrowserThirdPartyAutofillManager {
+ override val stableBraveAutofillStatus: BrowserThirdPartyAutoFillData
+ get() = getThirdPartyAutoFillStatusForChannel(BrowserPackage.BRAVE_RELEASE)
override val stableChromeAutofillStatus: BrowserThirdPartyAutoFillData
get() = getThirdPartyAutoFillStatusForChannel(BrowserPackage.CHROME_STABLE)
override val betaChromeAutofillStatus: BrowserThirdPartyAutoFillData
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/model/browser/BrowserPackage.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/model/browser/BrowserPackage.kt
index 1a38368b9c..d868b12f92 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/model/browser/BrowserPackage.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/model/browser/BrowserPackage.kt
@@ -1,5 +1,6 @@
package com.x8bit.bitwarden.data.autofill.model.browser
+private const val BRAVE_CHANNEL_PACKAGE = "com.brave.browser"
private const val CHROME_BETA_CHANNEL_PACKAGE = "com.chrome.beta"
private const val CHROME_RELEASE_CHANNEL_PACKAGE = "com.android.chrome"
@@ -9,6 +10,7 @@ private const val CHROME_RELEASE_CHANNEL_PACKAGE = "com.android.chrome"
* @property packageName the package name of the release channel for the browser version.
*/
enum class BrowserPackage(val packageName: String) {
+ BRAVE_RELEASE(BRAVE_CHANNEL_PACKAGE),
CHROME_STABLE(CHROME_RELEASE_CHANNEL_PACKAGE),
CHROME_BETA(CHROME_BETA_CHANNEL_PACKAGE),
}
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/model/browser/BrowserThirdPartyAutoFillData.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/model/browser/BrowserThirdPartyAutoFillData.kt
index b01c4977f5..9aae948cac 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/model/browser/BrowserThirdPartyAutoFillData.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/model/browser/BrowserThirdPartyAutoFillData.kt
@@ -12,6 +12,7 @@ data class BrowserThirdPartyAutoFillData(
* The overall status for all relevant browsers.
*/
data class BrowserThirdPartyAutofillStatus(
+ val braveStableStatusData: BrowserThirdPartyAutoFillData,
val chromeStableStatusData: BrowserThirdPartyAutoFillData,
val chromeBetaChannelStatusData: BrowserThirdPartyAutoFillData,
)
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModel.kt
index 91deffd635..772edb0a2a 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModel.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModel.kt
@@ -297,6 +297,10 @@ data class AutoFillState(
@Suppress("MaxLineLength")
private fun BrowserThirdPartyAutofillStatus.toBrowserAutoFillSettingsOptions(): ImmutableList =
persistentListOfNotNull(
+ BrowserAutofillSettingsOption.BraveStable(
+ enabled = this.braveStableStatusData.isThirdPartyEnabled,
+ )
+ .takeIf { this.braveStableStatusData.isAvailable },
BrowserAutofillSettingsOption.ChromeStable(
enabled = this.chromeStableStatusData.isThirdPartyEnabled,
)
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/browser/BrowserAutofillSettingsCard.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/browser/BrowserAutofillSettingsCard.kt
index 6db58b378f..aa15df682c 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/browser/BrowserAutofillSettingsCard.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/browser/BrowserAutofillSettingsCard.kt
@@ -62,7 +62,7 @@ fun BrowserAutofillSettingsCard(
}
Text(
text = stringResource(
- R.string.improves_login_filling_for_supported_websites_on_chrome,
+ id = R.string.improves_login_filling_for_supported_websites_on_selected_browsers,
),
style = BitwardenTheme.typography.bodyMedium,
color = BitwardenTheme.colorScheme.text.secondary,
@@ -84,6 +84,7 @@ private fun ChromeAutofillSettingsCard_preview() {
BitwardenTheme {
BrowserAutofillSettingsCard(
options = persistentListOf(
+ BrowserAutofillSettingsOption.BraveStable(enabled = true),
BrowserAutofillSettingsOption.ChromeStable(enabled = false),
BrowserAutofillSettingsOption.ChromeBeta(enabled = true),
),
diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/browser/model/BrowserAutofillSettingsOption.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/browser/model/BrowserAutofillSettingsOption.kt
index ebf668e04a..9c6c148516 100644
--- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/browser/model/BrowserAutofillSettingsOption.kt
+++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/browser/model/BrowserAutofillSettingsOption.kt
@@ -17,6 +17,19 @@ sealed class BrowserAutofillSettingsOption(val isEnabled: Boolean) : Parcelable
abstract val browserPackage: BrowserPackage
abstract val optionText: Text
+ /**
+ * Represents the Brave release channel.
+ */
+ @Parcelize
+ data class BraveStable(
+ val enabled: Boolean,
+ ) : BrowserAutofillSettingsOption(isEnabled = enabled) {
+ override val browserPackage: BrowserPackage
+ get() = BrowserPackage.BRAVE_RELEASE
+ override val optionText: Text
+ get() = R.string.use_brave_autofill_integration.asText()
+ }
+
/**
* Represents the stable Chrome release channel.
*/
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 534dff3c4e..d9110a26cd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -908,9 +908,10 @@ Do you want to switch to this account?
Passkey operation failed because no item was selected.
Passkey operation failed because the request is unsupported.
Self-host server URL
+ Use Brave autofill integration
Use Chrome autofill integration
Use Chrome autofill integration (Beta)
- Improves login filling for supported websites on Chrome. Once enabled, you’ll be directed to Chrome settings to enable third-party autofill.
+ Improves login filling for supported websites on selected browsers. Once enabled, you’ll be directed to browser settings to enable third-party autofill.
Show more
No folder
Show less
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerTest.kt
index b4134f946f..62e80d240c 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerTest.kt
@@ -43,6 +43,7 @@ class AutofillActivityManagerTest {
every { coroutineContext } returns UnconfinedTestDispatcher()
}
private val browserThirdPartyAutofillManager = mockk {
+ every { stableBraveAutofillStatus } returns DEFAULT_BROWSER_AUTOFILL_DATA
every { stableChromeAutofillStatus } returns DEFAULT_BROWSER_AUTOFILL_DATA
every { betaChromeAutofillStatus } returns DEFAULT_BROWSER_AUTOFILL_DATA
}
@@ -120,6 +121,7 @@ private val DEFAULT_BROWSER_AUTOFILL_DATA = BrowserThirdPartyAutoFillData(
)
private val DEFAULT_EXPECTED_AUTOFILL_STATUS = BrowserThirdPartyAutofillStatus(
+ braveStableStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
chromeStableStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
chromeBetaChannelStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
)
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerTest.kt
index 6dd7fff3cb..66d8c89f4e 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerTest.kt
@@ -109,6 +109,7 @@ private val DEFAULT_BROWSER_AUTOFILL_DATA = BrowserThirdPartyAutoFillData(
)
private val DEFAULT_EXPECTED_AUTOFILL_STATUS = BrowserThirdPartyAutofillStatus(
+ braveStableStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
chromeStableStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
chromeBetaChannelStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
)
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreenTest.kt
index c856cfd0b2..f5473b8d9c 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreenTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillScreenTest.kt
@@ -518,8 +518,8 @@ class AutoFillScreenTest : BitwardenComposeTest() {
@Test
fun `BrowserAutofillSettingsCard is only displayed when there are options in the list`() {
val browserAutofillSupportingText =
- "Improves login filling for supported websites on Chrome. " +
- "Once enabled, you’ll be directed to Chrome settings to enable " +
+ "Improves login filling for supported websites on selected browsers. " +
+ "Once enabled, you’ll be directed to browser settings to enable " +
"third-party autofill."
composeTestRule
diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModelTest.kt
index 5a458fc8e9..9ec8ab0f3c 100644
--- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModelTest.kt
+++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModelTest.kt
@@ -474,6 +474,7 @@ private val DEFAULT_BROWSER_AUTOFILL_DATA = BrowserThirdPartyAutoFillData(
)
private val DEFAULT_AUTOFILL_STATUS = BrowserThirdPartyAutofillStatus(
+ braveStableStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
chromeStableStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
chromeBetaChannelStatusData = DEFAULT_BROWSER_AUTOFILL_DATA,
)