History log of /frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
ee77b881a4187f6354ad669878db08ff74421b66 20-Jun-2016 Phil Weaver <pweaver@google.com> Report all content changes to a11y services.

Changes were discarded if they arrived too quickly in
A11yManagerService. Excuse content change events from
throttling at this level.

Bug: 29355115
Change-Id: Ifd9da07315ce0c18f59c1dad6a621110ad48343b
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
37fc1c1ce4629973a101ab5cde41406bb6266793 12-May-2016 Phil Weaver <pweaver@google.com> Don't disrupt a11y state when user is unlocked.

AccessibilityManagerService#unlockUser was assuming that we should
switch to the unlocked user's state. If that user is a new work
profile, this transition disables all accessibility features.

Bug: 28726050
Change-Id: I3797d34b580d00642b204fff3fc9a07b720738e0
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
2fbdd48682c32407daff4fd6577c3838c7c7a220 02-May-2016 Phil Weaver <pweaver@google.com> Reduce cost of a11y services with magnification.

Services that declare that they can control magnification,
but never actually make a change or register a listener
waste cycles as we compute magnification data they never use.

Avoid registering for magnification callbacks unless magnification
gestures are enabled, a service is listening for magnification
changes, or a service has changed magnification.

Bug: 28425922
Change-Id: I114a833669bd53b2cd757c94ea52b65a2f838a08
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
0f36545bb8a3db08cad3c5c64e7d3f3e7c2dbf26 02-May-2016 Phil Weaver <pweaver@google.com> Re-enable accessibility when UiAutomation closed.

We need to read the settings when UiAutomation closes in order to
configure other accessibility features from settings.

Bug: 28461805
Bug: 28460671
Change-Id: I030761922ec4acfa2d916e171c39e9dc2deb85a2
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
ce18c8167766f92856f94a8e88e19de4698960e6 28-Apr-2016 Jeff Sharkey <jsharkey@android.com> Introduce "unlocking" vs "unlocked" nuance.

There is a narrow window of time during user unlock where we're
reconciling user storage and dispatching the "unlock" status to
various internal system services. While in this "unlocking" state,
apps need to be told that the user still isn't actually "unlocked"
so they don't try making calls to AccountManager, etc.

The majority of internal services are interested in merging together
both the "unlocking" and "unlocked" state, so update them.

Clarify naming in AccountManagerService to make it clear that a local
list is being used, which mirrors the naming in MountService.

To match UX/PM requested behavior, move PRE_BOOT_COMPLETED dispatch
after the user is unlocked, but block BOOT_COMPLETED dispatch until
after all PRE_BOOT receivers are finished to avoid ANRs.

Bug: 28040947, 28164677
Change-Id: I57af2351633d9159f4483f19657ce0b62118d1ce
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
1f70f0b7d60ad0b98fe6597162769bce8b85e3ed 28-Apr-2016 Phil Weaver <pweaver@google.com> Merge "Fix several accessibility magnification issues." into nyc-dev
70439244ba1abc4f32357d2ee8ff38f73158fe37 11-Mar-2016 Phil Weaver <pweaver@google.com> Fix several accessibility magnification issues.

Clarifying region used for magnification as "magnificationRegion",
both in the public API and in the code. There's been significant
confusion about what "magnfifiedRegion" means. Removing
"availableRegion" from everywhere except where it's required, as
that region was identical to magnified/magnification region.

Trying to shut down magnification was a complex situation where
animations in progress and new magnification requests were tricky to
handle correctly. It was not possible to guarantee that the
magnification callbacks were unregistered consistently. There were
at least two situations that led to phone restarts:
1. If a triple tap was detected between unregistering the callbacks
and shutting down the input filter. In this case the magnification
request would go through.
2. If an animation had just started when magnification was turned
off, so the current magnification was 1.0 but the animator was
about to change it. In this case the callbacks would be unregistered,
and then the animator would start changing the magnification.

This change makes registering and unregistering magnification atomic.
It also makes MagnificationController stick around indefinitely once it
is created, registering and unregistering as needed to support
magnification gestures and services that control magnification. Services
that merely query the status of magnification no longer register for
callbacks.

One part of shutting down is turning off the animation and guaranteeing
that it won't try to make further changes. Adding a flag to
SpecAnimationBridge and a lock in that class so we can guarantee that
nothing happens when we aren't registered for magnification callbacks.

Also reconfiguring all accessibility options when a service stops to
make sure that only the features required by the current configuration
are enabled.

Bug: 27497138
Bug: 27821103
Change-Id: If697cbd34b117d82c8eee1ba7d0254089ee4241d
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
b72c30653dc9652d9c6beba979e5ea194c1a4638 20-Apr-2016 Phil Weaver <pweaver@google.com> Merge "Clear calling identity when binding a11y services" into nyc-dev
13ce4693d303c8c17494ddef9ac12fc0f901d040 20-Apr-2016 Phil Weaver <pweaver@google.com> Clear calling identity when binding a11y services

When a UiAutomation is destroyed, accessibility services may get
enabled as a side effect. That was causing these services to be
enabled in a binder thread, which threw a SecurityException.

Bug: 28268310
Bug: 28163652
Change-Id: Ie25ab05569b5b21b5f30e7d7eed24ef73b7ba159
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
f2efdd8c7ca65745245a0ac26c681a8d376adb87 16-Apr-2016 Adrian Roos <roosa@google.com> Fix unprotected StatusBarManagerService calls

Some Binder calls in StatusBarManagerService were
left unprotected. They had no business being binder
calls in the first place, so they got moved to
StatusBarManagerInternal.

Bug: 28222649
Change-Id: Ib26dcca413eb642ba8cd6a4482bf13071f8bd3ab
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
416bba7b467a5606798ef3d9013cdee2f0c39b1a 14-Apr-2016 Svetoslav Ganov <svetoslavganov@google.com> Ensure injected gestures respect magnification

Change-Id: Ie828f4be4eb1ec620549c1346ec7cc335908612f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
af93306a3db9c0a04d74809901cc297834bbba87 09-Apr-2016 Phil Weaver <pweaver@google.com> Merge "Reduce unnecessary accessibility cache clearing." into nyc-dev
e37cfab6c65ec0997b07089e70fa0ad47d2fbd83 08-Apr-2016 Phil Weaver <pweaver@google.com> Reduce unnecessary accessibility cache clearing.

Tracking if accessibility focus is being cleared because it is being
set to another view in the same window. In this case, leave
accessibility focus on the window.

This change greatly reduces the amount of cache re-indexing.
Previously we flushed the cache every time accessibility focus moved.

Bug: 28077283
Change-Id: If80899d36e7f58b22635f844bdd4ea37a55b875e
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
21cafcd6628a36f844dee850dc653913bc3ef832 08-Apr-2016 Anna Galusza <agalusza@google.com> Merge "Fix issue where (accessibility) keyboard mode callbacks were not always called. Bug: 28007101" into nyc-dev
445fd2afe9336cecf76e41d78aa0b6f3b7053700 18-Mar-2016 Phil Weaver <pweaver@google.com> Eliminate deadlock in magnification.

Use the lock from AccessibilityManagerService in
MagnificationController, since the two services call each other with
locks held.

Bug: 27725795
Change-Id: Iaed6749bf217210457325c3912da0f7aa0f6319a
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
c9eab5fa9021cd91c350cda7fa953b1e451138c7 06-Apr-2016 Anna Galusza <agalusza@google.com> Fix issue where (accessibility) keyboard mode callbacks were not always called.
Bug: 28007101

