Pith - wedge_android
wedge_android/app/src/main/java/com/vgmlr/wedge/WedgeData.kt [6.0 kb]
Modified: 06:16:54 91 026 (18 Jun 026)
6 Days Ago
package com.vgmlr.wedge

import android.content.Context
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import java.io.File

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DataView(vm: MainViewModel, prefs: PreferenceManager, onBack: () -> Unit) {
    val context = LocalContext.current
    val editorBg by prefs.bgColor.collectAsState(WedgeConfig.BG_COLOR_DEFAULT)
    val noteEntity by vm.dao.getNote().collectAsState(initial = null)

    val content = noteEntity?.content ?: ""
    val charCount = content.length
    val lineCount = if (content.isEmpty()) 0 else content.count { it == '\n' } + 1
    val timestamp = noteEntity?.lastModified ?: System.currentTimeMillis()
    val modifiedStr = WedgeDate.getOtcMetadata(timestamp)

    val backupStr = remember {
        val backupFile = File(context.getExternalFilesDir(null), "backups/wedge.bk")
        if (backupFile.exists()) WedgeDate.getOtcMetadata(backupFile.lastModified()) else "[none]"
    }

    val syncStr = remember {
        val prefsShared = context.getSharedPreferences("sync_prefs", Context.MODE_PRIVATE)
        val syncTimestamp = prefsShared.getLong("sync_last_stamp", 0L)
        if (syncTimestamp == 0L) "[none]" else WedgeDate.getOtcMetadata(syncTimestamp)
    }

    Scaffold(
        topBar = {
            TopAppBar(
                title = { Text("Data", color = colorResource(id = R.color.title_color), fontSize = 18.sp) },
                colors = TopAppBarDefaults.topAppBarColors(containerColor = Color(0xFF486860)),
                navigationIcon = {
                    IconButton(onClick = onBack) {
                        Icon(Icons.AutoMirrored.Filled.ArrowBack, null, tint = colorResource(id = R.color.title_color))
                    }
                }
            )
        }
    ) { paddingValues ->
        Column(
            modifier = Modifier
                .padding(paddingValues)
                .fillMaxSize()
                .background(parseColor(editorBg))
                .verticalScroll(rememberScrollState())
                .padding(top = 16.dp, start = 16.dp, end = 16.dp),
            verticalArrangement = Arrangement.spacedBy(16.dp)
        ) {

            SectionSurface(title = "Data") {
                DataRowSection(
                    labels = listOf("Lines", "Characters", "Modified", "Archived", "Synced"),
                    values = listOf("$lineCount", "$charCount", modifiedStr, backupStr, syncStr)
                )
            }

            SectionSurface(title = "Syntax") {
                DataRowSection(
                    labels = listOf(
                        "Math", " ", "Days", " ", " ",
                        "Focus", "Italic", "Under-Line",
                        "Strike-Thru", "HR", "Dash"
                    ),
                    values = listOf(
                        "123+456=", "operators: + - / * %", "20mar()=",
                        "(otc-date)", "auto-updates", "text!", "text?",
                        "text*", "text~", "hr([#])", "dash([#])"
                    )
                )
            }

            SectionSurface(title = "Logic") {
                DataRowSection(
                    labels = listOf("List", "Sort", " ", "Indent"),
                    values = listOf("1. text[enter]", "[select][sort]", "parent|child", "[true]")
                )
            }

            SectionSurface(title = "Notch") {
                DataRowSection(
                    labels = listOf("Date Header", " ", "Alarm Regex", " "),
                    values = listOf("1 fri 20 mar", "10:00  text", "10:00  text()", "(hours-left)")
                )
            }

            SectionSurface(title = "Security") {
                DataRowSection(
                    labels = listOf("Encryption"),
                    values = listOf("AES-256 [wdg:]")
                )
            }

            Spacer(modifier = Modifier.height(16.dp))
        }
    }
}

@Composable
private fun SectionSurface(title: String, content: @Composable () -> Unit) {
    Column(modifier = Modifier.fillMaxWidth()) {
        Row(
            modifier = Modifier
                .fillMaxWidth()
                .padding(bottom = 15.dp)
                .background(colorResource(id = R.color.calc_bg_color)),
            verticalAlignment = Alignment.CenterVertically,
            horizontalArrangement = Arrangement.Center
        ) {
            Text(
                text = title,
                modifier = Modifier.padding(vertical = 7.dp),
                color = colorResource(id = R.color.data_color),
                style = MaterialTheme.typography.bodyMedium.copy(
                    letterSpacing = 1.5.sp
                )
            )
        }

        Surface(
            modifier = Modifier.fillMaxWidth(),
            color = Color.Transparent,
            content = content
        )
    }
}

@Composable
private fun DataRowSection(labels: List<String>, values: List<String>) {
    Row(modifier = Modifier.padding(horizontal = 12.dp, vertical = 0.dp)) {
        Column(horizontalAlignment = Alignment.End, modifier = Modifier.weight(0.4f)) {
            labels.forEach { Text(it, color = colorResource(id = R.color.dialog_color), fontSize = 15.sp) }
        }
        Spacer(Modifier.width(16.dp))
        Column(modifier = Modifier.weight(0.6f)) {
            values.forEach {
                Text(it, color = colorResource(id = R.color.dialog_color),
                    fontSize = 14.sp, fontFamily = FontFamily.Monospace)
            }
        }
    }
}
Updates
OTC Applet - Linux 93.026.1
Wedge - Linux 90.026.1
Wedge - Android 90.026.1
Shim - Android 86.026.1
Kerf - Android 86.026.4
Dev
TVShow (227) 'CSA'
TVShow (228) 'APT'
TVProgram (83) 'BXT'
Miter Update(s)
Peen (Messaging)

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)