1+ package dev.datlag.mimasu.ui.space
2+
3+ import androidx.compose.foundation.layout.Arrangement
4+ import androidx.compose.foundation.layout.Row
5+ import androidx.compose.foundation.layout.Spacer
6+ import androidx.compose.foundation.layout.fillMaxSize
7+ import androidx.compose.foundation.layout.padding
8+ import androidx.compose.foundation.layout.size
9+ import androidx.compose.foundation.lazy.LazyColumn
10+ import androidx.compose.material3.ButtonDefaults
11+ import androidx.compose.material3.Scaffold
12+ import androidx.compose.runtime.Composable
13+ import androidx.compose.runtime.collectAsState
14+ import androidx.compose.runtime.getValue
15+ import androidx.compose.runtime.remember
16+ import androidx.compose.runtime.rememberCoroutineScope
17+ import androidx.compose.ui.Alignment
18+ import androidx.compose.ui.Modifier
19+ import androidx.compose.ui.platform.LocalContext
20+ import androidx.compose.ui.unit.dp
21+ import androidx.lifecycle.compose.collectAsStateWithLifecycle
22+ import dev.datlag.mimasu.composeapp.generated.resources.Res
23+ import dev.datlag.mimasu.composeapp.generated.resources.app_name
24+ import dev.datlag.mimasu.other.SpaceManager
25+ import dev.datlag.mimasu.ui.custom.MaterialSymbols
26+ import dev.datlag.mimasu.ui.space.components.SizeInfo
27+ import dev.datlag.tooling.Platform
28+ import dev.datlag.tooling.async.launchVirtualIO
29+ import dev.datlag.tooling.compose.LaunchedVirtualIO
30+ import dev.datlag.tooling.compose.platform.PlatformButton
31+ import dev.datlag.tooling.compose.platform.PlatformButtonColors
32+ import dev.datlag.tooling.compose.platform.PlatformText
33+ import dev.datlag.tooling.compose.platform.colorScheme
34+ import dev.datlag.tooling.compose.platform.rememberIsTv
35+ import dev.datlag.tooling.compose.platform.typography
36+ import io.tolgee.stringResource
37+
38+ @OptIn(MaterialSymbols .RedrawRequired ::class )
39+ @Composable
40+ fun SpaceContent () {
41+ Scaffold (
42+ modifier = Modifier .fillMaxSize()
43+ ) { padding ->
44+ val context = LocalContext .current
45+ val spaceManager = remember(context) { SpaceManager (context) }
46+ val scope = rememberCoroutineScope()
47+ val sizes by if (Platform .rememberIsTv()) {
48+ spaceManager.sizes.collectAsState()
49+ } else {
50+ spaceManager.sizes.collectAsStateWithLifecycle()
51+ }
52+
53+ LaunchedVirtualIO (spaceManager) {
54+ spaceManager.loadSizes()
55+ }
56+
57+ LazyColumn (
58+ modifier = Modifier .fillMaxSize().padding(padding)
59+ ) {
60+ item {
61+ PlatformText (
62+ modifier = Modifier .fillParentMaxWidth().padding(16 .dp),
63+ text = stringResource(Res .string.app_name),
64+ style = Platform .typography().headlineLarge,
65+ maxLines = 1
66+ )
67+ }
68+ item {
69+ PlatformText (
70+ modifier = Modifier .fillParentMaxWidth().padding(horizontal = 16 .dp),
71+ text = " Free up space by clearing the cache or permanently deleting all data."
72+ )
73+ }
74+ if (sizes != null ) {
75+ item {
76+ SizeInfo (
77+ sizes = sizes!! ,
78+ modifier = Modifier .fillParentMaxWidth().padding(16 .dp)
79+ )
80+ }
81+ }
82+ item {
83+ Row (
84+ modifier = Modifier .fillParentMaxWidth().padding(horizontal = 16 .dp),
85+ horizontalArrangement = Arrangement .spacedBy(16 .dp, Alignment .CenterHorizontally ),
86+ verticalAlignment = Alignment .CenterVertically
87+ ) {
88+ PlatformButton (
89+ modifier = Modifier .weight(1F ),
90+ onClick = {
91+ scope.launchVirtualIO {
92+ spaceManager.clearApplicationData()
93+ }
94+ },
95+ colors = PlatformButtonColors .default(
96+ containerColor = Platform .colorScheme().error,
97+ contentColor = Platform .colorScheme().onError
98+ )
99+ ) {
100+ MaterialSymbols .forcedRedraw(
101+ modifier = Modifier .size(ButtonDefaults .IconSize ),
102+ name = MaterialSymbols .DELETE_FOREVER ,
103+ contentDescription = null
104+ )
105+ Spacer (modifier = Modifier .size(ButtonDefaults .IconSpacing ))
106+ PlatformText (text = " Clear Storage" )
107+ }
108+
109+ PlatformButton (
110+ modifier = Modifier .weight(1F ),
111+ onClick = {
112+ scope.launchVirtualIO {
113+ spaceManager.clearCache()
114+ }
115+ }
116+ ) {
117+ MaterialSymbols .forcedRedraw(
118+ modifier = Modifier .size(ButtonDefaults .IconSize ),
119+ name = MaterialSymbols .DELETE ,
120+ contentDescription = null
121+ )
122+ Spacer (modifier = Modifier .size(ButtonDefaults .IconSpacing ))
123+ PlatformText (text = " Clear Cache" )
124+ }
125+ }
126+ }
127+ }
128+ }
129+ }
0 commit comments