Release drag-and-drop URI permissions on gc if not tied to an activity
The implementation for drag-and-drop provides two ways of taking URI permissions: a public API that ties permissions to an activity and an internal API that grants "transient" permissions. The latter is used in a single code path: dropping content into an editable TextView (implemented in android.widget.Editor). The transient code path was previously (Android R and below) implemented using a try/finally block in Editor.onDrop. The change I7ae38069fb741925211b42c7ff28784eb9722ce3 had updated that logic to tie permissions to the app process lifecycle instead, to account for the new OnReceiveContentListener which apps can use to implement custom drop handling (and use a background thread to do the processing of the content). The problem with having permissions tied to the app process lifecycle is that the app process could potentially be long-running. This change updates the logic to tie transient permissions to the DragAndDropPermissions object lifecycle (release whenever there are no more reference to the object and it is garbage collected). This follows the same approach as used for IME permission grants (InputContentInfo.java and InputContentUriTokenHandler.java). Bug: 181178998 Test: atest CtsWindowManagerDeviceTestCases:CrossAppDragAndDropTests Test: Manually verified using development/samples/ReceiveContentDemo Change-Id: I950d4572ee19af64da1ace1572fe12e17d09c609
Loading
Please register or sign in to comment