1
1
package com.yogeshpaliyal.deepr
2
2
3
+ import android.content.ClipData
4
+ import android.content.ClipboardManager
5
+ import android.content.Context
3
6
import android.os.Bundle
4
7
import android.widget.Toast
5
8
import androidx.activity.ComponentActivity
@@ -46,7 +49,6 @@ import androidx.compose.ui.Alignment
46
49
import androidx.compose.ui.Modifier
47
50
import androidx.compose.ui.platform.LocalContext
48
51
import androidx.compose.ui.text.style.TextOverflow
49
- import androidx.compose.ui.tooling.preview.Preview
50
52
import androidx.compose.ui.unit.dp
51
53
import com.yogeshpaliyal.deepr.ui.components.CreateShortcutDialog
52
54
import com.yogeshpaliyal.deepr.ui.theme.DeeprTheme
@@ -56,17 +58,18 @@ import com.yogeshpaliyal.deepr.util.openDeeplink
56
58
import com.yogeshpaliyal.deepr.viewmodel.AccountViewModel
57
59
import com.yogeshpaliyal.deepr.viewmodel.SortOrder
58
60
import compose.icons.TablerIcons
61
+ import compose.icons.tablericons.Copy
59
62
import compose.icons.tablericons.DotsVertical
60
63
import compose.icons.tablericons.Filter
61
64
import compose.icons.tablericons.Plus
62
65
import compose.icons.tablericons.Search
63
66
import compose.icons.tablericons.Trash
64
67
import compose.icons.tablericons.X
68
+ import org.koin.androidx.viewmodel.ext.android.viewModel
65
69
import java.text.DateFormat
66
70
import java.text.SimpleDateFormat
67
71
import java.util.Locale
68
72
import java.util.TimeZone
69
- import org.koin.androidx.viewmodel.ext.android.viewModel
70
73
71
74
class MainActivity : ComponentActivity () {
72
75
private val viewModel: AccountViewModel by viewModel()
@@ -319,6 +322,7 @@ fun DeeprItem(
319
322
onShortcutClick : (Deepr ) -> Unit
320
323
) {
321
324
var expanded by remember { mutableStateOf(false ) }
325
+ val context = LocalContext .current
322
326
323
327
Card (
324
328
modifier = modifier
@@ -333,7 +337,11 @@ fun DeeprItem(
333
337
horizontalArrangement = Arrangement .SpaceBetween ,
334
338
verticalAlignment = Alignment .CenterVertically
335
339
) {
336
- Column (modifier = Modifier .weight(1f ).padding(end = 8 .dp)) {
340
+ Column (
341
+ modifier = Modifier
342
+ .weight(1f )
343
+ .padding(end = 8 .dp)
344
+ ) {
337
345
Text (
338
346
text = account.link,
339
347
maxLines = 1 ,
@@ -364,6 +372,23 @@ fun DeeprItem(
364
372
expanded = expanded,
365
373
onDismissRequest = { expanded = false }
366
374
) {
375
+ DropdownMenuItem (
376
+ text = { Text (" Copy link" ) },
377
+ onClick = {
378
+ val clipboard =
379
+ context.getSystemService(Context .CLIPBOARD_SERVICE ) as ClipboardManager
380
+ val clip = ClipData .newPlainText(" Link copied" , account.link)
381
+ clipboard.setPrimaryClip(clip)
382
+ Toast .makeText(context, " Link copied" , Toast .LENGTH_SHORT ).show()
383
+ expanded = false
384
+ },
385
+ leadingIcon = {
386
+ Icon (
387
+ TablerIcons .Copy ,
388
+ contentDescription = " Copy link"
389
+ )
390
+ }
391
+ )
367
392
DropdownMenuItem (
368
393
text = { Text (" Add shortcut" ) },
369
394
onClick = {
@@ -396,22 +421,6 @@ fun DeeprItem(
396
421
}
397
422
}
398
423
399
- @Composable
400
- fun Greeting (name : String , modifier : Modifier = Modifier ) {
401
- Text (
402
- text = " Hello $name !" ,
403
- modifier = modifier
404
- )
405
- }
406
-
407
- @Preview(showBackground = true )
408
- @Composable
409
- fun GreetingPreview () {
410
- DeeprTheme {
411
- Greeting (" Android" )
412
- }
413
- }
414
-
415
424
private fun formatDateTime (dateTimeString : String ): String {
416
425
return try {
417
426
val dbFormatter = SimpleDateFormat (" yyyy-MM-dd HH:mm:ss" , Locale .getDefault())
@@ -420,7 +429,7 @@ private fun formatDateTime(dateTimeString: String): String {
420
429
val displayFormatter =
421
430
DateFormat .getDateTimeInstance(DateFormat .MEDIUM , DateFormat .SHORT , Locale .getDefault())
422
431
date?.let { displayFormatter.format(it) } ? : dateTimeString
423
- } catch (e : Exception ) {
432
+ } catch (_ : Exception ) {
424
433
dateTimeString // fallback to raw string
425
434
}
426
435
}
0 commit comments