Skip to content

Commit bca79b6

Browse files
committed
migrate to new download system in legacy flows part3
1 parent aa590e6 commit bca79b6

File tree

9 files changed

+154
-303
lines changed

9 files changed

+154
-303
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class CreatePartFlow(private val desiredStartSector: Long): WizardFlow() {
8282
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
8383
NavButton("") {}
8484
) {
85-
WizardDownloader(c.vm)
85+
WizardDownloader(c.vm, "flash")
8686
}, WizardPage("flash",
8787
NavButton("") {},
8888
NavButton("") {}

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

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
package org.andbootmgr.app
22

3-
import android.net.Uri
43
import android.os.Handler
54
import android.os.Looper
65
import android.util.Log
76
import android.widget.Toast
87
import androidx.compose.foundation.layout.Arrangement
98
import androidx.compose.foundation.layout.Column
10-
import androidx.compose.foundation.layout.defaultMinSize
119
import androidx.compose.foundation.layout.fillMaxSize
1210
import androidx.compose.foundation.layout.padding
13-
import androidx.compose.material3.Button
14-
import androidx.compose.material3.Icon
1511
import androidx.compose.material3.MaterialTheme
1612
import androidx.compose.material3.Text
1713
import androidx.compose.material3.TextField
@@ -23,8 +19,6 @@ import androidx.compose.runtime.remember
2319
import androidx.compose.runtime.setValue
2420
import androidx.compose.ui.Alignment
2521
import androidx.compose.ui.Modifier
26-
import androidx.compose.ui.platform.LocalContext
27-
import androidx.compose.ui.res.painterResource
2822
import androidx.compose.ui.res.stringResource
2923
import androidx.compose.ui.text.style.TextAlign
3024
import androidx.compose.ui.unit.dp
@@ -46,7 +40,7 @@ import java.net.URL
4640

4741
class DroidBootFlow : WizardFlow() {
4842
override fun get(vm: WizardActivityState): List<IWizardPage> {
49-
val booted = vm.deviceInfo.isBooted(vm.logic)
43+
val d = DroidBootFlowDataHolder(vm)
5044
return listOf(WizardPage("start",
5145
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
5246
NavButton(vm.activity.getString(R.string.next)) { it.navigate("input") })
@@ -56,21 +50,25 @@ class DroidBootFlow : WizardFlow() {
5650
NavButton(vm.activity.getString(R.string.prev)) { it.navigate("start") },
5751
NavButton("") {}
5852
) {
59-
Input(vm)
53+
Input(d)
6054
}, WizardPage("dload",
6155
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
6256
NavButton("") {}
6357
) {
64-
WizardDownloader(vm)
58+
WizardDownloader(vm, "flash")
6559
}, WizardPage("flash",
6660
NavButton("") {},
6761
NavButton("") {}
6862
) {
69-
Flash(vm)
63+
Flash(d)
7064
})
7165
}
7266
}
7367

68+
class DroidBootFlowDataHolder(val vm: WizardActivityState) {
69+
var osName by mutableStateOf(vm.activity.getString(R.string.android))
70+
}
71+
7472
@Composable
7573
private fun Start(vm: WizardActivityState) {
7674
Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center,
@@ -118,10 +116,10 @@ fun LoadDroidBootJson(vm: WizardActivityState, content: @Composable () -> Unit)
118116
val i = json.getJSONObject("installScript")
119117
val url = i.getString("url")
120118
val sha = i.optString("sha256")
121-
vm.inetAvailable["install"] = WizardActivityState.Downloadable(
119+
vm.inetAvailable["_install.sh_"] = WizardActivityState.Downloadable(
122120
url, sha, vm.activity.getString(R.string.installer_sh)
123121
)
124-
vm.idNeeded.add("install")
122+
vm.idNeeded.add("_install.sh_")
125123
}
126124
loading = false
127125
} catch (e: Exception) {
@@ -143,28 +141,24 @@ fun LoadDroidBootJson(vm: WizardActivityState, content: @Composable () -> Unit)
143141
}
144142

145143
@Composable
146-
private fun Input(vm: WizardActivityState) {
147-
LoadDroidBootJson(vm) {
144+
private fun Input(d: DroidBootFlowDataHolder) {
145+
LoadDroidBootJson(d.vm) {
148146
Column(
149147
horizontalAlignment = Alignment.CenterHorizontally,
150148
verticalArrangement = Arrangement.Center,
151149
modifier = Modifier.fillMaxSize()
152150
) {
153-
LaunchedEffect(Unit) { // TODO can't I do this better?
154-
if (vm.texts.isBlank())
155-
vm.texts = vm.activity.getString(R.string.android)
156-
}
157-
val e = vm.texts.isBlank() || !vm.texts.matches(Regex("[\\dA-Za-z]+"))
151+
val e = d.osName.isBlank() || !d.osName.matches(Regex("[\\dA-Za-z]+"))
158152

159153
Text(
160154
stringResource(R.string.enter_name_for_current),
161155
textAlign = TextAlign.Center,
162156
modifier = Modifier.padding(vertical = 5.dp)
163157
)
164158
TextField(
165-
value = vm.texts,
159+
value = d.osName,
166160
onValueChange = {
167-
vm.texts = it
161+
d.osName = it
168162
},
169163
label = { Text(stringResource(R.string.os_name)) },
170164
isError = e
@@ -176,20 +170,20 @@ private fun Input(vm: WizardActivityState) {
176170
}
177171
LaunchedEffect(e) {
178172
if (e) {
179-
vm.nextText = ""
180-
vm.onNext = {}
173+
d.vm.nextText = ""
174+
d.vm.onNext = {}
181175
} else {
182-
vm.nextText = vm.activity.getString(R.string.next)
183-
vm.onNext = { it.navigate(if (vm.idNeeded.isNotEmpty()) "dload" else "flash") }
176+
d.vm.nextText = d.vm.activity.getString(R.string.next)
177+
d.vm.onNext = { it.navigate(if (d.vm.idNeeded.isNotEmpty()) "dload" else "flash") }
184178
}
185179
}
186180
}
187181
}
188182
}
189183

190184
@Composable
191-
private fun Flash(vm: WizardActivityState) {
192-
val flashType = "DroidBootFlashType"
185+
private fun Flash(d: DroidBootFlowDataHolder) {
186+
val vm = d.vm
193187
Terminal(logFile = "blflash_${System.currentTimeMillis()}.txt") { terminal ->
194188
vm.logic.extractToolkit(terminal)
195189
terminal.add(vm.activity.getString(R.string.term_preparing_fs))
@@ -276,7 +270,7 @@ private fun Flash(vm: WizardActivityState) {
276270
}
277271
val tmpFile = if (vm.deviceInfo.postInstallScript) {
278272
val tmpFile = createTempFileSu("abm", ".sh", vm.logic.rootTmpDir)
279-
vm.copyPriv(vm.chosen["install"]!!.openInputStream(vm), tmpFile)
273+
vm.copyPriv(vm.chosen["_install.sh_"]!!.openInputStream(vm), tmpFile)
280274
tmpFile.setExecutable(true)
281275
tmpFile
282276
} else null
@@ -287,7 +281,7 @@ private fun Flash(vm: WizardActivityState) {
287281
db["timeout"] = "5"
288282
db.exportToFile(File(vm.logic.abmDb, "db.conf"))
289283
val entry = ConfigFile()
290-
entry["title"] = vm.texts.trim()
284+
entry["title"] = d.osName.trim()
291285
entry["linux"] = "null"
292286
entry["initrd"] = "null"
293287
entry["dtb"] = "null"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class FixDroidBootFlow(): WizardFlow() {
2828
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
2929
NavButton("") {}
3030
) {
31-
WizardDownloader(vm)
31+
WizardDownloader(vm, "flash")
3232
}, WizardPage("flash",
3333
NavButton("") {},
3434
NavButton("") {}
@@ -62,7 +62,7 @@ private fun Flash(vm: WizardActivityState) {
6262
vm.logic.extractToolkit(terminal)
6363
val tmpFile = if (vm.deviceInfo.postInstallScript) {
6464
val tmpFile = createTempFileSu("abm", ".sh", vm.logic.rootTmpDir)
65-
vm.copyPriv(vm.chosen["install"]!!.openInputStream(vm), tmpFile)
65+
vm.copyPriv(vm.chosen["_install.sh_"]!!.openInputStream(vm), tmpFile)
6666
tmpFile.setExecutable(true)
6767
tmpFile
6868
} else null

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import kotlinx.coroutines.CoroutineScope
6262
import kotlinx.coroutines.Dispatchers
6363
import kotlinx.coroutines.async
6464
import kotlinx.coroutines.launch
65+
import kotlinx.coroutines.runBlocking
6566
import kotlinx.coroutines.withContext
6667
import org.andbootmgr.app.themes.ThemeViewModel
6768
import org.andbootmgr.app.themes.Themes
@@ -81,8 +82,10 @@ class MainActivityState(val activity: MainActivity?) {
8182
var logic: DeviceLogic? = null
8283

8384
private fun loadDefaultCfg() {
84-
CoroutineScope(Dispatchers.IO).launch {
85-
val cfg = ConfigFile.importFromFile(logic!!.abmDbConf).toMap()
85+
runBlocking {
86+
val cfg = withContext(Dispatchers.IO) {
87+
ConfigFile.importFromFile(logic!!.abmDbConf).toMap()
88+
}
8689
withContext(Dispatchers.Main) {
8790
defaultCfg.clear()
8891
defaultCfg.putAll(cfg)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class UpdateDroidBootFlow: WizardFlow() {
2828
NavButton(vm.activity.getString(R.string.cancel)) { it.finish() },
2929
NavButton("") {}
3030
) {
31-
WizardDownloader(vm)
31+
WizardDownloader(vm, "flash")
3232
}, WizardPage("flash",
3333
NavButton("") {},
3434
NavButton("") {}
@@ -62,7 +62,7 @@ private fun Flash(vm: WizardActivityState) {
6262
vm.logic.extractToolkit(terminal)
6363
val tmpFile = if (vm.deviceInfo.postInstallScript) {
6464
val tmpFile = createTempFileSu("abm", ".sh", vm.logic.rootTmpDir)
65-
vm.copyPriv(vm.chosen["install"]!!.openInputStream(vm), tmpFile)
65+
vm.copyPriv(vm.chosen["_install.sh_"]!!.openInputStream(vm), tmpFile)
6666
tmpFile.setExecutable(true)
6767
tmpFile
6868
} else null

0 commit comments

Comments
 (0)