Pith - kerf
kerf/app/src/main/java/com/vgmlr/kerf/KerfDialogs.kt [8.4 kb]
Modified: 19:00:17 154 026 (20 Aug 026)
3 Days Ago
package com.vgmlr.kerf

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.ui.window.DialogProperties

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SearchDialog(notes: List<Note>, onSelect: (Int) -> Unit, onDismiss: () -> Unit) {
    val kerfColors = LocalKerfColors.current!!

    Dialog(
        onDismissRequest = onDismiss,
        properties = DialogProperties(usePlatformDefaultWidth = false)
    ) {
        Surface(
            modifier = Modifier
                .padding(horizontal = 24.dp)
                .fillMaxWidth(),
            shape = RoundedCornerShape(8.dp),
            color = kerfColors.alertBackground
        ) {
            LazyColumn(
                modifier = Modifier
                    .padding(horizontal = 24.dp, vertical = 26.dp)
                    .heightIn(max = 340.dp),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                itemsIndexed(items = notes) { index, n ->
                    ListItem(
                        headlineContent = {
                            Text(
                                text = n.title.ifBlank { "Untitled" },
                                maxLines = 1,
                                overflow = TextOverflow.Ellipsis
                            )
                        },
                        colors = ListItemDefaults.colors(
                            containerColor = kerfColors.alertBackground,
                            headlineColor = kerfColors.alertText
                        ),
                        modifier = Modifier.clickable { onSelect(n.id) }
                    )

                    if (notes.size > 1 && index < notes.lastIndex) {
                        HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
                    }
                }
            }
        }
    }
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ShareDialog(notes: List<Note>, onSelect: (Int) -> Unit, onAddNew: () -> Unit, onDismiss: () -> Unit) {
    val kerfColors = LocalKerfColors.current!!
    val totalItemsCount = notes.size + 1

    Dialog(
        onDismissRequest = onDismiss,
        properties = DialogProperties(usePlatformDefaultWidth = false)
    ) {
        Surface(
            modifier = Modifier
                .padding(horizontal = 24.dp)
                .fillMaxWidth(),
            shape = RoundedCornerShape(8.dp),
            color = kerfColors.alertBackground
        ) {
            LazyColumn(
                modifier = Modifier
                    .padding(horizontal = 24.dp, vertical = 26.dp)
                    .heightIn(max = 340.dp),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                item {
                    ListItem(
                        headlineContent = { Text("New List", color = kerfColors.menuText) },
                        trailingContent = {
                            Icon(
                                Icons.Default.Add,
                                null,
                                tint = kerfColors.alertText.copy(alpha = 0.4f)
                            )
                        },
                        colors = ListItemDefaults.colors(containerColor = kerfColors.alertBackground),
                        modifier = Modifier.clickable { onAddNew() }
                    )

                    if (totalItemsCount > 1 && notes.isNotEmpty()) {
                        HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
                    }
                }

                itemsIndexed(items = notes) { index, n ->
                    val currentOverallIndex = index + 1

                    ListItem(
                        headlineContent = {
                            Text(
                                text = n.title.ifBlank { "Untitled" },
                                maxLines = 1,
                                overflow = TextOverflow.Ellipsis
                            )
                        },
                        colors = ListItemDefaults.colors(
                            containerColor = kerfColors.alertBackground,
                            headlineColor = kerfColors.alertText
                        ),
                        modifier = Modifier.clickable { onSelect(n.id) }
                    )

                    if (totalItemsCount > 1 && currentOverallIndex < totalItemsCount - 1) {
                        HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
                    }
                }
            }
        }
    }
}

@Composable
fun DataDialog(createdAt: Long?, updatedAt: Long?, lastShared: Long?, onDismiss: () -> Unit) {
    val createddate = KerfUtils.formatLastSharedDate(createdAt)
    val modifieddate = KerfUtils.formatLastSharedDate(updatedAt)
    val shareddate = KerfUtils.formatLastSharedDate(lastShared)
    val kerfColors = LocalKerfColors.current!!
    Dialog(
        onDismissRequest = onDismiss,
        properties = DialogProperties(usePlatformDefaultWidth = false)
    ) {
        Surface(
            modifier = Modifier
                .padding(horizontal = 24.dp)
                .fillMaxWidth(),
            color = kerfColors.alertBackground,
            shape = RoundedCornerShape(8.dp)
        ) {
            Column(
                modifier = Modifier.padding(horizontal = 24.dp, vertical = 32.dp),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                Row {
                    Column(horizontalAlignment = Alignment.End) {
                        Text("Created", color = kerfColors.alertText, fontSize = 14.sp)
                        Text("Modified", color = kerfColors.alertText, fontSize = 14.sp)
                        Text("Shared", color = kerfColors.alertText, fontSize = 14.sp)
                    }
                    Spacer(Modifier.width(16.dp))
                    Column {
                        Text(createddate, color = kerfColors.alertText, fontSize = 13.sp, fontFamily = FontFamily.Monospace)
                        Text(modifieddate, color = kerfColors.alertText, fontSize = 13.sp, fontFamily = FontFamily.Monospace)
                        Text(shareddate, color = kerfColors.alertText, fontSize = 13.sp, fontFamily = FontFamily.Monospace)
                    }
                }
            }
        }
    }
}

@Composable
fun VersionDialog(onDismiss: () -> Unit) {
    val uriHandler = LocalUriHandler.current
    val kerfColors = LocalKerfColors.current!!
    Dialog(
        onDismissRequest = onDismiss,
        properties = DialogProperties(usePlatformDefaultWidth = false)
    ) {
        Surface(
            modifier = Modifier
                .padding(horizontal = 24.dp)
                .fillMaxWidth(),
            shape = RoundedCornerShape(8.dp),
            color = kerfColors.alertBackground
        ) {
            Column(
                modifier = Modifier.padding(vertical = 26.dp),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                Text(
                    "com.vgmlr.kerf", 
                    color = kerfColors.alertText, 
                    fontSize = 14.sp
                )
                Text(
                    "153.026.1", 
                    color = kerfColors.alertText, 
                    fontSize = 14.sp,
                    modifier = Modifier.clickable { uriHandler.openUri("https://vgmlr.com/?t=Kerf#download") }
                )
                Text(
                    "vgmlr.com/mlwrk",
                    color = kerfColors.alertText,
                    fontSize = 14.sp,
                    modifier = Modifier.clickable { uriHandler.openUri("https://vgmlr.com/mlwrk") }
                )
            }
        }
    }
}
Updates
Kerf - Android 157.026
Kiln - Android 157.026
Wedge - Android 156.026
Whittle - Linux 155.026
Grit - Firefox/Chrome 154.026

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)
0.00197
256,969 (+223)