From beea669d7536f9a88f1e4a7bb37e30c8010764c9 Mon Sep 17 00:00:00 2001 From: Rob Orgiu Date: Mon, 22 Jul 2024 15:32:52 +0200 Subject: [PATCH] Add Drag&Drop feature on the title --- .../nowinandroid/core/ui/NewsResourceCard.kt | 33 ++++++++++++++++++- gradle/libs.versions.toml | 2 +- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt index e60c498eb..4aaa4f7ad 100644 --- a/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt @@ -16,8 +16,15 @@ package com.google.samples.apps.nowinandroid.core.ui +import android.content.ClipData +import android.os.Build.VERSION +import android.os.Build.VERSION_CODES +import android.view.View import androidx.compose.foundation.Canvas +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image +import androidx.compose.foundation.draganddrop.dragAndDropSource +import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -45,6 +52,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draganddrop.DragAndDropTransferData import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalInspectionMode @@ -77,6 +85,7 @@ import java.util.Locale * [NewsResource] card used on the following screens: For You, Saved */ +@OptIn(ExperimentalFoundationApi::class) @Composable fun NewsResourceCardExpanded( userNewsResource: UserNewsResource, @@ -88,6 +97,13 @@ fun NewsResourceCardExpanded( modifier: Modifier = Modifier, ) { val clickActionLabel = stringResource(R.string.core_ui_card_tap_action) + + val dragAndDropFlags = if (VERSION.SDK_INT >= VERSION_CODES.N) { + View.DRAG_FLAG_GLOBAL + } else { + 0 + } + Card( onClick = onClick, shape = RoundedCornerShape(16.dp), @@ -112,7 +128,22 @@ fun NewsResourceCardExpanded( Row { NewsResourceTitle( userNewsResource.title, - modifier = Modifier.fillMaxWidth((.8f)), + modifier = Modifier.fillMaxWidth((.8f)) + .dragAndDropSource { + detectTapGestures( + onLongPress = { + startTransfer( + DragAndDropTransferData( + ClipData.newPlainText( + "Feed sharing", + userNewsResource.title + ": " + userNewsResource.url, + ), + flags = dragAndDropFlags, + ), + ) + }, + ) + }, ) Spacer(modifier = Modifier.weight(1f)) BookmarkButton(isBookmarked, onToggleBookmark) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7047ac665..76fb6f24f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ accompanist = "0.34.0" androidDesugarJdkLibs = "2.0.4" # AGP and tools should be updated together -androidGradlePlugin = "8.4.0" +androidGradlePlugin = "8.5.1" androidTools = "31.4.1" androidxActivity = "1.8.2" androidxAppCompat = "1.7.0"