InstalledViewModel: Decouple from AppUtil

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-10-17 16:44:29 +05:30
parent 98322b3358
commit b82ef53c01

View File

@@ -19,12 +19,18 @@
package com.aurora.store.viewmodel.all package com.aurora.store.viewmodel.all
import android.content.Context
import android.util.Log import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.store.util.AppUtil import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.gplayapi.network.IHttpClient
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.providers.BlacklistProvider
import com.aurora.store.util.PackageUtil
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
@@ -33,7 +39,12 @@ import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
class InstalledViewModel @Inject constructor(private val appUtil: AppUtil) : ViewModel() { class InstalledViewModel @Inject constructor(
private val authProvider: AuthProvider,
private val httpClient: IHttpClient,
private val blacklistProvider: BlacklistProvider,
@ApplicationContext private val context: Context
) : ViewModel() {
private val TAG = InstalledViewModel::class.java.simpleName private val TAG = InstalledViewModel::class.java.simpleName
@@ -47,8 +58,17 @@ class InstalledViewModel @Inject constructor(private val appUtil: AppUtil) : Vie
fun fetchApps() { fun fetchApps() {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
try { try {
val apps = appUtil.getFilteredInstalledApps() val appDetailsHelper = AppDetailsHelper(authProvider.authData!!)
_installedApps.emit(apps.sortedBy { it.displayName.lowercase(Locale.getDefault()) }) .using(httpClient)
PackageUtil.getPackageInfoMap(context).keys.let { packages ->
val filtersPackages = packages.filter { !blacklistProvider.isBlacklisted(it) }
_installedApps.value = appDetailsHelper.getAppByPackageName(filtersPackages)
.filter { it.displayName.isNotEmpty() }
.map { it.isInstalled = true; it }
.sortedBy { it.displayName.lowercase(Locale.getDefault()) }
}
} catch (exception: Exception) { } catch (exception: Exception) {
Log.e(TAG, "Failed to get installed apps", exception) Log.e(TAG, "Failed to get installed apps", exception)
} }