mirror of
https://github.com/bitwarden/android.git
synced 2026-03-21 13:52:07 -05:00
PM-14435: Improve accessibility service detection (#4864)
This commit is contained in:
@@ -6,6 +6,11 @@ package com.x8bit.bitwarden
|
||||
const val LEGACY_ACCESSIBILITY_SERVICE_NAME: String =
|
||||
"com.x8bit.bitwarden.Accessibility.AccessibilityService"
|
||||
|
||||
/**
|
||||
* The short form legacy name for the accessibility service.
|
||||
*/
|
||||
const val LEGACY_SHORT_ACCESSIBILITY_SERVICE_NAME: String = ".Accessibility.AccessibilityService"
|
||||
|
||||
/**
|
||||
* The legacy name for the autofill service.
|
||||
*/
|
||||
|
||||
@@ -32,6 +32,11 @@ class BitwardenAccessibilityService : AccessibilityService() {
|
||||
|
||||
override fun onInterrupt() = Unit
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
accessibilityEnabledManager.refreshAccessibilityEnabledFromSettings()
|
||||
}
|
||||
|
||||
override fun onUnbind(intent: Intent?): Boolean {
|
||||
return super
|
||||
.onUnbind(intent)
|
||||
|
||||
@@ -3,7 +3,9 @@ package com.x8bit.bitwarden.data.autofill.accessibility.util
|
||||
import android.content.Context
|
||||
import android.provider.Settings
|
||||
import com.x8bit.bitwarden.LEGACY_ACCESSIBILITY_SERVICE_NAME
|
||||
import com.x8bit.bitwarden.LEGACY_SHORT_ACCESSIBILITY_SERVICE_NAME
|
||||
import com.x8bit.bitwarden.data.autofill.accessibility.BitwardenAccessibilityService
|
||||
import com.x8bit.bitwarden.data.autofill.util.containsAnyTerms
|
||||
|
||||
/**
|
||||
* Helper method to determine if the [BitwardenAccessibilityService] is enabled.
|
||||
@@ -11,16 +13,25 @@ import com.x8bit.bitwarden.data.autofill.accessibility.BitwardenAccessibilitySer
|
||||
val Context.isAccessibilityServiceEnabled: Boolean
|
||||
get() {
|
||||
val appContext = this.applicationContext
|
||||
val accessibilityServiceName = appContext
|
||||
.packageName
|
||||
?.let { "$it/$LEGACY_ACCESSIBILITY_SERVICE_NAME" }
|
||||
?: return false
|
||||
val packageName = appContext.packageName
|
||||
val accessibilityServiceName = packageName?.let {
|
||||
"$it/$LEGACY_ACCESSIBILITY_SERVICE_NAME"
|
||||
}
|
||||
val shortAccessibilityServiceName = packageName.let {
|
||||
"$it/$LEGACY_SHORT_ACCESSIBILITY_SERVICE_NAME"
|
||||
}
|
||||
return Settings
|
||||
.Secure
|
||||
.getString(
|
||||
appContext.contentResolver,
|
||||
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
|
||||
)
|
||||
?.contains(accessibilityServiceName)
|
||||
?.containsAnyTerms(
|
||||
terms = listOfNotNull(
|
||||
accessibilityServiceName,
|
||||
shortAccessibilityServiceName,
|
||||
),
|
||||
ignoreCase = true,
|
||||
)
|
||||
?: false
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ class ContextExtensionsTest {
|
||||
val context: Context = mockk {
|
||||
every { applicationContext } returns this
|
||||
every { packageName } returns null
|
||||
every { contentResolver } returns mockk()
|
||||
}
|
||||
|
||||
assertFalse(context.isAccessibilityServiceEnabled)
|
||||
@@ -75,6 +76,20 @@ class ContextExtensionsTest {
|
||||
assertTrue(context.isAccessibilityServiceEnabled)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `isAccessibilityServiceEnabled with correct abbreviated secure string returns true`() {
|
||||
val context: Context = mockk {
|
||||
every { applicationContext } returns this
|
||||
every { packageName } returns "com.x8bit.bitwarden"
|
||||
every { contentResolver } returns mockk()
|
||||
}
|
||||
mockkSettingsSecureGetString(
|
||||
value = "com.x8bit.bitwarden/.Accessibility.AccessibilityService",
|
||||
)
|
||||
|
||||
assertTrue(context.isAccessibilityServiceEnabled)
|
||||
}
|
||||
|
||||
private fun mockkSettingsSecureGetString(value: String?) {
|
||||
every {
|
||||
Settings.Secure.getString(any(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES)
|
||||
|
||||
Reference in New Issue
Block a user