diff options
| -rw-r--r-- | core/java/android/view/inputmethod/InputContentInfo.java | 2 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/IInputConnectionWrapper.java | 16 |
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); } |