This commit is contained in:
sathwikcs
2025-01-17 15:21:16 +05:30
parent cf6b44b083
commit fdf160b7a1

View File

@@ -2,8 +2,11 @@ package `in`.sminnovations.attendanceapp.screens.home.viewModel
import android.content.Context import android.content.Context
import android.content.Intent
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.NetworkCapabilities import android.net.NetworkCapabilities
import android.net.Uri
import android.widget.Toast
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.asFlow import androidx.lifecycle.asFlow
@@ -12,7 +15,10 @@ import com.google.firebase.Timestamp
import com.google.firebase.firestore.DocumentSnapshot import com.google.firebase.firestore.DocumentSnapshot
import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.firestore.FirebaseFirestore
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import `in`.sminnovations.attendanceapp.main.AppUpdater
import `in`.sminnovations.attendanceapp.main.NetworkMonitor import `in`.sminnovations.attendanceapp.main.NetworkMonitor
import `in`.sminnovations.attendanceapp.main.UpdateChecker
import `in`.sminnovations.attendanceapp.main.UpdateInfo
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
@@ -36,8 +42,64 @@ class HomeViewModel @Inject constructor(
private val _uiState = MutableStateFlow(AttendanceUiState()) private val _uiState = MutableStateFlow(AttendanceUiState())
val uiState: StateFlow<AttendanceUiState> = _uiState.asStateFlow() val uiState: StateFlow<AttendanceUiState> = _uiState.asStateFlow()
init { private val _updateInfo = MutableStateFlow<UpdateInfo?>(null)
val updateInfo = _updateInfo.asStateFlow()
private val _isUpdateDialogVisible = MutableStateFlow(false)
val isUpdateDialogVisible = _isUpdateDialogVisible.asStateFlow()
private val _downloadProgress = MutableStateFlow<Boolean>(false)
val downloadProgress = _downloadProgress.asStateFlow()
private val appUpdater = AppUpdater(applicationContext)
fun checkForUpdates(context: Context) {
viewModelScope.launch {
UpdateChecker.checkForUpdate(context)
.onSuccess { updateInfo ->
if (updateInfo.isNew) {
_updateInfo.value = updateInfo
_isUpdateDialogVisible.value = true
}
}
.onFailure { error ->
// Handle error
}
}
}
fun installUpdate(context: Context, url: String) {
appUpdater.downloadAndInstall(url)
viewModelScope.launch {
appUpdater.updateState.collect { state ->
when (state) {
is AppUpdater.UpdaterState.Downloading -> {
// Update progress UI (state.progress is between 0 and 1)
_downloadProgress.value = true
}
is AppUpdater.UpdaterState.Success -> {
// APK downloaded and installation started
// You might want to show a message
_downloadProgress.value = false
}
is AppUpdater.UpdaterState.Error -> {
// Handle error (show message, etc.)
}
AppUpdater.UpdaterState.Idle -> {
// Initial state
}
}
}
}
}
fun dismissUpdate() {
_isUpdateDialogVisible.value = false
_updateInfo.value = null
_downloadProgress.value = false
}
init {
networkMonitor.startMonitoring() networkMonitor.startMonitoring()
networkMonitor.isConnected.asFlow() networkMonitor.isConnected.asFlow()
.onEach { isConnected -> .onEach { isConnected ->
@@ -54,15 +116,12 @@ class HomeViewModel @Inject constructor(
} }
fun stopMonitoring() {
networkMonitor.stopMonitoring()
}
fun reStartMonitoring() { fun reStartMonitoring() {
networkMonitor.stopMonitoring()
networkMonitor.startMonitoring() networkMonitor.startMonitoring()
} }
fun startScanning() { fun startScanning() {
viewModelScope.launch { viewModelScope.launch {
_uiState.update { currentState -> _uiState.update { currentState ->
@@ -252,20 +311,12 @@ class HomeViewModel @Inject constructor(
} }
fun isDeviceConnectedToInternet(context: Context): Boolean { fun isAppDisabled(): Boolean {
val connectivityManager = val a = firebaseFirestore.collection("deviceState").document("state")
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager println(a)
return true
val network = connectivityManager.activeNetwork ?: return false
val networkCapabilities =
connectivityManager.getNetworkCapabilities(network) ?: return false
return when {
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
else -> false
}
} }
override fun onCleared() { override fun onCleared() {
super.onCleared() super.onCleared()
networkMonitor.stopMonitoring() networkMonitor.stopMonitoring()
@@ -273,14 +324,3 @@ class HomeViewModel @Inject constructor(
} }
data class AttendanceUiState(
val isScanning: Boolean = false,
val qrCodeValue: String? = null,
val userName: String? = null,
val isCheckedIn: Boolean = false,
val isCheckedOut: Boolean = false,
val checkedOutTime: String = "",
val errorMessage: String? = null,
val isLoading: Boolean = false,
val isConnected : Boolean =true
)