-
Notifications
You must be signed in to change notification settings - Fork 134
/
RegionBlockScreen.kt
129 lines (123 loc) · 4.51 KB
/
RegionBlockScreen.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package dev.aaa1115910.bv.screen
import android.app.Activity
import android.graphics.BitmapFactory
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.ImageBitmapConfig
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import dev.aaa1115910.bv.R
import dev.aaa1115910.bv.ui.theme.BVTheme
import io.github.g0dkar.qrcode.QRCode
import io.github.g0dkar.qrcode.render.Colors
import okhttp3.internal.toHexString
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import kotlin.system.exitProcess
@Composable
fun RegionBlockScreen(
modifier: Modifier = Modifier
) {
val context = LocalContext.current
var qrImage by remember { mutableStateOf(ImageBitmap(1, 1, ImageBitmapConfig.Argb8888)) }
val primaryColorHex =
"#" + MaterialTheme.colorScheme.primary.toArgb().toHexString().substring(2)
LaunchedEffect(Unit) {
println(primaryColorHex)
val output = ByteArrayOutputStream()
QRCode("扫码也没有用的!")
.render(darkColor = Colors.css(primaryColorHex))
.writeImage(output)
val input = ByteArrayInputStream(output.toByteArray())
qrImage = BitmapFactory.decodeStream(input).asImageBitmap()
}
DisposableEffect(key1 = Unit) {
onDispose {
(context as Activity).finish()
exitProcess(0)
}
}
Surface(
modifier = modifier,
color = MaterialTheme.colorScheme.primary
) {
Box(
modifier = Modifier
.fillMaxSize()
.padding(84.dp),
contentAlignment = Alignment.CenterStart
) {
Column(
verticalArrangement = Arrangement.spacedBy(24.dp)
) {
Text(
text = stringResource(R.string.region_block_character_painting),
fontSize = 100.sp
)
Column {
Text(
text = stringResource(R.string.region_block_title),
style = MaterialTheme.typography.titleLarge
)
Text(
text = stringResource(R.string.region_block_subtitle),
style = MaterialTheme.typography.titleLarge
)
}
Row(
horizontalArrangement = Arrangement.spacedBy(12.dp)
) {
Box(
modifier = Modifier
.size(80.dp)
.background(Color.White),
contentAlignment = Alignment.Center
) {
Image(
modifier = Modifier.size(64.dp),
bitmap = qrImage,
contentDescription = null
)
}
Column {
Text(text = stringResource(R.string.region_block_solution_title))
Text(text = stringResource(R.string.region_block_solution_text))
}
}
}
}
}
}
@Preview(device = "id:tv_1080p")
@Composable
private fun RegionBlockScreenPreview() {
BVTheme {
RegionBlockScreen()
}
}