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 =
|
const val LEGACY_ACCESSIBILITY_SERVICE_NAME: String =
|
||||||
"com.x8bit.bitwarden.Accessibility.AccessibilityService"
|
"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.
|
* The legacy name for the autofill service.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ class BitwardenAccessibilityService : AccessibilityService() {
|
|||||||
|
|
||||||
override fun onInterrupt() = Unit
|
override fun onInterrupt() = Unit
|
||||||
|
|
||||||
|
override fun onCreate() {
|
||||||
|
super.onCreate()
|
||||||
|
accessibilityEnabledManager.refreshAccessibilityEnabledFromSettings()
|
||||||
|
}
|
||||||
|
|
||||||
override fun onUnbind(intent: Intent?): Boolean {
|
override fun onUnbind(intent: Intent?): Boolean {
|
||||||
return super
|
return super
|
||||||
.onUnbind(intent)
|
.onUnbind(intent)
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ package com.x8bit.bitwarden.data.autofill.accessibility.util
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import com.x8bit.bitwarden.LEGACY_ACCESSIBILITY_SERVICE_NAME
|
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.accessibility.BitwardenAccessibilityService
|
||||||
|
import com.x8bit.bitwarden.data.autofill.util.containsAnyTerms
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method to determine if the [BitwardenAccessibilityService] is enabled.
|
* 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
|
val Context.isAccessibilityServiceEnabled: Boolean
|
||||||
get() {
|
get() {
|
||||||
val appContext = this.applicationContext
|
val appContext = this.applicationContext
|
||||||
val accessibilityServiceName = appContext
|
val packageName = appContext.packageName
|
||||||
.packageName
|
val accessibilityServiceName = packageName?.let {
|
||||||
?.let { "$it/$LEGACY_ACCESSIBILITY_SERVICE_NAME" }
|
"$it/$LEGACY_ACCESSIBILITY_SERVICE_NAME"
|
||||||
?: return false
|
}
|
||||||
|
val shortAccessibilityServiceName = packageName.let {
|
||||||
|
"$it/$LEGACY_SHORT_ACCESSIBILITY_SERVICE_NAME"
|
||||||
|
}
|
||||||
return Settings
|
return Settings
|
||||||
.Secure
|
.Secure
|
||||||
.getString(
|
.getString(
|
||||||
appContext.contentResolver,
|
appContext.contentResolver,
|
||||||
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
|
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
|
||||||
)
|
)
|
||||||
?.contains(accessibilityServiceName)
|
?.containsAnyTerms(
|
||||||
|
terms = listOfNotNull(
|
||||||
|
accessibilityServiceName,
|
||||||
|
shortAccessibilityServiceName,
|
||||||
|
),
|
||||||
|
ignoreCase = true,
|
||||||
|
)
|
||||||
?: false
|
?: false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class ContextExtensionsTest {
|
|||||||
val context: Context = mockk {
|
val context: Context = mockk {
|
||||||
every { applicationContext } returns this
|
every { applicationContext } returns this
|
||||||
every { packageName } returns null
|
every { packageName } returns null
|
||||||
|
every { contentResolver } returns mockk()
|
||||||
}
|
}
|
||||||
|
|
||||||
assertFalse(context.isAccessibilityServiceEnabled)
|
assertFalse(context.isAccessibilityServiceEnabled)
|
||||||
@@ -75,6 +76,20 @@ class ContextExtensionsTest {
|
|||||||
assertTrue(context.isAccessibilityServiceEnabled)
|
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?) {
|
private fun mockkSettingsSecureGetString(value: String?) {
|
||||||
every {
|
every {
|
||||||
Settings.Secure.getString(any(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES)
|
Settings.Secure.getString(any(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES)
|
||||||
|
|||||||
Reference in New Issue
Block a user