Pith - wedge_android
wedge_android/app/src/main/java/com/vgmlr/wedge/WedgeData.kt [5.4 kb]
Modified: 19:01:48 69 026 (27 May 026)
3 Days Ago
package com.vgmlr.wedge

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 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 = WedgeCalendar.getOtcMetadata(timestamp)

    val backupFile = File(LocalContext.current.getExternalFilesDir(null), "backups/wedge.bk")
    val backupTimestamp = if (backupFile.exists()) backupFile.lastModified() else null
    val backupStr = backupTimestamp?.let { WedgeCalendar.getOtcMetadata(it) } ?: "[none]"

    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))
                    }
                }
            )
        }
    ) { p ->
        Column(
            modifier = Modifier
                .padding(p)
                .fillMaxSize()
                .background(parseColor(editorBg))
                .verticalScroll(rememberScrollState()),

            verticalArrangement = Arrangement.spacedBy(16.dp)
        ) {
            
            SectionSurface(title = "Data") {
                DataRowSection(
                    labels = listOf("Lines", "Characters", "Modified", "Archived", "Synced"),
                    values = listOf("$lineCount", "$charCount", modifiedStr, backupStr, "[disabled]")
                )
            }

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

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

            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
Shim - Android 70.026.1
Wedge - Linux 68.026.1
Wedge - Android 68.026.1
Taper - Linux 64.026.1
Ayh Extension - Chrome 63.026.1
Dev
TVShow (227) 'CSA'
TVShow (228) 'APT'
TVProgram (83) 'BXT'
Miter Update(s)
Shim (Dictation)

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed