11package com.github.capntrips.kernelflasher.ui.screens.slot
22
3+ import android.net.Uri
4+ import android.provider.OpenableColumns
5+ import android.util.Log
36import androidx.activity.compose.BackHandler
47import androidx.compose.animation.AnimatedVisibility
58import androidx.compose.animation.ExperimentalAnimationApi
@@ -36,13 +39,15 @@ import androidx.compose.ui.unit.dp
3639import androidx.compose.ui.text.font.FontWeight
3740import androidx.navigation.NavController
3841import com.github.capntrips.kernelflasher.R
42+ import com.github.capntrips.kernelflasher.SharedViewModels
3943import com.github.capntrips.kernelflasher.common.PartitionUtil
4044import com.github.capntrips.kernelflasher.ui.components.DataCard
4145import com.github.capntrips.kernelflasher.ui.components.FlashButton
4246import com.github.capntrips.kernelflasher.ui.components.FlashList
4347import com.github.capntrips.kernelflasher.ui.components.SlotCard
4448import com.github.capntrips.kernelflasher.ui.components.DialogButton
4549import kotlinx.serialization.ExperimentalSerializationApi
50+ import java.io.File
4651
4752@ExperimentalAnimationApi
4853@ExperimentalMaterialApi
@@ -62,9 +67,7 @@ fun ColumnScope.SlotFlashContent(
6267
6368 BackHandler (enabled = ((currentRoute.endsWith(" /flash/ak3" ) ||
6469 currentRoute.endsWith(" /flash/image/flash" ) ||
65- currentRoute.endsWith(" /backup/backup" )) && isRefreshing.value)) {
66-
67- }
70+ currentRoute.endsWith(" /backup/backup" )) && isRefreshing.value)) { }
6871
6972 if (! listOf (" /flash/ak3" , " /flash/image/flash" , " /backup/backup" ).any { navController.currentDestination!! .route!! .endsWith(it) }) {
7073 SlotCard (
@@ -79,22 +82,19 @@ fun ColumnScope.SlotFlashContent(
7982 DataCard (stringResource(R .string.flash))
8083 Spacer (Modifier .height(5 .dp))
8184 FlashButton (stringResource(R .string.flash_ak3_zip), " zip" ,callback = { uri ->
82- navController.navigate(" slot$slotSuffix /flash/ak3" ) {
83- popUpTo(" slot$slotSuffix " )
84- }
85- viewModel.flashAk3(context, uri)
85+ viewModel.flashActionType = " flashAk3"
86+ viewModel.flashActionURI = uri
87+ viewModel.showConfirmDialog()
8688 })
8789 FlashButton (stringResource(R .string.flash_ak3_zip_mkbootfs), " zip" ,callback = { uri ->
88- navController.navigate(" slot$slotSuffix /flash/ak3" ) {
89- popUpTo(" slot$slotSuffix " )
90- }
91- viewModel.flashAk3_mkbootfs(context, uri)
90+ viewModel.flashActionType = " flashAk3_mkbootfs"
91+ viewModel.flashActionURI = uri
92+ viewModel.showConfirmDialog()
9293 })
9394 FlashButton (stringResource(R .string.flash_ksu_lkm), " ko" ,callback = { uri ->
94- navController.navigate(" slot$slotSuffix /flash/image/flash" ) {
95- popUpTo(" slot$slotSuffix " )
96- }
97- viewModel.flashKsuDriver(context, uri)
95+ viewModel.flashActionType = " flashKsuDriver"
96+ viewModel.flashActionURI = uri
97+ viewModel.showConfirmDialog()
9898 })
9999 OutlinedButton (
100100 modifier = Modifier
@@ -111,10 +111,10 @@ fun ColumnScope.SlotFlashContent(
111111 Spacer (Modifier .height(5 .dp))
112112 for (partitionName in PartitionUtil .AvailablePartitions ) {
113113 FlashButton (partitionName, " img" ,callback = { uri ->
114- navController.navigate( " slot $slotSuffix /flash/image/flash " ) {
115- popUpTo( " slot $slotSuffix " )
116- }
117- viewModel.flashImage(context, uri, partitionName )
114+ viewModel.flashActionType = " flashImage "
115+ viewModel.flashActionURI = uri
116+ viewModel.flashActionPartName = partitionName
117+ viewModel.showConfirmDialog( )
118118 })
119119 }
120120 } else if (navController.currentDestination!! .route!! .endsWith(" /backup" )) {
@@ -163,7 +163,9 @@ fun ColumnScope.SlotFlashContent(
163163 Text (" " )
164164 FlashList (
165165 stringResource(if (navController.currentDestination!! .route!! .endsWith(" /backup/backup" )) R .string.backup else R .string.flash),
166- if (navController.currentDestination!! .route!! .contains(" ak3" )) viewModel.uiPrintedOutput else viewModel.flashOutput
166+ if (navController.currentDestination!! .route!! .contains(" ak3" ))
167+ viewModel.uiPrintedOutput
168+ else viewModel.flashOutput
167169 ) {
168170 AnimatedVisibility (! viewModel.isRefreshing.value && viewModel.wasFlashSuccess.value != null ) {
169171 Column {
@@ -256,4 +258,94 @@ fun ColumnScope.SlotFlashContent(
256258 }
257259 }
258260 }
261+ if (viewModel.showConfirmDialog == true )
262+ {
263+ var filename = when {
264+ viewModel.flashActionURI?.scheme == " file" -> {
265+ File (viewModel.flashActionURI?.path ? : " " ).name
266+ }
267+ viewModel.flashActionURI != null -> {
268+ context.contentResolver.query(viewModel.flashActionURI!! , null , null , null , null )?.use { cursor ->
269+ val nameIndex = cursor.getColumnIndex(OpenableColumns .DISPLAY_NAME )
270+ if (cursor.moveToFirst() && nameIndex != - 1 ) {
271+ cursor.getString(nameIndex)
272+ } else null
273+ } ? : " Unable to determine filename!"
274+ }
275+ else -> " Unable to determine filename!"
276+ }
277+
278+ AlertDialog (
279+ onDismissRequest = { viewModel.hideConfirmDialog() },
280+ title = { Text (" CAUTION!" , style = MaterialTheme .typography.titleLarge, fontWeight = FontWeight .Bold ) },
281+ text = {
282+ Column (verticalArrangement = Arrangement .spacedBy(8 .dp)) {
283+ Text (" Are you Sure you want to flash this file?" , fontWeight = FontWeight .Bold )
284+ Text (" " , fontWeight = FontWeight .Bold )
285+ Text (" $filename " , fontWeight = FontWeight .Bold )
286+ }
287+ },
288+ confirmButton = {
289+ DialogButton (
290+ " Flash" ,
291+ {
292+ viewModel.hideConfirmDialog()
293+ val isOtherFlash = viewModel.flashActionType != " flashImage" && viewModel.flashActionURI != null
294+ val isPartitionFlash = viewModel.flashActionType == " flashImage" && viewModel.flashActionPartName != null && viewModel.flashActionURI != null
295+
296+ if (isOtherFlash || isPartitionFlash) {
297+ val uri = viewModel.flashActionURI!!
298+ val partitionName: String? = viewModel.flashActionPartName
299+
300+ when (viewModel.flashActionType) {
301+ " flashAk3" -> {
302+ navController.navigate(" slot$slotSuffix /flash/ak3" ) {
303+ popUpTo(" slot$slotSuffix " )
304+ }
305+ viewModel.flashAk3(context, uri)
306+ }
307+
308+ " flashAk3_mkbootfs" -> {
309+ navController.navigate(" slot$slotSuffix /flash/ak3" ) {
310+ popUpTo(" slot$slotSuffix " )
311+ }
312+ viewModel.flashAk3_mkbootfs(context, uri)
313+ }
314+
315+ " flashKsuDriver" -> {
316+ navController.navigate(" slot$slotSuffix /flash/image/flash" ) {
317+ popUpTo(" slot$slotSuffix " )
318+ }
319+ viewModel.flashKsuDriver(context, uri)
320+ }
321+
322+ " flashImage" -> {
323+ navController.navigate(" slot$slotSuffix /flash/image/flash" ) {
324+ popUpTo(" slot$slotSuffix " )
325+ }
326+ viewModel.flashImage(
327+ context,
328+ uri,
329+ partitionName!!
330+ )
331+ }
332+ }
333+ viewModel.flashActionType = " "
334+ viewModel.flashActionURI = null
335+ viewModel.flashActionPartName = null
336+ }
337+ }
338+ )
339+ },
340+ dismissButton = {
341+ DialogButton (
342+ " CANCEL" ,
343+ {
344+ viewModel.hideConfirmDialog()
345+ }
346+ )
347+ },
348+ modifier = Modifier .padding(16 .dp)
349+ )
350+ }
259351}
0 commit comments