summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yohei Yukawa <yukawa@google.com> 2016-07-01 01:23:27 +0000
committer android-build-merger <android-build-merger@google.com> 2016-07-01 01:23:27 +0000
commit1a932852d4c8074bcf4ccbde5da5859e69c1427c (patch)
tree042adbf1e7422afb9c7510d7f711c3c4d6bec4ae
parent1b24ab8d20611674b33e29ff4638678f3f124312 (diff)
parentd2e046a72096f5b72e88517080436ed8b8aa33da (diff)
Merge \"Automatically grant URI permission as needed.\" into nyc-mr1-dev
am: d2e046a720 Change-Id: I376fdeddb57a923fd3a71086ef6f8e6021347cbb
-rw-r--r--core/java/android/view/inputmethod/InputContentInfo.java2
-rw-r--r--core/java/com/android/internal/view/IInputConnectionWrapper.java16
2 files changed, 13 insertions, 5 deletions
diff --git a/core/java/android/view/inputmethod/InputContentInfo.java b/core/java/android/view/inputmethod/InputContentInfo.java
index 9579bbf32835..b39705e0b1fa 100644
--- a/core/java/android/view/inputmethod/InputContentInfo.java
+++ b/core/java/android/view/inputmethod/InputContentInfo.java
@@ -191,8 +191,6 @@ public final class InputContentInfo implements Parcelable {
mUriToken.release();
} catch (RemoteException e) {
e.rethrowFromSystemServer();
- } finally {
- mUriToken = null;
}
}
diff --git a/core/java/com/android/internal/view/IInputConnectionWrapper.java b/core/java/com/android/internal/view/IInputConnectionWrapper.java
index 62e34a6780fc..644c7e90f8b0 100644
--- a/core/java/com/android/internal/view/IInputConnectionWrapper.java
+++ b/core/java/com/android/internal/view/IInputConnectionWrapper.java
@@ -562,6 +562,8 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
}
case DO_COMMIT_CONTENT: {
final int flags = msg.arg1;
+ final boolean grantUriPermission =
+ (flags & InputConnection.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0;
SomeArgs args = (SomeArgs) msg.obj;
try {
InputConnection ic = getInputConnection();
@@ -577,9 +579,17 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
args.callback.setCommitContentResult(false, args.seq);
return;
}
- args.callback.setCommitContentResult(
- ic.commitContent(inputContentInfo, flags, (Bundle) args.arg2),
- args.seq);
+ if (grantUriPermission) {
+ inputContentInfo.requestPermission();
+ }
+ final boolean result =
+ ic.commitContent(inputContentInfo, flags, (Bundle) args.arg2);
+ // If this request is not handled, then there is no reason to keep the URI
+ // permission.
+ if (grantUriPermission && !result) {
+ inputContentInfo.releasePermission();
+ }
+ args.callback.setCommitContentResult(result, args.seq);
} catch (RemoteException e) {
Log.w(TAG, "Got RemoteException calling commitContent", e);
}