Skip to content

Show which accessibility services are enabled - #773

Open
besendorf wants to merge 3 commits into
mainfrom
accessibility_enabled
Open

besendorf wants to merge 3 commits into
mainfrom
accessibility_enabled

Conversation

@besendorf

@besendorf besendorf commented Apr 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Parse both installed and enabled accessibility services from dumpsys output, adding an enabled field to each result
  • Handle both old (multi-line) and new (AOSP >= 14 single-line) enabled services formats
  • Match enabled services against installed services accounting for trailing annotations like (A11yTool)
  • Log enabled status per service and show enabled count in summary

Fixes #744

Test plan

  • Existing tests updated and passing
  • New test for mixed installed/enabled fixture
  • Full test suite passes with no regressions
  • Real world test

Parse both installed and enabled accessibility services, adding an
"enabled" field to each result. This lets users see at a glance
whether any installed accessibility service is actually active.

Fixes #744
@github-actions

github-actions Bot commented Apr 12, 2026 •

Copy link
Copy Markdown
Contributor

Coverage

Tests Skipped Failures Errors Time
121 1 💤 0 ❌ 0 🔥 10.101s ⏱️

@besendorf

Copy link
Copy Markdown
Collaborator Author

I tested on my Pixel 9 with Android 16 and when my accessibility service was enabled it worked but when I disabled it it was not detected as installed:

DUMP OF SERVICE accessibility:
ACCESSIBILITY MANAGER (dumpsys accessibility)

currentUserId=0
hasMagnificationConnection=false
Magnifier on display#0
    MagnificationConfig[mode: 1, activated: false, scale: 1.0, centerX: 540.0, centerY: 1212.0]
    Magnification region=SkRegion((0,0,1080,2424))
    IdOfLastServiceToMagnify=-1
    SupportWindowMagnification=true
    WindowMagnificationConnectionState=DISCONNECTED
