114 lines
4.4 KiB
XML
114 lines
4.4 KiB
XML
<?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>
|