diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt
index c645eda1616503026fe92f5a22531ec70fd39b7d..f198993791e8c3310499c95630899a26cdb88819 100644
--- a/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt
+++ b/app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt
@@ -1,6 +1,5 @@
/*
- * Apps Quickly and easily install Android apps onto your device!
- * Copyright (C) 2022 E FOUNDATION
+ * Copyright (C) 2022-2024 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -14,6 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
+ *
*/
package foundation.e.apps.data.blockedApps
@@ -22,5 +22,6 @@ import com.google.gson.annotations.SerializedName
data class AppWarningInfo(
@SerializedName("not_working_apps") val notWorkingApps: List,
- @SerializedName("zero_privacy_apps") val zeroPrivacyApps: List
+ @SerializedName("zero_privacy_apps") val zeroPrivacyApps: List,
+ @SerializedName("third_party_store_apps") val thirdPartyStoreApps: List = emptyList()
)
diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt
index 79755cb7eaf5c1f62301678d45f57f82ad563e31..962b1e0d5877ed299039c145696ef6cc9b68effc 100644
--- a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt
+++ b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt
@@ -1,6 +1,5 @@
/*
- * Apps Quickly and easily install Android apps onto your device!
- * Copyright (C) 2022 E FOUNDATION
+ * Copyright (C) 2022-2024 E FOUNDATION
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -14,6 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
+ *
*/
package foundation.e.apps.data.blockedApps
@@ -53,6 +53,10 @@ class BlockedAppRepository @Inject constructor(
fun isPrivacyScoreZero(packageName: String) =
blockedAppInfoList?.zeroPrivacyApps?.contains(packageName) ?: false
+ fun isThirdPartyStoreApp(packageName: String): Boolean {
+ return blockedAppInfoList?.thirdPartyStoreApps?.contains(packageName) ?: false
+ }
+
suspend fun fetchUpdateOfAppWarningList(): Boolean =
suspendCancellableCoroutine { continuation ->
downloadManager.downloadFileInCache(
@@ -78,7 +82,7 @@ class BlockedAppRepository @Inject constructor(
gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java)
} catch (exception: Exception) {
Timber.e(exception.localizedMessage ?: "", exception)
- AppWarningInfo(listOf(), listOf())
+ AppWarningInfo(listOf(), listOf(), listOf())
}
}
}
diff --git a/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt b/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt
index 1370ad1cf2fb16de51cca9555af983ad644ee922..4da0219edc6d25c01ee84d14194fc8b603f0a7ea 100644
--- a/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt
+++ b/app/src/main/java/foundation/e/apps/domain/ValidateAppAgeLimitUseCase.kt
@@ -21,13 +21,14 @@ package foundation.e.apps.domain
import com.aurora.gplayapi.data.models.ContentRating
import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.application.apps.AppsApi
-import foundation.e.apps.data.parentalcontrol.Age
-import foundation.e.apps.data.parentalcontrol.ParentalControlRepository
+import foundation.e.apps.data.blockedApps.BlockedAppRepository
import foundation.e.apps.data.enums.Origin
import foundation.e.apps.data.enums.Type
import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository
+import foundation.e.apps.data.parentalcontrol.Age
import foundation.e.apps.data.parentalcontrol.ContentRatingDao
+import foundation.e.apps.data.parentalcontrol.ParentalControlRepository
+import foundation.e.apps.data.parentalcontrol.fdroid.FDroidAntiFeatureRepository
import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingGroup
import foundation.e.apps.data.parentalcontrol.googleplay.GPlayContentRatingRepository
import foundation.e.apps.domain.model.ContentRatingValidity
@@ -38,6 +39,7 @@ class ValidateAppAgeLimitUseCase @Inject constructor(
private val gPlayContentRatingRepository: GPlayContentRatingRepository,
private val fDroidAntiFeatureRepository: FDroidAntiFeatureRepository,
private val parentalControlRepository: ParentalControlRepository,
+ private val blockedAppRepository: BlockedAppRepository,
private val appsApi: AppsApi,
private val contentRatingDao: ContentRatingDao,
) {
@@ -60,7 +62,10 @@ class ValidateAppAgeLimitUseCase @Inject constructor(
data = ContentRatingValidity(true)
)
+ isThirdPartyStoreApp(app) -> ResultSupreme.Success(data = ContentRatingValidity(false))
+
isKnownNsfwApp(app) -> ResultSupreme.Success(data = ContentRatingValidity(false))
+
isCleanApkApp(app) -> ResultSupreme.Success(
data = ContentRatingValidity(isValid = !isNsfwAppByCleanApkApi(app))
)
@@ -74,6 +79,10 @@ class ValidateAppAgeLimitUseCase @Inject constructor(
}
}
+ private fun isThirdPartyStoreApp(app: AppInstall): Boolean {
+ return blockedAppRepository.isThirdPartyStoreApp(app.packageName)
+ }
+
private fun isGitlabApp(app: AppInstall): Boolean {
return app.origin == Origin.GITLAB_RELEASES
}
diff --git a/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt b/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt
index c82240b4047150b1629bb43c0c41418ee08d4eee..a09a642554766991e2eab07ae7d7255026fccc29 100644
--- a/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt
+++ b/app/src/main/java/foundation/e/apps/provider/AgeRatingProvider.kt
@@ -40,6 +40,7 @@ import foundation.e.apps.contract.ParentalControlContract.PATH_BLOCKLIST
import foundation.e.apps.contract.ParentalControlContract.PATH_LOGIN_TYPE
import foundation.e.apps.contract.ParentalControlContract.getAppLoungeProviderAuthority
import foundation.e.apps.data.ResultSupreme
+import foundation.e.apps.data.blockedApps.BlockedAppRepository
import foundation.e.apps.data.enums.Origin
import foundation.e.apps.data.install.models.AppInstall
import foundation.e.apps.data.login.AuthenticatorRepository
@@ -73,6 +74,7 @@ class AgeRatingProvider : ContentProvider() {
fun provideDataStoreManager(): DataStoreManager
fun provideNotificationManager(): NotificationManager
fun provideContentRatingDao(): ContentRatingDao
+ fun provideBlockedAppRepository(): BlockedAppRepository
}
companion object {
@@ -88,6 +90,7 @@ class AgeRatingProvider : ContentProvider() {
private lateinit var dataStoreManager: DataStoreManager
private lateinit var notificationManager: NotificationManager
private lateinit var contentRatingDao: ContentRatingDao
+ private lateinit var blockedAppRepository: BlockedAppRepository
private enum class UriCode(val code: Int) {
LoginType(1),
@@ -230,7 +233,7 @@ class AgeRatingProvider : ContentProvider() {
)
}
- private suspend fun isAppValidRegardingNSWF(packageName: String): Boolean {
+ private suspend fun isAppValidRegardingNSFW(packageName: String): Boolean {
val fakeAppInstall = AppInstall(
packageName = packageName,
origin = Origin.CLEANAPK,
@@ -243,12 +246,17 @@ class AgeRatingProvider : ContentProvider() {
return when {
validateAppAgeLimitUseCase.isParentalControlDisabled() -> true
!isInitialized() -> false
- !isAppValidRegardingNSWF(packageName) -> false
+ isThirdPartyStoreApp(packageName) -> false
+ !isAppValidRegardingNSFW(packageName) -> false
isAppValidRegardingAge(packageName) == false -> false
else -> true
}
}
+ private fun isThirdPartyStoreApp(packageName: String): Boolean {
+ return blockedAppRepository.isThirdPartyStoreApp(packageName)
+ }
+
private suspend fun compileAppBlockList(
cursor: MatrixCursor,
packageNames: List,
@@ -304,6 +312,7 @@ class AgeRatingProvider : ContentProvider() {
dataStoreManager = hiltEntryPoint.provideDataStoreManager()
notificationManager = hiltEntryPoint.provideNotificationManager()
contentRatingDao = hiltEntryPoint.provideContentRatingDao()
+ blockedAppRepository = hiltEntryPoint.provideBlockedAppRepository()
return true
}