11package com.yogeshpaliyal.deepr
22
3+ import android.content.ClipData
4+ import android.content.ClipboardManager
5+ import android.content.Context
36import android.os.Bundle
47import android.widget.Toast
58import androidx.activity.ComponentActivity
@@ -46,7 +49,6 @@ import androidx.compose.ui.Alignment
4649import androidx.compose.ui.Modifier
4750import androidx.compose.ui.platform.LocalContext
4851import androidx.compose.ui.text.style.TextOverflow
49- import androidx.compose.ui.tooling.preview.Preview
5052import androidx.compose.ui.unit.dp
5153import com.yogeshpaliyal.deepr.ui.components.CreateShortcutDialog
5254import com.yogeshpaliyal.deepr.ui.theme.DeeprTheme
@@ -56,17 +58,18 @@ import com.yogeshpaliyal.deepr.util.openDeeplink
5658import com.yogeshpaliyal.deepr.viewmodel.AccountViewModel
5759import com.yogeshpaliyal.deepr.viewmodel.SortOrder
5860import compose.icons.TablerIcons
61+ import compose.icons.tablericons.Copy
5962import compose.icons.tablericons.DotsVertical
6063import compose.icons.tablericons.Filter
6164import compose.icons.tablericons.Plus
6265import compose.icons.tablericons.Search
6366import compose.icons.tablericons.Trash
6467import compose.icons.tablericons.X
68+ import org.koin.androidx.viewmodel.ext.android.viewModel
6569import java.text.DateFormat
6670import java.text.SimpleDateFormat
6771import java.util.Locale
6872import java.util.TimeZone
69- import org.koin.androidx.viewmodel.ext.android.viewModel
7073
7174class MainActivity : ComponentActivity () {
7275 private val viewModel: AccountViewModel by viewModel()
@@ -319,6 +322,7 @@ fun DeeprItem(
319322 onShortcutClick : (Deepr ) -> Unit
320323) {
321324 var expanded by remember { mutableStateOf(false ) }
325+ val context = LocalContext .current
322326
323327 Card (
324328 modifier = modifier
@@ -333,7 +337,11 @@ fun DeeprItem(
333337 horizontalArrangement = Arrangement .SpaceBetween ,
334338 verticalAlignment = Alignment .CenterVertically
335339 ) {
336- Column (modifier = Modifier .weight(1f ).padding(end = 8 .dp)) {
340+ Column (
341+ modifier = Modifier
342+ .weight(1f )
343+ .padding(end = 8 .dp)
344+ ) {
337345 Text (
338346 text = account.link,
339347 maxLines = 1 ,
@@ -364,6 +372,23 @@ fun DeeprItem(
364372 expanded = expanded,
365373 onDismissRequest = { expanded = false }
366374 ) {
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+ )
367392 DropdownMenuItem (
368393 text = { Text (" Add shortcut" ) },
369394 onClick = {
@@ -396,22 +421,6 @@ fun DeeprItem(
396421 }
397422}
398423
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-
415424private fun formatDateTime (dateTimeString : String ): String {
416425 return try {
417426 val dbFormatter = SimpleDateFormat (" yyyy-MM-dd HH:mm:ss" , Locale .getDefault())
@@ -420,7 +429,7 @@ private fun formatDateTime(dateTimeString: String): String {
420429 val displayFormatter =
421430 DateFormat .getDateTimeInstance(DateFormat .MEDIUM , DateFormat .SHORT , Locale .getDefault())
422431 date?.let { displayFormatter.format(it) } ? : dateTimeString
423- } catch (e : Exception ) {
432+ } catch (_ : Exception ) {
424433 dateTimeString // fallback to raw string
425434 }
426435}
0 commit comments