From beaee0bcd90a7c7bc69d313ac4bb7de8d4f2f27a Mon Sep 17 00:00:00 2001 From: Tarun Samanta Date: Wed, 7 Jun 2023 19:30:15 +0530 Subject: [PATCH] enhancement: Don't show trackers for uninstalled apps --- .../exodusprivacy/ExodusUpdateService.kt | 24 +++++++++++++++++++ .../database/ExodusDatabaseRepository.kt | 10 ++++++++ .../database/app/ExodusApplicationDao.kt | 6 +++++ 3 files changed, 40 insertions(+) diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/ExodusUpdateService.kt b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/ExodusUpdateService.kt index bed26d38..4dbbd56e 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/ExodusUpdateService.kt +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/ExodusUpdateService.kt @@ -64,6 +64,7 @@ class ExodusUpdateService : LifecycleService() { // Inject required modules var applicationList = mutableListOf() + private var applicationListAfterUninstall = mutableListOf() @Inject lateinit var networkManager: NetworkManager @@ -138,6 +139,7 @@ class ExodusUpdateService : LifecycleService() { private fun launchFetch(firstTime: Boolean) { // create list of installed packages, that are system apps or launchable + validPackages = exodusPackageRepository.getValidPackageList() val numberOfInstalledPackages = validPackages.size @@ -242,6 +244,7 @@ class ExodusUpdateService : LifecycleService() { Toast.LENGTH_SHORT ).show() serviceScope.launch { + if (!firstTime) removeUninstalledApps() Log.d(TAG, "Refreshing trackers database.") fetchTrackers() }.invokeOnCompletion { trackerThrow -> @@ -358,6 +361,27 @@ class ExodusUpdateService : LifecycleService() { } } + private suspend fun removeUninstalledApps() { + try { + applicationListAfterUninstall = + exodusPackageRepository.getApplicationList(validPackages) + val packageNameListAfterUninstall = mutableListOf() + applicationListAfterUninstall.forEach { packageNameListAfterUninstall.add(it.packageName) } + val packageNameList = exodusDatabaseRepository.getAllPackageNames().toMutableList() + val listOfPackageNameToBeRemove = mutableListOf() + if (packageNameList.size > packageNameListAfterUninstall.size) { + packageNameList.forEach { + if (!packageNameListAfterUninstall.contains(it)) { + listOfPackageNameToBeRemove.add(it) + } + } + exodusDatabaseRepository.deleteApps(listOfPackageNameToBeRemove) + } + } catch (e: Exception) { + Log.e(TAG, "Unable to remove apps.", e) + } + } + fun countAppsHavingTrackers( appList: MutableList ): Int { diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/database/ExodusDatabaseRepository.kt b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/database/ExodusDatabaseRepository.kt index 94ed7b44..eda162d1 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/database/ExodusDatabaseRepository.kt +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/database/ExodusDatabaseRepository.kt @@ -88,4 +88,14 @@ class ExodusDatabaseRepository @Inject constructor( Log.d(TAG, "Querying all apps as live data.") return exodusApplicationDao.queryAllApps() } + + suspend fun deleteApps(listOfPackages: List) { + Log.d(TAG, "Deleting all uninstalled apps.") + return exodusApplicationDao.deleteApp(listOfPackages) + } + + suspend fun getAllPackageNames(): List { + Log.d(TAG, "Fetching all ExodusApplication packageName from DB.") + return exodusApplicationDao.getPackageNames() + } } diff --git a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/database/app/ExodusApplicationDao.kt b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/database/app/ExodusApplicationDao.kt index 02042010..cbed9041 100644 --- a/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/database/app/ExodusApplicationDao.kt +++ b/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/manager/database/app/ExodusApplicationDao.kt @@ -20,4 +20,10 @@ interface ExodusApplicationDao { @Query("SELECT * FROM exodusapplication ORDER BY name COLLATE NOCASE") fun queryAllApps(): LiveData> + + @Query("DELETE FROM exodusapplication WHERE packageName IN (:listOfPackages)") + suspend fun deleteApp(listOfPackages: List) + + @Query("SELECT packageName FROM exodusapplication") + suspend fun getPackageNames(): List }