summaryrefslogtreecommitdiffstats
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt57
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/DependencyContainer.kt210
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt124
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/Notifications.kt6
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/UpdateTrackersWorker.kt59
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/common/ToggleAppsAdapter.kt2
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt5
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/data/repositories/AppListsRepository.kt281
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/data/repositories/LocalStateRepository.kt2
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/data/repositories/TrackersRepository.kt133
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/entities/AppWithCounts.kt1
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/usecases/AppListUseCase.kt2
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/usecases/FakeLocationStateUseCase.kt12
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/usecases/GetQuickPrivacyStateUseCase.kt4
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/usecases/IpScramblingStateUseCase.kt24
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/usecases/TrackersStateUseCase.kt61
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/usecases/TrackersStatisticsUseCase.kt115
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/domain/usecases/UpdateWidgetUseCase.kt33
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardFragment.kt12
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyFragment.kt12
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyState.kt2
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyViewModel.kt4
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/location/FakeLocationFragment.kt12
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/trackers/TrackersFragment.kt11
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/trackers/apptrackers/AppTrackersFragment.kt14
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/trackers/apptrackers/AppTrackersState.kt4
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/trackers/apptrackers/AppTrackersViewModel.kt4
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/features/trackers/apptrackers/ToggleTrackersAdapter.kt2
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/widget/WidgetCommandReceiver.kt11
29 files changed, 308 insertions, 911 deletions
diff --git a/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt b/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt
index 9ce0c2b..0af2a0e 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt
@@ -18,17 +18,64 @@
package foundation.e.advancedprivacy
import android.app.Application
+import android.content.Intent
+import foundation.e.advancedprivacy.common.WarningDialog
+import foundation.e.advancedprivacy.domain.usecases.FakeLocationStateUseCase
+import foundation.e.advancedprivacy.domain.usecases.GetQuickPrivacyStateUseCase
+import foundation.e.advancedprivacy.domain.usecases.IpScramblingStateUseCase
+import foundation.e.advancedprivacy.domain.usecases.ShowFeaturesWarningUseCase
+import foundation.e.advancedprivacy.domain.usecases.TrackersStateUseCase
+import foundation.e.advancedprivacy.domain.usecases.TrackersStatisticsUseCase
+import foundation.e.advancedprivacy.externalinterfaces.permissions.IPermissionsPrivacyModule
+import foundation.e.advancedprivacy.trackers.services.DNSBlockerService
+import foundation.e.advancedprivacy.trackers.services.UpdateTrackersWorker
import foundation.e.lib.telemetry.Telemetry
+import kotlinx.coroutines.CoroutineScope
+import org.koin.android.ext.koin.androidContext
+import org.koin.core.context.startKoin
+import org.koin.java.KoinJavaComponent.get
class AdvancedPrivacyApplication : Application() {
-
- // Initialize the dependency container.
- val dependencyContainer: DependencyContainer by lazy { DependencyContainer(this) }
-
override fun onCreate() {
super.onCreate()
Telemetry.init(BuildConfig.SENTRY_DSN, this, true)
- dependencyContainer.initBackgroundSingletons()
+ startKoin {
+ androidContext(this@AdvancedPrivacyApplication)
+ modules(appModule)
+ }
+ initBackgroundSingletons()
+ }
+
+ private fun initBackgroundSingletons() {
+ UpdateTrackersWorker.periodicUpdate(this)
+
+ WarningDialog.startListening(
+ get(ShowFeaturesWarningUseCase::class.java),
+ get(CoroutineScope::class.java),
+ this
+ )
+
+ Widget.startListening(
+ this,
+ get(GetQuickPrivacyStateUseCase::class.java),
+ get(TrackersStatisticsUseCase::class.java),
+ )
+
+ Notifications.startListening(
+ this,
+ get(GetQuickPrivacyStateUseCase::class.java),
+ get(IPermissionsPrivacyModule::class.java),
+ get(CoroutineScope::class.java),
+ )
+
+ get<IpScramblingStateUseCase>(IpScramblingStateUseCase::class.java)
+ get<FakeLocationStateUseCase>(FakeLocationStateUseCase::class.java)
+ get<TrackersStateUseCase>(TrackersStateUseCase::class.java)
+
+ val intent = Intent(this, DNSBlockerService::class.java)
+ intent.action = DNSBlockerService.ACTION_START
+ intent.putExtra(DNSBlockerService.EXTRA_ENABLE_NOTIFICATION, false)
+ startService(intent)
}
}
diff --git a/app/src/main/java/foundation/e/advancedprivacy/DependencyContainer.kt b/app/src/main/java/foundation/e/advancedprivacy/DependencyContainer.kt
deleted file mode 100644
index f6f2038..0000000
--- a/app/src/main/java/foundation/e/advancedprivacy/DependencyContainer.kt
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2023 MURENA SAS
- * Copyright (C) 2021 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
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-package foundation.e.advancedprivacy
-
-import android.app.Application
-import android.content.Context
-import android.os.Process
-import androidx.lifecycle.DEFAULT_ARGS_KEY
-import androidx.lifecycle.ViewModel
-import androidx.lifecycle.ViewModelProvider
-import androidx.lifecycle.viewmodel.CreationExtras
-import foundation.e.advancedprivacy.common.WarningDialog
-import foundation.e.advancedprivacy.data.repositories.AppListsRepository
-import foundation.e.advancedprivacy.data.repositories.LocalStateRepository
-import foundation.e.advancedprivacy.data.repositories.TrackersRepository
-import foundation.e.advancedprivacy.domain.usecases.AppListUseCase
-import foundation.e.advancedprivacy.domain.usecases.FakeLocationStateUseCase
-import foundation.e.advancedprivacy.domain.usecases.GetQuickPrivacyStateUseCase
-import foundation.e.advancedprivacy.domain.usecases.IpScramblingStateUseCase
-import foundation.e.advancedprivacy.domain.usecases.ShowFeaturesWarningUseCase
-import foundation.e.advancedprivacy.domain.usecases.TrackersStateUseCase
-import foundation.e.advancedprivacy.domain.usecases.TrackersStatisticsUseCase
-import foundation.e.advancedprivacy.dummy.CityDataSource
-import foundation.e.advancedprivacy.features.dashboard.DashboardViewModel
-import foundation.e.advancedprivacy.features.internetprivacy.InternetPrivacyViewModel
-import foundation.e.advancedprivacy.features.location.FakeLocationViewModel
-import foundation.e.advancedprivacy.features.trackers.TrackersViewModel
-import foundation.e.advancedprivacy.features.trackers.apptrackers.AppTrackersFragmentArgs
-import foundation.e.advancedprivacy.features.trackers.apptrackers.AppTrackersViewModel
-import foundation.e.privacymodules.fakelocation.FakeLocationModule
-import foundation.e.privacymodules.ipscrambler.IIpScramblerModule
-import foundation.e.privacymodules.ipscrambler.IpScramblerModule
-import foundation.e.privacymodules.permissions.PermissionsPrivacyModule
-import foundation.e.privacymodules.permissions.data.ApplicationDescription
-import foundation.e.privacymodules.permissions.data.ProfileType
-import foundation.e.privacymodules.trackers.api.BlockTrackersPrivacyModule
-import foundation.e.privacymodules.trackers.api.TrackTrackersPrivacyModule
-import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.GlobalScope
-
-/**
- * Simple container to hold application wide dependencies.
- *
- */
-@OptIn(DelicateCoroutinesApi::class)
-class DependencyContainer(val app: Application) {
- val context: Context by lazy { app.applicationContext }
-
- // Drivers
- private val fakeLocationModule: FakeLocationModule by lazy { FakeLocationModule(app.applicationContext) }
- private val permissionsModule by lazy { PermissionsPrivacyModule(app.applicationContext) }
- private val ipScramblerModule: IIpScramblerModule by lazy { IpScramblerModule(app.applicationContext) }
-
- private val appDesc by lazy {
- ApplicationDescription(
- packageName = context.packageName,
- uid = Process.myUid(),
- label = context.resources.getString(R.string.app_name),
- icon = null,
- profileId = -1,
- profileType = ProfileType.MAIN
- )
- }
-
- private val blockTrackersPrivacyModule by lazy { BlockTrackersPrivacyModule.getInstance(context) }
- private val trackTrackersPrivacyModule by lazy { TrackTrackersPrivacyModule.getInstance(context) }
-
- // Repositories
- private val localStateRepository by lazy { LocalStateRepository(context) }
- private val trackersRepository by lazy { TrackersRepository(context) }
- private val appListsRepository by lazy { AppListsRepository(permissionsModule, context, GlobalScope) }
-
- // Usecases
- val getQuickPrivacyStateUseCase by lazy {
- GetQuickPrivacyStateUseCase(localStateRepository)
- }
- private val ipScramblingStateUseCase by lazy {
- IpScramblingStateUseCase(
- ipScramblerModule, permissionsModule, appDesc, localStateRepository,
- appListsRepository, GlobalScope
- )
- }
- private val appListUseCase = AppListUseCase(appListsRepository)
-
- val trackersStatisticsUseCase by lazy {
- TrackersStatisticsUseCase(trackTrackersPrivacyModule, blockTrackersPrivacyModule, appListsRepository, context.resources)
- }
-
- val trackersStateUseCase by lazy {
- TrackersStateUseCase(blockTrackersPrivacyModule, trackTrackersPrivacyModule, localStateRepository, trackersRepository, appListsRepository, GlobalScope)
- }
-
- private val fakeLocationStateUseCase by lazy {
- FakeLocationStateUseCase(
- fakeLocationModule, permissionsModule, localStateRepository, CityDataSource, appDesc, context, GlobalScope
- )
- }
-
- val showFeaturesWarningUseCase by lazy {
- ShowFeaturesWarningUseCase(localStateRepository = localStateRepository)
- }
-
- val viewModelsFactory by lazy {
- ViewModelsFactory(
- getQuickPrivacyStateUseCase = getQuickPrivacyStateUseCase,
- trackersStatisticsUseCase = trackersStatisticsUseCase,
- trackersStateUseCase = trackersStateUseCase,
- fakeLocationStateUseCase = fakeLocationStateUseCase,
- ipScramblerModule = ipScramblerModule,
- ipScramblingStateUseCase = ipScramblingStateUseCase,
- appListUseCase = appListUseCase
- )
- }
-
- // Background
- fun initBackgroundSingletons() {
- trackersStateUseCase
- ipScramblingStateUseCase
- fakeLocationStateUseCase
-
- UpdateTrackersWorker.periodicUpdate(context)
-
- WarningDialog.startListening(
- showFeaturesWarningUseCase,
- GlobalScope,
- context
- )
-
- Widget.startListening(
- context,
- getQuickPrivacyStateUseCase,
- trackersStatisticsUseCase,
- )
-
- Notifications.startListening(
- context,
- getQuickPrivacyStateUseCase,
- permissionsModule,
- GlobalScope
- )
- }
-}
-
-@Suppress("LongParameterList")
-class ViewModelsFactory(
- private val getQuickPrivacyStateUseCase: GetQuickPrivacyStateUseCase,
- private val trackersStatisticsUseCase: TrackersStatisticsUseCase,
- private val trackersStateUseCase: TrackersStateUseCase,
- private val fakeLocationStateUseCase: FakeLocationStateUseCase,
- private val ipScramblerModule: IIpScramblerModule,
- private val ipScramblingStateUseCase: IpScramblingStateUseCase,
- private val appListUseCase: AppListUseCase
-) : ViewModelProvider.Factory {
-
- @Suppress("UNCHECKED_CAST")
- override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T {
- return when (modelClass) {
- AppTrackersViewModel::class.java -> {
- val app = extras[DEFAULT_ARGS_KEY]?.let {
- appListUseCase.getApp(AppTrackersFragmentArgs.fromBundle(it).appUid)
- } ?: appListUseCase.dummySystemApp
-
- AppTrackersViewModel(
- app = app,
- trackersStateUseCase = trackersStateUseCase,
- trackersStatisticsUseCase = trackersStatisticsUseCase,
- getQuickPrivacyStateUseCase = getQuickPrivacyStateUseCase
- )
- }
-
- TrackersViewModel::class.java ->
- TrackersViewModel(
- trackersStatisticsUseCase = trackersStatisticsUseCase
- )
- FakeLocationViewModel::class.java ->
- FakeLocationViewModel(
- fakeLocationStateUseCase = fakeLocationStateUseCase
- )
- InternetPrivacyViewModel::class.java ->
- InternetPrivacyViewModel(
- ipScramblerModule = ipScramblerModule,
- getQuickPrivacyStateUseCase = getQuickPrivacyStateUseCase,
- ipScramblingStateUseCase = ipScramblingStateUseCase,
- appListUseCase = appListUseCase
- )
- DashboardViewModel::class.java ->
- DashboardViewModel(
- getPrivacyStateUseCase = getQuickPrivacyStateUseCase,
- trackersStatisticsUseCase = trackersStatisticsUseCase
- )
- else -> throw IllegalArgumentException("Unknown class $modelClass")
- } as T
- }
-}
diff --git a/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt b/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt
new file mode 100644
index 0000000..534aa6b
--- /dev/null
+++ b/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt
@@ -0,0 +1,124 @@
+package foundation.e.advancedprivacy
+
+import android.content.res.Resources
+import android.os.Process
+import foundation.e.advancedprivacy.core.coreModule
+import foundation.e.advancedprivacy.data.repositories.LocalStateRepository
+import foundation.e.advancedprivacy.domain.entities.ApplicationDescription
+import foundation.e.advancedprivacy.domain.entities.ProfileType
+import foundation.e.advancedprivacy.domain.usecases.AppListUseCase
+import foundation.e.advancedprivacy.domain.usecases.FakeLocationStateUseCase
+import foundation.e.advancedprivacy.domain.usecases.GetQuickPrivacyStateUseCase
+import foundation.e.advancedprivacy.domain.usecases.IpScramblingStateUseCase
+import foundation.e.advancedprivacy.domain.usecases.ShowFeaturesWarningUseCase
+import foundation.e.advancedprivacy.domain.usecases.TrackersStateUseCase
+import foundation.e.advancedprivacy.domain.usecases.TrackersStatisticsUseCase
+import foundation.e.advancedprivacy.dummy.CityDataSource
+import foundation.e.advancedprivacy.externalinterfaces.permissions.IPermissionsPrivacyModule
+import foundation.e.advancedprivacy.fakelocation.fakelocationModule
+import foundation.e.advancedprivacy.features.dashboard.DashboardViewModel
+import foundation.e.advancedprivacy.features.internetprivacy.InternetPrivacyViewModel
+import foundation.e.advancedprivacy.features.location.FakeLocationViewModel
+import foundation.e.advancedprivacy.features.trackers.TrackersViewModel
+import foundation.e.advancedprivacy.features.trackers.apptrackers.AppTrackersViewModel
+import foundation.e.advancedprivacy.ipscrambler.ipScramblerModule
+import foundation.e.advancedprivacy.permissions.externalinterfaces.PermissionsPrivacyModule
+import foundation.e.advancedprivacy.trackers.trackersModule
+import org.koin.android.ext.koin.androidContext
+import org.koin.androidx.viewmodel.dsl.viewModel
+import org.koin.androidx.viewmodel.dsl.viewModelOf
+import org.koin.core.module.dsl.singleOf
+import org.koin.core.qualifier.named
+import org.koin.dsl.module
+
+val appModule = module {
+ includes(coreModule, trackersModule, fakelocationModule, ipScramblerModule)
+
+ factory<Resources> { androidContext().resources }
+ single {
+ LocalStateRepository(context = androidContext())
+ }
+
+ single<ApplicationDescription>(named("AdvancedPrivacy")) {
+ ApplicationDescription(
+ packageName = androidContext().packageName,
+ uid = Process.myUid(),
+ label = androidContext().resources.getString(R.string.app_name),
+ icon = null,
+ profileId = -1,
+ profileType = ProfileType.MAIN
+ )
+ }
+
+ single<ApplicationDescription>(named("DummySystemApp")) {
+ ApplicationDescription(
+ packageName = "foundation.e.dummysystemapp",
+ uid = -1,
+ label = androidContext().getString(R.string.dummy_system_app_label),
+ icon = androidContext().getDrawable(R.drawable.ic_e_app_logo),
+ profileId = -1,
+ profileType = ProfileType.MAIN
+ )
+ }
+
+ single<ApplicationDescription>(named("DummyCompatibilityApp")) {
+ ApplicationDescription(
+ packageName = "foundation.e.dummyappscompatibilityapp",
+ uid = -2,
+ label = androidContext().getString(R.string.dummy_apps_compatibility_app_label),
+ icon = androidContext().getDrawable(R.drawable.ic_apps_compatibility_components),
+ profileId = -1,
+ profileType = ProfileType.MAIN
+ )
+ }
+
+ single { CityDataSource }
+
+ singleOf(::AppListUseCase)
+ single {
+ FakeLocationStateUseCase(
+ fakeLocationModule = get(),
+ permissionsModule = get(),
+ localStateRepository = get(),
+ citiesRepository = get(),
+ appDesc = get(named("AdvancedPrivacy")),
+ appContext = androidContext(),
+ coroutineScope = get()
+ )
+ }
+
+ singleOf(::GetQuickPrivacyStateUseCase)
+ single {
+ IpScramblingStateUseCase(
+ ipScramblerModule = get(),
+ permissionsPrivacyModule = get(),
+ appDesc = get(named("AdvancedPrivacy")),
+ localStateRepository = get(),
+ appListsRepository = get(),
+ coroutineScope = get()
+ )
+ }
+ singleOf(::ShowFeaturesWarningUseCase)
+ singleOf(::TrackersStateUseCase)
+ singleOf(::TrackersStatisticsUseCase)
+
+ single<IPermissionsPrivacyModule> {
+ PermissionsPrivacyModule(context = androidContext())
+ }
+
+ viewModel { parameters ->
+ val appListUseCase: AppListUseCase = get()
+ val app = appListUseCase.getApp(parameters.get())
+
+ AppTrackersViewModel(
+ app = app,
+ trackersStateUseCase = get(),
+ trackersStatisticsUseCase = get(),
+ getQuickPrivacyStateUseCase = get()
+ )
+ }
+ viewModelOf(::TrackersViewModel)
+ viewModelOf(::FakeLocationViewModel)
+ viewModelOf(::InternetPrivacyViewModel)
+ viewModelOf(::DashboardViewModel)
+}
diff --git a/app/src/main/java/foundation/e/advancedprivacy/Notifications.kt b/app/src/main/java/foundation/e/advancedprivacy/Notifications.kt
index 291f9bc..cd85e9a 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/Notifications.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/Notifications.kt
@@ -28,8 +28,8 @@ import androidx.core.app.NotificationManagerCompat
import foundation.e.advancedprivacy.domain.entities.InternetPrivacyMode
import foundation.e.advancedprivacy.domain.entities.MainFeatures
import foundation.e.advancedprivacy.domain.usecases.GetQuickPrivacyStateUseCase
+import foundation.e.advancedprivacy.externalinterfaces.permissions.IPermissionsPrivacyModule
import foundation.e.advancedprivacy.main.MainActivity
-import foundation.e.privacymodules.permissions.PermissionsPrivacyModule
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
@@ -69,7 +69,7 @@ object Notifications {
fun startListening(
appContext: Context,
getQuickPrivacyStateUseCase: GetQuickPrivacyStateUseCase,
- permissionsPrivacyModule: PermissionsPrivacyModule,
+ permissionsPrivacyModule: IPermissionsPrivacyModule,
appScope: CoroutineScope
) {
createNotificationFlagChannel(
@@ -118,7 +118,7 @@ object Notifications {
private fun createNotificationFlagChannel(
context: Context,
- permissionsPrivacyModule: PermissionsPrivacyModule,
+ permissionsPrivacyModule: IPermissionsPrivacyModule,
channelId: String,
@StringRes channelName: Int,
@StringRes channelDescription: Int,
diff --git a/app/src/main/java/foundation/e/advancedprivacy/UpdateTrackersWorker.kt b/app/src/main/java/foundation/e/advancedprivacy/UpdateTrackersWorker.kt
deleted file mode 100644
index 418f75b..0000000
--- a/app/src/main/java/foundation/e/advancedprivacy/UpdateTrackersWorker.kt
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2022 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
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-package foundation.e.advancedprivacy
-
-import android.content.Context
-import androidx.work.Constraints
-import androidx.work.CoroutineWorker
-import androidx.work.ExistingPeriodicWorkPolicy
-import androidx.work.NetworkType
-import androidx.work.PeriodicWorkRequestBuilder
-import androidx.work.WorkManager
-import androidx.work.WorkerParameters
-import java.util.concurrent.TimeUnit
-
-class UpdateTrackersWorker(appContext: Context, workerParams: WorkerParameters) :
- CoroutineWorker(appContext, workerParams) {
-
- override suspend fun doWork(): Result {
- val trackersStateUseCase = (applicationContext as AdvancedPrivacyApplication)
- .dependencyContainer.trackersStateUseCase
-
- trackersStateUseCase.updateTrackers()
- return Result.success()
- }
-
- companion object {
- private val constraints = Constraints.Builder()
- .setRequiredNetworkType(NetworkType.CONNECTED)
- .build()
-
- fun periodicUpdate(context: Context) {
- val request = PeriodicWorkRequestBuilder<UpdateTrackersWorker>(
- 7, TimeUnit.DAYS
- )
- .setConstraints(constraints).build()
-
- WorkManager.getInstance(context).enqueueUniquePeriodicWork(
- UpdateTrackersWorker::class.qualifiedName ?: "",
- ExistingPeriodicWorkPolicy.KEEP,
- request
- )
- }
- }
-}
diff --git a/app/src/main/java/foundation/e/advancedprivacy/common/ToggleAppsAdapter.kt b/app/src/main/java/foundation/e/advancedprivacy/common/ToggleAppsAdapter.kt
index d8ee8ea..8a0cc83 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/common/ToggleAppsAdapter.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/common/ToggleAppsAdapter.kt
@@ -25,7 +25,7 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import foundation.e.advancedprivacy.R
-import foundation.e.privacymodules.permissions.data.ApplicationDescription
+import foundation.e.advancedprivacy.domain.entities.ApplicationDescription
class ToggleAppsAdapter(
private val itemsLayout: Int,
diff --git a/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt b/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt
index 3f3f66c..1a83692 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt
@@ -27,7 +27,6 @@ import android.util.Log
import android.view.View
import android.widget.CheckBox
import androidx.appcompat.app.AlertDialog
-import foundation.e.advancedprivacy.AdvancedPrivacyApplication
import foundation.e.advancedprivacy.R
import foundation.e.advancedprivacy.domain.entities.MainFeatures
import foundation.e.advancedprivacy.domain.entities.MainFeatures.FAKE_LOCATION
@@ -38,6 +37,7 @@ import foundation.e.advancedprivacy.main.MainActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
+import org.koin.java.KoinJavaComponent.get
class WarningDialog : Activity() {
companion object {
@@ -112,8 +112,7 @@ class WarningDialog : Activity() {
}
) { _, _ ->
if (checkbox.isChecked()) {
- (application as AdvancedPrivacyApplication)
- .dependencyContainer.showFeaturesWarningUseCase
+ get<ShowFeaturesWarningUseCase>(ShowFeaturesWarningUseCase::class.java)
.doNotShowAgain(feature)
}
finish()
diff --git a/app/src/main/java/foundation/e/advancedprivacy/data/repositories/AppListsRepository.kt b/app/src/main/java/foundation/e/advancedprivacy/data/repositories/AppListsRepository.kt
deleted file mode 100644
index 2d7651d..0000000
--- a/app/src/main/java/foundation/e/advancedprivacy/data/repositories/AppListsRepository.kt
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (C) 2022 E FOUNDATION, 2022 - 2023 MURENA SAS
- *
- * 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
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-package foundation.e.advancedprivacy.data.repositories
-
-import android.Manifest
-import android.content.Context
-import android.content.Intent
-import android.content.pm.ApplicationInfo
-import android.content.pm.PackageInfo
-import foundation.e.advancedprivacy.R
-import foundation.e.privacymodules.permissions.PermissionsPrivacyModule
-import foundation.e.privacymodules.permissions.data.ApplicationDescription
-import foundation.e.privacymodules.permissions.data.ProfileType
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
-
-class AppListsRepository(
- private val permissionsModule: PermissionsPrivacyModule,
- private val context: Context,
- private val coroutineScope: CoroutineScope
-) {
- companion object {
- private const val PNAME_SETTINGS = "com.android.settings"
- private const val PNAME_PWAPLAYER = "foundation.e.pwaplayer"
- private const val PNAME_INTENT_VERIFICATION = "com.android.statementservice"
- private const val PNAME_MICROG_SERVICES_CORE = "com.google.android.gms"
-
- val compatibiltyPNames = setOf(
- PNAME_PWAPLAYER, PNAME_INTENT_VERIFICATION, PNAME_MICROG_SERVICES_CORE
- )
- }
-
- val dummySystemApp = ApplicationDescription(
- packageName = "foundation.e.dummysystemapp",
- uid = -1,
- label = context.getString(R.string.dummy_system_app_label),
- icon = context.getDrawable(R.drawable.ic_e_app_logo),
- profileId = -1,
- profileType = ProfileType.MAIN
- )
-
- val dummyCompatibilityApp = ApplicationDescription(
- packageName = "foundation.e.dummyappscompatibilityapp",
- uid = -2,
- label = context.getString(R.string.dummy_apps_compatibility_app_label),
- icon = context.getDrawable(R.drawable.ic_apps_compatibility_components),
- profileId = -1,
- profileType = ProfileType.MAIN
- )
-
- private suspend fun fetchAppDescriptions(fetchMissingIcons: Boolean = false) {
- val launcherPackageNames = context.packageManager.queryIntentActivities(
- Intent(Intent.ACTION_MAIN, null).apply { addCategory(Intent.CATEGORY_LAUNCHER) },
- 0
- ).mapNotNull { it.activityInfo?.packageName }
-
- val visibleAppsFilter = { packageInfo: PackageInfo ->
- hasInternetPermission(packageInfo) &&
- isStandardApp(packageInfo.applicationInfo, launcherPackageNames)
- }
-
- val hiddenAppsFilter = { packageInfo: PackageInfo ->
- hasInternetPermission(packageInfo) &&
- isHiddenSystemApp(packageInfo.applicationInfo, launcherPackageNames)
- }
-