Change-Id: Ie7f992243e5a71bc6fed74cbc0d242d652d7fc12
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
cd1e9ad83c0402d7e66a00783aecfa0046af2416 04-Apr-2016 Anna Galusza <agalusza@google.com> Merge "Fix bug where service disabled with disableSelf() would not reset soft keyboard behavior. Bug: 27947344" into nyc-dev
8a12f640fc479a860a2e55bb68c7e8f2a2549bc6 01-Apr-2016 Anna Galusza <agalusza@google.com> Fix bug where service disabled with disableSelf() would not reset soft keyboard
behavior.
Bug: 27947344

Change-Id: I19583cad14616416be3582c30653d244a27aa366
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
d4a19326085f2a68d568dfa754c29fd0ac49d193 04-Apr-2016 Phil Weaver <pweaver@google.com> Merge "Add accessibility window title and anchor." into nyc-dev
b5e89c6debca90be92bf5bc2e0e79d109de6d08f 02-Apr-2016 Jeff Sharkey <jsharkey@android.com> Support direct-boot tests.

Add shell commands to check on current FBE status and system ready
status. Mark variables without first-class locking as volatile.

Fix bug where UI automation would crash while device was locked by
marking it as forced direct-boot aware.

Bug: 26498834
Change-Id: Ib4dfb9350925e5413f93a09baacf84c62f2ba0ea
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
c71485abaf6e868fce8ee1c323c4a5ef8a85abe3 30-Mar-2016 Anna Galusza <agalusza@google.com> If the AccessibilityService requesting the soft keyboard to be hidden is
stopped, make sure the keyboard is hidden.
Bug: 27886621

Change-Id: I63ecc0c9506a60cd07660208d37cd6a0bfd5752d
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
396d549113bc633f719acc643c7dfc5f2a8fae4e 23-Mar-2016 Phil Weaver <pweaver@google.com> Add accessibility window title and anchor.

Plumbing through the title of windows so support multiwindow
accessibility.

Adding ability to determine the anchor of a pop-up window so the pop-up
can be traversed as part of its anchor.

Bug: 27687627
Bug: 8449376

Change-Id: I59e98a29fb90029407a26de5bf3d900fed5dd627
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
3eca3cd33497d44953418f8c6d9de4a00015d64f 25-Mar-2016 Muyuan Li <muyuanli@google.com> Merge "Refactor enableAccessibility to AccessibilityManagerService" into nyc-dev
2ec58a65d2b976d75a063f83bfcb3d1fac5e51e1 23-Mar-2016 Phil Weaver <pweaver@google.com> Merge "Fix ACCESSIBILITY_ENABLED settings." into nyc-dev
517a3e07611657f36ec85b9cf52d9430edf38adc 23-Mar-2016 Phil Weaver <pweaver@google.com> Fix ACCESSIBILITY_ENABLED settings.

A typo meant that the setting reflected the exact opposite of what was
intended.

Bug: 27781201
Change-Id: Icb0d4d585399f147b319093be57d708af4c6dfdc
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
16b8251c89743dab939ccfc79fb6f64d0df6aaae 19-Mar-2016 Muyuan Li <muyuanli@google.com> Refactor enableAccessibility to AccessibilityManagerService

enableAccessibility is refactored from EnableAccessibilityController to
AccessibilityManagerService. Also added are 2 methods disableAccessibility,
and isAccessibilityEnabled.

Bug: 27645255
Change-Id: I32d75ed6617b8bcf82bbee0dd5ee776f430fb386
(cherry picked from commit 84da556422d50e43eb674061cc454f331104d493)
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
45ebfd339f7f2aea83f789b8c6815092e65c592a 21-Mar-2016 Phil Weaver <pweaver@google.com> Merge "Fix decision handle accessibility events." into nyc-dev
6fdd3afdcc43c1dec03ee82e9e1d69e88170d932 17-Mar-2016 Phil Weaver <pweaver@google.com> Merge "Treat accessibility actions as user activity" into nyc-dev
8a372a0a280127743ce9a7ce4b6198c7a02d2a4f 16-Mar-2016 Jeff Sharkey <jsharkey@android.com> Refactoring FBE APIs based on council feedback.

Mostly consists of removing the word "encryption" from most APIs,
since we can't actually make promises about the data being encrypted.

Bug: 27531029
Change-Id: Iace9d7c4e64716abf86ed11847c40f3947e1d625
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
da80d676c70fa07d4efe566b2c74b3fbc61805b0 16-Mar-2016 Phil Weaver <pweaver@google.com> Treat accessibility actions as user activity

Resurrecting ag/665912.

Bug: 19531976
Change-Id: Ibdddd507215e61b9f4313c36eab8845e9940a7ac
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
9b0081df70f38fc195423a9338183b348ae412c6 10-Mar-2016 Phil Weaver <pweaver@google.com> Fix decision handle accessibility events.

This was a typo in the original CL.

Change-Id: Iddb2a6ac6848e3ee91694befa1835e56ce50d470
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
6ca619fe1aff489e1227b0db6a77c96e973a1db3 08-Mar-2016 Muyuan Li <muyuanli@google.com> Partial screenshot

Added a partial screenshot function in TakeScreenshotService
also added corresponding shortcut keys in PhoneWindowManager

Bug: 26820467
Change-Id: Id67cd3b4b0eed848eb4665056766546500bdac88
(cherry picked from commit 03e45541e9d54a2f285906ac7b5bcb374db14495)
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
54677d2a55592be77d23e36b97a8a4a7d4b7c9f8 29-Feb-2016 Phil Weaver <pweaver@google.com> Control AccessibilityServices with one setting.

Accessibility services were controlled by two settings:
ENABLED_ACCESSIBILITY_SERVICES and ACCESSIBILITY_ENABLED. These
settings needed to be changed together, and race conditions could
creating inconsistent states as ACCESSIBILITY_ENABLED was also
changed by the framework itself.

Restructuring to keep ACCESSIBILITY_ENABLED up-to-date, but not to
use it to decide whether or not to enable accessibility. Enabling
is controlled solely by ENABLED_ACCESSIBILITY_SERVICES.

Bug: 27455234
Change-Id: I9ab1e5936080c1b0dd8410dd6e8666e7f6eaccf3
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
8c8e55904a8f9c5694bdcbc587fb140159060c90 26-Feb-2016 Phil Weaver <pweaver@google.com> Merge "Control magnification only with the setting." into nyc-dev
6cb67af65fc0e242ecb0de38620f00dafc67886c 26-Feb-2016 Phil Weaver <pweaver@google.com> Control magnification only with the setting.

Don't turn off magnification if gestures are enabled.

Bug: 26571116
Change-Id: I8dafcd4eef50bfa8f9474bf98637f8e54f3527e1
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
8ca583b29f7a06dcd2ccb2da7c4273d4db8bf7fd 26-Feb-2016 Phil Weaver <pweaver@google.com> Merge "Accessibility to toggle multiwindow mode" into nyc-dev
315c34e7d62ce4b609f2d08b18a11a2d44e93aba 20-Feb-2016 Phil Weaver <pweaver@google.com> Accessibility to toggle multiwindow mode

Encapsulating the logic to toggle multiwindow mode from recents,
and plumbing it through to accessibility global actions. Sending
accessibility events when windows bounds change. Exposing the
dock divider window type to accessibility services.

