OSDN Git Service

Add InputMethodService#exposeContent()
authorYohei Yukawa <yukawa@google.com>
Wed, 22 Jun 2016 23:31:41 +0000 (16:31 -0700)
committerYohei Yukawa <yukawa@google.com>
Wed, 22 Jun 2016 23:31:41 +0000 (16:31 -0700)
commit25e0813e6eb6315b1016db805fa9b791b4ae5cc2
tree48d143522b5480f0cbeb3b2e3fbefe91aee0dca0
parentf0823858e502d36c01a39afd1fc9384a1fe9a3f7
Add InputMethodService#exposeContent()

This is a follow up CL to my previous CLs [1][2] that introduced
InputConnection#commitContent(InputContentInfo, Bundle) API to enable
IMEs to send a content to the target application.

With this CL, IME developers are able to temporarily expose
InputContentInfo object to the target package without permanently
granting URI permission.  Although calling IMS#exposeContent() is
allowed only for the IME that is currently selected, the client is able
to request a temporary read-only access even after the current IME is
switched to any other IME as long as the client keeps InputContentInfo
object.

Here is a sample code snippet about how to use this mechanism.

  [IME]
  InputContentInfo contentInfo = new InputContentInfo(
          contentUri,
          new ClipDescription(description, new String[]{mimeType}),
          linkUrl);
  exposeContent(contentInfo, getCurrentInputEditorInfo());
  getCurrentInputConnection().commitContent(inputContentInfo, null);

  [App]
  try {
      contentInfo.requestPermission();
      // Load inputContentInfo.getContentUri() here.
  } finally {
      contentInfo.releasePermission();
  }

 [1]: Iaadf934a997ffcd6000a516cc3c1873db56e60ad
      152944f4909c47917473293b258d266435c6ab35
 [2]: Ica1ba3154795c1bf44e140dfe639b299f83cd8af
      adebb52588b098a1af678d4e33a234ef1ce783b2

Bug: 29450031
Change-Id: I2772889ca01f2ecb2cdeed4e04a9319bdf7bc5a6
12 files changed:
Android.mk
api/current.txt
api/system-current.txt
api/test-current.txt
core/java/android/inputmethodservice/InputMethodService.java
core/java/android/view/inputmethod/InputContentInfo.java
core/java/android/view/inputmethod/InputMethodManager.java
core/java/com/android/internal/inputmethod/IInputContentUriToken.aidl [new file with mode: 0644]
core/java/com/android/internal/view/IInputMethodManager.aidl
services/core/java/com/android/server/InputContentUriTokenHandler.java [new file with mode: 0644]
services/core/java/com/android/server/InputMethodManagerService.java
tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java