Commit Graph

11528 Commits

Author SHA1 Message Date
Yohei Yukawa
41b094f785 Use correct @*Res annotation for updateStatusIcon()
There was a small mistake in my previous CL [1].

What updateStatusIcon() takes is a resource ID for Drawable, not ID
for an integer value.

These @*Res annotations are still just hints for IDE and lint tools.
They are actually all @Retention(SOURCE) hence this kind of mistake
has no impact at run time actually.

This CL also adds the right annotation for corresponding methods in
InputMethodManager and InputMethodManagerService.

 [1]: I995c4b922f91b94438c1292392b2c3030598594f
      c7ca36845e

Bug: 114418674
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: Id7fd610c07643c79b8ec03efbda24b3dc0686844
2018-09-09 23:58:45 -07:00
TreeHugger Robot
d172e22a6a Merge "Allow IMM to forward API calls to IMS" 2018-09-10 06:13:52 +00:00
TreeHugger Robot
5d42542130 Merge "Stop relying on IMM in IMS for token-guarded IME APIs" 2018-09-10 05:53:25 +00:00
TreeHugger Robot
cbf1df8eb3 Merge "Remove redundant synchronized blocks" 2018-09-10 05:01:36 +00:00
Yohei Yukawa
eec552e9e9 Allow IMM to forward API calls to IMS
This is one further step towards deprecating 8 IME APIs that were
accidentally defined InputMethodManager (IMM) instead of
InputMethodService (IMS).

With this CL, API calls to those 8 deprecated ones in IMM will be
forwarded to IMS so that we can completely remove corresponding IPC
methods from IInputMethodManager.aidl.  This guarantees that processes
that have no InputMethodService running there become unable to access
IPC methods behind such IME APIs that are intended to be used only
from IMEs.

One tricky thing is that the following 4 public APIs have been allowed
to processes that have WRITE_SECURE_SETTINGS permission, even if such
a process does not have active InputMethodService.

 * InputMethodManager.setInputMethod
 * InputMethodManager.setInputMethodAndSubtype
 * InputMethodManager.switchToLastInputMethod
 * InputMethodManager.switchToNextInputMethod

In general, user mode apps should not have WRITE_SECURE_SETTINGS
permission.  Thus it might be not that difficult for us to simply
deprecate such a special rule.  Bug 114488811 is tracking that effort.

For now, this CL preserves the existing behavior when a null IME token
is specified to those 4 APIs.

Bug: 114418674
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: If762714b2003fa6477e1318110f63e13968c1d7e
2018-09-09 20:48:41 -07:00
Yohei Yukawa
c7ca36845e Stop relying on IMM in IMS for token-guarded IME APIs
This is a follow up CL to previous CLs [1][2][3] that made sure that
APIs that are exposed only to IMEs should live in InputMethodService
instead of InputMethodManager.

Now that we have a dedicated Binder inferface [4] that allows
InputMethodService (IMS) to directly send IPCs to
InputMethodManagerService (IMMS) without relying on
InputMethodManager (IMM), it is natural for the above public APIs in
IMS to stop relying on IMM.

This CL also addresses a small concern that it is no longer obvious
when those APIs become available.  Previously, it was a bit more
obvious that passing null IME token doesn't work so IME developers
could imagine that those APIs were unavailable until attachToken() is
called.

With this CL, InputMethodPrivilegedOperations starts showing warning
messages when called too early, which we hope help IME developers
understand why those APIs do nothing when called too early.

  [1]: I3163f3cbe557c85103ca287bee0874a3b4194032
       d8d03a8e1b
  [2]: If6a786c5774805d041ea9672ef2721e4a38df7fc
       fbc2f7acd5
  [3]: I6efd5ca473e33e6faeadb7eea7772b9d2b8ca12b
       164cfba536
  [4]: I2f3ec3c5de546fb3603275a4b64000ed3f863b65
       c54c117164

Bug: 114418674
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: I995c4b922f91b94438c1292392b2c3030598594f
2018-09-09 20:48:38 -07:00
Yohei Yukawa
83b7d72a05 Remove redundant synchronized blocks
Unless it is also touching any internal field that needs to be
synchronized with InputMethodManager#mH, just making IPC to
InputMethodManagerService (IMMS) does not need any additional
serialization in the caller side.  IMMS itself already has internal
lock to serializate incoming operations.