Bug: 27250995
Change-Id: Ib7491f1f853dc7f01bf5c5a4ac1f914f55d0608a
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
e88e2665471c7b620fd3b1baca024fc9e705ee32 24-Feb-2016 Jeff Sharkey <jsharkey@android.com> Update accessibility to be encryption-aware.

Look for both EA and non-EA accessibility services, but when the user
is locked only bind to EA services. Once the user is unlocked, we
take another pass and bind to any non-EA services.

We only consider disabling accessibility once the user is unlocked,
since there could be non-EA services waiting in the wings.

Bug: 25860579
Change-Id: I97bd019661457c3577d629ba12290d02f026011a
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
c42d933b56f889b3d36f253b8f6b6560021cd432 20-Feb-2016 Svet Ganov <svetoslavganov@google.com> Clear binder id before creating pending intent as the system.

bug:19349693

Change-Id: I989441ac32b89d313ec7a006373faa90f58fc89d
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
cc494765faea28adeca7584d75c97933ffaf309b 09-Feb-2016 Phil Weaver <pweaver@google.com> Merge "Clean up UiAutomation working alongside a11y." into nyc-dev
78d2e2ddf07414eb342094ad8cf9d830b2220528 02-Feb-2016 Phil Weaver <pweaver@google.com> Clean up accessibility gestures.

Closing two small holes in the implementation:
1. The gesture was dispatched before the callback was registered. It
was possible for gestures that failed quickly to fail to report any
status.
2. Gestures could be dispatched before the input filter was
installed. Adding a wait to give the filter a chance to install
before reporting a failure.

Also removing an unused method on the input filter.

Change-Id: I77cd80dcd2cec6c72b3761169aba5eaecf62250b
(cherry picked from commit 03465fb874ccf35ead2228b66ec03afc31d7694e)
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
f564afa4cd17ba4b259e2b1ee01f061d12fd0fe2 02-Feb-2016 Phil Weaver <pweaver@google.com> Clean up UiAutomation working alongside a11y.

Fix two bugs: one where Instrumentation did not properly
handle destroyed UiAutomations, another where UiAutomation
did not properly disable running accessibility services.

Change-Id: I1773dbd373f4d5b0e7c9917ff18d8d9b1a0e07c7
(cherry picked from commit 846522cea043d3113b3b96daa8f3a1b70e3beb5e)
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
f3e5d1d483231d615f5e77032f787fcd8047488b 29-Jan-2016 Anna Galusza <agalusza@google.com> Merge "Add API for IME control by Accessibility Services."
1dd872260b3ccfbe492d1be0bdbb3f98235b3ba3 27-Jan-2016 Phil Weaver <pweaver@google.com> Optionally support accessibility with UiAutomator

Adding a flag to AccessibilityServiceInfo that only works
for UIAutomator that supresses other services. This flag
is set by default for UIAutomation to match the current
behavior, but tests may clear the flag and enable other
services.

Needed to improve cts coverage of AccessibilityService.

Bug: 26592034
Change-Id: Icfc2833c1bd6546a22a169008d88a6b15e83989c
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
9b278112467581e2b8d99f29cf48b9fbef9cc53f 04-Jan-2016 Anna Galusza <agalusza@google.com> Add API for IME control by Accessibility Services.

Change-Id: I3bb806cf420e0551a2c9ef97d95613f73e362df9
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
a3a1ea3dbe96405a69765d4740a73a37ab240df4 25-Jan-2016 Svetoslav Ganov <svetoslavganov@google.com> Merge "Clear binder calling identity before mutating secure settings."
81fcf7037b86fd9cb1592359d08a1bd5992c6fc1 25-Jan-2016 Svet Ganov <svetoslavganov@google.com> Clear binder calling identity before mutating secure settings.

The accessibility manager service changes secure settings without
clearing binder calling identnty. Luckily it worked for a long
time as the calls resulting in a secure setting change were not
made on a binder thread. Now we clear calling identity before
mutating secure settings - note that we alsways do this after
a security check, hece it is safe.

bug:26766532

Change-Id: Icb188e6de1a134f38de0bdb23c67fa4ff2806ba4
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
a9e7a3bbe859a8416e54be28bd1f055df60074e5 15-Dec-2015 Jinsong Mu <jinsong@google.com> Accessibility services can turn themselves off b/22514381
Added disableSelf() method to AccessibilityService
This newly added api used used in
https://googleplex-android-review.git.corp.google.com/#/c/833857/

Change-Id: I5fe60181058ef90dd496318cf270e0825bcc411a
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
e2239c9346b9efb8c879c1925d90f70c4eb2405c 13-Jan-2016 Fyodor Kupolov <fkupolov@google.com> Explicitly pass userId to getWindowToken

UiAutomationConnection.clearWindowContentFrameStats method currently clears
calling identity before calling mAccessibilityManager.getWindowToken. This
doesn't work properly when a call is made by a secondary user, because it
wouldn't pass a check in getWindowToken. This is now fixed by explicitly
passing ID of the calling user.

Bug: 26498396
Change-Id: I8f0cdde33e18f04adb1833c6c0d0c329de921018
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
a6b64f5099b7be6e8384958d8bcddb97bb06ec93 05-Dec-2015 Phil Weaver <pweaver@google.com> Gesture dispatch from accessibility services.

Add public APIs to describe gestures and dispatch them from
an accessibility service. Added a new capability that
services must declare to have this capability.

Bug: 22514086

Change-Id: I9bff2d9335f0310115112d14b7ed033a6d6c2393
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
08e7fa9b6918f442669970aa0dc048625424c07b 08-Dec-2015 Jason Monk <jmonk@google.com> Allow color matrix to be controlled by secure setting

Change-Id: Ia5518ad79fae502e814034edd7ae8d7a57b3eaeb
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
14ed6cf3e7bada4932314969000d384bed6d3f92 20-Nov-2015 Phil Weaver <pweaver@google.com> Ignore feedbackType in AccessibilityEvent dispatch

Send AccessibilityEvents to all accessibility services
that request them. No longer refuse to send them to
services with the same feedback type.

Change-Id: I137905c24fc75c075ab938175ecb6ea5f39112cf
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
b76bbd8e50feb134c5782e5b4c4f0e488a95b701 20-Nov-2015 Phil Weaver <pweaver@google.com> Merge "Dispatch key events to multiple a11y services."
5915658c885e6832bb012461c2a79237f0d15133 17-Nov-2015 Phil Weaver <pweaver@google.com> Dispatch key events to multiple a11y services.

Introducing a new class to manage key event dispatch
that sends all events to all classes that request them.

Bug:22332500, 22515057
Change-Id: I8521f6257a4ac6c8f2eff14186789630d680ff11
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
214fb68767502f5fede643a062c1dc5975d75b27 17-Nov-2015 Alan Viverette <alanv@google.com> APIs for querying and controlling display magnification

Also separates magnification state and touch event handling. Moves
callbacks for window manager changes and display state changes into
the magnification controller.

Bug: 22718911
Change-Id: I3a8ba060a07d8f1f51856855a5f85601766fd45d
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
57525a7054f16c198f463b1cf27988243bb96248 29-Oct-2015 Alan Viverette <alanv@google.com> Refactor MagnificationController out to its own class

First step in moving ownership to AccessibilityServiceManager so that we
can implement the magnification control APIs.

