From dfeb9d306f27a35dc6ab06bba4b087a55afeacd0 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 22 Apr 2022 17:13:32 +0530 Subject: [PATCH 01/10] App lounge: (issue_5136) define variable permsFromExodus in FusedApp --- .../foundation/e/apps/api/fused/data/FusedApp.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/api/fused/data/FusedApp.kt b/app/src/main/java/foundation/e/apps/api/fused/data/FusedApp.kt index cf8204f90..8b41d9d76 100644 --- a/app/src/main/java/foundation/e/apps/api/fused/data/FusedApp.kt +++ b/app/src/main/java/foundation/e/apps/api/fused/data/FusedApp.kt @@ -51,5 +51,15 @@ data class FusedApp( var pwaPlayerDbId: Long = -1, val url: String = String(), var type: Type = Type.NATIVE, - var privacyScore: Int = -1 + var privacyScore: Int = -1, + + /* + * List of permissions from Exodus API. + * This list is now used to calculate the privacy score instead of perms variable above. + * If the value is listOf("null"), it means no data is available in Exodus API for this package, + * hence display "N/A" + * + * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5136 + */ + var permsFromExodus: List = listOf("null"), ) -- GitLab From e0475d9c6f0011d57ec2c447424fa7b8bb5a0e4b Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 22 Apr 2022 17:43:27 +0530 Subject: [PATCH 02/10] App lounge: (issue_5136) send listOf("null") instead of empty list for empty exodus data. --- .../repositories/AppPrivacyInfoRepositoryImpl.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/api/exodus/repositories/AppPrivacyInfoRepositoryImpl.kt b/app/src/main/java/foundation/e/apps/api/exodus/repositories/AppPrivacyInfoRepositoryImpl.kt index e1763e525..1d387f999 100644 --- a/app/src/main/java/foundation/e/apps/api/exodus/repositories/AppPrivacyInfoRepositoryImpl.kt +++ b/app/src/main/java/foundation/e/apps/api/exodus/repositories/AppPrivacyInfoRepositoryImpl.kt @@ -70,8 +70,17 @@ class AppPrivacyInfoRepositoryImpl @Inject constructor( private fun getAppPrivacyInfo( appTrackerData: List, ): AppPrivacyInfo { + /* + * If the response is empty, that means there is no data on Exodus API about this app, + * i.e. invalid data. + * We signal this by list of "null". + * It is not enough to send just empty lists, as an app can actually have zero trackers + * and zero permissions. This is not to be confused with invalid data. + * + * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5136 + */ if (appTrackerData.isEmpty()) { - return AppPrivacyInfo() + return AppPrivacyInfo(listOf("null"), listOf("null")) } val sortedTrackerData = appTrackerData.sortedByDescending { trackerData -> trackerData.versionCode.toLong() } -- GitLab From 5c385da1d99d7561c1def166eb1d23c6b57f998c Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 22 Apr 2022 19:28:29 +0530 Subject: [PATCH 03/10] App lounge: (issue_5136) use FusedApp.permsFromExodus in PrivacyInfoViewModel --- .../java/foundation/e/apps/PrivacyInfoViewModel.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt index 72e6cb8a2..e98a30aee 100644 --- a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt +++ b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt @@ -27,8 +27,8 @@ class PrivacyInfoViewModel @Inject constructor( private suspend fun fetchEmitAppPrivacyInfo( fusedApp: FusedApp ): Result { - if (fusedApp.trackers.isNotEmpty() && fusedApp.perms.isNotEmpty()) { - val appInfo = AppPrivacyInfo(fusedApp.trackers, fusedApp.perms) + if (fusedApp.trackers.isNotEmpty() && fusedApp.permsFromExodus.isNotEmpty()) { + val appInfo = AppPrivacyInfo(fusedApp.trackers, fusedApp.permsFromExodus) return Result.success(appInfo) } val appPrivacyPrivacyInfoResult = @@ -51,10 +51,10 @@ class PrivacyInfoViewModel @Inject constructor( appPrivacyPrivacyInfoResult: Result, fusedApp: FusedApp ): Result { - fusedApp.trackers = appPrivacyPrivacyInfoResult.data?.trackerList ?: listOf() + fusedApp.trackers = appPrivacyPrivacyInfoResult.data?.trackerList ?: listOf("null") + fusedApp.permsFromExodus = appPrivacyPrivacyInfoResult.data?.permissionList ?: listOf("null") if (fusedApp.perms.isEmpty()) { - - fusedApp.perms = appPrivacyPrivacyInfoResult.data?.permissionList ?: listOf() + fusedApp.perms = fusedApp.permsFromExodus } return appPrivacyPrivacyInfoResult } -- GitLab From 7524b9189900cf07610451d755b126a862582e67 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 22 Apr 2022 20:26:43 +0530 Subject: [PATCH 04/10] App lounge: (issue_5136) return -1 from PrivacyInfoViewModel.calculatePrivacyScore() if permsFromExodus is listOf("null") --- app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt index e98a30aee..54677f7e4 100644 --- a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt +++ b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt @@ -76,6 +76,9 @@ class PrivacyInfoViewModel @Inject constructor( } fun calculatePrivacyScore(fusedApp: FusedApp): Int { + if (fusedApp.permsFromExodus == listOf("null")) { + return -1 + } val calculateTrackersScore = calculateTrackersScore(fusedApp.trackers.size) val calculatePermissionsScore = calculatePermissionsScore( countAndroidPermissions(fusedApp) -- GitLab From 2514e6b548aa59a15bf7231ddcb1ca015e6a3b12 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 22 Apr 2022 20:34:51 +0530 Subject: [PATCH 05/10] App lounge: (issue_5136) Show N/A for privacy score -1 --- .../e/apps/applicationlist/model/ApplicationListRVAdapter.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/applicationlist/model/ApplicationListRVAdapter.kt b/app/src/main/java/foundation/e/apps/applicationlist/model/ApplicationListRVAdapter.kt index c70c36d4a..324f2e6b1 100644 --- a/app/src/main/java/foundation/e/apps/applicationlist/model/ApplicationListRVAdapter.kt +++ b/app/src/main/java/foundation/e/apps/applicationlist/model/ApplicationListRVAdapter.kt @@ -246,8 +246,9 @@ class ApplicationListRVAdapter( ) { privacyInfoViewModel.getAppPrivacyInfoLiveData(searchApp).observe(lifecycleOwner) { showPrivacyScore() - if (it.isSuccess()) { - searchApp.privacyScore = privacyInfoViewModel.calculatePrivacyScore(searchApp) + val calculatedScore = privacyInfoViewModel.calculatePrivacyScore(searchApp) + if (it.isSuccess() && calculatedScore != -1) { + searchApp.privacyScore = calculatedScore appPrivacyScore.text = view.context.getString( R.string.privacy_rating_out_of, searchApp.privacyScore.toString() -- GitLab From 6fad5d689e30bfbafc586c39b8d317c5574c3679 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 22 Apr 2022 20:35:40 +0530 Subject: [PATCH 06/10] App lounge: (issue_5136) use permsFromExodus to calculate privacy score --- app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt index 54677f7e4..18b1893ea 100644 --- a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt +++ b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt @@ -91,7 +91,7 @@ class PrivacyInfoViewModel @Inject constructor( } private fun countAndroidPermissions(fusedApp: FusedApp) = - fusedApp.perms.filter { it.contains("android.permission") }.size + fusedApp.permsFromExodus.filter { it.contains("android.permission") }.size private fun calculateTrackersScore(numberOfTrackers: Int): Int { return if (numberOfTrackers > 5) 0 else 9 - numberOfTrackers -- GitLab From af193d1e991d231fe75a6034af0254d68365a979 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 22 Apr 2022 20:51:55 +0530 Subject: [PATCH 07/10] App lounge: (issue_5136) show different message if trackers is listOf("null") --- .../e/apps/application/ApplicationFragment.kt | 7 +- app/src/main/res/values/strings.xml | 323 +++++++++--------- 2 files changed, 167 insertions(+), 163 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt b/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt index e11168236..00620165a 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt @@ -235,10 +235,13 @@ class ApplicationFragment : Fragment(R.layout.fragment_application) { ).show(childFragmentManager, TAG) } appTrackers.setOnClickListener { + val fusedApp = applicationViewModel.fusedApp.value var trackers = - privacyInfoViewModel.getTrackerListText(applicationViewModel.fusedApp.value) + privacyInfoViewModel.getTrackerListText(fusedApp) - if (trackers.isNotEmpty()) { + if (fusedApp?.trackers == listOf("null")) { + trackers = getString(R.string.tracker_information_not_found) + } else if (trackers.isNotEmpty()) { trackers += "

" + getString( R.string.privacy_computed_using_text, EXODUS_URL diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2293cc8b9..3857d96f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,161 +1,162 @@ - - - - App Lounge - - - Home - Categories - Search - Updates - Settings - - - Search for an app - No apps found… - - - Applications - Games - Category Icon - Open Source - PWA - - - Welcome - Sign in to App Lounge using your Google account, or select the Anonymous mode to sign in privately. - Sign in with Google - Anonymous mode - or - - - Accept - Reject - Accepted - Before we can proceed you must read and agree to the Terms of Service. - - - Updates - 24 - Update check interval - Only on un-metered networks - Update apps automatically only on un-metered networks such as Wi-Fi - Automatically install updates - Download and install app updates in the background - Show available updates - Show a notification when app updates are available - Show applications: - Show all apps - Show only open-source apps - Show only PWAs - Account - Terms of Services - Anonymous - Log Out - - - Description - Check out \"%1$s\"\n%2$s - OK - Install - Cancel - App icon - N/A - Open - Retry - More - Update - Ratings - Rating - Score out of 5. Computed using users\' ratings of the app. - %1$s/5 - Privacy - Privacy Score - The Privacy Score is automatically computed from permissions and trackers that are detected in applications. It gives an idea indication about how much an application is likely to be micro-targeting its users.<br /><br />Its computing algorithm\'s source code can be <a href="%1$s">found here</a>.<br /><br />Trackers detection is performed using <a href="%2$s">Exodus Privacy tools</a>.<br /><br />Score out of 10.<br /><br />Learn more about how the Privacy Score is computed, its limitations and how you can protect yourself from micro-targeting <a href="%3$s>on this page</a>. - %1$s/10 - Privacy analyses - Permissions - Trackers - Information - Version: %1$s - Updated on: %1$s - Requires: %1$s - License: %1$s - Package name: %1$s - Paid apps cannot be installed in anonymous mode. Please log into your Google account to install paid apps. - Paid apps are not supported in App Lounge yet. Just a little more patience, it will soon be the case. - This app will be available later! - Unknown Error! - There is not enough space available to download this application! - - - Update All - - %1$d app update is available - %1$d app updates are available - - App updates will be installed automatically - App updates will not be installed automatically - All apps are up-to-date - - - Discover - Top Updated Apps - Top Updated Games - Popular Apps In Last 24 Hours - Popular Games In Last 24 Hours - Popular Apps - Popular Games - - Top Free Apps - Top Free Games - Top Grossing Apps - Top Grossing Games - Top Trending Apps - Top Trending Games - - - Downloads - Updates - App updates will be installed automatically - App updates will not be installed automatically - Waiting for un-metered network - - - No runtime android permission found! - Computed using <a href="%1$s"> Exodus Privacy Analysis - No Tracker Found! - - - updateCheckIntervals - updateNotify - updateInstallAuto - updateUnmeteredOnly - - - Can\'t connect! Please check your internet connection and try again - - - %1$s]]> - When clicked confirm, it will take you to Google Play page for the app to complete the purchase using your browser. Click confirm to purchase %1$s for %2$s. - CONFIRM - CANCEL - Paid apps cannot be installed in anonymous mode. Please log into your Google account to install paid apps. - - + + + + App Lounge + + + Home + Categories + Search + Updates + Settings + + + Search for an app + No apps found… + + + Applications + Games + Category Icon + Open Source + PWA + + + Welcome + Sign in to App Lounge using your Google account, or select the Anonymous mode to sign in privately. + Sign in with Google + Anonymous mode + or + + + Accept + Reject + Accepted + Before we can proceed you must read and agree to the Terms of Service. + + + Updates + 24 + Update check interval + Only on un-metered networks + Update apps automatically only on un-metered networks such as Wi-Fi + Automatically install updates + Download and install app updates in the background + Show available updates + Show a notification when app updates are available + Show applications: + Show all apps + Show only open-source apps + Show only PWAs + Account + Terms of Services + Anonymous + Log Out + + + Description + Check out \"%1$s\"\n%2$s + OK + Install + Cancel + App icon + N/A + Open + Retry + More + Update + Ratings + Rating + Score out of 5. Computed using users\' ratings of the app. + %1$s/5 + Privacy + Privacy Score + The Privacy Score is automatically computed from permissions and trackers that are detected in applications. It gives an idea indication about how much an application is likely to be micro-targeting its users.<br /><br />Its computing algorithm\'s source code can be <a href="%1$s">found here</a>.<br /><br />Trackers detection is performed using <a href="%2$s">Exodus Privacy tools</a>.<br /><br />Score out of 10.<br /><br />Learn more about how the Privacy Score is computed, its limitations and how you can protect yourself from micro-targeting <a href="%3$s>on this page</a>. + %1$s/10 + Privacy analyses + Permissions + Trackers + Information + Version: %1$s + Updated on: %1$s + Requires: %1$s + License: %1$s + Package name: %1$s + Paid apps cannot be installed in anonymous mode. Please log into your Google account to install paid apps. + Paid apps are not supported in App Lounge yet. Just a little more patience, it will soon be the case. + This app will be available later! + Unknown Error! + There is not enough space available to download this application! + + + Update All + + %1$d app update is available + %1$d app updates are available + + App updates will be installed automatically + App updates will not be installed automatically + All apps are up-to-date + + + Discover + Top Updated Apps + Top Updated Games + Popular Apps In Last 24 Hours + Popular Games In Last 24 Hours + Popular Apps + Popular Games + + Top Free Apps + Top Free Games + Top Grossing Apps + Top Grossing Games + Top Trending Apps + Top Trending Games + + + Downloads + Updates + App updates will be installed automatically + App updates will not be installed automatically + Waiting for un-metered network + + + No runtime android permission found! + Computed using <a href="%1$s"> Exodus Privacy Analysis + No Tracker Found! + No tracker information available for this app. + + + updateCheckIntervals + updateNotify + updateInstallAuto + updateUnmeteredOnly + + + Can\'t connect! Please check your internet connection and try again + + + %1$s]]> + When clicked confirm, it will take you to Google Play page for the app to complete the purchase using your browser. Click confirm to purchase %1$s for %2$s. + CONFIRM + CANCEL + Paid apps cannot be installed in anonymous mode. Please log into your Google account to install paid apps. + + -- GitLab From ebad4904fb8ed2ddb3a5381a9fae68c263b81aa2 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 22 Apr 2022 21:04:18 +0530 Subject: [PATCH 08/10] App lounge: (issue_5136) change listOf("null") to a variable LIST_OF_NULL --- .../main/java/foundation/e/apps/PrivacyInfoViewModel.kt | 7 ++++--- .../exodus/repositories/AppPrivacyInfoRepositoryImpl.kt | 3 ++- .../main/java/foundation/e/apps/api/fused/data/FusedApp.kt | 5 +++-- .../foundation/e/apps/application/ApplicationFragment.kt | 3 ++- .../foundation/e/apps/utils/modules/CommonUtilsModule.kt | 2 ++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt index 18b1893ea..a3f825722 100644 --- a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt +++ b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt @@ -9,6 +9,7 @@ import foundation.e.apps.api.Result import foundation.e.apps.api.exodus.models.AppPrivacyInfo import foundation.e.apps.api.exodus.repositories.IAppPrivacyInfoRepository import foundation.e.apps.api.fused.data.FusedApp +import foundation.e.apps.utils.modules.CommonUtilsModule.LIST_OF_NULL import javax.inject.Inject import kotlin.math.ceil import kotlin.math.round @@ -51,8 +52,8 @@ class PrivacyInfoViewModel @Inject constructor( appPrivacyPrivacyInfoResult: Result, fusedApp: FusedApp ): Result { - fusedApp.trackers = appPrivacyPrivacyInfoResult.data?.trackerList ?: listOf("null") - fusedApp.permsFromExodus = appPrivacyPrivacyInfoResult.data?.permissionList ?: listOf("null") + fusedApp.trackers = appPrivacyPrivacyInfoResult.data?.trackerList ?: LIST_OF_NULL + fusedApp.permsFromExodus = appPrivacyPrivacyInfoResult.data?.permissionList ?: LIST_OF_NULL if (fusedApp.perms.isEmpty()) { fusedApp.perms = fusedApp.permsFromExodus } @@ -76,7 +77,7 @@ class PrivacyInfoViewModel @Inject constructor( } fun calculatePrivacyScore(fusedApp: FusedApp): Int { - if (fusedApp.permsFromExodus == listOf("null")) { + if (fusedApp.permsFromExodus == LIST_OF_NULL) { return -1 } val calculateTrackersScore = calculateTrackersScore(fusedApp.trackers.size) diff --git a/app/src/main/java/foundation/e/apps/api/exodus/repositories/AppPrivacyInfoRepositoryImpl.kt b/app/src/main/java/foundation/e/apps/api/exodus/repositories/AppPrivacyInfoRepositoryImpl.kt index 1d387f999..076b3b5f5 100644 --- a/app/src/main/java/foundation/e/apps/api/exodus/repositories/AppPrivacyInfoRepositoryImpl.kt +++ b/app/src/main/java/foundation/e/apps/api/exodus/repositories/AppPrivacyInfoRepositoryImpl.kt @@ -7,6 +7,7 @@ import foundation.e.apps.api.exodus.Tracker import foundation.e.apps.api.exodus.TrackerDao import foundation.e.apps.api.exodus.models.AppPrivacyInfo import foundation.e.apps.api.getResult +import foundation.e.apps.utils.modules.CommonUtilsModule.LIST_OF_NULL import javax.inject.Inject import javax.inject.Singleton @@ -80,7 +81,7 @@ class AppPrivacyInfoRepositoryImpl @Inject constructor( * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5136 */ if (appTrackerData.isEmpty()) { - return AppPrivacyInfo(listOf("null"), listOf("null")) + return AppPrivacyInfo(LIST_OF_NULL, LIST_OF_NULL) } val sortedTrackerData = appTrackerData.sortedByDescending { trackerData -> trackerData.versionCode.toLong() } diff --git a/app/src/main/java/foundation/e/apps/api/fused/data/FusedApp.kt b/app/src/main/java/foundation/e/apps/api/fused/data/FusedApp.kt index 8b41d9d76..b4f349b63 100644 --- a/app/src/main/java/foundation/e/apps/api/fused/data/FusedApp.kt +++ b/app/src/main/java/foundation/e/apps/api/fused/data/FusedApp.kt @@ -21,6 +21,7 @@ package foundation.e.apps.api.fused.data import foundation.e.apps.utils.enums.Origin import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.enums.Type +import foundation.e.apps.utils.modules.CommonUtilsModule.LIST_OF_NULL data class FusedApp( val _id: String = String(), @@ -56,10 +57,10 @@ data class FusedApp( /* * List of permissions from Exodus API. * This list is now used to calculate the privacy score instead of perms variable above. - * If the value is listOf("null"), it means no data is available in Exodus API for this package, + * If the value is LIST_OF_NULL - listOf("null"), it means no data is available in Exodus API for this package, * hence display "N/A" * * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5136 */ - var permsFromExodus: List = listOf("null"), + var permsFromExodus: List = LIST_OF_NULL, ) diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt b/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt index 00620165a..fa101d628 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationFragment.kt @@ -58,6 +58,7 @@ import foundation.e.apps.manager.pkg.PkgManagerModule import foundation.e.apps.utils.enums.Origin import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.enums.User +import foundation.e.apps.utils.modules.CommonUtilsModule.LIST_OF_NULL import foundation.e.apps.utils.modules.PWAManagerModule import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -239,7 +240,7 @@ class ApplicationFragment : Fragment(R.layout.fragment_application) { var trackers = privacyInfoViewModel.getTrackerListText(fusedApp) - if (fusedApp?.trackers == listOf("null")) { + if (fusedApp?.trackers == LIST_OF_NULL) { trackers = getString(R.string.tracker_information_not_found) } else if (trackers.isNotEmpty()) { trackers += "

" + getString( diff --git a/app/src/main/java/foundation/e/apps/utils/modules/CommonUtilsModule.kt b/app/src/main/java/foundation/e/apps/utils/modules/CommonUtilsModule.kt index 950e9791c..12af86294 100644 --- a/app/src/main/java/foundation/e/apps/utils/modules/CommonUtilsModule.kt +++ b/app/src/main/java/foundation/e/apps/utils/modules/CommonUtilsModule.kt @@ -43,6 +43,8 @@ import javax.inject.Singleton @InstallIn(SingletonComponent::class) object CommonUtilsModule { + val LIST_OF_NULL = listOf("null") + /** * Check supported ABIs by device * @return An ordered list of ABIs supported by this device -- GitLab From 1f60aa5765bda788806fc894a95d673059b3e073 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Mon, 25 Apr 2022 08:46:33 +0530 Subject: [PATCH 09/10] App lounge: (issue_5136) minor fix for setting perms from permsFromExodus --- app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt index a3f825722..968d99e94 100644 --- a/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt +++ b/app/src/main/java/foundation/e/apps/PrivacyInfoViewModel.kt @@ -54,7 +54,11 @@ class PrivacyInfoViewModel @Inject constructor( ): Result { fusedApp.trackers = appPrivacyPrivacyInfoResult.data?.trackerList ?: LIST_OF_NULL fusedApp.permsFromExodus = appPrivacyPrivacyInfoResult.data?.permissionList ?: LIST_OF_NULL - if (fusedApp.perms.isEmpty()) { + if (fusedApp.perms.isEmpty() && fusedApp.permsFromExodus != LIST_OF_NULL) { + /* + * fusedApp.perms is generally populated from remote source like Play Store. + * If it is empty then set the value from permissions from exodus api. + */ fusedApp.perms = fusedApp.permsFromExodus } return appPrivacyPrivacyInfoResult -- GitLab From af52f08b58652ab077c914e1bb0ee0617c6705ba Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Mon, 25 Apr 2022 09:11:30 +0530 Subject: [PATCH 10/10] App lounge: (issue_5136) fix line endings --- app/src/main/res/values/strings.xml | 324 ++++++++++++++-------------- 1 file changed, 162 insertions(+), 162 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3857d96f7..c7f94ead7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,162 +1,162 @@ - - - - App Lounge - - - Home - Categories - Search - Updates - Settings - - - Search for an app - No apps found… - - - Applications - Games - Category Icon - Open Source - PWA - - - Welcome - Sign in to App Lounge using your Google account, or select the Anonymous mode to sign in privately. - Sign in with Google - Anonymous mode - or - - - Accept - Reject - Accepted - Before we can proceed you must read and agree to the Terms of Service. - - - Updates - 24 - Update check interval - Only on un-metered networks - Update apps automatically only on un-metered networks such as Wi-Fi - Automatically install updates - Download and install app updates in the background - Show available updates - Show a notification when app updates are available - Show applications: - Show all apps - Show only open-source apps - Show only PWAs - Account - Terms of Services - Anonymous - Log Out - - - Description - Check out \"%1$s\"\n%2$s - OK - Install - Cancel - App icon - N/A - Open - Retry - More - Update - Ratings - Rating - Score out of 5. Computed using users\' ratings of the app. - %1$s/5 - Privacy - Privacy Score - The Privacy Score is automatically computed from permissions and trackers that are detected in applications. It gives an idea indication about how much an application is likely to be micro-targeting its users.<br /><br />Its computing algorithm\'s source code can be <a href="%1$s">found here</a>.<br /><br />Trackers detection is performed using <a href="%2$s">Exodus Privacy tools</a>.<br /><br />Score out of 10.<br /><br />Learn more about how the Privacy Score is computed, its limitations and how you can protect yourself from micro-targeting <a href="%3$s>on this page</a>. - %1$s/10 - Privacy analyses - Permissions - Trackers - Information - Version: %1$s - Updated on: %1$s - Requires: %1$s - License: %1$s - Package name: %1$s - Paid apps cannot be installed in anonymous mode. Please log into your Google account to install paid apps. - Paid apps are not supported in App Lounge yet. Just a little more patience, it will soon be the case. - This app will be available later! - Unknown Error! - There is not enough space available to download this application! - - - Update All - - %1$d app update is available - %1$d app updates are available - - App updates will be installed automatically - App updates will not be installed automatically - All apps are up-to-date - - - Discover - Top Updated Apps - Top Updated Games - Popular Apps In Last 24 Hours - Popular Games In Last 24 Hours - Popular Apps - Popular Games - - Top Free Apps - Top Free Games - Top Grossing Apps - Top Grossing Games - Top Trending Apps - Top Trending Games - - - Downloads - Updates - App updates will be installed automatically - App updates will not be installed automatically - Waiting for un-metered network - - - No runtime android permission found! - Computed using <a href="%1$s"> Exodus Privacy Analysis - No Tracker Found! - No tracker information available for this app. - - - updateCheckIntervals - updateNotify - updateInstallAuto - updateUnmeteredOnly - - - Can\'t connect! Please check your internet connection and try again - - - %1$s]]> - When clicked confirm, it will take you to Google Play page for the app to complete the purchase using your browser. Click confirm to purchase %1$s for %2$s. - CONFIRM - CANCEL - Paid apps cannot be installed in anonymous mode. Please log into your Google account to install paid apps. - - + + + + App Lounge + + + Home + Categories + Search + Updates + Settings + + + Search for an app + No apps found… + + + Applications + Games + Category Icon + Open Source + PWA + + + Welcome + Sign in to App Lounge using your Google account, or select the Anonymous mode to sign in privately. + Sign in with Google + Anonymous mode + or + + + Accept + Reject + Accepted + Before we can proceed you must read and agree to the Terms of Service. + + + Updates + 24 + Update check interval + Only on un-metered networks + Update apps automatically only on un-metered networks such as Wi-Fi + Automatically install updates + Download and install app updates in the background + Show available updates + Show a notification when app updates are available + Show applications: + Show all apps + Show only open-source apps + Show only PWAs + Account + Terms of Services + Anonymous + Log Out + + + Description + Check out \"%1$s\"\n%2$s + OK + Install + Cancel + App icon + N/A + Open + Retry + More + Update + Ratings + Rating + Score out of 5. Computed using users\' ratings of the app. + %1$s/5 + Privacy + Privacy Score + The Privacy Score is automatically computed from permissions and trackers that are detected in applications. It gives an idea indication about how much an application is likely to be micro-targeting its users.<br /><br />Its computing algorithm\'s source code can be <a href="%1$s">found here</a>.<br /><br />Trackers detection is performed using <a href="%2$s">Exodus Privacy tools</a>.<br /><br />Score out of 10.<br /><br />Learn more about how the Privacy Score is computed, its limitations and how you can protect yourself from micro-targeting <a href="%3$s>on this page</a>. + %1$s/10 + Privacy analyses + Permissions + Trackers + Information + Version: %1$s + Updated on: %1$s + Requires: %1$s + License: %1$s + Package name: %1$s + Paid apps cannot be installed in anonymous mode. Please log into your Google account to install paid apps. + Paid apps are not supported in App Lounge yet. Just a little more patience, it will soon be the case. + This app will be available later! + Unknown Error! + There is not enough space available to download this application! + + + Update All + + %1$d app update is available + %1$d app updates are available + + App updates will be installed automatically + App updates will not be installed automatically + All apps are up-to-date + + + Discover + Top Updated Apps + Top Updated Games + Popular Apps In Last 24 Hours + Popular Games In Last 24 Hours + Popular Apps + Popular Games + + Top Free Apps + Top Free Games + Top Grossing Apps + Top Grossing Games + Top Trending Apps + Top Trending Games + + + Downloads + Updates + App updates will be installed automatically + App updates will not be installed automatically + Waiting for un-metered network + + + No runtime android permission found! + Computed using <a href="%1$s"> Exodus Privacy Analysis + No Tracker Found! + No tracker information available for this app. + + + updateCheckIntervals + updateNotify + updateInstallAuto + updateUnmeteredOnly + + + Can\'t connect! Please check your internet connection and try again + + + %1$s]]> + When clicked confirm, it will take you to Google Play page for the app to complete the purchase using your browser. Click confirm to purchase %1$s for %2$s. + CONFIRM + CANCEL + Paid apps cannot be installed in anonymous mode. Please log into your Google account to install paid apps. + + -- GitLab