Skip to content

Commit

Permalink
BITAU-102 Return null BridgeService when API level is below 12 (#3887)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahaisting-livefront authored Sep 10, 2024
1 parent 8dce8cd commit 19596ea
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.x8bit.bitwarden.data.platform.processor

import android.content.Intent
import android.os.Build
import com.bitwarden.bridge.IBridgeService
import com.bitwarden.bridge.IBridgeServiceCallback
import com.bitwarden.bridge.model.EncryptedAddTotpLoginItemData
import com.bitwarden.bridge.model.SymmetricEncryptionKeyData
import com.bitwarden.bridge.model.SymmetricEncryptionKeyFingerprintData
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow

/**
* Default implementation of [BridgeServiceProcessor].
Expand All @@ -17,14 +19,17 @@ class BridgeServiceProcessorImpl(
) : BridgeServiceProcessor {

override val binder: IBridgeService.Stub?
// TODO: Check for Android API level as well: BITAU-102
get() {
return if (featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync)) {
defaultBinder
} else {
// If the feature flag is not enabled, return a null binder which will no-op all
// service calls.
return if (
!featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) ||
isBuildVersionBelow(Build.VERSION_CODES.S)
) {
// If the feature flag is not enabled, OR if version is below Android 12,
// return a null binder which will no-op all service calls
null
} else {
// Otherwise, return real binder implementation:
defaultBinder
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package com.x8bit.bitwarden.data.platform.processor

import android.os.Build
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test

class BridgeServiceProcessorTest {
Expand All @@ -16,15 +20,33 @@ class BridgeServiceProcessorTest {
featureFlagManager = featureFlagManager,
)

@BeforeEach
fun setup() {
mockkStatic(::isBuildVersionBelow)
}

@Test
fun `when AuthenticatorSync feature flag is off, should return null binder`() {
every { isBuildVersionBelow(Build.VERSION_CODES.S) } returns false
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns false
assertNull(bridgeServiceManager.binder)
}

@Test
fun `when AuthenticatorSync feature flag is on, should return non-null binder`() {
@Suppress("MaxLineLength")
fun `when AuthenticatorSync feature flag is on and running Android level greater than S, should return non-null binder`() {
every { isBuildVersionBelow(Build.VERSION_CODES.S) } returns false
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns true
assertNotNull(bridgeServiceManager.binder)
}

@Test
fun `when below Android level S, should never return a binder regardless of feature flag`() {
every { isBuildVersionBelow(Build.VERSION_CODES.S) } returns true
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns false
assertNull(bridgeServiceManager.binder)

every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns true
assertNull(bridgeServiceManager.binder)
}
}

0 comments on commit 19596ea

Please sign in to comment.