The magnification Region and the current/sent MagnificationSpecs are now
private to the controller, and all access is handled through accessor
methods. Comments have been added to all public accessor methods.

Bug: 22718911
Change-Id: Ia50ee93513785585aac5424543fc1d730b84bd90
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
94ce21094d7a6289c888492632765d2a83624853 15-Sep-2015 Toni Barzic <tbarzic@google.com> Always reload AccessibiiltyInputFilter on user switch

Makes AccessibiilityInputFilter aware of current user ID, and pasess the
user ID to event stream filters that have per-user parameters:
- AutoclickController -> for per-user autoclick delay
- ScreenMagnifier -> for magnification scale

While doing this, make AccessibilityInputFilter.disableFeatures private,
and replace usage in AccessibilityManagerService with
setUserAndEnabledFeatures with feature flags set to 0:
Using disableFatures directly leaves input filter in inconsistent state
where internal mEnabledFeatures flags don't match real state of enabled
features.

BUG=23113412
BUG=24265227

Change-Id: Ib295f4c08de1a3743e55714459844b6d80787637
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
466f3216505bd039a285881e06ead631331fe368 22-Sep-2015 Filip Gruszczynski <gruszczy@google.com> Showing docked stack divider window.

When there is docked stack, we want to show a "handle" through which the
user will resize the docked stack. We add it from the system process,
because we want to avoid IPC calls.

Change-Id: If15fd2a0fcb7077446d1ba6c533acb3028a42039
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
386f8349709380143f9bf38b41d8dffe736075bf 09-Sep-2015 Toni Barzic <tbarzic@google.com> Introduce settings for Automatic click when mouse pointer stops

Settings in question are:
- accessibility_autoclick_enabled -> Whether the feature is enabled
- accessibility_autoclick_delay -> Amount of time mouse pointer has to
stay still before performing click

Enable/disabled AutoclickController event stream transformation (which
implements the feature) based on the accessibiilty_autoclick_enabled
value

BUG=23113412

Change-Id: I8178d10c09d86713bb4c725c95268a7c5f432eb4
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
a826b8c24c45443271567cae4cde6db04f147a7c 02-Sep-2015 Xiaohui Chen <xiaohuic@google.com> Cleanup USER_OWNER in a11y service and tests

I need to make some changes to get the tests pass. First a11y service
will now disable when no service is specified, I need to re-enable
a11y after services are enabled. Second the old event used in tests
seems to be filtered out by the service, I need to pick a new event.
Also the timeout waiting for mock service to start is extended, I hit
the old timeout quite often with N9.

Bug: 19913735
Change-Id: I8fe1b7b5d93b6a52df0a8940a08761ea5fbf5084
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
e85da2bad5b80f4e2269a64255cbaf8c11efce61 26-Jun-2015 Jorim Jaggi <jjaggi@google.com> Add accessibility event for assist disclosure

Bug: 21568059
Change-Id: Ib51d4236fcc87acd54cb5d191197b9b2c6cc54ea
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
b3876474399ae22ccfc8f04d7f9ab577517db370 04-Jun-2015 Svetoslav Ganov <svetoslavganov@google.com> Merge "Make node retrieval methods in AccessibilityManagerService use separate Region instances to make them thread safe." into mnc-dev
386a824384a0d5795a38d10d1d2c18e4e50f8c30 03-Jun-2015 Nirmal Patel <nirmalpatel@google.com> Make node retrieval methods in AccessibilityManagerService use separate Region instances to make them thread safe.

b/21087793

Change-Id: Ice690e3d7494788fb9e1e234a54f14831bd4e0d3
(cherry picked from commit ebd8eb4610d6bb9322a374f8965a78ba1c39ee63)
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
942bc58518a82bc3dbeffe4d64f9a5d2d2d8cf43 01-Jun-2015 Doris Liu <tianliu@google.com> Fix calls to Rect.intersect(Rect)

This CL checks for the return value for Rect.intersect(Rect) for whether
there is actually an intersection before taking the calling rect as the
intersection. In the case of no intersection (Rect.intersect(Rect) returns
false), the calling rect would not have been changed, so here in this CL
it will be manually set empty.

Bug: 7368679
Change-Id: I7494c1a1649eca09e34412f0a59b795e8b3a82aa
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
d69e4c1460017062e7c36be55801cb434ad19d97 24-Apr-2015 Dianne Hackborn <hackbod@google.com> Update use of procstate for services.

Now that we have a separate foreground service proc state
(above a sleeping top app), update various system services
to put their bindings into this state when appropriate.

There are two new bind flags for this -- one that just always
makes it a foreground service, another that only does it when
the device is awake (useful for things like the wallpaper).

And with all of that, tweak network policy manager to only
include apps that are at least foreground service state when
in power save and device idle modes. This will allow us to
further reduce the set of apps that have network access
(in particular not giving access to the current top app when
the screen is off), hopefully leading to even better battery
life.

Change-Id: I91d85a5c5ed64e856149e9a5d94a634a7925ec7f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
0a4dc2258fa8216920e1a0b83cbf7d3729386e2f 14-Apr-2015 Wale Ogunwale <ogunwale@google.com> Added TYPE_APPLICATION_ABOVE_SUB_PANEL window type.

TYPE_APPLICATION_ABOVE_SUB_PANEL will be displayed on top of their
attached window and any TYPE_APPLICATION_SUB_PANEL panels.

Bug: 20135562
Change-Id: I711de3c19c01432c44de205bf09934a8b23b53fd
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
2d4aadca9487d76cb7220bdba90afa53119664ea 17-Mar-2015 Christopher Tate <ctate@google.com> Merge restored accessibility enable state, don't overwrite

We do not want to accidentally disable the user's currently-enabled
accessibility service(s); presumably they turned them on during
setup for a reason. We now merge the prior + current states rather
than simply replacing the current state with the former.

Bug 19427367

Change-Id: I96eb47df57318c88066c5da6862f23f656639148
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
7e760ee59d77f0e8cbdd4c64c1d4bf0b89113878 03-Feb-2015 Svetoslav <svetoslavganov@google.com> Fix broken activation of the selected view in accessibility mode. automerge: ded133c automerge: b6b526e
automerge: f8acd7a

* commit 'f8acd7a961f3a36712519d0f925f86f3da8d0b7c':
Fix broken activation of the selected view in accessibility mode.
ded133c446fa9d0d23e6bde19a66fb2ce3980491 31-Jan-2015 Svetoslav <svetoslavganov@google.com> Fix broken activation of the selected view in accessibility mode.

We were using an approximation to determine where to send a pair of down
and up events to click on the view that has accessibility focus. We were
doing reverse computation to figuring out which portion of the view is
not covered by interactive views and get a point in this region. However,
determining whether a view is interactive is not feasible in general since
for example may override onTouchEvent. This results in views not being
activated or which is worse wrong views being activated.

This change swithes to a new approach to activate views in accessibility
mode which is guaranteed to always work except the very rare case of a
view that overrides dispatchTouchEvent (which developers shouldn't be
doing). The new approach is to flag the down and up events pair sent
by the touch explorer as targeting the accessibility focused view. Such
events are dispatched such that views predecessors of the accessibility
focus do not handle them guaranteeing that these events reach the accessibiliy
focused view. Once the accessibiliy focused view gets such an event it clears
the flag and the event is dispatched following the normal event dispatch
semantics.

The new approach is semantically equivalent to requesting the view to perform
a click accessiblitiy action but is more generic as it is not affected by
views not implementing click action support correctly.

