refactor: remove DynamicModuleViewModel and HomeUiEvent
This commit is contained in:
parent
ce5ddf39e0
commit
da4281027b
|
|
@ -1,75 +0,0 @@
|
|||
package com.syaroful.agrilinkvocpro.presentation.dynamicModule
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.google.android.play.core.splitinstall.SplitInstallException
|
||||
import com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener
|
||||
import com.google.android.play.core.splitinstall.model.SplitInstallErrorCode
|
||||
import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus
|
||||
import com.syaroful.agrilinkvocpro.core.utils.DownloadState
|
||||
import com.syaroful.agrilinkvocpro.data.repository.DynamicModuleRepository
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class DynamicModuleViewModel @Inject constructor(
|
||||
private val repository: DynamicModuleRepository
|
||||
) : ViewModel() {
|
||||
private val _downloadState = MutableStateFlow<DownloadState>(DownloadState.Idle)
|
||||
val downloadState: StateFlow<DownloadState> = _downloadState.asStateFlow()
|
||||
|
||||
private val listener = SplitInstallStateUpdatedListener { state ->
|
||||
if (state.sessionId() == repository.getSessionId()) {
|
||||
when (state.status()) {
|
||||
SplitInstallSessionStatus.DOWNLOADING -> {
|
||||
val progress = if (state.totalBytesToDownload() > 0)
|
||||
state.bytesDownloaded().toFloat() / state.totalBytesToDownload()
|
||||
else 0f
|
||||
_downloadState.value = DownloadState.DownloadingWithProgress(progress)
|
||||
}
|
||||
|
||||
SplitInstallSessionStatus.DOWNLOADED -> _downloadState.value =
|
||||
DownloadState.Downloaded
|
||||
|
||||
SplitInstallSessionStatus.INSTALLED -> _downloadState.value =
|
||||
DownloadState.Installed
|
||||
|
||||
SplitInstallSessionStatus.FAILED -> _downloadState.value =
|
||||
DownloadState.Failed("Installation Failed")
|
||||
|
||||
SplitInstallSessionStatus.CANCELED -> _downloadState.value =
|
||||
DownloadState.Failed("Installation Canceled")
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun isModuleDownloaded(moduleName: String): Boolean {
|
||||
return repository.isModuleDownloaded(moduleName)
|
||||
}
|
||||
|
||||
fun downloadModule(moduleName: String) {
|
||||
_downloadState.value = DownloadState.Starting
|
||||
repository.startDownload(moduleName, listener)
|
||||
.addOnFailureListener { exception ->
|
||||
val errorCode = (exception as? SplitInstallException)?.errorCode ?: -1
|
||||
val errorMessage = when (errorCode) {
|
||||
SplitInstallErrorCode.NETWORK_ERROR -> "No Internet Connection"
|
||||
SplitInstallErrorCode.MODULE_UNAVAILABLE -> "Module Unavailable"
|
||||
SplitInstallErrorCode.ACTIVE_SESSIONS_LIMIT_EXCEEDED -> "Active Session Limit Exceeded"
|
||||
SplitInstallErrorCode.INSUFFICIENT_STORAGE -> "Insufficient Storage"
|
||||
SplitInstallErrorCode.PLAY_STORE_NOT_FOUND -> "Play Store Not Found"
|
||||
else -> "Unknown Error: $errorCode"
|
||||
}
|
||||
_downloadState.value = DownloadState.Failed(errorMessage)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
repository.unregisterListener(listener)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
package com.syaroful.agrilinkvocpro.presentation.event
|
||||
|
||||
sealed class HomeUiEvent {
|
||||
data class RequestModule(val moduleName: String) : HomeUiEvent()
|
||||
data class ConfirmDownload(val moduleName: String) : HomeUiEvent()
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user