Skip to content
This repository was archived by the owner on Jul 2, 2024. It is now read-only.

Commit 2b5f39f

Browse files
committed
Optimize InstallScreen
1 parent d7ff762 commit 2b5f39f

File tree

2 files changed

+8
-25
lines changed

2 files changed

+8
-25
lines changed

app/src/main/kotlin/com/sanmer/mrepo/ui/activity/InstallScreen.kt

+5-21
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ import androidx.compose.animation.scaleIn
99
import androidx.compose.animation.scaleOut
1010
import androidx.compose.foundation.focusable
1111
import androidx.compose.foundation.horizontalScroll
12-
import androidx.compose.foundation.interaction.MutableInteractionSource
13-
import androidx.compose.foundation.interaction.PressInteraction
14-
import androidx.compose.foundation.layout.WindowInsets
1512
import androidx.compose.foundation.layout.fillMaxWidth
1613
import androidx.compose.foundation.layout.padding
1714
import androidx.compose.foundation.lazy.LazyColumn
@@ -56,7 +53,6 @@ import com.sanmer.mrepo.app.Event.Companion.isLoading
5653
import com.sanmer.mrepo.app.Event.Companion.isSucceeded
5754
import com.sanmer.mrepo.ui.component.NavigateUpTopBar
5855
import com.sanmer.mrepo.ui.utils.isScrollingUp
59-
import com.sanmer.mrepo.ui.utils.none
6056
import com.sanmer.mrepo.utils.Utils
6157
import com.sanmer.mrepo.viewmodel.InstallViewModel
6258
import kotlinx.coroutines.launch
@@ -88,14 +84,13 @@ fun InstallScreen(
8884
)
8985

9086
val context = LocalContext.current
91-
val interactionSource = remember { MutableInteractionSource() }
9287
val launcher = rememberLauncherForActivityResult(
9388
ActivityResultContracts.CreateDocument("*/*")
9489
) { uri ->
9590
if (uri == null) return@rememberLauncherForActivityResult
9691

9792
scope.launch {
98-
viewModel.saveLog(context, uri)
93+
viewModel.writeLogsTo(context, uri)
9994
.onSuccess {
10095
val message = context.getString(R.string.install_logs_saved)
10196
snackbarHostState.showSnackbar(
@@ -115,21 +110,12 @@ fun InstallScreen(
115110
}
116111
}
117112

118-
LaunchedEffect(interactionSource) {
119-
interactionSource.interactions.collect { interaction ->
120-
if (interaction is PressInteraction.Release) {
121-
launcher.launch(viewModel.logfile)
122-
}
123-
}
124-
}
125-
126113
Scaffold(
127114
modifier = Modifier
128115
.onKeyEvent {
129116
when (it.key) {
130117
Key.VolumeUp,
131118
Key.VolumeDown -> viewModel.event.isLoading
132-
133119
else -> false
134120
}
135121
}
@@ -138,8 +124,8 @@ fun InstallScreen(
138124
.nestedScroll(scrollBehavior.nestedScrollConnection),
139125
topBar = {
140126
TopBar(
127+
exportLog = { launcher.launch(viewModel.logfile) },
141128
event = viewModel.event,
142-
interactionSource = interactionSource,
143129
scrollBehavior = scrollBehavior
144130
)
145131
},
@@ -158,8 +144,7 @@ fun InstallScreen(
158144
FloatingButton()
159145
}
160146
},
161-
snackbarHost = { SnackbarHost(snackbarHostState) },
162-
contentWindowInsets = WindowInsets.none
147+
snackbarHost = { SnackbarHost(snackbarHostState) }
163148
) {
164149
Console(
165150
list = viewModel.console.asReversed(),
@@ -196,8 +181,8 @@ private fun Console(
196181

197182
@Composable
198183
private fun TopBar(
184+
exportLog: () -> Unit,
199185
event: Event,
200-
interactionSource: MutableInteractionSource,
201186
scrollBehavior: TopAppBarScrollBehavior
202187
) = NavigateUpTopBar(
203188
title = stringResource(id = R.string.install_screen_title),
@@ -211,8 +196,7 @@ private fun TopBar(
211196
actions = {
212197
if (event.isFinished) {
213198
IconButton(
214-
interactionSource = interactionSource,
215-
onClick = {}
199+
onClick = exportLog
216200
) {
217201
Icon(
218202
painter = painterResource(id = R.drawable.device_floppy),

app/src/main/kotlin/com/sanmer/mrepo/viewmodel/InstallViewModel.kt

+3-4
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,15 @@ import com.sanmer.mrepo.app.Event
1212
import com.sanmer.mrepo.provider.ProviderCompat
1313
import com.sanmer.mrepo.repository.ModulesRepository
1414
import com.sanmer.mrepo.repository.UserPreferencesRepository
15-
import com.sanmer.mrepo.utils.extensions.now
1615
import dagger.hilt.android.lifecycle.HiltViewModel
1716
import dev.sanmer.mrepo.compat.stub.IInstallCallback
1817
import kotlinx.coroutines.Dispatchers
1918
import kotlinx.coroutines.flow.first
2019
import kotlinx.coroutines.launch
2120
import kotlinx.coroutines.withContext
22-
import kotlinx.datetime.LocalDateTime
2321
import timber.log.Timber
2422
import java.io.File
23+
import java.time.LocalDateTime
2524
import javax.inject.Inject
2625

2726
@HiltViewModel
@@ -34,13 +33,13 @@ class InstallViewModel @Inject constructor(
3433
var event by mutableStateOf(Event.LOADING)
3534
private set
3635

37-
val logfile get() = "module_install_log_${LocalDateTime.now()}.log"
36+
val logfile get() = "Install_${LocalDateTime.now()}.log"
3837

3938
init {
4039
Timber.d("InstallViewModel init")
4140
}
4241

43-
suspend fun saveLog(context: Context, uri: Uri) = withContext(Dispatchers.IO) {
42+
suspend fun writeLogsTo(context: Context, uri: Uri) = withContext(Dispatchers.IO) {
4443
runCatching {
4544
val cr = context.contentResolver
4645
cr.openOutputStream(uri)?.use {

0 commit comments

Comments
 (0)