Bug: 114418674
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: I214d2c481c9fe862fbb9ec0759df2c798915b9f0
2018-09-09 20:48:25 -07:00
Vishnu Nair
b040c0150e WM: Parent SurfaceView to a new bounds surface
Fixes a couple of issues seen with PiP animations.
1. SurfaceView expands over the parent bounds.
2. SurfaceView and/or its background surface draws over the surface inset region of the parent.

Creates a child surface in ViewRootImpl that will crop any region outside its surface bounds after
adjusting for surface insets. Changed SurfaceView to parent to this new surface.

Test: manually run through PiP animations for Maps and YouTube.
Test: go/wm-smoke
Change-Id: Ib4b8e7f6753eda1e690e1ff6c92ce27165fa693e
2018-09-07 11:38:32 -07:00
TreeHugger Robot
826a36c19b Merge "Add a new Binder interface to allow IMS to directly talk to IMMS" 2018-09-07 02:11:07 +00:00
Yohei Yukawa
c54c117164 Add a new Binder interface to allow IMS to directly talk to IMMS
Historically, InputMethodService (IMS) has relied on
InputMethodManager's hidden methods to communicate with
InputMethodManagerService (IMMS).  Because of this, InputMethodManager
(IMM) has ended up being a mixture of IPC endpoint for both IME
clients and IME itself.

There are multiple problems.

 * IMM is instantiated in almost all user mode processes.  This means
   that unnecessary IPC endpoints have been accessible to them via
   reflection.  Even though those endpoints refuses request without a
   valid IME window token, and even though we have tighten up use of
   private APIs in the runtime level, exposing unnecessary IPC
   endpoints is still questionable.
 * Mixing multiple responsibilities has been caused unnecessary
   complexity in IMM.  In Bug 70282603, we have moved some APIs from
   IMM to IMS to sort out this complexity that are surfaced in API
   boundary, but in the implementation level everything remained to be
   the same.

Now that Bug 70282603 is fixed, the natural next step is to start
implementing actual an IPC connection from IMS to IMMS without relying
on IMM.

Here is the new diagram that describes (most of) IPC interfaces around
IMEs.

   APP---(1)---IMMS
     \          |
      \         |
       \        |
        \       |
         \      |
         (2)   (3)
           \    |
            \   |
             \  |
              \ |
               \|
               IME

 (1): IInputMethodManager.aidl: send requests from APP to IMMS
      IInputMethodClient.aidl:  send requests from IMMS to APP
 (2): IInputMethodSession.aidl: send requests from APP to IME
      IInputContext.aidl:       send requests from IME to APP
       -> this is the actual interface behind InputConnection
 (3): IInputMethod.aidl:        send requests from IMMS to IME
      IInputMethodPrivilegedOperations.aidl:
                                send requests from IME to IMMS

IInputMethodPrivilegedOperations.aidl is what this CL is adding.

With that, this CL moves 5 IPC methods
  from IInputMethodManager.aidl (1)
  to IInputMethodPrivilegedOperations.aidl (3).

There remain some IPC methods that are intended to be used only from
IMEs in IInputMethodManager.aidl because those methods have been
unfortunately exposed via public APIs in InputMethodmanager.

Although all of those public APIs were deprecated in Android P as part
of Bug 70282603, we still need to keep maintaining those APIs until
(most of) IMEs migrate to APIs that are newly introduced in
InputMethodService.  It would take several years.

IInputMethodManager#getInputMethodWindowVisibleHeight() is another
method that we cannot migrate right now because some apps have already
relied on its corresponding hidden method in IMM, as discussed in Bug
113914148.

Fix: 113177698
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: I2f3ec3c5de546fb3603275a4b64000ed3f863b65
2018-09-06 11:39:50 -07:00
Phil Weaver
b8c855d1da Merge "Add test mapping for a11y" 2018-09-06 18:25:57 +00:00
TreeHugger Robot
1d6784b9ca Merge "Clarify that InputMethod.attachToken() can be called at most once" 2018-09-06 17:49:27 +00:00
Yohei Yukawa
674cc4bedd Clarify that InputMethod.attachToken() can be called at most once
I don't know whether this comment was valid in the initial
implementation or not, in the current system InputMethod.attachToken()
is not (indirectly) exposed to the IME client process vir Binder
interface.  The only Binder interface that is exposed from the IME
process to the IME client process is IInputMethodSession, not
IInputMethod that implements attachToken().

One may think that a malicious app could try to call
Context.bindService() with InputMethod.SERVICE_INTERFACE to directly
obtain IInputMethod, but it should fail because IMEs must be
protecting their InputMethodService with BIND_INPUT_METHOD so that
only the system can bind to them.

