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