add notifcaiton support with unmount button

This commit is contained in:
2026-03-10 01:01:20 +05:00
parent 0c5524a9a5
commit 93c239eb12
9 changed files with 259 additions and 0 deletions

View File

@@ -20,7 +20,10 @@ import sh.sar.isodroid.data.IsoFile
import sh.sar.isodroid.data.MountOptions
import sh.sar.isodroid.data.MountStatus
import sh.sar.isodroid.isodrive.IsoDriveManager
import sh.sar.isodroid.isodrive.MountEvent
import sh.sar.isodroid.isodrive.MountEventBus
import sh.sar.isodroid.isodrive.SupportStatus
import sh.sar.isodroid.notification.NotificationHelper
import sh.sar.isodroid.root.RootManager
import java.io.File
@@ -29,6 +32,7 @@ private val Application.dataStore: DataStore<Preferences> by preferencesDataStor
class MainViewModel(application: Application) : AndroidViewModel(application) {
private val isoDriveManager = IsoDriveManager.getInstance(application)
private val notificationHelper = NotificationHelper.getInstance(application)
private val dataStore = application.dataStore
private val _uiState = MutableStateFlow(MainUiState())
@@ -45,6 +49,21 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
viewModelScope.launch {
initialize()
}
// Observe mount events from notification actions
viewModelScope.launch {
MountEventBus.events.collect { event ->
when (event) {
is MountEvent.Unmounted -> {
checkMountStatus()
_uiState.update { it.copy(successMessage = "Unmounted successfully") }
}
is MountEvent.Mounted -> {
checkMountStatus()
}
}
}
}
}
private suspend fun initialize() {
@@ -178,6 +197,15 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
private suspend fun checkMountStatus() {
val status = isoDriveManager.getStatus()
_uiState.update { it.copy(mountStatus = status) }
updateNotification(status)
}
private fun updateNotification(status: MountStatus) {
if (status.mounted) {
notificationHelper.showMountedNotification(status)
} else {
notificationHelper.hideNotification()
}
}
suspend fun mount(path: String, options: MountOptions) {