Skip to content

Commit 37d1c78

Browse files
committed
Create utilities to copy to clipboard in Compose code
1 parent cea149f commit 37d1c78

2 files changed

Lines changed: 31 additions & 12 deletions

File tree

app/src/main/java/org/schabi/newpipe/ui/components/video/comment/Comment.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.schabi.newpipe.ui.components.video.comment
22

33
import android.content.res.Configuration
4-
import android.os.Build
5-
import android.widget.Toast
64
import androidx.compose.animation.animateContentSize
75
import androidx.compose.foundation.ExperimentalFoundationApi
86
import androidx.compose.foundation.clickable
@@ -34,7 +32,6 @@ import androidx.compose.runtime.setValue
3432
import androidx.compose.ui.Alignment
3533
import androidx.compose.ui.Modifier
3634
import androidx.compose.ui.draw.clip
37-
import androidx.compose.ui.platform.LocalClipboardManager
3835
import androidx.compose.ui.platform.LocalContext
3936
import androidx.compose.ui.res.painterResource
4037
import androidx.compose.ui.res.pluralStringResource
@@ -53,12 +50,12 @@ import org.schabi.newpipe.ui.components.common.rememberParsedDescription
5350
import org.schabi.newpipe.ui.theme.AppTheme
5451
import org.schabi.newpipe.util.Localization
5552
import org.schabi.newpipe.util.NavigationHelper
53+
import org.schabi.newpipe.util.external_communication.copyToClipboardCallback
5654
import org.schabi.newpipe.util.image.ImageStrategy
5755

5856
@OptIn(ExperimentalFoundationApi::class)
5957
@Composable
6058
fun Comment(comment: CommentsInfoItem, onCommentAuthorOpened: () -> Unit) {
61-
val clipboardManager = LocalClipboardManager.current
6259
val context = LocalContext.current
6360
var isExpanded by rememberSaveable { mutableStateOf(false) }
6461
var showReplies by rememberSaveable { mutableStateOf(false) }
@@ -68,14 +65,8 @@ fun Comment(comment: CommentsInfoItem, onCommentAuthorOpened: () -> Unit) {
6865
modifier = Modifier
6966
.animateContentSize()
7067
.combinedClickable(
71-
onLongClick = {
72-
clipboardManager.setText(parsedDescription)
73-
if (Build.VERSION.SDK_INT < 33) {
74-
// Android 13 has its own "copied to clipboard" dialog
75-
Toast.makeText(context, R.string.msg_copied, Toast.LENGTH_SHORT).show()
76-
}
77-
},
78-
onClick = { isExpanded = !isExpanded }
68+
onLongClick = copyToClipboardCallback { parsedDescription },
69+
onClick = { isExpanded = !isExpanded },
7970
)
8071
.padding(start = 8.dp, top = 10.dp, end = 8.dp, bottom = 4.dp),
8172
horizontalArrangement = Arrangement.spacedBy(8.dp)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.schabi.newpipe.util.external_communication
2+
3+
import android.content.Context
4+
import android.os.Build
5+
import android.widget.Toast
6+
import androidx.compose.runtime.Composable
7+
import androidx.compose.ui.platform.ClipboardManager
8+
import androidx.compose.ui.platform.LocalClipboardManager
9+
import androidx.compose.ui.platform.LocalContext
10+
import androidx.compose.ui.text.AnnotatedString
11+
import org.schabi.newpipe.R
12+
13+
fun ClipboardManager.setTextAndShowToast(context: Context, annotatedString: AnnotatedString) {
14+
setText(annotatedString)
15+
if (Build.VERSION.SDK_INT < 33) {
16+
// Android 13 has its own "copied to clipboard" dialog
17+
Toast.makeText(context, R.string.msg_copied, Toast.LENGTH_SHORT).show()
18+
}
19+
}
20+
21+
@Composable
22+
fun copyToClipboardCallback(annotatedString: () -> AnnotatedString): (() -> Unit) {
23+
val clipboardManager = LocalClipboardManager.current
24+
val context = LocalContext.current
25+
return {
26+
clipboardManager.setTextAndShowToast(context, annotatedString())
27+
}
28+
}

0 commit comments

Comments
 (0)