Skip to content

Commit d2db999

Browse files
committed
refactoring
1 parent d812530 commit d2db999

File tree

12 files changed

+143
-170
lines changed

12 files changed

+143
-170
lines changed

app/src/main/java/org/andbootmgr/app/BackupRestoreFlow.kt

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import org.andbootmgr.app.util.Terminal
2323
import java.io.File
2424
import java.io.IOException
2525

26-
class BackupRestoreWizardPageFactory(private val vm: WizardActivityState) {
27-
fun get(): List<IWizardPage> {
28-
val c = CreateBackupDataHolder(vm)
26+
class BackupRestoreFlow(private val partitionId: Int): WizardFlow() {
27+
override fun get(vm: WizardActivityState): List<IWizardPage> {
28+
val c = CreateBackupDataHolder(vm, partitionId)
2929
return listOf(WizardPage("start",
3030
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
3131
NavButton("") {})
@@ -45,8 +45,7 @@ class BackupRestoreWizardPageFactory(private val vm: WizardActivityState) {
4545
}
4646
}
4747

48-
private class CreateBackupDataHolder(val vm: WizardActivityState) {
49-
var pi: Int = -1
48+
private class CreateBackupDataHolder(val vm: WizardActivityState, val pi: Int) {
5049
var action: Int = 0
5150
var path: Uri? = null
5251
var meta: SDUtils.SDPartitionMeta? = null
@@ -56,7 +55,6 @@ private class CreateBackupDataHolder(val vm: WizardActivityState) {
5655
private fun ChooseAction(c: CreateBackupDataHolder) {
5756
LaunchedEffect(Unit) {
5857
c.meta = SDUtils.generateMeta(c.vm.deviceInfo)
59-
c.pi = c.vm.mvm.wizardCompatPid!!
6058
}
6159

6260
Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center,
@@ -95,21 +93,17 @@ private fun SelectDroidBoot(c: CreateBackupDataHolder) {
9593
else -> ""
9694
}
9795
)
96+
val next = { it: Uri ->
97+
c.path = it
98+
nextButtonAvailable = true
99+
c.vm.nextText = c.vm.activity.getString(R.string.next)
100+
c.vm.onNext = { i -> i.navigate("go") }
101+
}
98102
Button(onClick = {
99103
if (c.action != 1) {
100-
c.vm.activity.chooseFile("*/*") {
101-
c.path = it
102-
nextButtonAvailable = true
103-
c.vm.nextText = c.vm.activity.getString(R.string.next)
104-
c.vm.onNext = { i -> i.navigate("go") }
105-
}
104+
c.vm.activity.chooseFile("*/*", next)
106105
} else {
107-
c.vm.activity.createFile("${c.meta!!.dumpKernelPartition(c.pi).name}.img") {
108-
c.path = it
109-
nextButtonAvailable = true
110-
c.vm.nextText = c.vm.activity.getString(R.string.next)
111-
c.vm.onNext = { i -> i.navigate("go") }
112-
}
106+
c.vm.activity.createFile("${c.meta!!.dumpKernelPartition(c.pi).name}.img", next)
113107
}
114108
}) {
115109
Text(stringResource(if (c.action != 1) R.string.choose_file else R.string.create_file))

app/src/main/java/org/andbootmgr/app/CreatePartFlow.kt

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ import java.math.BigDecimal
4242
import java.net.URL
4343
import java.util.concurrent.TimeUnit
4444

45-
class CreatePartWizardPageFactory(private val vm: WizardActivityState) {
46-
fun get(): List<IWizardPage> {
47-
val c = CreatePartDataHolder(vm)
45+
class CreatePartFlow(private val desiredStartSector: Long): WizardFlow() {
46+
override fun get(vm: WizardActivityState): List<IWizardPage> {
47+
val c = CreatePartDataHolder(vm, desiredStartSector)
4848
return listOf(WizardPage("start",
4949
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
5050
NavButton("") {}
@@ -120,21 +120,20 @@ internal interface ProgressListener {
120120
fun update(bytesRead: Long, contentLength: Long, done: Boolean)
121121
}
122122

123-
private class CreatePartDataHolder(val vm: WizardActivityState): ProgressListener {
123+
private class CreatePartDataHolder(val vm: WizardActivityState, private val desiredStartSector: Long): ProgressListener {
124124

125125
var meta: SDUtils.SDPartitionMeta? = null
126126
lateinit var p: SDUtils.Partition.FreeSpace
127127
lateinit var l: String
128128
lateinit var u: String
129129
var f = 0L
130130
var t: String? = null
131-
var noobMode: Boolean = false
132131
var scriptInet: String? = null
133132
var scriptShaInet: String? = null
134133

135134
var painter: @Composable (() -> Painter)? = null
136-
var rtype by mutableStateOf("")
137-
var cmdline by mutableStateOf("")
135+
var rtype = ""
136+
var cmdline = ""
138137
val dmaMeta = ArrayMap<String, String>()
139138
val count = mutableIntStateOf(0)
140139
val intVals = mutableStateListOf<Long>()
@@ -156,8 +155,8 @@ private class CreatePartDataHolder(val vm: WizardActivityState): ProgressListene
156155
}.build()
157156
var pl: ProgressListener? = null
158157
var cl: (() -> Unit)? = null
159-
lateinit var t2: MutableState<String>
160-
val t3 = mutableStateOf("")
158+
var t2 by mutableStateOf("")
159+
var t3 by mutableStateOf("")
161160
var availableSize: Long = 0
162161

163162
override fun update(bytesRead: Long, contentLength: Long, done: Boolean) {
@@ -179,12 +178,9 @@ private class CreatePartDataHolder(val vm: WizardActivityState): ProgressListene
179178
idNeeded.removeAll(idUnneeded)
180179
}
181180

182-
@SuppressLint("ComposableNaming")
183-
@Composable
184181
fun lateInit() {
185-
noobMode = LocalContext.current.getSharedPreferences("abm", 0).getBoolean("noob_mode", BuildConfig.DEFAULT_NOOB_MODE)
186182
meta = SDUtils.generateMeta(vm.deviceInfo)
187-
p = (meta?.s?.find { vm.mvm.wizardCompatSid == it.startSector } as SDUtils.Partition.FreeSpace?)!!
183+
p = (meta?.s?.find { desiredStartSector == it.startSector } as SDUtils.Partition.FreeSpace?)!!
188184
}
189185

190186
fun painterFromRtype(type: String): @Composable () -> Painter {
@@ -263,7 +259,7 @@ private fun Start(c: CreatePartDataHolder) {
263259
}
264260
}
265261

266-
if (remember { ctx.getSharedPreferences("abm", 0).getBoolean("noob_mode", BuildConfig.DEFAULT_NOOB_MODE) }) {
262+
if (c.vm.mvm.noobMode) {
267263
Card(
268264
modifier = Modifier
269265
.fillMaxWidth()
@@ -471,12 +467,14 @@ private fun Os(c: CreatePartDataHolder) {
471467
a.sortWith(Comparator.comparingInt { c -> c.substring(3, c.length - 5).toInt() })
472468
val b = if (a.size > 0) a.last().substring(3, a.last().length - 5).toInt() + 1 else 0
473469
c.t2 = mutableStateOf("rom$b")
474-
c.t3.value = c.dmaMeta["name"]!!
470+
c.t3 = c.dmaMeta["name"]!!
475471
}
476472

477473
val s = rememberScrollState()
478474
var expanded by remember { mutableIntStateOf(0) }
479-
var e by remember { mutableStateOf(false) }
475+
val et2 by remember { derivedStateOf { !(c.t2.matches(Regex("\\A\\p{ASCII}*\\z"))) } }
476+
val et3 by remember { derivedStateOf { !(c.t3.matches(Regex("\\A\\p{ASCII}*\\z"))) } }
477+
val e = et2 || et3
480478
Column(
481479
Modifier
482480
.fillMaxSize()
@@ -502,7 +500,7 @@ private fun Os(c: CreatePartDataHolder) {
502500
}
503501
}
504502
}
505-
if (!c.noobMode)
503+
if (!c.vm.mvm.noobMode)
506504
Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center, modifier = Modifier
507505
.fillMaxWidth()
508506
.padding(5.dp)
@@ -516,32 +514,26 @@ private fun Os(c: CreatePartDataHolder) {
516514
Icon(painterResource(id = R.drawable.ic_baseline_keyboard_arrow_down_24), stringResource(R.string.expand_content_desc))
517515
}
518516
}
519-
if (expanded == 1 || c.noobMode) {
517+
if (expanded == 1 || c.vm.mvm.noobMode) {
520518
Column(
521519
Modifier
522520
.fillMaxWidth()
523521
.padding(5.dp)
524522
) {
525-
var et2 by remember { mutableStateOf(false) }
526-
var et3 by remember { mutableStateOf(false) }
527-
if (!c.noobMode)
528-
TextField(value = c.t2.value, onValueChange = {
529-
c.t2.value = it
530-
et2 = !(c.t2.value.matches(Regex("\\A\\p{ASCII}*\\z")))
531-
e = et2 || et3
523+
if (!c.vm.mvm.noobMode)
524+
TextField(value = c.t2, onValueChange = {
525+
c.t2 = it
532526
}, isError = et2, label = {
533527
Text(stringResource(R.string.internal_id))
534528
})
535-
TextField(value = c.t3.value, onValueChange = {
536-
c.t3.value = it
537-
et3 = !(c.t3.value.matches(Regex("\\A\\p{ASCII}*\\z")))
538-
e = et2 || et3
529+
TextField(value = c.t3, onValueChange = {
530+
c.t3 = it
539531
}, isError = et3, label = {
540532
Text(stringResource(R.string.name_in_boot))
541533
})
542534
}
543535
}
544-
if (!c.noobMode)
536+
if (!c.vm.mvm.noobMode)
545537
Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center, modifier = Modifier
546538
.fillMaxWidth()
547539
.padding(5.dp)
@@ -910,8 +902,8 @@ private fun Flash(c: CreatePartDataHolder) {
910902
c.vm.logic.extractToolkit(terminal)
911903
if (c.t == null) { // OS install
912904
val parts = ArrayMap<Int, Int>()
913-
val fn = c.t2.value
914-
val gn = c.t3.value
905+
val fn = c.t2
906+
val gn = c.t3
915907
terminal.add(vm.activity.getString(R.string.term_f_name, fn))
916908
terminal.add(vm.activity.getString(R.string.term_g_name, gn))
917909
val tmpFile = c.chosen["_install.sh_"]!!.toFile(vm)

app/src/main/java/org/andbootmgr/app/DroidBootFlow.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ import java.io.File
4444
import java.io.IOException
4545
import java.net.URL
4646

47-
class DroidBootWizardPageFactory(private val vm: WizardActivityState) {
48-
fun get(): List<IWizardPage> {
47+
class DroidBootFlow() : WizardFlow() {
48+
override fun get(vm: WizardActivityState): List<IWizardPage> {
4949
return listOf(WizardPage("start",
5050
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
5151
NavButton(vm.activity.getString(R.string.next)) { it.navigate("input") })

app/src/main/java/org/andbootmgr/app/FixDroidBootFlow.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import org.andbootmgr.app.util.Terminal
1616
import java.io.File
1717
import java.io.IOException
1818

19-
class FixDroidBootWizardPageFactory(private val vm: WizardActivityState) {
20-
fun get(): List<IWizardPage> {
19+
class FixDroidBootFlow(): WizardFlow() {
20+
override fun get(vm: WizardActivityState): List<IWizardPage> {
2121
return listOf(WizardPage("start",
2222
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
2323
NavButton(vm.activity.getString(R.string.next)) { it.navigate(if (vm.deviceInfo.postInstallScript) "shSel" else "select") })

app/src/main/java/org/andbootmgr/app/MainActivity.kt

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import androidx.activity.result.contract.ActivityResultContracts
1414
import androidx.compose.foundation.layout.Box
1515
import androidx.compose.foundation.layout.Column
1616
import androidx.compose.foundation.layout.PaddingValues
17-
import androidx.compose.foundation.layout.Row
1817
import androidx.compose.foundation.layout.fillMaxSize
1918
import androidx.compose.foundation.layout.fillMaxWidth
2019
import androidx.compose.foundation.layout.padding
@@ -34,7 +33,6 @@ import androidx.compose.material3.ModalNavigationDrawer
3433
import androidx.compose.material3.NavigationDrawerItem
3534
import androidx.compose.material3.Scaffold
3635
import androidx.compose.material3.Text
37-
import androidx.compose.material3.TextButton
3836
import androidx.compose.material3.TopAppBarDefaults
3937
import androidx.compose.material3.rememberDrawerState
4038
import androidx.compose.runtime.Composable
@@ -68,36 +66,12 @@ import org.andbootmgr.app.themes.ThemeViewModel
6866
import org.andbootmgr.app.themes.Themes
6967
import org.andbootmgr.app.util.AbmTheme
7068
import org.andbootmgr.app.util.ConfigFile
71-
import org.andbootmgr.app.util.SDUtils
7269
import org.andbootmgr.app.util.StayAliveService
7370
import org.andbootmgr.app.util.Terminal
7471
import java.util.concurrent.atomic.AtomicBoolean
7572

7673
class MainActivityState(val activity: MainActivity?) {
77-
var wizardCompat by mutableStateOf<String?>(null)
78-
79-
fun startFlow(flow: String) {
80-
wizardCompat = flow
81-
}
82-
83-
var wizardCompatSid: Long? = null
84-
fun startCreateFlow(freeSpace: SDUtils.Partition.FreeSpace) {
85-
wizardCompatSid = freeSpace.startSector
86-
startFlow("create_part")
87-
}
88-
89-
var wizardCompatE: String? = null
90-
fun startUpdateFlow(e: String) {
91-
wizardCompatE = e
92-
startFlow("update")
93-
}
94-
95-
var wizardCompatPid: Int? = null
96-
fun startBackupAndRestoreFlow(partition: SDUtils.Partition) {
97-
wizardCompatPid = partition.id
98-
startFlow("backup_restore")
99-
}
100-
74+
var currentWizardFlow by mutableStateOf<WizardFlow?>(null)
10175
var noobMode by mutableStateOf(false)
10276
var deviceInfo: DeviceInfo? = null
10377
val theme = ThemeViewModel(this)
@@ -284,8 +258,8 @@ class MainActivity : ComponentActivity() {
284258
}
285259
}
286260
}
287-
} else if (vm.wizardCompat != null) {
288-
WizardCompat(vm, vm.wizardCompat!!)
261+
} else if (vm.currentWizardFlow != null) {
262+
WizardCompat(vm, vm.currentWizardFlow!!)
289263
} else {
290264
val navController = rememberNavController()
291265
AppContent(vm, navController) {

app/src/main/java/org/andbootmgr/app/Settings.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ fun Settings(vm: MainActivityState) {
8686
Text(stringResource(R.string.save_changes))
8787
}
8888
Button(onClick = {
89-
vm.startFlow("update_droidboot")
89+
vm.currentWizardFlow = UpdateDroidBootFlow()
9090
}) {
9191
Text(stringResource(R.string.update_droidboot))
9292
}

app/src/main/java/org/andbootmgr/app/Start.kt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,15 @@ fun Start(vm: MainActivityState) {
151151
} else if (metaOnSd && !sdPresent) {
152152
Text(stringResource(R.string.need_sd), textAlign = TextAlign.Center)
153153
} else if (!installed && !mounted) {
154-
Button(onClick = { vm.startFlow("droidboot") }) {
154+
Button(onClick = {
155+
vm.currentWizardFlow = DroidBootFlow()
156+
}) {
155157
Text(stringResource(if (metaOnSd) R.string.setup_sd else R.string.install))
156158
}
157159
} else if (!booted && mounted) {
158160
Text(stringResource(R.string.installed_not_booted), textAlign = TextAlign.Center)
159161
Button(onClick = {
160-
vm.startFlow("fix_droidboot")
162+
vm.currentWizardFlow = FixDroidBootFlow()
161163
}) {
162164
Text(stringResource(R.string.repair_droidboot))
163165
}
@@ -462,11 +464,15 @@ private fun PartTool(vm: MainActivityState) {
462464
}
463465
}
464466
}
465-
Button(onClick = { vm.startBackupAndRestoreFlow(p) }) {
467+
Button(onClick = {
468+
vm.currentWizardFlow = BackupRestoreFlow(p.id)
469+
}) {
466470
Text(stringResource(R.string.backupnrestore))
467471
}
468472
} else {
469-
Button(onClick = { vm.startCreateFlow(p as SDUtils.Partition.FreeSpace) }) {
473+
Button(onClick = {
474+
vm.currentWizardFlow = CreatePartFlow(p.startSector)
475+
}) {
470476
Text(stringResource(R.string.create))
471477
}
472478
}
@@ -715,8 +721,9 @@ private fun PartTool(vm: MainActivityState) {
715721
Column(Modifier.verticalScroll(rememberScrollState())) {
716722
Button(
717723
onClick = {
718-
if (e.has("xupdate") && !e["xupdate"].isNullOrBlank())
719-
vm.startUpdateFlow(entries!![e]!!.absolutePath)
724+
if (e.has("xupdate") && !e["xupdate"].isNullOrBlank()) {
725+
vm.currentWizardFlow = UpdateFlow(entries!![e]!!.name)
726+
}
720727
}, enabled = e.has("xupdate") && !e["xupdate"].isNullOrBlank()) {
721728
Text(stringResource(R.string.update))
722729
}

app/src/main/java/org/andbootmgr/app/UpdateDroidBootFlow.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import org.andbootmgr.app.util.Terminal
1616
import java.io.File
1717
import java.io.IOException
1818

19-
class UpdateDroidBootWizardPageFactory(private val vm: WizardActivityState) {
20-
fun get(): List<IWizardPage> {
19+
class UpdateDroidBootFlow(): WizardFlow() {
20+
override fun get(vm: WizardActivityState): List<IWizardPage> {
2121
return listOf(WizardPage("start",
2222
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
2323
NavButton(vm.activity.getString(R.string.next)) { it.navigate(if (vm.deviceInfo.postInstallScript) "shSel" else "select") })

0 commit comments

Comments
 (0)