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, )