bug:18986806
bug:18889611

Change-Id: Id4b7b886c9fd34f7eb11e606636d8e3bab122869
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
8a1d65b76adaa07fd6b16f205757d663e0fbf486 24-Jan-2015 Svetoslav <svetoslavganov@google.com> Accessibility: Sometimes cannot interact with nav bar items. automerge: 10a053e automerge: db1983b
automerge: cd2ed4e

* commit 'cd2ed4e64c501a5dbf73941a4a1f1e4bc639ebf3':
Accessibility: Sometimes cannot interact with nav bar items.
10a053e474e2a566b49a1e4c9e2ec4c8cc0013bd 23-Jan-2015 Svetoslav <svetoslavganov@google.com> Accessibility: Sometimes cannot interact with nav bar items.

If there is a window with the accessibility focus we want to click
on the accessibility focused view in this window. The logic to
compute the bounds of the window was using the wrong window id,
hence getting an incorrect result. As a consequence in some cases
the user could not click on accessiiblity focused controls in the
nav bar.

bug:18889611

Change-Id: I89aee3ae2ffe27fe29819049c287a7155154c65b
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
e5aa1f52589a64367aadc9a83b094c2513491e9c 07-Jan-2015 Jinsong Mu <jinsong@google.com> Make talkback or other accessibility services updateable from playstore
only when it's been enabled. The idea is to set accessibility services package
status to disabled_until_used by default. Change the status to enabled once user
turn the service on.

It is first part of CL in framework, that returns installed accessibilityServices
even they been set disabled_until_used

Second part of CL will be in Settings, where we read/write package status
based on the service has been turn on or off.

The similiar logic has been used for preventing never used IME from auto updated
b/18205549

Change-Id: I1a9cba0221e3de0499ba5ac91ca382696bcb7043
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
14e3351a1eae2b4fc8a12c9a4586f8ea7b87442c 12-Dec-2014 Svet Ganov <svetoslavganov@google.com> Merge "Fix a NPE in AccessiiblityManagerService." into lmp-mr1-dev
09687064f4cf681d2aa299c393e32f22fc013c96 12-Dec-2014 Svet Ganov <svetoslavganov@google.com> Fix a NPE in AccessiiblityManagerService.

It is possible that the accessibility windows list is null which
is treated as if there is no window information. The getWindows
method was accessing properties of the windows filed witgout a
null check.

bug:18522998

Change-Id: Ieefe678d3da3d6e8f96c0e4bedac0c55975621fa
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
12b7328c0b7f83a233d9387eaa66d1a0ed403724 09-Dec-2014 Svet Ganov <svetoslavganov@google.com> Ignore accessibility overlay when computing window's interactive region.

If an accessibility service opts-in for the new window introspection APIs
when calling into a window for accessibility node infos we compute the
window's interactive region, i.e. the portion that is touchable and not
covered by other touchable windows, in roder to deterine whether these
nodes are visible, i.e. the user can interact with them. There was a bug
in the interactive region computation what we were not ignoring accessibility
overlay windows which are intended to not change what an accessibility
service can "see" and are put by such a service.

bug:18652374

Change-Id: I24ce54069087af9bc308e0c6a7b2aa6b952a6136
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
3a0d878ab56475276c61d574af7651820a5cea5a 04-Dec-2014 Svetoslav <svetoslavganov@google.com> Ensure all events from a showing window are dispatched.

Accessibility services may opt-in to introspect the interactive
windows on the screen. If window introspection is enabled there
is a case where some events from a showing window are received
before the updated window state from the window manager. Now the
window manager sends over the windows before notifying the app
for the focus change.

bug:18625996

Change-Id: Ic481e01efbe12dc92f090f799feeb236672fc7b3
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
3a5c721072c60c7ed9c8a95d0a65d0e3cb4eb9bb 14-Oct-2014 Svetoslav <svetoslavganov@google.com> APIs for an accessibility service to put interaction tracking overlays.

An accessibility service may register to observe the interactive windows
on the primary display. These windows are the one that has input focus and
ones a sighted user can touch. It is sometimes beneficial for an
accessibility service to overlay a window to intercept user interaction
and based on that introspect and perform an action on the windows that
are on the screen. This is problematic as overlaying a full screen window
that is touchable prevents the accessibility service to introspect the
content under this window.

This change adds a special type of window that only an accessibility service
can place which does not affect what an accessibility service can "see" on
the screen. Hence, even putting such a window full screen the service will
be able to interact with the other interactive windows it covers.

Change-Id: I053ccc3a5c6360a98dc40bdb172b54dab35d8b31
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
5f978bfa0949d58a187dec0fe9ee6b341cb97c1f 20-Oct-2014 Adrian Roos <roosa@google.com> Merge "Retire RecentApplicationsDialog" into lmp-mr1-dev
5d6041813283086c5a290ad6ca07e05b1a6ffc14 18-Oct-2014 Kristian Monsen <kristianm@google.com> Merge "Let TYPE_ANNOUNCEMENT be sent from any window" into lmp-dev
a6711ff6f09cc25c693cbb50452e3f807c6122f5 17-Oct-2014 Svetoslav <svetoslavganov@google.com> Accessibility no longer overrides strong encryption.

Updating the accessibility layer behavior to reflect the new
model where accessibility no longer overrides strong encryption.
Now enabling an accessibility service lowers the encryption
level but the user can bump it up in settings if desired.

bug:17881324

Change-Id: Ic60d760c267d3f934040a42e1963b179bd8b9f5f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
ba3787d849610a7c71fc6f0d9468855c3d369807 17-Oct-2014 Kristian Monsen <kristianm@google.com> Let TYPE_ANNOUNCEMENT be sent from any window

Part of fix for bug 17905712

Change-Id: I4e4b09f6b6342a27744e42984d483ef8de18fbff
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
d5b0842a1ddbfc2ea5335854fe2834b6e9b965de 16-Oct-2014 Svet Ganov <svetoslavganov@google.com> Send accessibility events with no window.

An app can send an accessibility event by calling the send methods
on view or directly asking the accessibility manager to do that.
While the recommened way to send such events is calling the methods
on view a legacy app or app whose developer did not read the docs
carefully may be calling the accessibility manager APIs directly.
In such a case the event does not have assigned window id and does
not get send. Since events fired by using the accessibility manager
directly lack context to determine whether thier source is important
for accessibility we assume they come from an important view to
avoid breaking backwards compatibility.

bug:18001711

Change-Id: Ie1c298fa5a0670cbeaedfcd64f820961c296b6ca
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
9a64513c7fccc2a9cf331a384906a7669b29b3f4 08-Oct-2014 Adrian Roos <roosa@google.com> Retire RecentApplicationsDialog

Bug: 5162991
Change-Id: I429da977502f33e2091496f3a075b2c507a88e1f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
8ff6d70d44626cd515f517962378d89ab3954979 04-Oct-2014 Svetoslav <svetoslavganov@google.com> Merge "Clear identity before calling into the mount service." into lmp-dev
9f70a4cc6dbdd7b509527cef892e8af3c8b09702 04-Oct-2014 Svetoslav <svetoslavganov@google.com> Clear identity before calling into the mount service.

bug:17787265

Change-Id: I4b9268d101e9ccfc30876fbf54bf28bb41fb4be6
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
47b9c1524fe20b9ae2b210acdcad64f764df68e0 04-Oct-2014 Svetoslav <svetoslavganov@google.com> TouchExploer computes incorrectly the click location.

