Skip to content

Commit 2444712

Browse files
committed
Backup screen scaffold
1 parent ddddefa commit 2444712

File tree

11 files changed

+121
-0
lines changed

11 files changed

+121
-0
lines changed

core/localization/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@
170170
<string name="gallery_tab_original">Original</string>
171171
<string name="gallery_tab_info">Info</string>
172172

173+
<string name="title_backup">Backup</string>
173174
<string name="title_text_to_image">Text to Image</string>
174175
<string name="title_image_to_image">Image to Image</string>
175176
<string name="title_gallery">Gallery</string>

presentation/src/main/java/com/shifthackz/aisdv1/presentation/di/ViewModelModule.kt

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.shifthackz.aisdv1.presentation.modal.extras.ExtrasViewModel
66
import com.shifthackz.aisdv1.presentation.modal.history.InputHistoryViewModel
77
import com.shifthackz.aisdv1.presentation.modal.tag.EditTagViewModel
88
import com.shifthackz.aisdv1.presentation.model.LaunchSource
9+
import com.shifthackz.aisdv1.presentation.screen.backup.BackupViewModel
910
import com.shifthackz.aisdv1.presentation.screen.debug.DebugMenuViewModel
1011
import com.shifthackz.aisdv1.presentation.screen.donate.DonateViewModel
1112
import com.shifthackz.aisdv1.presentation.screen.drawer.DrawerViewModel
@@ -53,6 +54,7 @@ val viewModelModule = module {
5354
viewModelOf(::DonateViewModel)
5455
viewModelOf(::BackgroundWorkViewModel)
5556
viewModelOf(::LoggerViewModel)
57+
viewModelOf(::BackupViewModel)
5658

5759
viewModel { parameters ->
5860
OnBoardingViewModel(

presentation/src/main/java/com/shifthackz/aisdv1/presentation/navigation/router/main/MainRouter.kt

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ interface MainRouter : Router<NavigationEffect> {
1616

1717
fun navigateToServerSetup(source: LaunchSource)
1818

19+
fun navigateToBackup()
20+
1921
fun navigateToGalleryDetails(itemId: Long)
2022

2123
fun navigateToReportImage(itemId: Long)

presentation/src/main/java/com/shifthackz/aisdv1/presentation/navigation/router/main/MainRouterImpl.kt

+4
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ internal class MainRouterImpl : MainRouter {
5959
})
6060
}
6161

62+
override fun navigateToBackup() {
63+
effectSubject.onNext(NavigationEffect.Navigate.Route(Constants.ROUTE_BACKUP))
64+
}
65+
6266
override fun navigateToGalleryDetails(itemId: Long) {
6367
effectSubject.onNext(
6468
NavigationEffect.Navigate.Route(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.shifthackz.aisdv1.presentation.screen.backup
2+
3+
import com.shifthackz.android.core.mvi.MviIntent
4+
5+
interface BackupIntent : MviIntent {
6+
7+
data object NavigateBack : BackupIntent
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
@file:OptIn(ExperimentalMaterial3Api::class)
2+
3+
package com.shifthackz.aisdv1.presentation.screen.backup
4+
5+
import androidx.compose.material.icons.Icons
6+
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
7+
import androidx.compose.material3.CenterAlignedTopAppBar
8+
import androidx.compose.material3.ExperimentalMaterial3Api
9+
import androidx.compose.material3.Icon
10+
import androidx.compose.material3.IconButton
11+
import androidx.compose.material3.MaterialTheme
12+
import androidx.compose.material3.Scaffold
13+
import androidx.compose.material3.Text
14+
import androidx.compose.runtime.Composable
15+
import androidx.compose.ui.Modifier
16+
import androidx.compose.ui.res.stringResource
17+
import com.shifthackz.aisdv1.core.localization.R
18+
import com.shifthackz.aisdv1.core.ui.MviComponent
19+
import org.koin.androidx.compose.koinViewModel
20+
21+
@Composable
22+
fun BackupScreen() {
23+
MviComponent(
24+
viewModel = koinViewModel<BackupViewModel>(),
25+
) { state, processIntent ->
26+
BackupScreenContent(
27+
state = state,
28+
processIntent = processIntent,
29+
)
30+
}
31+
}
32+
33+
@Composable
34+
private fun BackupScreenContent(
35+
modifier: Modifier = Modifier,
36+
state: BackupState,
37+
processIntent: (BackupIntent) -> Unit,
38+
) {
39+
Scaffold(
40+
modifier = modifier,
41+
topBar = {
42+
CenterAlignedTopAppBar(
43+
title = {
44+
Text(
45+
text = stringResource(id = R.string.title_backup),
46+
style = MaterialTheme.typography.headlineMedium,
47+
)
48+
},
49+
navigationIcon = {
50+
IconButton(
51+
onClick = { processIntent(BackupIntent.NavigateBack) },
52+
content = {
53+
Icon(
54+
Icons.AutoMirrored.Outlined.ArrowBack,
55+
contentDescription = "Back button",
56+
)
57+
},
58+
)
59+
},
60+
)
61+
}
62+
) { paddingValues ->
63+
64+
}
65+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.shifthackz.aisdv1.presentation.screen.backup
2+
3+
import androidx.compose.runtime.Immutable
4+
import com.shifthackz.android.core.mvi.MviState
5+
6+
@Immutable
7+
data class BackupState(
8+
val s: Int = -1,
9+
) : MviState
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.shifthackz.aisdv1.presentation.screen.backup
2+
3+
import com.shifthackz.aisdv1.core.viewmodel.MviRxViewModel
4+
import com.shifthackz.aisdv1.presentation.navigation.router.main.MainRouter
5+
import com.shifthackz.android.core.mvi.EmptyEffect
6+
7+
class BackupViewModel(
8+
private val mainRouter: MainRouter,
9+
) : MviRxViewModel<BackupState, BackupIntent, EmptyEffect>() {
10+
11+
override val initialState = BackupState()
12+
13+
override fun processIntent(intent: BackupIntent) {
14+
when (intent) {
15+
BackupIntent.NavigateBack -> mainRouter.navigateBack()
16+
}
17+
}
18+
}

presentation/src/main/java/com/shifthackz/aisdv1/presentation/screen/settings/SettingsIntent.kt

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ sealed interface SettingsIntent : MviIntent {
1313

1414
data object NavigateConfiguration : SettingsIntent
1515

16+
data object NavigateBackup : SettingsIntent
17+
1618
data object NavigateDeveloperMode : SettingsIntent
1719

1820
sealed interface SdModel : SettingsIntent {

presentation/src/main/java/com/shifthackz/aisdv1/presentation/screen/settings/SettingsScreen.kt

+8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import androidx.compose.material.icons.Icons
2424
import androidx.compose.material.icons.filled.AccountTree
2525
import androidx.compose.material.icons.filled.AllInclusive
2626
import androidx.compose.material.icons.filled.AutoFixNormal
27+
import androidx.compose.material.icons.filled.Backup
2728
import androidx.compose.material.icons.filled.Circle
2829
import androidx.compose.material.icons.filled.Code
2930
import androidx.compose.material.icons.filled.ColorLens
@@ -243,6 +244,13 @@ private fun ContentSettingsState(
243244
}.asUiText(),
244245
onClick = { processIntent(SettingsIntent.NavigateConfiguration) },
245246
)
247+
SettingsItem(
248+
modifier = itemModifier,
249+
loading = state.loading,
250+
startIcon = Icons.Default.Backup,
251+
text = LocalizationR.string.title_backup.asUiText(),
252+
onClick = { processIntent(SettingsIntent.NavigateBackup) },
253+
)
246254
if (state.showStabilityAiCredits) SettingsItem(
247255
modifier = itemModifier,
248256
loading = state.loading,

presentation/src/main/java/com/shifthackz/aisdv1/presentation/screen/settings/SettingsViewModel.kt

+2
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ class SettingsViewModel(
118118
LaunchSource.SETTINGS
119119
)
120120

121+
SettingsIntent.NavigateBackup -> mainRouter.navigateToBackup()
122+
121123
SettingsIntent.NavigateDeveloperMode -> mainRouter.navigateToDebugMenu()
122124

123125
SettingsIntent.SdModel.OpenChooser -> updateState {

0 commit comments

Comments
 (0)