refactor: rewrite mobile app in Compose and add error handling for wear
This commit is contained in:
@@ -12,11 +12,21 @@ import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.asImageBitmap
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.wear.compose.material3.MaterialTheme
|
||||
import androidx.wear.compose.material3.Text
|
||||
|
||||
const val CODE_WIDTH = 380
|
||||
const val CODE_HEIGHT = 380
|
||||
|
||||
class ShowCardActivity : ComponentActivity() {
|
||||
private lateinit var db: DbHelper
|
||||
@@ -43,7 +53,7 @@ class ShowCardActivity : ComponentActivity() {
|
||||
}
|
||||
|
||||
setContent {
|
||||
CardView(cardInfo)
|
||||
ShowCardPage(cardInfo)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,25 +79,40 @@ class ShowCardActivity : ComponentActivity() {
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun CardView(cardInfo: CardInfo) {
|
||||
Column(
|
||||
fun ShowCardPage(cardInfo: CardInfo) {
|
||||
BoxWithConstraints(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.Center,
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
BoxWithConstraints(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = Alignment.Center,
|
||||
val screenSize = minOf(maxWidth, maxHeight)
|
||||
val safeSize = (screenSize * 0.65f)
|
||||
val sizePx = with(LocalDensity.current) { safeSize.roundToPx() }
|
||||
|
||||
val bitmap = remember(cardInfo, sizePx) {
|
||||
try {
|
||||
generateCode(cardInfo.codeValue, cardInfo.codeType, sizePx, sizePx).asImageBitmap()
|
||||
} catch (_: Exception) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.Center
|
||||
) {
|
||||
val density = LocalDensity.current
|
||||
|
||||
val widthPx = with(density) { maxWidth.roundToPx() }
|
||||
val heightPx = with(density) { maxHeight.roundToPx() }
|
||||
|
||||
Image(
|
||||
bitmap = generateCode(cardInfo.codeValue, cardInfo.codeType, widthPx, heightPx).asImageBitmap(),
|
||||
contentDescription = "Card code"
|
||||
)
|
||||
if (bitmap != null) {
|
||||
Image(
|
||||
bitmap = bitmap,
|
||||
contentDescription = cardInfo.codeValue,
|
||||
modifier = Modifier.size(safeSize)
|
||||
)
|
||||
} else {
|
||||
Text(
|
||||
"Failed to generate code",
|
||||
color = MaterialTheme.colorScheme.error,
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user