If there is accessibilty focus and the user touch explores
location that does not change accessibility focus that is
not in the app window, e.g. system bar, double tap does not
click on the system UI affordance.

bug:17588024

Change-Id: I6c8c0f65b208ae1d3f31d7f06b0721dc223ec19f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
76716c5a180aa471c6973ca7aa03c7f2da677823 03-Oct-2014 Svetoslav Ganov <svetoslavganov@google.com> Revert "TouchExplorer computes incorrectly the click location."

This reverts commit 851a5059a47cbf76e530c9d050a677cb6e3f8657 as
it creates a regression. Let us revert this and correctly fix the
issue the original change was trying to address.

bug:17789608

Change-Id: I8abb1a61d5310430e839e4ef60e7ca5cc0cbdd80
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
d35b072dca42d249c219c886322c122739b086d7 02-Oct-2014 Svetoslav <svetoslavganov@google.com> Merge "Fix accessiblity introspection from the shell user regression." into lmp-dev
ceac51deddb873956c647d1b2dc7b2cc251d404b 01-Oct-2014 Svetoslav <svetoslavganov@google.com> Fix accessiblity introspection from the shell user regression.

Accessibility introspection APIs are meant to query only the state of
the current user. There are command line tools that run as the shell
user and want to be able to intropspect the screen. When resolving
the calling user we were using the calling user id instead of the
special constant for the current user.

Now when resolving the calling user for intrspection we are using
the current user constant and consequentially only the current
user or a profile of the current user or the root or the shell or
the system or an app with cross user permission can introspect the
screen.

bug:17674631

Change-Id: I36d1d7b65441d04c3b4204123c4b6d036ff032c0
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
6b491b64ba7200a85199452b6a7f99c777105f22 01-Oct-2014 Svetoslav <svetoslavganov@google.com> Merge "Invalid accessibility state if UI test process crashes in a bad time." into lmp-dev
419036b560e79c11705e376ad171688ac496bb7d 01-Oct-2014 Svetoslav <svetoslavganov@google.com> Invalid accessibility state if UI test process crashes in a bad time.

We allow a fake accessibility service to connect to the system for UI
automation. If the process hosting the fake service dies right after
registering it, the accessibility layer ends up in a bad state and
subsequent attempts to connect UI automation service fail.

bug:17725904

Change-Id: Idad288eab41bbdd486d95e1e5803220640653fb7
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
16e4a1aade2b73edfdaa42aa86a3893fd039fc62 30-Sep-2014 Svetoslav <svetoslavganov@google.com> Use default encryption password if an accessibility service is enabled.

When device is encrypted the user has to authenticate in order to decrypt
the data partition which is required for running accessibility services
and Text-To-Speech. In order to address this issue we are falling back
to use the default password if there is an enabled accessibility service
and the user has secure lock. This will enable the user to authenticate
when accessibility layer is completely functional.

bug:17671790

Change-Id: Iafffe7bcd234008cf91ffb5011b21b803dca227a
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
54b0a05b00226c2c9064a61297857ae7d15fc4ed 26-Sep-2014 Svetoslav <svetoslavganov@google.com> Merge "Invalid active window if temporary disabling accessibility for test tools." into lmp-dev
3f92ffc369c31c98620e22b66366adb93c60a5f8 26-Sep-2014 Svetoslav <svetoslavganov@google.com> Invalid active window if temporary disabling accessibility for test tools.

If accessibility is enabled and a test tool based on the accessibility APIs
connects to the system we suspend the current accessibility services while
the tool is running (to avoid inteference as the tool is such a service) and
after the tool disconnects we restore the accessibility state. The issue is
that when clearing the accessibility state we were also wrongly clearing the
active window. We are now careful to not clear the active window in such a
case.

It is also possible that the active window was never initilaized before the
tool is run so now it is lazily loaded such that if we do not know which one
it is, we get the one the has input focus. The definition of an active window
is the one that has input focus or the user is touching.

bug:17663432

Change-Id: I8868866a5126c590d3bddad099ababb97978227a
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
471157821f7b0933c55081ef4625c78f8e798de7 26-Sep-2014 Svetoslav <svetoslavganov@google.com> Merge "Accessibility in bad state after using SDK tool uiautomatorviewer." into lmp-dev
dd81183bbea34109e1ae2d75667fe4784be6132f 26-Sep-2014 Svetoslav <svetoslavganov@google.com> Accessibility in bad state after using SDK tool uiautomatorviewer.

The UiAutormator tool is a part of the SDK. If it is run while
accessibility is enabled it stops all accessibility services
as it is an accessibility service itself to avoid interference
and when done restores back the accessibility state. The issue
was that the accessibility state is not restored leaving the
device in a bad state.

bug:17662770

Change-Id: I3c4f46fa05c76b874eeffdeb867ef433c3fedf2e
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
8aeb0912945ae103223b76d81579073e51579efe 25-Sep-2014 Svetoslav <svetoslavganov@google.com> Accessibility events may be fired even if no services observe them.

If all accessibility services are disabled we turn off event firing
to avoid a lot of work for nothing. The logic to do that had a flaw
and was not turning event firing off in every case it should. We were
tuning event firing if it is on and no service is enabled but it
is possible that a package on the system image is disabled so the
service is enabled just not bound. Arguably we can remove the
serivice from the enabled list but it is technically on the device.
Note that we correctly handle the case of a package being removed.

bug:17332506

Change-Id: I6d6d9cb9cc271116a3d22ed9fd8d7f533dec9a0b
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
8d412fe18b9ce8cf71ce57c380e7f312e4667667 20-Sep-2014 Svetoslav <svetoslavganov@google.com> TouchExploer computes incorectly the click location.

If there is accessibilty focus and the user touch explores
location that does not change accessibility focus that is
not in the app window, e.g. system bar, double tap does not
click on the system UI affordance. This is due to obsolete
logic from the time where accessibility focus was only in
the active window at the time of double clicking.

bug:17588024

Change-Id: Ib780103e873d8a2afd3b35de3227d54116f1a1b0
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
4c6a4ce03bb5b20103a656948a1932f2894e7f56 18-Sep-2014 Svetoslav <svetoslavganov@google.com> Some accessibility events wrongly filtered out (regression).

We added new APIs to allow accessibility services to query all
windows a user can touch. Sometimes the window state change
event arrives before the window manager sent over the new window
state which leads to a case that the app gets the event and
asks for the window and the window is not there. To address this
if we do not have the window, we hold on to the event and
fire it as soon as the window arrives. This logic is correct
except we were wrongly expecting that the window should have
input focus.

bug:17464645

Change-Id: I1ef50ebddeb4416a6c0776b096bb16aee703700c
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
7498efdc5e163d6b4a11db941c7d13c169d37284 04-Sep-2014 Svet Ganov <svetoslavganov@google.com> Clicking on partially coverd views by other views or windows.

In touch exploration mode an accessibility service can move
accessibility focus in response to user gestures. In this case
when the user double-taps the system is sending down and up
events at the center of the acessibility focused view. This
works fine until the clicked view's center is covered by another
clickable view. In such a scenario the user thinks he is clicking
on one view but the click is handled by another. Terrible.

This change solves the problem of clicking on the wrong view
and also solves the problem of clicking on the wrong window.
The key idea is that when the system detects a double tap or
a double tap and hold it asks the accessibility focused node
(if such) to compute a point at which a click can be performed.
In respinse to that the node is asking the source view to
compute this.

If a view is partially covered by siblings or siblings of
predecessors that are clickable, the click point will be
properly computed to ensure the click occurs on the desired
view. The click point is also bounded in the interactive
part of the host window.

The current approach has rare edge cases that may produce false
positives or false negatives. For example, a portion of the
view may be covered by an interactive descendant of a
predecessor, which we do not compute (we check only siblings of
predecessors). Also a view may be handling raw touch events
instead of registering click listeners, which we cannot compute.
Despite these limitations this approach will work most of the
time and it is a huge improvement over just blindly sending
the down and up events in the center of the view.

Note that the additional computational complexity is incurred
only when the user wants to click on the accessibility focused
view which is very a rare event and this is a good tradeoff.

bug:15696993

Change-Id: I85927a77d6c24f7550b0d5f9f762722a8230830f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
9bf08c7bc1844ec8130b47d0ec3783f374b21c46 04-Sep-2014 Svetoslav <svetoslavganov@google.com> Clear binder identity when sending window change accessibility events.

We get calls for window changes from the window manager and
as a result send accessibility events for these changes. It
is possible that the call for a windows change from the window
manager comes as a result of an unprivileged client calling
into the window manager. However, the event sending code
is performing security checks.

bug:17364244

Change-Id: Ief016f9dafd13ac35418676817848b3ea3ed4d66
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
9ae9ed24aa252acbc2e6288068b991dd5291967b 03-Sep-2014 Svetoslav <svetoslavganov@google.com> Fix AccessibilityNode's isVisibleToUser behavior.

The isVisibleToUser property of an AccessibilityNodeInfo specifies
whether the user can see the source view. It is used by accessibility
services to figure out whether to focus on a view. This property
was giving a wrong value if the view is covered by another window
such as the keyboard. As a result the user hears one thing but when
double taps interacts with the overlaid window which is another thing.

bug:15938254

Change-Id: Ib9feb20ea422a24a512c47ed1234961ae0386a7f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
04cab1bcc46b05cbb72632c53ad83943f705b494 26-Aug-2014 Svetoslav <svetoslavganov@google.com> Fix accessiblity CTS tests (framework).

1. An external contribution changed the ordering of views for
accessibility. While it attempted to fix a platform issue
for a comparator breaking transitivity, it changed the way
we order views and results in very unnatural accessibility
traversal order. It also broke CTS tets. This change tweaks
the comparator which fixes the tests and improves traversal
order.

2. If there is at least one accessibility service which cares
about windows we register a callback in the window manager
for window change notifications. We are updating the window
list on this callback. There was a case where if the service
requests window updates and immediately asks for the windows
it gets none as we have not received a callback from the
window manager yet. Now this call returns after we get the
callback in a timed fashion. This is consistent with how the
other introspection APIs work.

3. Window info objects are cached in the accessibility service
process. When putting them in the cache a cloning call was
missing resulting in some cases of clobbering windows given
to the client. For example, we get some windows, cache them,
and return these windows to the client. Now a call to clear
the cache arrives while the user processes the windows and
the client windows get clobbered.

4. Added API for checking if a window has accessiblity focus
to be consistent to the API we have to check whether this
window has input focus.

5. Removed some obsolete code.

bug:16402352

Change-Id: Ided6da4a82cc0fc703008c58a2dff0119a3ff317
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
a4725efd0bfa52cbddf6ca587d37fc4ebcbfaf72 24-Jul-2014 Svetoslav <svetoslavganov@google.com> Improve the window query API performamce.

We are caching the window data in the accessibility service process.
When windows change we were sending the dalta of the windows the
service knows about. To make this work when the app asked for all
windows we had to call into the system as new windows may have
appeared. This was slow.

Now we are telling the service some windows change and if it gets
the windows we cache them. We call into the system only on a cache
miss and evict all windows from the cache on window change event.
We do not evict the nodes of the window as the former may have
just moved. If views in a window change they fire accessibility
events that trigger the correct eviction.

Change-Id: I586a72a2497b0d44a75288fa758e7e88817f3300
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
cce47eb580d666ead1f6095d1e3b65233592bbaa 17-Jul-2014 Chris Craik <ccraik@google.com> Add accessibility text contrast setting

b/14624452

Adds a feature which draws all text (in the HW accelerated standard
path) in a high contrast mode. Text is drawn at full alpha, and either
white or black (depending on its original color) with a starkly
contrasted outline beneath it.

Change-Id: I943f624b6367de35367cced3b2a8298f2bc62377
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
e34560b21989eea54a139a0586d156ba573cc2ea 10-Jul-2014 Alan Viverette <alanv@google.com> Add accessibility action to open power long-press dialog

Also fixes an infinite recursion bug in the WindowManagerService
implementation of WindowManagerInternal.

BUG: 16129909
Change-Id: I4f9d32f4e6c3ad460652c5e5271540fa5032a1f5
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
f7174e87b6007000777b0124de9cef70d8618788 12-Jun-2014 Svetoslav <svetoslavganov@google.com> Fix backwards compatibility for introspected windows.

1. The APIs for introspecting interactive windows were reporting only
the touchable windows but were missing the focused window. The user
can interact with the latter by typing, hence it should always be
reported. Also this was breaking backwards compatibility as if the
focused window is covered by a modal one, the focused window was not
reporeted and this was putting the active window in a bad state as
the latter is either the focused window or the one the user is touching.

2. Window change events are too frequent as on window transition things
are chanign a lot. Now we are trottling the windows changed events
at the standard recurring accessibility event interval.

3. Fixed a wrong flag comparison and removed some unneded code.

buy:15434666
bug:15432989

Change-Id: I825b33067e8cbf26396a4d38642bde4907b6427a
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
4604abc97d7dd757bb76ff9b7fcf343dc4a15212 11-Jun-2014 Svetoslav <svetoslavganov@google.com> Moving and resizing windows not reported propely for accessibility.

When the position and size of a window changes we have to report that
to the accessibility layer if the window introspection is enabled.

bug:15569915

Change-Id: I3f869e0a582592bfa5f3743d5c2133ee8cb39b34
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
5c4cd189f298b3ddb9a5e8afc5f68546a9f96726 21-May-2014 Svetoslav <svetoslavganov@google.com> Fixing bugs due to the new custom accessibility action APIs.

1. AccessibiltiyAction was incorectly throwing an exception when
a custom action was constructed.

2. AccessibilityManagerService should no longer enforce only standard
actions as we allow custom ones too.

bug:15110963

Change-Id: Iea57e0a6449b87bd8d103c55ca255e80705f2565
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
e08340645d2539ab13900b5f835b84bcfe8b99e0 13-May-2014 Alan Viverette <alanv@google.com> Simplify accessibility display adjustments

Makes the inversion bit public so apps can be smarter about rendering
images non-inverted (if they are so inclined).

BUG: 14680114
Change-Id: I8ca2b2517af2ffc13446d7e0b4e859c1171e2d0e
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
0425d7f56b5c14484777357075b285d59996e6e9 08-May-2014 Svetoslav <svetoslavganov@google.com> Teach accessibility manager services about user profiles.

For user profiles the accessibility layer will use the accessibility
state of the their owner. A profile cannot have its own plugins or
settings. The rationale behind this is that if a user with impaired
vision is using the device with different profiles linked to his
main one, then he/she should be able to interact with the device no
matter what profile the app is being run with. Hence, The behavior
of the accessibility features should be consistent across apps run
with different profile.