This CL clarifies this point in both JavaDoc and its implementation.
If an IME happened to receive multiple attachToken(), it is an OS bug
and worth letting people know by crashing the IME process.

Fix: 114164394
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: Ia1e1d5ce020155b906e42a222f27b76905217395
2018-09-06 10:47:15 -07:00
Charles Chen
3b37d4d803 Merge "Fix WM input limitations on secondary displays (3/4)" 2018-09-06 11:26:44 +00:00
Yohei Yukawa
b985e6e245 Add TODO about IMM#getInputMethodWindowVisibleHeight()
InputMethodManager#getInputMethodWindowVisibleHeight() has been kind
of unintentionally exposed to all the IME client processes and we know
some apps are already relying on this hidden API via reflection, which
is bad especially because it would be getting harder and harder to
keep maintaining the semantics of this not-well-defined hidden API
once we start supporting features like multi display. Thust this CL
adds TODO comments there to warn people who are going to touch this
method.

This CL does nothing except for adding comments.  Hence there should
be no behavior change.

Bug: 113914148
Test: compile
Change-Id: Id2084530bdb82deef226d8207d2f311d2e78b28d
2018-09-05 17:07:52 -07:00
Yohei Yukawa
cf93f9a53f Hide inputMethodClientHasFocus() from apps
inputMethodClientHasFocus() implemented by WindowManagerService is an
internal method that is used only from InputMethodManagerService.

For obvious security reasons, we do not need to expose this method to
application processes.  We can easily achieve this by simply moving
this method from IWindowManager to WindowManagerInternal.

Note that this is a mechanical refactoring.  There should be no
observable behavior change.

Fix: 112722651
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: I20c618174d8279a9a57f458fb908235f452b2281
2018-08-30 15:58:47 -07:00
Phil Weaver
c2f3d85ef2 Add test mapping for a11y
Also marking a few tests as flaky and fixing a couple
others.

Test: atest in:
frameworks/base/services/accessibility
frameworks/base/core/java/android/accessibilityservice
frameworks/base/core/java/android/view.accessibility

Change-Id: I217329655105ce3fa8d78e74c4d39aadcfcd8362
2018-08-30 15:16:54 -07:00
TreeHugger Robot
a6a5972d74 Merge changes I453200fd,I706654ec
* changes:
  Hide IInputMethodManager.{add,remove}Client() from apps
  Move InputMethodManagerInternal to server package
2018-08-30 17:35:01 +00:00
Arthur Hung
39134b21d8 Fix WM input limitations on secondary displays (3/4)
One DisplayContent contains one InputMonitor now.
- Change setInputWindow of InputManagerService updated by displayId,
  so Window Handles in InputDispather can be updated by each DisplayContent.
- Only exist one focus in current state, reset it if in removed DisplayContent,
  will be updated by default display or focused display.
- Add displayId parameter for createInputConsumer and destroyInputConsumer,
  so InputConsumer from PIP, RecentApp and Wallpaper can be supported in multi-display.

Bug: 111363643
Test: atest WindowManagerSmokeTest ActivityManagerMultiDisplayTests
Test: atest com.android.server.wm.DisplayContentTests
Test: atest libinput_tests inputflinger_tests
Change-Id: I999c355be1789af5759f00206475d004e10116e3
2018-08-30 09:59:09 +00:00
Vishnu Nair
aeab1b8251 SF: Remove setFinalCrop impl 1/2
setFinalCrop functionality is reimplemented by creating a new bounds layer
and applying a crop on this layer. see ag/4625718

Test: go/wm-smoke

Change-Id: I3ffb6dc2e2afd5170f6c6dee9e928ed0600656b1
2018-08-29 08:37:38 -07:00
Yohei Yukawa
c3de83e7e4 Move InputMethodManagerInternal to server package
InputMethodManagerInternal is an internal delegate mechanism for
InputMethodManagerService to expose some internal privileged
operations to other components in the system server process.  Hence
the current package android.view.inputmethod does not make much
sense. Most likely this package was mistakenly chosen when it was
initially introduced by me [1].

Anyway, this is a mechanical refactoring and there should be no
behavior change.

 [1]: I747c37ff6dd8f233faef43f2b5713a4320e848eb
      fa6e0a80e2

Fix: 112722706
Test: make -j checkbuild
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: I706654eceaa0212d21e053dd25c9d290da512e49
2018-08-28 16:09:34 -07:00
TreeHugger Robot
1545cd72a2 Merge "Remove IInputMethodClient.setUsingInputMethod()" 2018-08-28 20:33:18 +00:00
Yohei Yukawa
68723904fb Remove IInputMethodClient.setUsingInputMethod()
This is a no-op method.

