refactor: rewrite mobile app in Compose and add error handling for wear

This commit is contained in:
2026-06-11 17:32:02 +03:00
parent 59207d3351
commit 19a571ac06
40 changed files with 1003 additions and 608 deletions
@@ -0,0 +1,132 @@
package ru.omni_devel.cards
import android.content.Intent
import androidx.compose.foundation.background
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.runtime.setValue
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@Composable
fun Page(name: String, innerPadding: PaddingValues, content: @Composable () -> Unit) {
Column(
modifier = Modifier.padding(innerPadding)
) {
TopBar(name)
Column(
modifier = Modifier.padding(horizontal = 16.dp)
) {
content()
}
}
}
@Composable
fun TopBar(text: String) {
Row(
modifier = Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.primaryContainer).padding(horizontal = 12.dp, vertical = 16.dp)
) {
Text(
text,
fontSize = 24.sp,
color = MaterialTheme.colorScheme.onPrimaryContainer
)
}
}
@Composable
fun CardButton(cardInfo: CardInfo, onDeleteCard: (Int) -> Unit, getDbFun: () -> DbHelper) {
val context = LocalContext.current
var menuExpanded by remember { mutableStateOf(false) }
Box(modifier = Modifier.fillMaxWidth()) {
Surface(
modifier = Modifier
.fillMaxWidth()
.pointerInput(Unit) {
detectTapGestures(
onTap = {
val intent = Intent(context, ShowCardActivity::class.java)
intent.putExtra("cardId", cardInfo.id)
context.startActivity(intent)
},
onLongPress = {
menuExpanded = true
}
)
},
shape = ButtonDefaults.shape,
color = MaterialTheme.colorScheme.primaryContainer,
tonalElevation = 2.dp
) {
Text(
cardInfo.name,
fontSize = 16.sp,
color = MaterialTheme.colorScheme.onPrimaryContainer,
modifier = Modifier
.padding(vertical = 16.dp, horizontal = 16.dp)
.fillMaxWidth(),
textAlign = TextAlign.Start
)
}
DropdownMenu(
expanded = menuExpanded,
onDismissRequest = { menuExpanded = false }
) {
DropdownMenuItem(
text = { Text("Edit") },
onClick = {
menuExpanded = false
val intent = Intent(context, EditCardActivity::class.java)
intent.putExtra("cardId", cardInfo.id)
context.startActivity(intent)
}
)
DropdownMenuItem(
text = { Text("Delete") },
onClick = {
menuExpanded = false
onDeleteCard(cardInfo.id)
}
)
}
}
}
@Composable
fun FullWidthButton(onClick: () -> Unit, content: @Composable () -> Unit) {
Button(
modifier = Modifier.fillMaxWidth(),
onClick = onClick
) {
content()
}
}