bug:14564491

Change-Id: Id19ce81e1a2dfa48015c7ab3053d66c058be3e46
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
02b9b981eae877a4624c1820f96298d88a5ced60 11-Apr-2014 Svetoslav <svetoslavganov@google.com> am 0f7ed1f4: Merge "Adding system support for a single accessibility focus."

* commit '0f7ed1f4776844f3ee8d3ce9d903f62cace66a06':
Adding system support for a single accessibility focus.
1e0d4af9986c8c2a658769a63bf8b385d25e0435 11-Apr-2014 Svetoslav <svetoslavganov@google.com> Adding system support for a single accessibility focus.

Now that we have APIs to query all interactive windows and allow
an accessibility service to put accessibility focus in each of
them we have to guarantee that there is a single accessibility
focus. This is required for correct operation of the touch
explorer as on double tap in clicks in the center of the focused
area, hence having more that one focus is an issue. Also the
system is maintaining a single input focus so now accessibility
focus behaves consistently with that.

bug:13965563

Change-Id: I0b5c26dadfabbf80dbed8dc4602073aa575ac179
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
dd137a85d3e0295989b5b9d1f67ff32027be867d 10-Apr-2014 Svetoslav <svetoslavganov@google.com> resolved conflicts for merge of 6be2f952 to master-lockscreen-dev

Conflicts:
core/java/android/view/IWindowManager.aidl
tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java

Change-Id: Idcbc581294cc52b53eabefd61e5c20cbcea611db
6be2f95202237b7284542e692273d13a5bd26913 10-Apr-2014 Svetoslav <svetoslavganov@google.com> Merge "Adding render stats APIs to UiAutomation (framework)."
6360d29cd78839539aafed961a0b96dc7ba3c317 10-Apr-2014 Svetoslav <svetoslavganov@google.com> am bc1a8f42: Merge "Active window not correctly computed."

* commit 'bc1a8f42d9eb5f1d91c872904a9a283781291fcb':
Active window not correctly computed.
48eacec53e3f877712c2cf66676f453ddf6b90fb 10-Apr-2014 Svetoslav <svetoslavganov@google.com> Active window not correctly computed.

The accessibility manager service was not handling the focused
window properly which as a result was breaking the active window
tracking.

bug:13788022

Change-Id: Iaa3fadfbf7b9545f5151e3603beeda2662fe7618
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
1376d600d8e0eefdbc0aa11d398cf7517fc77129 13-Mar-2014 Svetoslav <svetoslavganov@google.com> Adding render stats APIs to UiAutomation (framework).

bug:12927198

Change-Id: Iae21481c75ae58dcdab3731bf5f1e2844e29d434
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
380ecb81db52a9d0197ca969951d07b91c20d2b9 14-Mar-2014 Jorim Jaggi <jjaggi@google.com> Make Keyguard a library and make StatusBar the new Keyguard.

This change achieves a couple of things:
- Let Keyguard be a library, so we can use it in SystemUI.
- Introduce FLAG_KEYGUARD for windows and deprecate TYPE_KEYGUARD. Make
all the TYPE_KEYGUARD behaviour dependant on the flag.
- Implement a new KeyguardService in SystemUI, and bind that service
from PhoneWindowManager.
- Introduce BaseStatusBar.setKeyguardState and inflate
KeyguardSimpleHostView there and use FLAG_KEYGUARD for the window, such
that the status bar window essentially gets the Keyguard.

Bug: 13635952
Change-Id: I059d80d8b9b9818a778ab685f4672ea2694def63
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
cbcc9695f0a701d620f48de75eaee05c4fef6f22 26-Mar-2014 Svetoslav <svetoslavganov@google.com> Wrong constant used for undefined accessibility window id.

Change-Id: I8b14db034a42a7ffd211a46fa3fee7bf2a6eac8f
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
8e3feb15c5aec2c72b0ef120a1da325e1e8f0dda 24-Feb-2014 Svetoslav <svetoslavganov@google.com> Added accessibility APIs for introspecting interactive windows.

1. The old introspection model was allowing querying only the active window
which is the one the user is touching or the focused one if no window is
touched. This was limiting as auto completion drop downs were not inspectable,
there was not way to know when the IME toggles, non-focusable windows were
not inspectable if the user taps them as until a screen-reader starts
introspecting the users finger is up, accessibility focus was limited to
only one window and the user couldn't use gestures to visit the whole UI,
and other things I can't remember right now.

The new APIs allow getting all interactive windows, i.e. ones that a
sighted user can interact with. This prevents an accessibility service
from interacting with content a sighter user cannot. The list of windows
can be obtained from an accessibility service or the host window from an
accessibility node info. Introspecting windows obey the same rules for
introspecting node, i.e. the service has to declare this capability
in its manifest.

When some windows change accessibility services receive a new type
of event. Initially the types of windows is very limited. We provide
the bounds in screen, layer, and some other properties which are
enough for a client to determined the spacial and hierarchical
relationship of the windows.

2. Update the documentation in AccessibilityService for newer event types.

3. LongArray was not removing elements properly.

4. Composite accessibility node ids were not properly constructed as they
are composed of two ints, each taking 32 bits. However, the values for
undefined were -1 so composing a 64 long from -1, -1 prevents from getting
back these values when unpacking.

5. Some apps were generating inconsistent AccessibilityNodeInfo tree. Added
a check that enforces such trees to be well formed on dev builds.

6. Removed an necessary code for piping the touch exploration state to
the policy as it should just use the AccessibilityManager from context.

7. When view's visibility changed it was not firing an event to notify
clients it disappeared/appeared. Also ViewGroup was sending accessibility
events for changes if the view is included for accessibility but this is
wrong as there may be a service that want all nodes, hence events from them.
The accessibility manager service takes care of delivering events from
not important for accessibility nodes only to services that want such.

8. Several places were asking for prefetching of sibling but not predecessor
nodes which resulted in prefetching of unconnected subtrees.

9. The local AccessibilityManager implementation was relying on the backing
service being ready when it is created but it can be fetched from a context
before that. If that happens the local manager was in a broken state forever.
Now it is more robust and starts working properly once the backing service
is up. Several places were lacking locking.

bug:13331285

Change-Id: Ie51166d4875d5f3def8d29d77973da4b9251f5c8
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
4cd353c038ec3c21f25c12897992e5e9826fe824 13-Feb-2014 Guang Zhu <guangzhu@google.com> add new accessibility action for EditText to set text content

Bug: 12872344
Change-Id: I85a3805ab0c34b96a7d4228f2382c8ff664e36e8
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
49782e46c0eb85a25ae2abcf80880c48dbab5aea 20-Dec-2013 Amith Yamasani <yamasani@google.com> am 9158825f: Move some system services to separate directories

* commit '9158825f9c41869689d6b1786d7c7aa8bdd524ce':
Move some system services to separate directories
9158825f9c41869689d6b1786d7c7aa8bdd524ce 22-Nov-2013 Amith Yamasani <yamasani@google.com> Move some system services to separate directories

Refactored the directory structure so that services can be optionally
excluded. This is step 1. Will be followed by another change that makes
it possible to remove services from the build.

Change-Id: Ideacedfd34b5e213217ad3ff4ebb21c4a8e73f85
/frameworks/base/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java