Bug: 112722651
Test: compile
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Change-Id: Ic990588c868f9173bbbe73dcfc5b193642dcc294
2018-08-28 11:37:09 -07:00
Robert Carr
b6cd643969 Implement construction of container layers
Expose existing native functionality. In preparation for use as
bufferless-input-catching-surfaces.

Bug: 80101428
Bug: 113136004
Bug: 111440400
Change-Id: I455792aec3ee58d9dd20016b484ce7c27808d522
2018-08-27 18:14:14 -07:00
Ryan Mitchell
b9b540baf1 AFW: Lookup shared library resource ids
Shared libraries were failing to retrieve correct resource ids from the
values of attributes in xml files. The packages of the shared ids were
not changed from 0 to their runtime assigned package ids.

Bug: 112776204
Test: atest FieldsClassificationTest#testGetAlgorithm
Change-Id: I509bc7632f5ec3e9b644e590934e6cf569a4d938
2018-08-24 10:11:01 -07:00
TreeHugger Robot
ed037dbf41 Merge "Prevent ViewRootImpl.mDisplay become null." 2018-08-23 00:29:11 +00:00
Phil Weaver
1f089e605a Merge "Stop leaking view during a11y sorting" 2018-08-22 16:54:46 +00:00
wilsonshih
0042e4516f Prevent ViewRootImpl.mDisplay become null.
For some timing cases client side may not get desired display with old
displayId.
For this issue, client side has just received configuration change and
handle it in ActivityThread#handleActivityConfigurationChanged. At the
same time, DisplayManagerService was about to destory display. When
ViewRootImpl want to update display with new DisplayAdjustments, it got
null because the old displayId was removed.
For this scenario, fallback to use default display. Usually there should
be other displayId change event comes from server side to ask client update.

Change-Id: Ifb843f82b753761cb6306e7482b38a0ffd89498d
Fix: 73558361
Test: atest CtsWindowManagerDeviceTestCases
Test: atest CtsActivityManagerDeviceTestCases
2018-08-22 09:43:55 +08:00
Phil Weaver
6adf3a18e4 Stop leaking view during a11y sorting
I added a reference to a view in a pooled object,
but did not clear the reference to it when releasing it.
Thus the links to the View (and its Context) live as long
at the static object.

This code is only called when accessibility is on.

Bug: 112792715
Test: make
Change-Id: If716c33b91aac3a1da5fd4a857daa5b4b9b7e151
2018-08-21 16:08:42 -07:00
Lucas Dupin
96d9c3f91e Merge "Do not allow wallpapers that are too large" 2018-08-21 21:30:01 +00:00
Adrian Roos
031546664b Merge "Cutout: Add developer setting to mask the display cutout" into pi-dev am: c05c2d1e48
am: 6a403d8d5b

Change-Id: Ifc872c48e4670183f1f0fd3a4162d1eeb6c5c5e4
2018-08-21 13:38:33 -07:00
Adrian Roos
6a403d8d5b Merge "Cutout: Add developer setting to mask the display cutout" into pi-dev
am: c05c2d1e48

Change-Id: I728ce64b53d02f5a75f04071a04f5e6d0f61987c
2018-08-21 13:11:53 -07:00
Adrian Roos
c05c2d1e48 Merge "Cutout: Add developer setting to mask the display cutout" into pi-dev 2018-08-21 19:51:58 +00:00
Adrian Roos
8c28c7c2d9 Cutout: Add developer setting to mask the display cutout
Adds an option to mask the cutout by effectively shrinking the logical display
such that developers can test apps as if the device did not have a notch.

Bug: 112876936
Test: Go to Settings > Developer Options > Simulate display with cutout > "No cutout". Cutout should be hidden. Rotate screen, take screenshots, screenrecord, screen off animation should all work as expected.
Change-Id: I5cdb201734d238bf3785ab55843114e4b5b4ee41
2018-08-21 21:47:51 +02:00
Lucas Dupin
d8e1244225 Do not allow wallpapers that are too large
DisplayListCanvas, that draws Bitmaps on the Android framework,
has a bitmap size limit. Let's respect the limit to guarantee
that SystemUI won't crashloop when a bitmap is over 100MB