User state[
     attributes:{id=0, touchExplorationEnabled=false, serviceHandlesDoubleTap=false, requestMultiFingerGestures=false, requestTwoFingerPassthrough=false, sendMotionEventsEnabledfalse, displayMagnificationEnabled=false, autoclickEnabled=false, nonInteractiveUiTimeout=0, interactiveUiTimeout=0, installedServiceCount6
, magnificationModes={0=1}, magnificationCapabilities=3, audioDescriptionByDefaultEnabled=false, magnificationCursorFollowingMode=0, magnificationFollowTypingEnabled=true, magnificationFollowKeyboardEnabled=false, alwaysOnMagnificationEnabled=true}
     button mode: 1
     shortcut key:{}
     button:{}
     button target:{null}
     gesture:{}
     qs shortcut targets:{}
     a11y tiles in QS panel:{}
     Bound services:{}
     Enabled services:{}
     Binding services:{}
     Crashed services:{}
     Client list info:{
          Client list callbacks: 12
          Client list killed: false
          Client list broadcasts count: -1
          Registered clients:{
[com.google.android.apps.nexuslauncher][com.google.android.as][com.x8bit.bitwarden][com.google.android.googlequicksearchbox][com.google.android.contacts][com.google.android.as][com.google.android.inputmethod.latin][com.google.android.googlequicksearchbox][com.google.android.apps.photos][com.google.android.inputmeto
d.latin][com.google.android.apps.wellbeing][com.microsoft.rdc.androidx]}]
Global Info [ Top focused display Id = 0
     Active Window Id = -1
     Top Focused Window Id = -1
     Accessibility Focused Window Id = -1 ]


Window attributes:[{23=AccessibilityWindowAttributes{mAccessibilityWindowTitle=Windows AppmLocales=[en_DE,de_DE]}}]
Global client list info:{
    Client list callbacks: 11
    Client list killed: false
    Client list broadcasts count: -1
    Registered clients:{
[com.google.android.permissioncontroller][com.google.android.settings.intelligence][com.google.android.GoogleCamera][com.android.systemui][com.google.android.flipendo][com.google.android.gms][com.android.pixeldisplayservice][com.android.vending][com.android.inputdevices, com.android.localtransport, com.android.loca
tion.fused, com.android.server.telecom, com.google.android.settings.future.biometrics.faceenroll, com.android.keychain, com.google.android.repairmode, com.google.pixel.camera.services, com.android.qns, com.google.SSRestartDetector, com.android.DeviceAsWebcam, com.android.settings, com.google.android.iwlan, android
com.android.providers.settings, com.android.dynsystem][com.android.localtransport, com.android.settings, com.google.android.settings.future.biometrics.faceenroll, com.android.server.telecom, com.android.qns, android, com.android.keychain, com.google.SSRestartDetector, com.google.android.iwlan, com.android.DeviceAsW
ebcam, com.android.dynsystem, com.android.inputdevices, com.google.android.repairmode, com.google.pixel.camera.services, com.android.providers.settings, com.android.location.fused][com.google.android.packageinstaller]

Proxy manager state:
    Number of proxy connections: 0
    Registered proxy connections:
Accessibility Display Listener:
    SystemUI uid: 10249
    1 valid display: 0
--------- 0.038s was the duration of dumpsys accessibility, ending at: 2026-04-22 10:37:44
-------------------------------------------------------------------------------

@besendorf

Copy link
Copy Markdown
Collaborator Author

Its only shown as registered client. I am a bit unsure what the difference between client and service is

Registered clients:{
[com.google.android.apps.nexuslauncher][com.google.android.as][com.x8bit.bitwarden][com.google.android.googlequicksearchbox][com.google.android.contacts][com.google.android.as][com.google.android.inputmethod.latin][com.google.android.googlequicksearchbox][com.google.android.apps.photos][com.google.android.inputmeto
d.latin][com.google.android.apps.wellbeing][com.microsoft.rdc.androidx]}]

@besendorf

Copy link
Copy Markdown
Collaborator Author

This is when the service is enabled in the settings:

DUMP OF SERVICE accessibility:
ACCESSIBILITY MANAGER (dumpsys accessibility)

currentUserId=0
hasMagnificationConnection=false
Magnifier on display#0
    MagnificationConfig[mode: 1, activated: false, scale: 1.0, centerX: 540.0, centerY: 1212.0] 
    Magnification region=SkRegion((0,0,1080,2424))
    IdOfLastServiceToMagnify=-1
    SupportWindowMagnification=true
    WindowMagnificationConnectionState=DISCONNECTED
User state[
     attributes:{id=0, touchExplorationEnabled=false, serviceHandlesDoubleTap=false, requestMultiFingerGestures=false, requestTwoFingerPassthrough=false, sendMotionEventsEnabledfalse, displayMagnificationEnabled=false, autoclickEnabled=false, nonInteractiveUiTimeout=0, interactiveUiTimeout=0, installedServiceCount=6, magnificationModes={0=1}, magnificationCapabilities=3, audioDescriptionByDefaultEnabled=false, magnificationCursorFollowingMode=0, magnificationFollowTypingEnabled=true, magnificationFollowKeyboardEnabled=false, alwaysOnMagnificationEnabled=true}
     button mode: 1
     shortcut key:{}
     button:{}
     button target:{null}
     gesture:{}
     qs shortcut targets:{}
     a11y tiles in QS panel:{}
     Bound services:{Service[label=Bitwarden, feedbackType[FEEDBACK_GENERIC], capabilities=1, eventTypes=TYPE_WINDOW_STATE_CHANGED, notificationTimeout=100, requestA11yBtn=false]}
     Enabled services:{{com.x8bit.bitwarden/com.x8bit.bitwarden.Accessibility.AccessibilityService}}
     Binding services:{}
     Crashed services:{}
     Client list info:{
          Client list callbacks: 12
          Client list killed: false
          Client list broadcasts count: -1
          Registered clients:{
[com.google.android.apps.nexuslauncher][com.google.android.as][com.x8bit.bitwarden][com.google.android.googlequicksearchbox][com.google.android.contacts][com.google.android.as][com.google.android.inputmethod.latin][com.google.android.googlequicksearchbox][com.google.android.apps.photos][com.google.android.inputmethod.latin][com.google.android.apps.wellbeing][com.microsoft.rdc.androidx]}]
Global Info [ Top focused display Id = 0
     Active Window Id = 11
     Top Focused Window Id = 11
     Accessibility Focused Window Id = -1 ]

Display[0] : 
A11yWindow[AccessibilityWindowInfo[title=null, displayId=0, id=11, taskId=-1, type=TYPE_SYSTEM, layer=0, region=SkRegion((0,0,1080,2424)), bounds=Rect(0, 0 - 1080, 2424), focused=true, active=true, pictureInPicture=false, transitionTime=432643, hasParent=false, isAnchored=false, hasChildren=false]]
WindowInfo[WindowInfo[title=null, displayId=0, taskId=-1, type=2040, layer=0, token=android.os.BinderProxy@ed00908, region=SkRegion((0,0,1080,2424)), bounds=Rect(0, 0 - 1080, 2424), parent=null, focused=true, children=null, accessibility anchor=9223372034707292159, pictureInPicture=false, watchOutsideTouch=true, mTransformMatrix=Matrix{[1.0, 0.0, -0.0][0.0, 1.0, -0.0][0.0, 0.0, 1.0]}, mMagnificationSpec=<scale:1.0,offsetX:0.0,offsetY:0.0>, locales=[en_DE,de_DE]]]


Window attributes:[{0=AccessibilityWindowAttributes{mAccessibilityWindowTitle=SettingsmLocales=[en_DE,de_DE]}, 1=AccessibilityWindowAttributes{mAccessibilityWindowTitle=nullmLocales=[en_DE,de_DE]}, 5=AccessibilityWindowAttributes{mAccessibilityWindowTitle=SettingsmLocales=[en_DE,de_DE]}, 6=AccessibilityWindowAttributes{mAccessibilityWindowTitle=Navigation bar Edge PanelmLocales=[en_DE,de_DE]}, 7=AccessibilityWindowAttributes{mAccessibilityWindowTitle=nullmLocales=[en_DE,de_DE]}, 8=AccessibilityWindowAttributes{mAccessibilityWindowTitle=App infomLocales=[en_DE,de_DE]}, 9=AccessibilityWindowAttributes{mAccessibilityWindowTitle=nullmLocales=[en_DE,de_DE]}, 10=AccessibilityWindowAttributes{mAccessibilityWindowTitle=nullmLocales=[en_DE,de_DE]}, 11=AccessibilityWindowAttributes{mAccessibilityWindowTitle=nullmLocales=[en_DE,de_DE]}, 12=AccessibilityWindowAttributes{mAccessibilityWindowTitle=nullmLocales=[en_DE,de_DE]}, 14=AccessibilityWindowAttributes{mAccessibilityWindowTitle=BitwardenmLocales=[en_DE,de_DE]}, 15=AccessibilityWindowAttributes{mAccessibilityWindowTitle=Play StoremLocales=[en_DE,de_DE]}, 18=AccessibilityWindowAttributes{mAccessibilityWindowTitle=Navigation barmLocales=[en_DE,de_DE]}, 23=AccessibilityWindowAttributes{mAccessibilityWindowTitle=Windows AppmLocales=[en_DE,de_DE]}, 24=AccessibilityWindowAttributes{mAccessibilityWindowTitle=HomemLocales=[en_DE,de_DE]}}]
Global client list info:{
    Client list callbacks: 11
    Client list killed: false
    Client list broadcasts count: -1
    Registered clients:{
[com.google.android.permissioncontroller][com.google.android.settings.intelligence][com.google.android.GoogleCamera][com.android.systemui][com.google.android.flipendo][com.google.android.gms][com.android.pixeldisplayservice][com.android.vending][com.android.inputdevices, com.android.localtransport, com.android.location.fused, com.android.server.telecom, com.google.android.settings.future.biometrics.faceenroll, com.android.keychain, com.google.android.repairmode, com.google.pixel.camera.services, com.android.qns, com.google.SSRestartDetector, com.android.DeviceAsWebcam, com.android.settings, com.google.android.iwlan, android, com.android.providers.settings, com.android.dynsystem][com.android.localtransport, com.android.settings, com.google.android.settings.future.biometrics.faceenroll, com.android.server.telecom, com.android.qns, android, com.android.keychain, com.google.SSRestartDetector, com.google.android.iwlan, com.android.DeviceAsWebcam, com.android.dynsystem, com.android.inputdevices, com.google.android.repairmode, com.google.pixel.camera.services, com.android.providers.settings, com.android.location.fused][com.google.android.packageinstaller]

Proxy manager state:
    Number of proxy connections: 0
    Registered proxy connections:
Accessibility Display Listener:
    SystemUI uid: 10249
    1 valid display: 0
--------- 0.035s was the duration of dumpsys accessibility, ending at: 2026-04-22 10:02:51
-------------------------------------------------------------------------------

@viktor3002

viktor3002 commented Apr 22, 2026 •

Copy link
Copy Markdown
Collaborator

Here comes new testing data

tl;dr:

  • Activated Accessibility Service:
    • Sample A
      • listed as Enabled Service and as Registered Client
    • Sample B
      • listed as Enabled Service and Binding Service
  • Deactivated Accessibility Service
    • Sample A
      • listed as Registered Client
    • Sample B
      • listed as Binding Service

Sample A , PACKAGENAME_A, ACCESSIBILITYSERVICE_A

When the accessibility service is deactivated:
(excerpt from bugreport*.txt)

DUMP OF SERVICE accessibility:
(redacted for brevity)
User state[
     attributes:{id=0, touchExplorationEnabled=false, serviceHandlesDoubleTap=false, requestMultiFingerGestures=false, requestTwoFingerPassthrough=false, sendMotionEventsEnabledfalse, displayMagnificationEnabled=false, autoclickEnabled=false, nonInteractiveUiTimeout=0, interactiveUiTimeout=0, installedServiceCount=3, magnificationModes={0=1}, magnificationCapabilities=3, audioDescriptionByDefaultEnabled=false, magnificationFollowTypingEnabled=true, alwaysOnMagnificationEnabled=true}
     button mode: 1
     shortcut key:{}
     button:{}
     button target:{null}
     gesture:{}
     qs shortcut targets:{}
     a11y tiles in QS panel:{}
     Bound services:{}
     Enabled services:{}
     Binding services:{}
     Crashed services:{}
     Client list info:{
          Client list callbacks: 3
          Client list killed: false
          Client list broadcasts count: -1
          Registered clients:{
[ PACKAGENAME_A][com.android.launcher3][com.android.inputmethod.latin]}]
Global Info [ Top focused display Id = 0
     Active Window Id = -1
     Top Focused Window Id = 136
     Accessibility Focused Window Id = -1 ]


Window attributes:[{}]
Global client list info:{
    Client list callbacks: 7
    Client list killed: false
    Client list broadcasts count: -1
    Registered clients:{
[com.android.documentsui][com.android.DeviceAsWebcam, com.android.providers.settings, android, com.android.keychain, com.android.dynsystem, com.google.pixel.camera.services, com.android.inputdevices, com.android.localtransport, com.android.server.telecom, com.android.settings, com.google.android.iwlan, com.android.location.fused][com.android.documentsui][com.android.systemui][android, com.android.location.fused, com.android.providers.settings, com.google.pixel.camera.services, com.android.inputdevices, com.android.localtransport, com.google.android.iwlan, com.android.settings, com.android.DeviceAsWebcam, com.android.dynsystem, com.android.server.telecom, com.android.keychain][com.android.hbmsvmanager][com.android.permissioncontroller]

When the accessibility service is activated:
(excerpt from bugreport*.txt)

DUMP OF SERVICE accessibility:
(...)
User state[
     attributes:{id=0, touchExplorationEnabled=false, serviceHandlesDoubleTap=false, requestMultiFingerGestures=false, requestTwoFingerPassthrough=false, sendMotionEventsEnabledfalse, displayMagnificationEnabled=false, autoclickEnabled=false, nonInteractiveUiTimeout=0, interactiveUiTimeout=0, installedServiceCount=3, magnificationModes={0=1}, magnificationCapabilities=3, audioDescriptionByDefaultEnabled=false, magnificationFollowTypingEnabled=true, alwaysOnMagnificationEnabled=true}
     button mode: 1
     shortcut key:{}
     button:{}
     button target:{null}
     gesture:{}
     qs shortcut targets:{}
     a11y tiles in QS panel:{}
     Bound services:{Service[label=Anycast, feedbackType[FEEDBACK_SPOKEN, FEEDBACK_HAPTIC, FEEDBACK_AUDIBLE, FEEDBACK_VISUAL, FEEDBACK_GENERIC, FEEDBACK_BRAILLE], capabilities=9, eventTypes=TYPES_ALL_MASK, notificationTimeout=0, requestA11yBtn=false]}
     Enabled services:{{PACKAGENAME_A/ACCESSIBILITYSERVICE_A}}
     Binding services:{}
     Crashed services:{}
     Client list info:{
          Client list callbacks: 3
          Client list killed: false
          Client list broadcasts count: -1
          Registered clients:{
[ PACKAGENAME_A][com.android.launcher3][com.android.inputmethod.latin]}]
Global Info [ Top focused display Id = 0
     Active Window Id = 124
     Top Focused Window Id = 124
     Accessibility Focused Window Id = -1 ]

Sample B , com.adobe.reader.bat, com.google.bat.resident.ResidentService.

When the accessibility service is deactivated:
(excerpt from bugreport*.txt)

DUMP OF SERVICE accessibility:
(...)
User state[
     attributes:{id=0, touchExplorationEnabled=false, serviceHandlesDoubleTap=false, requestMultiFingerGestures=false, requestTwoFingerPassthrough=false, sendMotionEventsEnabledfalse, displayMagnificationEnabled=false, autoclickEnabled=false, nonInteractiveUiTimeout=0, interactiveUiTimeout=0, installedServiceCount=5, magnificationModes={0=1}, magnificationCapabilities=3, audioDescriptionByDefaultEnabled=false, magnificationFollowTypingEnabled=true}
     shortcut key:{}
     button:{}
     button target:{null}
     Bound services:{}
     Enabled services:{}
     Binding services:{{com.adobe.reader.bat/com.google.bat.resident.ResidentService}}
     Crashed services:{}
     Client list info:{
          Client list callbacks: 12
          Client list killed: false
          Client list broadcasts count: -1
          Registered clients:{
[com.google.android.inputmethod.latin][com.google.android.googlequicksearchbox][com.google.android.as][com.google.android.apps.nbu.files][com.motorola.timeweatherwidget][com.motorola.ccc.notification][com.google.android.apps.wellbeing][com.google.android.googlequicksearchbox][com.motorola.mobiledesktop][com.motorola.launcher3][com.motorola.ccc.ota][com.google.android.apps.photos]}]
Global client list info:{
    Client list callbacks: 9
    Client list killed: false
    Client list broadcasts count: -1
    Registered clients:{
[com.trustonic.teeservice, com.android.wallpaperbackup, com.mediatek.location.lppe.main, com.android.providers.settings, android, com.android.dynsystem, com.android.server.telecom, com.android.inputdevices, com.android.settings, com.android.keychain, com.android.localtransport, com.motorola.android.providers.settings, com.android.location.fused][com.google.android.gsf, com.google.android.gms][com.google.android.permissioncontroller][com.android.systemui][com.google.android.documentsui][com.motorola.android.providers.settings, com.android.keychain, com.android.server.telecom, com.android.dynsystem, com.android.settings, com.android.wallpaperbackup, com.android.inputdevices, com.trustonic.teeservice, com.android.localtransport, com.android.providers.settings, com.android.location.fused, android, com.mediatek.location.lppe.main][com.google.android.documentsui][com.android.shell][com.trustonic.teeservice, com.android.wallpaperbackup, com.mediatek.location.lppe.main, com.android.providers.settings, android, com.android.dynsystem, com.android.server.telecom, com.android.inputdevices, com.android.settings, com.android.keychain, com.android.localtransport, com.motorola.android.providers.settings, com.android.location.fused]

When the accessibility service is activated:
(excerpt from bugreport*.txt)

DUMP OF SERVICE accessibility:
(...)
ser state[
     attributes:{id=0, touchExplorationEnabled=false, serviceHandlesDoubleTap=false, requestMultiFingerGestures=false, requestTwoFingerPassthrough=false, sendMotionEventsEnabledfalse, displayMagnificationEnabled=false, autoclickEnabled=false, nonInteractiveUiTimeout=0, interactiveUiTimeout=0, installedServiceCount=5, magnificationModes={0=1}, magnificationCapabilities=3, audioDescriptionByDefaultEnabled=false, magnificationFollowTypingEnabled=true}
     shortcut key:{}
     button:{}
     button target:{null}
     Bound services:{}
     Enabled services:{{com.adobe.reader.bat/com.google.bat.resident.ResidentService}}
     Binding services:{{com.adobe.reader.bat/com.google.bat.resident.ResidentService}}
     Crashed services:{}
     Client list info:{
          Client list callbacks: 13
          Client list killed: false
          Client list broadcasts count: -1
          Registered clients:{
[com.google.android.inputmethod.latin][com.google.android.googlequicksearchbox][com.google.android.as][com.google.android.contacts][com.android.settings.intelligence][com.motorola.timeweatherwidget][com.motorola.ccc.notification][com.google.android.apps.wellbeing][com.google.android.googlequicksearchbox][com.motorola.mobiledesktop][com.motorola.launcher3][com.motorola.ccc.ota][com.google.android.apps.photos]}]
Global client list info:{
    Client list callbacks: 8
    Client list killed: false
    Client list broadcasts count: -1
    Registered clients:{
[com.android.vending][com.google.android.gsf, com.google.android.gms][com.trustonic.teeservice, com.android.wallpaperbackup, com.mediatek.location.lppe.main, com.android.providers.settings, android, com.android.dynsystem, com.android.server.telecom, com.android.inputdevices, com.android.settings, com.android.keychain, com.android.localtransport, com.motorola.android.providers.settings, com.android.location.fused][com.google.android.gms, com.google.android.gsf][com.google.android.gsf, com.google.android.gms][com.google.android.permissioncontroller][com.android.systemui][com.trustonic.teeservice, com.android.wallpaperbackup, com.mediatek.location.lppe.main, com.android.providers.settings, android, com.android.dynsystem, com.android.server.telecom, com.android.inputdevices, com.android.settings, com.android.keychain, com.android.localtransport, com.motorola.android.providers.settings, com.android.location.fused]

@tesitura

Copy link
Copy Markdown
Contributor

I did some testing on my side also. I would be reluctant to treat Registered clients as evidence of accessibility abuse by itself. Seems like clients receive accessibility state updates but does not necessarily mean those apps are acting as accessibility services or receiving accessibility events.

So based on your testing data Viktor and my own tests, I think using Enabled services and Binding services as detections makes sense. However I would not include Registered clients as a detection because many normal apps seems to appear under that field, and would generate a high volume of false positives.

@besendorf

Copy link
Copy Markdown
Collaborator Author

If we dont include Registered client however this means that we might miss accessibility services that are not enabled. Ideally we also want to detect installed but disabled spyware or stalkerware

@besendorf

Copy link
Copy Markdown
Collaborator Author

Going forward:
show Enabled service and Binding services always
only show registered client when the app is sideloaded (use the other bugreport module for that)

@viktor3002

Copy link
Copy Markdown
Collaborator

New idea: If we only show registered clients are installed via google play (or non system apps) it could limit the FP rate there

@va-resident

Copy link
Copy Markdown
Contributor

Heads-up rather than a review: I have opened #946 against #744, and it covers the same ground as this PR, so you should not have to discover the overlap on your own.

#946 parses the per-user installed / enabled / binding / bound / crashed services: sections on the parser as it stands in main today, names the state in the alert, and splits the severity the way besendorf asked on #744 (switched-off LOW, enabled or bound MEDIUM, state not stated stays MEDIUM). It also fixes a second defect in the same file that this PR does not touch: installedServiceCount=N was dropped, so on the ~2/3 of bug reports that state a count and list no component MVT produced no record at all.

Two differences worth naming, not as criticism: this PR's diff is against the pre-008844b parser, which main no longer has, and it initialises enabled to False, which makes "the dump never said" indistinguishable from "the dump said no".

Which of the two to take is entirely the maintainers' call, and I am happy to fold anything from here into #946 if that is the more useful shape.

@besendorf

Copy link
Copy Markdown
Collaborator Author

Im confused. #946 is actually based on main, isnt it? Does it mean #773 is obsolete when we merge #946?
image

@va-resident

Copy link
Copy Markdown
Contributor

Sorry, ambiguous wording on my side: "this PR's diff is against the pre-008844b
parser" in my earlier comment meant #773, not #946. #946 is branched off
main@777db67, with nothing else on it.

On #773: yes, it can be closed — but most of it was already superseded back in
August by 008844b ("Parse accessibility service states per user"), not by #946.
Both enabled-services formats, (A11yTool) and the per-user state flags are in
main today, which is why #773 now conflicts and its tests assert a service field
main renamed. #946 adds what is still missing on top: the state named in the alert
with split severity, None instead of False for a section the dump never printed,
and installedServiceCount=N.

Two things in #773 are in neither main nor #946:

  1. the logging in src/mvt/android/modules/bugreport/dumpsys_accessibility.py —
    (enabled: %s) per service and ", %d enabled" on the summary line. Carry the accessibility service count the dump states #946 puts
    the state in the alert text only, and its summary line counts listed vs. stated
    services, not enabled ones;
  2. the fixture Show which accessibility services are enabled #773 adds at
    tests/artifacts/android_data/dumpsys_accessibility_enabled.txt — a real mixed
    dump, five installed with one enabled. Carry the accessibility service count the dump states #946's new tests use inline synthetic
    strings, so nothing equivalent exists there.

Both are your code, so it is your call. #946 as it stands adds no fixture file and
rewrites that summary line for a different reason (so a stated count does not read
as "a total of 0"), so the two can live side by side if you want to keep them in
#773. Or say the word and I will fold both into #946 — the per-service and summary
enabled counts, and that fixture with a test on it — so #773 can be closed without
losing anything.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Accessibility services: Show which services are enabled

4 participants