Loading app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +27 −24 Original line number Diff line number Diff line Loading @@ -20,20 +20,19 @@ package foundation.e.apps.data.blockedApps import com.google.gson.Gson import foundation.e.apps.data.DownloadManager import foundation.e.apps.data.fusedDownload.FileManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.suspendCancellableCoroutine import timber.log.Timber import java.io.File import javax.inject.Inject import javax.inject.Named import javax.inject.Singleton import kotlin.coroutines.resume @Singleton class BlockedAppRepository @Inject constructor( private val downloadManager: DownloadManager, private val gson: Gson, @Named("cacheDir") private val cacheDir: String, @Named("ioCoroutineScope") private val coroutineScope: CoroutineScope ) { companion object { Loading @@ -48,7 +47,11 @@ class BlockedAppRepository @Inject constructor( return blockedAppInfoList?.notWorkingApps ?: listOf() } fun fetchUpdateOfAppWarningList() { fun isBlockedApp(packageName: String) = blockedAppInfoList?.notWorkingApps?.contains(packageName) ?: false suspend fun fetchUpdateOfAppWarningList(): Boolean = suspendCancellableCoroutine { continuation -> downloadManager.downloadFileInCache( APP_WARNING_LIST_FILE_URL, fileName = WARNING_LIST_FILE_NAME Loading @@ -56,18 +59,19 @@ class BlockedAppRepository @Inject constructor( if (success) { parseBlockedAppDataFromFile() } continuation.resume(true) } } private fun parseBlockedAppDataFromFile() { coroutineScope.launch { blockedAppInfoList = try { val outputPath = "$cacheDir/warning_list/" FileManager.moveFile("$cacheDir/", WARNING_LIST_FILE_NAME, outputPath) val downloadedFile = File(outputPath + WARNING_LIST_FILE_NAME) Timber.i("Blocked list file exists: ${downloadedFile.exists()}") Timber.d("Blocked list file exists: ${downloadedFile.exists()}") val blockedAppInfoJson = String(downloadedFile.inputStream().readBytes()) Timber.i("Blocked list file contents: $blockedAppInfoJson") Timber.d("Blocked list file contents: $blockedAppInfoJson") gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) } catch (exception: Exception) { Timber.e(exception.localizedMessage ?: "", exception) Loading @@ -75,4 +79,3 @@ class BlockedAppRepository @Inject constructor( } } } } app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt +14 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context import android.content.pm.ApplicationInfo import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.cleanapk.ApkSignatureManager import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.ResultStatus Loading @@ -46,6 +47,7 @@ class UpdatesManagerImpl @Inject constructor( private val faultyAppRepository: FaultyAppRepository, private val preferenceManagerModule: PreferenceManagerModule, private val fdroidRepository: FdroidRepository, private val blockedAppRepository: BlockedAppRepository, ) { companion object { Loading Loading @@ -79,6 +81,14 @@ class UpdatesManagerImpl @Inject constructor( } } openSourceInstalledApps.removeIf { blockedAppRepository.isBlockedApp(it) } gPlayInstalledApps.removeIf { blockedAppRepository.isBlockedApp(it) } // Get open source app updates if (openSourceInstalledApps.isNotEmpty()) { status = getUpdatesFromApi({ Loading Loading @@ -129,6 +139,10 @@ class UpdatesManagerImpl @Inject constructor( openSourceInstalledApps.addAll(updatableFDroidApps) } openSourceInstalledApps.removeIf { blockedAppRepository.isBlockedApp(it) } if (openSourceInstalledApps.isNotEmpty()) { status = getUpdatesFromApi({ fusedAPIRepository.getApplicationDetails( Loading app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt +10 −6 Original line number Diff line number Diff line Loading @@ -16,11 +16,10 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.User import foundation.e.apps.data.fused.FusedAPIRepository import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.fusedDownload.FusedManagerRepository import foundation.e.apps.data.login.LoginSourceRepository import foundation.e.apps.data.preference.DataStoreManager import foundation.e.apps.data.updates.UpdatesManagerRepository Loading @@ -37,11 +36,10 @@ class UpdatesWorker @AssistedInject constructor( @Assisted private val context: Context, @Assisted private val params: WorkerParameters, private val updatesManagerRepository: UpdatesManagerRepository, private val fusedAPIRepository: FusedAPIRepository, private val fusedManagerRepository: FusedManagerRepository, private val dataStoreManager: DataStoreManager, private val loginSourceRepository: LoginSourceRepository, private val appInstallProcessor: AppInstallProcessor private val appInstallProcessor: AppInstallProcessor, private val blockedAppRepository: BlockedAppRepository, ) : CoroutineWorker(context, params) { companion object { Loading @@ -50,7 +48,6 @@ class UpdatesWorker @AssistedInject constructor( private const val DELAY_FOR_RETRY = 3000L } val TAG = UpdatesWorker::class.simpleName private var shouldShowNotification = true private var automaticInstallEnabled = true private var onlyOnUnmeteredNetwork = false Loading @@ -64,6 +61,7 @@ class UpdatesWorker @AssistedInject constructor( return Result.success() } refreshBlockedAppList() checkForUpdates() Result.success() } catch (e: Throwable) { Loading @@ -76,6 +74,12 @@ class UpdatesWorker @AssistedInject constructor( } } private suspend fun refreshBlockedAppList() { if (isAutoUpdate) { blockedAppRepository.fetchUpdateOfAppWarningList() } } private suspend fun checkManualUpdateRunning(): Boolean { val workInfos = withContext(Dispatchers.IO) { Loading app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +3 −1 Original line number Diff line number Diff line Loading @@ -292,8 +292,10 @@ class MainActivityViewModel @Inject constructor( } fun updateAppWarningList() { viewModelScope.launch { blockedAppRepository.fetchUpdateOfAppWarningList() } } fun getAppNameByPackageName(packageName: String): String { return pkgManagerModule.getAppNameFromPackageName(packageName) Loading app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt +5 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context import android.content.pm.ApplicationInfo import androidx.arch.core.executor.testing.InstantTaskExecutorRule import com.aurora.gplayapi.data.models.AuthData import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.FilterLevel import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.ResultStatus Loading Loading @@ -72,6 +73,9 @@ class UpdateManagerImptTest { private lateinit var faultyAppRepository: FaultyAppRepository @Mock private lateinit var blockedAppRepository: BlockedAppRepository @Mock private lateinit var fdroidRepository: FdroidRepository Loading @@ -90,7 +94,7 @@ class UpdateManagerImptTest { preferenceModule = FakePreferenceModule(context) pkgManagerModule = FakePkgManagerModule(context, getGplayApps()) updatesManagerImpl = UpdatesManagerImpl(context, pkgManagerModule, fusedAPIRepository, faultyAppRepository, preferenceModule, fdroidRepository) UpdatesManagerImpl(context, pkgManagerModule, fusedAPIRepository, faultyAppRepository, preferenceModule, fdroidRepository, blockedAppRepository) } @Test Loading Loading
app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +27 −24 Original line number Diff line number Diff line Loading @@ -20,20 +20,19 @@ package foundation.e.apps.data.blockedApps import com.google.gson.Gson import foundation.e.apps.data.DownloadManager import foundation.e.apps.data.fusedDownload.FileManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.suspendCancellableCoroutine import timber.log.Timber import java.io.File import javax.inject.Inject import javax.inject.Named import javax.inject.Singleton import kotlin.coroutines.resume @Singleton class BlockedAppRepository @Inject constructor( private val downloadManager: DownloadManager, private val gson: Gson, @Named("cacheDir") private val cacheDir: String, @Named("ioCoroutineScope") private val coroutineScope: CoroutineScope ) { companion object { Loading @@ -48,7 +47,11 @@ class BlockedAppRepository @Inject constructor( return blockedAppInfoList?.notWorkingApps ?: listOf() } fun fetchUpdateOfAppWarningList() { fun isBlockedApp(packageName: String) = blockedAppInfoList?.notWorkingApps?.contains(packageName) ?: false suspend fun fetchUpdateOfAppWarningList(): Boolean = suspendCancellableCoroutine { continuation -> downloadManager.downloadFileInCache( APP_WARNING_LIST_FILE_URL, fileName = WARNING_LIST_FILE_NAME Loading @@ -56,18 +59,19 @@ class BlockedAppRepository @Inject constructor( if (success) { parseBlockedAppDataFromFile() } continuation.resume(true) } } private fun parseBlockedAppDataFromFile() { coroutineScope.launch { blockedAppInfoList = try { val outputPath = "$cacheDir/warning_list/" FileManager.moveFile("$cacheDir/", WARNING_LIST_FILE_NAME, outputPath) val downloadedFile = File(outputPath + WARNING_LIST_FILE_NAME) Timber.i("Blocked list file exists: ${downloadedFile.exists()}") Timber.d("Blocked list file exists: ${downloadedFile.exists()}") val blockedAppInfoJson = String(downloadedFile.inputStream().readBytes()) Timber.i("Blocked list file contents: $blockedAppInfoJson") Timber.d("Blocked list file contents: $blockedAppInfoJson") gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) } catch (exception: Exception) { Timber.e(exception.localizedMessage ?: "", exception) Loading @@ -75,4 +79,3 @@ class BlockedAppRepository @Inject constructor( } } } }
app/src/main/java/foundation/e/apps/data/updates/UpdatesManagerImpl.kt +14 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.Context import android.content.pm.ApplicationInfo import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.cleanapk.ApkSignatureManager import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.ResultStatus Loading @@ -46,6 +47,7 @@ class UpdatesManagerImpl @Inject constructor( private val faultyAppRepository: FaultyAppRepository, private val preferenceManagerModule: PreferenceManagerModule, private val fdroidRepository: FdroidRepository, private val blockedAppRepository: BlockedAppRepository, ) { companion object { Loading Loading @@ -79,6 +81,14 @@ class UpdatesManagerImpl @Inject constructor( } } openSourceInstalledApps.removeIf { blockedAppRepository.isBlockedApp(it) } gPlayInstalledApps.removeIf { blockedAppRepository.isBlockedApp(it) } // Get open source app updates if (openSourceInstalledApps.isNotEmpty()) { status = getUpdatesFromApi({ Loading Loading @@ -129,6 +139,10 @@ class UpdatesManagerImpl @Inject constructor( openSourceInstalledApps.addAll(updatableFDroidApps) } openSourceInstalledApps.removeIf { blockedAppRepository.isBlockedApp(it) } if (openSourceInstalledApps.isNotEmpty()) { status = getUpdatesFromApi({ fusedAPIRepository.getApplicationDetails( Loading
app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt +10 −6 Original line number Diff line number Diff line Loading @@ -16,11 +16,10 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.User import foundation.e.apps.data.fused.FusedAPIRepository import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.fusedDownload.FusedManagerRepository import foundation.e.apps.data.login.LoginSourceRepository import foundation.e.apps.data.preference.DataStoreManager import foundation.e.apps.data.updates.UpdatesManagerRepository Loading @@ -37,11 +36,10 @@ class UpdatesWorker @AssistedInject constructor( @Assisted private val context: Context, @Assisted private val params: WorkerParameters, private val updatesManagerRepository: UpdatesManagerRepository, private val fusedAPIRepository: FusedAPIRepository, private val fusedManagerRepository: FusedManagerRepository, private val dataStoreManager: DataStoreManager, private val loginSourceRepository: LoginSourceRepository, private val appInstallProcessor: AppInstallProcessor private val appInstallProcessor: AppInstallProcessor, private val blockedAppRepository: BlockedAppRepository, ) : CoroutineWorker(context, params) { companion object { Loading @@ -50,7 +48,6 @@ class UpdatesWorker @AssistedInject constructor( private const val DELAY_FOR_RETRY = 3000L } val TAG = UpdatesWorker::class.simpleName private var shouldShowNotification = true private var automaticInstallEnabled = true private var onlyOnUnmeteredNetwork = false Loading @@ -64,6 +61,7 @@ class UpdatesWorker @AssistedInject constructor( return Result.success() } refreshBlockedAppList() checkForUpdates() Result.success() } catch (e: Throwable) { Loading @@ -76,6 +74,12 @@ class UpdatesWorker @AssistedInject constructor( } } private suspend fun refreshBlockedAppList() { if (isAutoUpdate) { blockedAppRepository.fetchUpdateOfAppWarningList() } } private suspend fun checkManualUpdateRunning(): Boolean { val workInfos = withContext(Dispatchers.IO) { Loading
app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +3 −1 Original line number Diff line number Diff line Loading @@ -292,8 +292,10 @@ class MainActivityViewModel @Inject constructor( } fun updateAppWarningList() { viewModelScope.launch { blockedAppRepository.fetchUpdateOfAppWarningList() } } fun getAppNameByPackageName(packageName: String): String { return pkgManagerModule.getAppNameFromPackageName(packageName) Loading
app/src/test/java/foundation/e/apps/UpdateManagerImptTest.kt +5 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.content.Context import android.content.pm.ApplicationInfo import androidx.arch.core.executor.testing.InstantTaskExecutorRule import com.aurora.gplayapi.data.models.AuthData import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.FilterLevel import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.ResultStatus Loading Loading @@ -72,6 +73,9 @@ class UpdateManagerImptTest { private lateinit var faultyAppRepository: FaultyAppRepository @Mock private lateinit var blockedAppRepository: BlockedAppRepository @Mock private lateinit var fdroidRepository: FdroidRepository Loading @@ -90,7 +94,7 @@ class UpdateManagerImptTest { preferenceModule = FakePreferenceModule(context) pkgManagerModule = FakePkgManagerModule(context, getGplayApps()) updatesManagerImpl = UpdatesManagerImpl(context, pkgManagerModule, fusedAPIRepository, faultyAppRepository, preferenceModule, fdroidRepository) UpdatesManagerImpl(context, pkgManagerModule, fusedAPIRepository, faultyAppRepository, preferenceModule, fdroidRepository, blockedAppRepository) } @Test Loading