Test: manual, setting wallpaper
Change-Id: Iff91e73722a912efe095f80e263e160cc2456a11
Fixes: 111330638
2018-08-21 09:20:48 -07:00
Mathew Inwood
532fa6656d resolve merge conflicts of 597229d681 to stage-aosp-master
am: ec73e7514f

Change-Id: I9e65a3550b6ee6e266410519db2fcb41f666ad80
2018-08-21 02:48:25 -07:00
Mathew Inwood
ec73e7514f resolve merge conflicts of 597229d681 to stage-aosp-master
Bug: None
Test: I solemnly swear I tested this conflict resolution.
Change-Id: I0807ae67e0ed3e84f17af962dc8b7a3152f8103f
Merged-In: I4147b038ed7adf0311ee9918b44766f82a057eaf
2018-08-21 09:31:16 +01:00
Felipe Leme
dde594d606 Merge "Improved AutofillManager and Activity dump() methods:" into pi-dev
am: c9443e3894

Change-Id: I1fc878c1ff3dbd204c619c1514e989399dd51895
2018-08-20 18:38:29 -07:00
TreeHugger Robot
c9443e3894 Merge "Improved AutofillManager and Activity dump() methods:" into pi-dev 2018-08-21 01:18:09 +00:00
Felipe Leme
7fa1e0b408 Merge "Log AutofillClient on CompatibilityBridge.onAccessibilityEvent()." into pi-dev
am: db7648f374

Change-Id: Iba6484c33a6c272304be097a773b96d0d6f45550
2018-08-20 13:56:24 -07:00
TreeHugger Robot
db7648f374 Merge "Log AutofillClient on CompatibilityBridge.onAccessibilityEvent()." into pi-dev 2018-08-20 20:29:21 +00:00
Felipe Leme
cf612f44ab Merge "Log CompatibilityBridge.onAccessibilityEvent()" into pi-dev
am: e4d35b6dc0

Change-Id: I62f3895c3fb448faad084507615f7a09a5b5af96
2018-08-20 12:32:02 -07:00
TreeHugger Robot
e4d35b6dc0 Merge "Log CompatibilityBridge.onAccessibilityEvent()" into pi-dev 2018-08-20 19:07:10 +00:00
Mathew Inwood
e5ad598d11 Add @UnsupportedAppUsage annotations
For packages:
  android.view.textservice
  android.view.textclassifier.logging
  android.view.textclassifier
  android.view.inputmethod
  android.view.autofill
  android.view.accessibility
  android.view

This is an automatically generated CL. See go/UnsupportedAppUsage
for more details.

Exempted-From-Owner-Approval: Mechanical changes to the codebase
which have been approved by Android API council and announced on
android-eng@

Bug: 110868826
Test: m
Change-Id: Ie4663ebd4640b2893e575e599582d2c9530da313
Merged-In: I4147b038ed7adf0311ee9918b44766f82a057eaf
2018-08-20 14:52:19 +01:00
TreeHugger Robot
b2484fa070 Merge "Add TestApi for CtsActivityManagerDeviceTestCases." 2018-08-20 13:30:18 +00:00
Mathew Inwood
a570dee977 Add @UnsupportedAppUsage annotations
For packages:
  android.view.textservice
  android.view.textclassifier.logging
  android.view.textclassifier
  android.view.inputmethod
  android.view.autofill
  android.view.accessibility
  android.view

This is an automatically generated CL. See go/UnsupportedAppUsage
for more details.

Exempted-From-Owner-Approval: Mechanical changes to the codebase
which have been approved by Android API council and announced on
android-eng@

Bug: 110868826
Test: m
Change-Id: I4147b038ed7adf0311ee9918b44766f82a057eaf
2018-08-20 10:04:42 +01:00
Laura Davis
ed3bc12e2a Merge "Docs: Inserted links to relevant guide pages." into pi-dev am: 283f55f7de
am: 6497c5bd21

Change-Id: Ida8426c0ca4f0fd755df2783fb16ea5d9e5e72ad
2018-08-17 16:13:46 -07:00
TreeHugger Robot
2ab281361c Merge "isFocusable should also check for clear focus." 2018-08-17 22:59:53 +00:00
Laura Davis
6497c5bd21 Merge "Docs: Inserted links to relevant guide pages." into pi-dev
am: 283f55f7de

Change-Id: I1a42ff1b3485e35e152b354039aa5c072e0a1e70
2018-08-17 15:14:38 -07:00
TreeHugger Robot
7d3e4c87ee Merge "Log AutofillClient on CompatibilityBridge.onAccessibilityEvent()." 2018-08-17 21:18:41 +00:00