| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Copyright 2013 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <sample> |
| <name>DragAndDropAcrossApps-new</name> |
| <group>ui</group> |
| <package>com.example.android.droptarget</package> |
| |
| <minSdk>24</minSdk> |
| |
| <template src="base-build" /> |
| |
| <strings> |
| <intro> |
| <![CDATA[ |
| This sample demonstrates how data can be moved between views within an |
| app or between different apps via drag and drop. |
| This sample contains two separate Android applications: DragSource and |
| DropTarget. DragSource contains images and text that can be dropped into the DropTarget |
| app. Images are shared between the two apps through a URI for which the receiving app |
| must request permission first, before it can be used. |
| |
| It also demonstrates the use of the DragStartHelper from the v13 support library to easily |
| handle drag and drop events. |
| ]]> |
| </intro> |
| </strings> |
| |
| <metadata> |
| <status>PUBLISHED</status> |
| <categories>UI</categories> |
| <technologies>Android</technologies> |
| <languages>Java</languages> |
| <solutions>Mobile</solutions> |
| <level>ADVANCED</level> |
| <icon>screenshots/big_icon.png</icon> |
| <screenshots> |
| <img>screenshots/phone.png</img> |
| <img>screenshots/tablet.png</img> |
| </screenshots> |
| <api_refs> |
| <android>android.content.ClipDescription</android> |
| <android>android.os.PersistableBundle</android> |
| <android>android.view.DragEvent</android> |
| <android>android.support.v13.view.DragAndDropPermissionsCompat</android> |
| <android>android.support.v13.view.DragStartHelper</android> |
| </api_refs> |
| |
| <description> |
| <![CDATA[ |
| This sample contains two separate Android applications: DragSource and |
| DropTarget. DragSource contains images and text that can be dropped into the DropTarget |
| app. Images are shared between the two apps through a URI for which the receiving app |
| must request permission first, before it can be used. |
| |
| It also demonstrates the use of the DragStartHelper from the v13 support library to easily |
| handle drag and drop events. |
| ]]> |
| </description> |
| |
| <intro> |
| <![CDATA[ |
| Android N introduces support for drag and drop between applications, |
| augmenting the existing APIs that have enabled this within a single |
| window before. |
| |
| To start a drag operation you need to call `View.startDragAndDrop`. |
| Which gesture or action triggers this is up to you as an app developer. |
| The API guide recommends doing this from |
| `View.OnLongClickListener.onLongClick` and this seems to be the de-facto |
| standard, but you are free to use other gestures (single tap, tap and drag |
| etc). |
| However, if you go for a unconventional drag start gesture, note that |
| the framework implementation assumes that the pointer (touch or mouse) |
| is down while the drag is starting, and the most recent touch/click |
| position is used as the original position of the drag shadow. |
| |
| See also `android.support.v13.view.DragStartHelper` which uses different |
| gestures for touch and mouse (click and drag works better for mouse |
| than a long click). |
| |
| By default a drag and drop operation is constrained by the window |
| containing the view that started the drag. |
| To enable cross-window and cross-app drag and drop add |
| `View.DRAG_FLAG_GLOBAL` to the flags passed to the `View.startDragAndDrop` |
| call. |
| |
| If a Uri requiring permission grants is being sent, then the |
| `android.view.View.DRAG_FLAG_GLOBAL_URI_READ` and/or the |
| `android.view.View.DRAG_FLAG_GLOBAL_URI_WRITE` flags must be used also. |
| To access content URIs requiring permissions on the receiving side, the target |
| app needs to request the `android.view.DropPermissions` from the activity via |
| `android.app.Activity.requestDropPermissions`. This permission will stay either |
| until the activity is alive, or until the `release()` method is called on the |
| `android.view.DropPermissions` object. |
| ]]> |
| </intro> |
| </metadata> |
| </sample> |