From 1231bc106c7dc22dfd5b7711a5d972542378666e Mon Sep 17 00:00:00 2001 From: Ax333l Date: Sat, 21 Dec 2024 20:56:12 +0100 Subject: [PATCH] hh --- .../revanced/manager/data/platform/Filesystem.kt | 4 +--- .../revanced/manager/ui/screen/PatcherScreen.kt | 8 ++++++-- .../manager/ui/viewmodel/AppSelectorViewModel.kt | 14 ++++++++++++-- .../manager/ui/viewmodel/PatcherViewModel.kt | 8 +++++--- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/data/platform/Filesystem.kt b/app/src/main/java/app/revanced/manager/data/platform/Filesystem.kt index 97087f3e..7bad2deb 100644 --- a/app/src/main/java/app/revanced/manager/data/platform/Filesystem.kt +++ b/app/src/main/java/app/revanced/manager/data/platform/Filesystem.kt @@ -29,9 +29,7 @@ class Filesystem(private val app: Application) { * This is the same as [tempDir], but does not get cleared on system-initiated process death. * Paths to this directory can be safely stored in parcels. */ - val uiTempDir: File = app.getDir("ui_ephemeral", Context.MODE_PRIVATE).apply { - mkdirs() - } + val uiTempDir: File = app.getDir("ui_ephemeral", Context.MODE_PRIVATE) fun externalFilesDir(): Path = Environment.getExternalStorageDirectory().toPath() diff --git a/app/src/main/java/app/revanced/manager/ui/screen/PatcherScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/PatcherScreen.kt index 6037218a..e193d6fa 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/PatcherScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/PatcherScreen.kt @@ -45,7 +45,11 @@ fun PatcherScreen( onBackClick: () -> Unit, vm: PatcherViewModel ) { - BackHandler(onBack = onBackClick) + fun leaveScreen() { + vm.onBack() + onBackClick() + } + BackHandler(onBack = ::leaveScreen) val context = LocalContext.current val exportApkLauncher = @@ -107,7 +111,7 @@ fun PatcherScreen( topBar = { AppTopBar( title = stringResource(R.string.patcher), - onBackClick = onBackClick + onBackClick = ::leaveScreen ) }, bottomBar = { diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt index dab47e0a..538b85e3 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt @@ -6,8 +6,11 @@ import android.net.Uri import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi +import androidx.lifecycle.viewmodel.compose.saveable import app.revanced.manager.R import app.revanced.manager.data.platform.Filesystem import app.revanced.manager.domain.repository.PatchBundleRepository @@ -23,13 +26,20 @@ import kotlinx.coroutines.withContext import java.io.File import java.nio.file.Files +@OptIn(SavedStateHandleSaveableApi::class) class AppSelectorViewModel( private val app: Application, private val pm: PM, fs: Filesystem, - private val patchBundleRepository: PatchBundleRepository + private val patchBundleRepository: PatchBundleRepository, + savedStateHandle: SavedStateHandle, ) : ViewModel() { - private val inputFile = File(fs.uiTempDir, "input.apk").also(File::delete) + private val inputFile = savedStateHandle.saveable(key = "inputFile") { + File( + fs.uiTempDir, + "input.apk" + ).also(File::delete) + } val appList = pm.appList private val storageSelectionChannel = Channel() diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/PatcherViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/PatcherViewModel.kt index d67f7c9a..6b6db230 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/PatcherViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/PatcherViewModel.kt @@ -10,7 +10,6 @@ import android.net.Uri import android.os.ParcelUuid import android.util.Log import androidx.activity.result.ActivityResult -import androidx.compose.runtime.Stable import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -65,12 +64,12 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.time.withTimeout import kotlinx.coroutines.withContext import org.koin.core.component.KoinComponent +import org.koin.core.component.get import org.koin.core.component.inject import java.io.File import java.nio.file.Files import java.time.Duration -@Stable @OptIn(SavedStateHandleSaveableApi::class, PluginHostApi::class) class PatcherViewModel( private val input: Destination.Patcher @@ -81,7 +80,7 @@ class PatcherViewModel( private val workerRepository: WorkerRepository by inject() private val installedAppRepository: InstalledAppRepository by inject() private val rootInstaller: RootInstaller by inject() - private val savedStateHandle: SavedStateHandle by inject() + private val savedStateHandle: SavedStateHandle = get() private var installedApp: InstalledApp? = null val packageName = input.selectedApp.packageName @@ -325,7 +324,10 @@ class PatcherViewModel( } } } + } + fun onBack() { + // tempDir cannot be deleted inside onCleared because it gets called on system-initiated process death. tempDir.deleteRecursively() }