Loading app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt +4 −1 Original line number Original line Diff line number Diff line Loading @@ -20,4 +20,7 @@ package foundation.e.apps.data.blockedApps import com.google.gson.annotations.SerializedName import com.google.gson.annotations.SerializedName data class AppWarningInfo(@SerializedName("not_working_apps") val notWorkingApps: List<String>) data class AppWarningInfo( @SerializedName("not_working_apps") val notWorkingApps: List<String>, @SerializedName("zero_privacy_apps") val zeroPrivacyApps: List<String> ) app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +4 −1 Original line number Original line Diff line number Diff line Loading @@ -50,6 +50,9 @@ class BlockedAppRepository @Inject constructor( fun isBlockedApp(packageName: String) = fun isBlockedApp(packageName: String) = blockedAppInfoList?.notWorkingApps?.contains(packageName) ?: false blockedAppInfoList?.notWorkingApps?.contains(packageName) ?: false fun isPrivacyScoreZero(packageName: String) = blockedAppInfoList?.zeroPrivacyApps?.contains(packageName) ?: false suspend fun fetchUpdateOfAppWarningList(): Boolean = suspend fun fetchUpdateOfAppWarningList(): Boolean = suspendCancellableCoroutine { continuation -> suspendCancellableCoroutine { continuation -> downloadManager.downloadFileInCache( downloadManager.downloadFileInCache( Loading @@ -75,7 +78,7 @@ class BlockedAppRepository @Inject constructor( gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) } catch (exception: Exception) { } catch (exception: Exception) { Timber.e(exception.localizedMessage ?: "", exception) Timber.e(exception.localizedMessage ?: "", exception) AppWarningInfo(listOf()) AppWarningInfo(listOf(), listOf()) } } } } } } app/src/main/java/foundation/e/apps/data/exodus/repositories/PrivacyScoreRepositoryImpl.kt +19 −7 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package foundation.e.apps.data.exodus.repositories package foundation.e.apps.data.exodus.repositories import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.di.CommonUtilsModule import foundation.e.apps.di.CommonUtilsModule import javax.inject.Inject import javax.inject.Inject import javax.inject.Singleton import javax.inject.Singleton Loading @@ -26,18 +27,29 @@ import kotlin.math.ceil import kotlin.math.round import kotlin.math.round @Singleton @Singleton class PrivacyScoreRepositoryImpl @Inject constructor() : PrivacyScoreRepository { class PrivacyScoreRepositoryImpl @Inject constructor( private val blockedAppRepository: BlockedAppRepository ) : PrivacyScoreRepository { override fun calculatePrivacyScore(application: Application): Int { override fun calculatePrivacyScore(application: Application): Int { var privacyScore = -1 if (blockedAppRepository.isPrivacyScoreZero(application.package_name)) { privacyScore = 0 } if (application.permsFromExodus == CommonUtilsModule.LIST_OF_NULL) { if (application.permsFromExodus == CommonUtilsModule.LIST_OF_NULL) { return -1 return privacyScore } } if (privacyScore != 0) { val calculateTrackersScore = calculateTrackersScore(application.trackers.size) val calculateTrackersScore = calculateTrackersScore(application.trackers.size) val calculatePermissionsScore = calculatePermissionsScore( val calculatePermissionsScore = calculatePermissionsScore( countAndroidPermissions(application) countAndroidPermissions(application) ) ) return calculateTrackersScore + calculatePermissionsScore privacyScore = calculateTrackersScore + calculatePermissionsScore } return privacyScore } } private fun calculateTrackersScore(numberOfTrackers: Int): Int { private fun calculateTrackersScore(numberOfTrackers: Int): Int { Loading app/src/test/java/foundation/e/apps/exodus/PrivacyScoreRepositoryImplTest.kt +10 −1 Original line number Original line Diff line number Diff line Loading @@ -21,18 +21,27 @@ package foundation.e.apps.exodus import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.Status import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepositoryImpl import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepositoryImpl import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.di.CommonUtilsModule import foundation.e.apps.di.CommonUtilsModule import org.junit.Assert import org.junit.Assert import org.junit.Before import org.junit.Before import org.junit.Test import org.junit.Test import org.mockito.Mock import org.mockito.Mockito import org.mockito.MockitoAnnotations import org.mockito.kotlin.any class PrivacyScoreRepositoryImplTest { class PrivacyScoreRepositoryImplTest { private lateinit var privacyScoreRepository: PrivacyScoreRepositoryImpl private lateinit var privacyScoreRepository: PrivacyScoreRepositoryImpl @Mock private lateinit var blockedAppRepository: BlockedAppRepository @Before @Before fun setup() { fun setup() { privacyScoreRepository = PrivacyScoreRepositoryImpl() MockitoAnnotations.openMocks(this) privacyScoreRepository = PrivacyScoreRepositoryImpl(blockedAppRepository) } } @Test @Test Loading Loading
app/src/main/java/foundation/e/apps/data/blockedApps/AppWarningInfo.kt +4 −1 Original line number Original line Diff line number Diff line Loading @@ -20,4 +20,7 @@ package foundation.e.apps.data.blockedApps import com.google.gson.annotations.SerializedName import com.google.gson.annotations.SerializedName data class AppWarningInfo(@SerializedName("not_working_apps") val notWorkingApps: List<String>) data class AppWarningInfo( @SerializedName("not_working_apps") val notWorkingApps: List<String>, @SerializedName("zero_privacy_apps") val zeroPrivacyApps: List<String> )
app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +4 −1 Original line number Original line Diff line number Diff line Loading @@ -50,6 +50,9 @@ class BlockedAppRepository @Inject constructor( fun isBlockedApp(packageName: String) = fun isBlockedApp(packageName: String) = blockedAppInfoList?.notWorkingApps?.contains(packageName) ?: false blockedAppInfoList?.notWorkingApps?.contains(packageName) ?: false fun isPrivacyScoreZero(packageName: String) = blockedAppInfoList?.zeroPrivacyApps?.contains(packageName) ?: false suspend fun fetchUpdateOfAppWarningList(): Boolean = suspend fun fetchUpdateOfAppWarningList(): Boolean = suspendCancellableCoroutine { continuation -> suspendCancellableCoroutine { continuation -> downloadManager.downloadFileInCache( downloadManager.downloadFileInCache( Loading @@ -75,7 +78,7 @@ class BlockedAppRepository @Inject constructor( gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) } catch (exception: Exception) { } catch (exception: Exception) { Timber.e(exception.localizedMessage ?: "", exception) Timber.e(exception.localizedMessage ?: "", exception) AppWarningInfo(listOf()) AppWarningInfo(listOf(), listOf()) } } } } } }
app/src/main/java/foundation/e/apps/data/exodus/repositories/PrivacyScoreRepositoryImpl.kt +19 −7 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package foundation.e.apps.data.exodus.repositories package foundation.e.apps.data.exodus.repositories import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.di.CommonUtilsModule import foundation.e.apps.di.CommonUtilsModule import javax.inject.Inject import javax.inject.Inject import javax.inject.Singleton import javax.inject.Singleton Loading @@ -26,18 +27,29 @@ import kotlin.math.ceil import kotlin.math.round import kotlin.math.round @Singleton @Singleton class PrivacyScoreRepositoryImpl @Inject constructor() : PrivacyScoreRepository { class PrivacyScoreRepositoryImpl @Inject constructor( private val blockedAppRepository: BlockedAppRepository ) : PrivacyScoreRepository { override fun calculatePrivacyScore(application: Application): Int { override fun calculatePrivacyScore(application: Application): Int { var privacyScore = -1 if (blockedAppRepository.isPrivacyScoreZero(application.package_name)) { privacyScore = 0 } if (application.permsFromExodus == CommonUtilsModule.LIST_OF_NULL) { if (application.permsFromExodus == CommonUtilsModule.LIST_OF_NULL) { return -1 return privacyScore } } if (privacyScore != 0) { val calculateTrackersScore = calculateTrackersScore(application.trackers.size) val calculateTrackersScore = calculateTrackersScore(application.trackers.size) val calculatePermissionsScore = calculatePermissionsScore( val calculatePermissionsScore = calculatePermissionsScore( countAndroidPermissions(application) countAndroidPermissions(application) ) ) return calculateTrackersScore + calculatePermissionsScore privacyScore = calculateTrackersScore + calculatePermissionsScore } return privacyScore } } private fun calculateTrackersScore(numberOfTrackers: Int): Int { private fun calculateTrackersScore(numberOfTrackers: Int): Int { Loading
app/src/test/java/foundation/e/apps/exodus/PrivacyScoreRepositoryImplTest.kt +10 −1 Original line number Original line Diff line number Diff line Loading @@ -21,18 +21,27 @@ package foundation.e.apps.exodus import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.Status import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepositoryImpl import foundation.e.apps.data.exodus.repositories.PrivacyScoreRepositoryImpl import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.di.CommonUtilsModule import foundation.e.apps.di.CommonUtilsModule import org.junit.Assert import org.junit.Assert import org.junit.Before import org.junit.Before import org.junit.Test import org.junit.Test import org.mockito.Mock import org.mockito.Mockito import org.mockito.MockitoAnnotations import org.mockito.kotlin.any class PrivacyScoreRepositoryImplTest { class PrivacyScoreRepositoryImplTest { private lateinit var privacyScoreRepository: PrivacyScoreRepositoryImpl private lateinit var privacyScoreRepository: PrivacyScoreRepositoryImpl @Mock private lateinit var blockedAppRepository: BlockedAppRepository @Before @Before fun setup() { fun setup() { privacyScoreRepository = PrivacyScoreRepositoryImpl() MockitoAnnotations.openMocks(this) privacyScoreRepository = PrivacyScoreRepositoryImpl(blockedAppRepository) } } @Test @Test Loading