From 00a3e7cac59aebd6194d7185de21564e65871c63 Mon Sep 17 00:00:00 2001 From: Rob Orgiu Date: Tue, 17 Jun 2025 18:00:53 +0200 Subject: [PATCH 1/3] Fix code to also support external apps --- .../draganddrop/DragAndDropSnippets.kt | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt index 6314eca3a..90d759dc0 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt @@ -20,6 +20,7 @@ import android.content.ClipData import android.content.ClipDescription import android.os.Build import android.view.View +import androidx.activity.compose.LocalActivity import androidx.annotation.RequiresApi import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.draganddrop.dragAndDropSource @@ -31,6 +32,7 @@ import androidx.compose.ui.draganddrop.DragAndDropEvent import androidx.compose.ui.draganddrop.DragAndDropTarget import androidx.compose.ui.draganddrop.DragAndDropTransferData import androidx.compose.ui.draganddrop.mimeTypes +import androidx.compose.ui.draganddrop.toAndroidDragEvent @RequiresApi(Build.VERSION_CODES.N) @OptIn(ExperimentalFoundationApi::class) @@ -71,15 +73,30 @@ private fun DragAndDropSnippet() { } // [END android_compose_drag_and_drop_4] + val activity = LocalActivity.current + // [START android_compose_drag_and_drop_5] + val externalAppCallback = remember { + object : DragAndDropTarget { + override fun onDrop(event: DragAndDropEvent): Boolean { + val permission = activity?.requestDragAndDropPermissions(event.toAndroidDragEvent()) + // Parse received data + permission?.release() + return true + } + } + } + // [END android_compose_drag_and_drop_5] + + // [START android_compose_drag_and_drop_6] Modifier.dragAndDropTarget( shouldStartDragAndDrop = { event -> event.mimeTypes().contains(ClipDescription.MIMETYPE_TEXT_PLAIN) }, target = callback ) - // [END android_compose_drag_and_drop_5] + // [END android_compose_drag_and_drop_6] - // [START android_compose_drag_and_drop_6] + // [START android_compose_drag_and_drop_7] object : DragAndDropTarget { override fun onStarted(event: DragAndDropEvent) { // When the drag event starts @@ -99,5 +116,5 @@ private fun DragAndDropSnippet() { override fun onDrop(event: DragAndDropEvent): Boolean = true } - // [END android_compose_drag_and_drop_6] + // [END android_compose_drag_and_drop_7] } From d0b39265933c0b311986295967c48cf953e39601 Mon Sep 17 00:00:00 2001 From: Rob Orgiu Date: Tue, 17 Jun 2025 18:18:28 +0200 Subject: [PATCH 2/3] Sort chronologically the snippets --- .../snippets/draganddrop/DragAndDropSnippets.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt index 90d759dc0..0844e2a71 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt @@ -75,7 +75,7 @@ private fun DragAndDropSnippet() { val activity = LocalActivity.current - // [START android_compose_drag_and_drop_5] + // [START android_compose_drag_and_drop_7] val externalAppCallback = remember { object : DragAndDropTarget { override fun onDrop(event: DragAndDropEvent): Boolean { @@ -86,17 +86,17 @@ private fun DragAndDropSnippet() { } } } - // [END android_compose_drag_and_drop_5] + // [END android_compose_drag_and_drop_7] - // [START android_compose_drag_and_drop_6] + // [START android_compose_drag_and_drop_5] Modifier.dragAndDropTarget( shouldStartDragAndDrop = { event -> event.mimeTypes().contains(ClipDescription.MIMETYPE_TEXT_PLAIN) }, target = callback ) - // [END android_compose_drag_and_drop_6] + // [END android_compose_drag_and_drop_5] - // [START android_compose_drag_and_drop_7] + // [START android_compose_drag_and_drop_6] object : DragAndDropTarget { override fun onStarted(event: DragAndDropEvent) { // When the drag event starts @@ -116,5 +116,5 @@ private fun DragAndDropSnippet() { override fun onDrop(event: DragAndDropEvent): Boolean = true } - // [END android_compose_drag_and_drop_7] + // [END android_compose_drag_and_drop_6] } From 391bcd50f767522163e755bdeef8877c4b34965e Mon Sep 17 00:00:00 2001 From: Rob Orgiu Date: Tue, 17 Jun 2025 18:42:43 +0200 Subject: [PATCH 3/3] Move the Activity to be used without the nullability check --- .../draganddrop/DragAndDropSnippets.kt | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt index 0844e2a71..cc2bbdf2d 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/draganddrop/DragAndDropSnippets.kt @@ -73,20 +73,21 @@ private fun DragAndDropSnippet() { } // [END android_compose_drag_and_drop_4] - val activity = LocalActivity.current - - // [START android_compose_drag_and_drop_7] - val externalAppCallback = remember { - object : DragAndDropTarget { - override fun onDrop(event: DragAndDropEvent): Boolean { - val permission = activity?.requestDragAndDropPermissions(event.toAndroidDragEvent()) - // Parse received data - permission?.release() - return true + LocalActivity.current?.let { activity -> + // [START android_compose_drag_and_drop_7] + val externalAppCallback = remember { + object : DragAndDropTarget { + override fun onDrop(event: DragAndDropEvent): Boolean { + val permission = + activity.requestDragAndDropPermissions(event.toAndroidDragEvent()) + // Parse received data + permission?.release() + return true + } } } + // [END android_compose_drag_and_drop_7] } - // [END android_compose_drag_and_drop_7] // [START android_compose_drag_and_drop_5] Modifier.dragAndDropTarget(