diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ae742ca4d..9de5d8401 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,16 @@ android:scheme="bitwarden" /> </intent-filter> </activity> + + <service + android:name=".autofill.BitwardenAutofillService" + android:label="Bitwarden" + android:permission="android.permission.BIND_AUTOFILL_SERVICE" + android:exported="true"> + <intent-filter> + <action android:name="android.service.autofill.AutofillService" /> + </intent-filter> + </service> </application> </manifest> diff --git a/app/src/main/java/com/x8bit/bitwarden/autofill/BitwardenAutofillService.kt b/app/src/main/java/com/x8bit/bitwarden/autofill/BitwardenAutofillService.kt new file mode 100644 index 000000000..84c278bfc --- /dev/null +++ b/app/src/main/java/com/x8bit/bitwarden/autofill/BitwardenAutofillService.kt @@ -0,0 +1,31 @@ +package com.x8bit.bitwarden.autofill + +import android.os.CancellationSignal +import android.service.autofill.AutofillService +import android.service.autofill.FillCallback +import android.service.autofill.FillRequest +import android.service.autofill.SaveCallback +import android.service.autofill.SaveRequest +import dagger.hilt.android.AndroidEntryPoint + +/** + * The [AutofillService] implementation for the app. This fulfills autofill requests from other + * applications. + */ +@AndroidEntryPoint +class BitwardenAutofillService : AutofillService() { + override fun onFillRequest( + request: FillRequest, + cancellationSignal: CancellationSignal, + fillCallback: FillCallback, + ) { + // TODO: parse request and perform dummy autofill (BIT-1314) + } + + override fun onSaveRequest( + saverRequest: SaveRequest, + saveCallback: SaveCallback, + ) { + // TODO: add save request behavior (BIT-1299) + } +} diff --git a/app/src/test/java/com/x8bit/bitwarden/autofill/BitwardenAutofillServiceTests.kt b/app/src/test/java/com/x8bit/bitwarden/autofill/BitwardenAutofillServiceTests.kt new file mode 100644 index 000000000..e780fa3d7 --- /dev/null +++ b/app/src/test/java/com/x8bit/bitwarden/autofill/BitwardenAutofillServiceTests.kt @@ -0,0 +1,54 @@ +package com.x8bit.bitwarden.autofill + +import android.os.CancellationSignal +import android.service.autofill.FillCallback +import android.service.autofill.FillRequest +import android.service.autofill.SaveCallback +import android.service.autofill.SaveRequest +import io.mockk.mockk +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +class BitwardenAutofillServiceTests { + private lateinit var bitwardenAutofillService: BitwardenAutofillService + + @BeforeEach + fun setup() { + bitwardenAutofillService = BitwardenAutofillService() + } + + @Nested + inner class OnFillRequest { + @Test + fun `nothing happens`() { + // Setup + val cancellationSignal: CancellationSignal = mockk() + val fillCallback: FillCallback = mockk() + val fillRequest: FillRequest = mockk() + + // Test + bitwardenAutofillService.onFillRequest( + cancellationSignal = cancellationSignal, + fillCallback = fillCallback, + request = fillRequest, + ) + } + } + + @Nested + inner class OnSaveRequest { + @Test + fun `nothing happens`() { + // Setup + val saverRequest: SaveRequest = mockk() + val saveCallback: SaveCallback = mockk() + + // Test + bitwardenAutofillService.onSaveRequest( + saveCallback = saveCallback, + saverRequest = saverRequest, + ) + } + } +}