Merge "Automatically grant URI permission as needed." into nyc-mr1-dev
diff --git a/core/java/android/view/inputmethod/InputContentInfo.java b/core/java/android/view/inputmethod/InputContentInfo.java
index 9579bbf..b39705e 100644
--- a/core/java/android/view/inputmethod/InputContentInfo.java
+++ b/core/java/android/view/inputmethod/InputContentInfo.java
@@ -191,8 +191,6 @@
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 62e34a6..644c7e9 100644
--- a/core/java/com/android/internal/view/IInputConnectionWrapper.java
+++ b/core/java/com/android/internal/view/IInputConnectionWrapper.java
@@ -562,6 +562,8 @@
}
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 @@
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);
}