From 16a8ea39af3c2893e498a12eedd546bc3a177862 Mon Sep 17 00:00:00 2001 From: jacquarg Date: Thu, 12 Jun 2025 18:43:21 +0200 Subject: [PATCH 1/5] feat:3399: replace persistent flag by recurrent wakeup timer --- app/build.gradle | 3 -- app/src/main/AndroidManifest.xml | 3 +- .../AdvancedPrivacyApplication.kt | 3 ++ .../e/advancedprivacy/KoinModule.kt | 2 ++ .../common/BootCompletedReceiver.kt | 22 ++++++++++--- .../workers/StayAwakeWorker.kt | 32 +++++++++++++++++++ ...rmissions-foundation.e.advancedprivacy.xml | 3 +- .../trackers/service/TrackersService.kt | 26 ++++++++++++--- .../service/VpnSupervisorUseCaseEos.kt | 10 ++++-- 9 files changed, 87 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/foundation/e/advancedprivacy/externalinterfaces/workers/StayAwakeWorker.kt diff --git a/app/build.gradle b/app/build.gradle index fb731f89..6fc16b30 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,7 +51,6 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" manifestPlaceholders = [ - persistent: "false", mainActivityIntentFilterCategory: "android.intent.category.LAUNCHER" ] @@ -89,7 +88,6 @@ android { dimension 'os' applicationIdSuffix '.standalone' manifestPlaceholders = [ - persistent: "false", mainActivityIntentFilterCategory: "android.intent.category.LAUNCHER" ] @@ -112,7 +110,6 @@ android { } release { manifestPlaceholders = [ - persistent: "true", mainActivityIntentFilterCategory: "android.intent.category.INFO" ] diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 90a5bbf1..508c2f59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -39,12 +39,13 @@ + + (OrbotSupervisor::class.java) + get(StayAwakeWorker::class.java).start() + get(CoroutineScope::class.java).launch { initBackgroundSingletons() } diff --git a/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt b/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt index e87242da..27149098 100644 --- a/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt +++ b/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt @@ -45,6 +45,7 @@ import foundation.e.advancedprivacy.domain.usecases.TrackersStatisticsUseCase import foundation.e.advancedprivacy.domain.usecases.WeeklyReportUseCase import foundation.e.advancedprivacy.dummy.CityDataSource import foundation.e.advancedprivacy.externalinterfaces.permissions.IPermissionsPrivacyModule +import foundation.e.advancedprivacy.externalinterfaces.workers.StayAwakeWorker import foundation.e.advancedprivacy.externalinterfaces.workers.WeeklyReportWorkerScheduler import foundation.e.advancedprivacy.features.dashboard.DashboardViewModel import foundation.e.advancedprivacy.features.internetprivacy.InternetPrivacyViewModel @@ -140,6 +141,7 @@ val appModule = module { single { ResourcesRepository(androidContext()) } single { WeeklyReportWorkerScheduler(androidContext()) } + single { StayAwakeWorker(androidContext()) } singleOf(::FakeLocationStateUseCase) diff --git a/app/src/main/java/foundation/e/advancedprivacy/common/BootCompletedReceiver.kt b/app/src/main/java/foundation/e/advancedprivacy/common/BootCompletedReceiver.kt index 22549bdb..55744248 100644 --- a/app/src/main/java/foundation/e/advancedprivacy/common/BootCompletedReceiver.kt +++ b/app/src/main/java/foundation/e/advancedprivacy/common/BootCompletedReceiver.kt @@ -24,23 +24,35 @@ import android.content.Intent import foundation.e.advancedprivacy.NotificationsPresenter import foundation.e.advancedprivacy.core.utils.goAsync import foundation.e.advancedprivacy.domain.repositories.LocalStateRepository +import foundation.e.advancedprivacy.domain.usecases.VpnSupervisorUseCase import kotlinx.coroutines.CoroutineScope import org.koin.java.KoinJavaComponent.inject class BootCompletedReceiver : BroadcastReceiver() { + companion object { + const val ACTION_WAKE_UP = "foundation.e.advancedprivacy.WAKEUP" + } private val localStateRepository by inject(LocalStateRepository::class.java) private val backgroundScope by inject(CoroutineScope::class.java) private val notificationsPresenter: NotificationsPresenter by inject(NotificationsPresenter::class.java) + private val vpnSupervisorUseCase: VpnSupervisorUseCase by inject(VpnSupervisorUseCase::class.java) override fun onReceive(context: Context, intent: Intent?) { - if (intent?.action == Intent.ACTION_BOOT_COMPLETED) { - goAsync(backgroundScope) { - if (localStateRepository.isFirstBoot()) { - notificationsPresenter.showFirstBootNotification() - localStateRepository.setFirstBoot(false) + when (intent?.action) { + Intent.ACTION_BOOT_COMPLETED -> { + goAsync(backgroundScope) { + if (localStateRepository.isFirstBoot()) { + notificationsPresenter.showFirstBootNotification() + localStateRepository.setFirstBoot(false) + } + vpnSupervisorUseCase.listenSettings() } } + + ACTION_WAKE_UP -> goAsync(backgroundScope) { + vpnSupervisorUseCase.listenSettings() + } } } } diff --git a/app/src/main/java/foundation/e/advancedprivacy/externalinterfaces/workers/StayAwakeWorker.kt b/app/src/main/java/foundation/e/advancedprivacy/externalinterfaces/workers/StayAwakeWorker.kt new file mode 100644 index 00000000..17610dc1 --- /dev/null +++ b/app/src/main/java/foundation/e/advancedprivacy/externalinterfaces/workers/StayAwakeWorker.kt @@ -0,0 +1,32 @@ +package foundation.e.advancedprivacy.externalinterfaces.workers + +import android.app.AlarmManager +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import foundation.e.advancedprivacy.common.BootCompletedReceiver +import foundation.e.advancedprivacy.common.BootCompletedReceiver.Companion.ACTION_WAKE_UP + +class StayAwakeWorker(private val context: Context) { + companion object { + private const val WAKE_UP_INTERVAL = 15 * 60 * 1000L + } + + fun start() { + val alarmManager = context.getSystemService(AlarmManager::class.java) + + alarmManager.setInexactRepeating( + AlarmManager.ELAPSED_REALTIME_WAKEUP, + WAKE_UP_INTERVAL, + WAKE_UP_INTERVAL, + getWakeUpIntent() + ) + } + + private fun getWakeUpIntent(): PendingIntent { + val intent = Intent(context, BootCompletedReceiver::class.java) + + intent.action = ACTION_WAKE_UP + return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) + } +} diff --git a/privapp-permissions-foundation.e.advancedprivacy.xml b/privapp-permissions-foundation.e.advancedprivacy.xml index 7edaacee..29b2c3ee 100644 --- a/privapp-permissions-foundation.e.advancedprivacy.xml +++ b/privapp-permissions-foundation.e.advancedprivacy.xml @@ -6,5 +6,6 @@ + - \ No newline at end of file + diff --git a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt index 5f573b0f..f38699dd 100644 --- a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt +++ b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersService.kt @@ -22,24 +22,40 @@ import android.content.Intent import android.os.IBinder import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import org.koin.java.KoinJavaComponent.get class TrackersService : Service() { companion object { const val ACTION_START = "foundation.e.privacymodules.trackers.intent.action.START" + const val ACTION_RESTART = "foundation.e.privacymodules.trackers.intent.action.RESTART" var coroutineScope = CoroutineScope(Dispatchers.IO) } + private var writeLogJob: Job? = null + private var listenJob: Job? = null + override fun onBind(intent: Intent): IBinder? { throw UnsupportedOperationException("Not yet implemented") } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - if (ACTION_START == intent?.action) { - stop() - start() + when (intent?.action) { + ACTION_START -> { + if (writeLogJob?.isActive != true || + listenJob?.isActive != true + ) { + stop() + start() + } + } + + ACTION_RESTART -> { + stop() + start() + } } return START_REDELIVER_INTENT } @@ -47,8 +63,8 @@ class TrackersService : Service() { private fun start() { coroutineScope = CoroutineScope(Dispatchers.IO) get(DNSBlocker::class.java).apply { - filterHostnameUseCase.writeLogJob(coroutineScope) - listenJob(coroutineScope) + writeLogJob = filterHostnameUseCase.writeLogJob(coroutineScope) + listenJob = listenJob(coroutineScope) } } diff --git a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/VpnSupervisorUseCaseEos.kt b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/VpnSupervisorUseCaseEos.kt index 510c0499..8b2a9117 100644 --- a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/VpnSupervisorUseCaseEos.kt +++ b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/VpnSupervisorUseCaseEos.kt @@ -30,6 +30,7 @@ import foundation.e.advancedprivacy.ipscrambler.OrbotSupervisor import foundation.e.advancedprivacy.trackers.domain.externalinterfaces.TrackersSupervisor import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch @@ -44,16 +45,21 @@ class VpnSupervisorUseCaseEos( private val scope: CoroutineScope ) : VpnSupervisorUseCase { + private var listenIpscramblingJob: Job? = null + private var listenDisclaimerJob: Job? = null + override fun listenSettings() { trackersSupervisor.start() - scope.launch(Dispatchers.IO) { + listenIpscramblingJob?.cancel() + listenIpscramblingJob = scope.launch(Dispatchers.IO) { localStateRepository.ipScramblingEnabled.collect { applySettings(it) } } - scope.launch(Dispatchers.IO) { + listenDisclaimerJob?.cancel() + listenDisclaimerJob = scope.launch(Dispatchers.IO) { localStateRepository.blockTrackers.drop(1).filter { it }.collect { localStateRepository.emitStartVpnDisclaimer(TrackersControl()) } -- GitLab From 9e3c7fa2ae4d5642d34da1b24564dc4a5efcc488 Mon Sep 17 00:00:00 2001 From: jacquarg Date: Thu, 19 Jun 2025 20:29:51 +0200 Subject: [PATCH 2/5] fix:3399: use worker to wakeup Tracker service. Fix koin with contentproviders --- .../AdvancedPrivacyApplication.kt | 35 ++++++++------ .../e/advancedprivacy/KoinModule.kt | 2 - .../common/BootCompletedReceiver.kt | 22 ++------- .../workers/StayAwakeWorker.kt | 32 ------------- trackersserviceeos/build.gradle | 1 + .../trackers/service/TrackersSupervisorEos.kt | 46 +++++++++++++++++++ 6 files changed, 73 insertions(+), 65 deletions(-) delete mode 100644 app/src/main/java/foundation/e/advancedprivacy/externalinterfaces/workers/StayAwakeWorker.kt diff --git a/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt b/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt index 59052944..fc6fed0a 100644 --- a/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt +++ b/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt @@ -19,6 +19,7 @@ package foundation.e.advancedprivacy import android.app.Application +import android.content.Context import foundation.e.advancedprivacy.common.WarningDialog import foundation.e.advancedprivacy.domain.usecases.FakeLocationStateUseCase import foundation.e.advancedprivacy.domain.usecases.GetQuickPrivacyStateUseCase @@ -28,7 +29,6 @@ import foundation.e.advancedprivacy.domain.usecases.TrackersStateUseCase import foundation.e.advancedprivacy.domain.usecases.TrackersStatisticsUseCase import foundation.e.advancedprivacy.domain.usecases.VpnSupervisorUseCase import foundation.e.advancedprivacy.domain.usecases.WeeklyReportUseCase -import foundation.e.advancedprivacy.externalinterfaces.workers.StayAwakeWorker import foundation.e.advancedprivacy.ipscrambler.OrbotSupervisor import foundation.e.advancedprivacy.trackers.data.TrackersRepository import foundation.e.advancedprivacy.trackers.services.UpdateTrackersWorker @@ -43,6 +43,16 @@ import org.koin.java.KoinJavaComponent.get import timber.log.Timber class AdvancedPrivacyApplication : Application() { + // AttachBaseContext is called before ContentProvider::onCreate (Application::onCreate isnt !) + override fun attachBaseContext(base: Context?) { + super.attachBaseContext(base) + + startKoin { + androidContext(this@AdvancedPrivacyApplication) + modules(appModule) + } + } + override fun onCreate() { super.onCreate() Telemetry.init(BuildConfig.SENTRY_DSN, this, true) @@ -51,20 +61,22 @@ class AdvancedPrivacyApplication : Application() { Timber.plant(Timber.DebugTree()) } - startKoin { - androidContext(this@AdvancedPrivacyApplication) - modules(appModule) + synchronousInitComponents() + + get(CoroutineScope::class.java).launch { + initBackgroundSingletons() } + } + private fun synchronousInitComponents() { // Fix 3386 : Initialize OrbotSupervisor, to make sure all Orbot is waked up before // OrbotService may be started by the system. val orbotSupervisor = get(OrbotSupervisor::class.java) - get(StayAwakeWorker::class.java).start() - - get(CoroutineScope::class.java).launch { - initBackgroundSingletons() - } + get(IpScramblingStateUseCase::class.java) + get(TrackersStateUseCase::class.java) + get(FakeLocationStateUseCase::class.java) + get(VpnSupervisorUseCase::class.java).listenSettings() } private suspend fun initBackgroundSingletons() = withContext(Dispatchers.IO) { @@ -85,11 +97,6 @@ class AdvancedPrivacyApplication : Application() { ) get(NotificationsPresenter::class.java).startListening() - - get(IpScramblingStateUseCase::class.java) - get(TrackersStateUseCase::class.java) - get(FakeLocationStateUseCase::class.java) - get(VpnSupervisorUseCase::class.java).listenSettings() get(WeeklyReportUseCase::class.java).listen() } } diff --git a/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt b/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt index 27149098..e87242da 100644 --- a/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt +++ b/app/src/main/java/foundation/e/advancedprivacy/KoinModule.kt @@ -45,7 +45,6 @@ import foundation.e.advancedprivacy.domain.usecases.TrackersStatisticsUseCase import foundation.e.advancedprivacy.domain.usecases.WeeklyReportUseCase import foundation.e.advancedprivacy.dummy.CityDataSource import foundation.e.advancedprivacy.externalinterfaces.permissions.IPermissionsPrivacyModule -import foundation.e.advancedprivacy.externalinterfaces.workers.StayAwakeWorker import foundation.e.advancedprivacy.externalinterfaces.workers.WeeklyReportWorkerScheduler import foundation.e.advancedprivacy.features.dashboard.DashboardViewModel import foundation.e.advancedprivacy.features.internetprivacy.InternetPrivacyViewModel @@ -141,7 +140,6 @@ val appModule = module { single { ResourcesRepository(androidContext()) } single { WeeklyReportWorkerScheduler(androidContext()) } - single { StayAwakeWorker(androidContext()) } singleOf(::FakeLocationStateUseCase) diff --git a/app/src/main/java/foundation/e/advancedprivacy/common/BootCompletedReceiver.kt b/app/src/main/java/foundation/e/advancedprivacy/common/BootCompletedReceiver.kt index 55744248..22549bdb 100644 --- a/app/src/main/java/foundation/e/advancedprivacy/common/BootCompletedReceiver.kt +++ b/app/src/main/java/foundation/e/advancedprivacy/common/BootCompletedReceiver.kt @@ -24,35 +24,23 @@ import android.content.Intent import foundation.e.advancedprivacy.NotificationsPresenter import foundation.e.advancedprivacy.core.utils.goAsync import foundation.e.advancedprivacy.domain.repositories.LocalStateRepository -import foundation.e.advancedprivacy.domain.usecases.VpnSupervisorUseCase import kotlinx.coroutines.CoroutineScope import org.koin.java.KoinJavaComponent.inject class BootCompletedReceiver : BroadcastReceiver() { - companion object { - const val ACTION_WAKE_UP = "foundation.e.advancedprivacy.WAKEUP" - } private val localStateRepository by inject(LocalStateRepository::class.java) private val backgroundScope by inject(CoroutineScope::class.java) private val notificationsPresenter: NotificationsPresenter by inject(NotificationsPresenter::class.java) - private val vpnSupervisorUseCase: VpnSupervisorUseCase by inject(VpnSupervisorUseCase::class.java) override fun onReceive(context: Context, intent: Intent?) { - when (intent?.action) { - Intent.ACTION_BOOT_COMPLETED -> { - goAsync(backgroundScope) { - if (localStateRepository.isFirstBoot()) { - notificationsPresenter.showFirstBootNotification() - localStateRepository.setFirstBoot(false) - } - vpnSupervisorUseCase.listenSettings() + if (intent?.action == Intent.ACTION_BOOT_COMPLETED) { + goAsync(backgroundScope) { + if (localStateRepository.isFirstBoot()) { + notificationsPresenter.showFirstBootNotification() + localStateRepository.setFirstBoot(false) } } - - ACTION_WAKE_UP -> goAsync(backgroundScope) { - vpnSupervisorUseCase.listenSettings() - } } } } diff --git a/app/src/main/java/foundation/e/advancedprivacy/externalinterfaces/workers/StayAwakeWorker.kt b/app/src/main/java/foundation/e/advancedprivacy/externalinterfaces/workers/StayAwakeWorker.kt deleted file mode 100644 index 17610dc1..00000000 --- a/app/src/main/java/foundation/e/advancedprivacy/externalinterfaces/workers/StayAwakeWorker.kt +++ /dev/null @@ -1,32 +0,0 @@ -package foundation.e.advancedprivacy.externalinterfaces.workers - -import android.app.AlarmManager -import android.app.PendingIntent -import android.content.Context -import android.content.Intent -import foundation.e.advancedprivacy.common.BootCompletedReceiver -import foundation.e.advancedprivacy.common.BootCompletedReceiver.Companion.ACTION_WAKE_UP - -class StayAwakeWorker(private val context: Context) { - companion object { - private const val WAKE_UP_INTERVAL = 15 * 60 * 1000L - } - - fun start() { - val alarmManager = context.getSystemService(AlarmManager::class.java) - - alarmManager.setInexactRepeating( - AlarmManager.ELAPSED_REALTIME_WAKEUP, - WAKE_UP_INTERVAL, - WAKE_UP_INTERVAL, - getWakeUpIntent() - ) - } - - private fun getWakeUpIntent(): PendingIntent { - val intent = Intent(context, BootCompletedReceiver::class.java) - - intent.action = ACTION_WAKE_UP - return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) - } -} diff --git a/trackersserviceeos/build.gradle b/trackersserviceeos/build.gradle index 6d67b582..30d35648 100644 --- a/trackersserviceeos/build.gradle +++ b/trackersserviceeos/build.gradle @@ -34,6 +34,7 @@ dependencies { implementation( libs.androidx.core.ktx, + libs.androidx.work.ktx, libs.bundles.koin, libs.kotlinx.coroutines, libs.pcap4j, diff --git a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt index 4580389a..d2d6fc9c 100644 --- a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt +++ b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt @@ -1,4 +1,5 @@ /* + * Copyright (C) 2025 E FOUNDATION * Copyright (C) 2023 MURENA SAS * * This program is free software: you can redistribute it and/or modify @@ -18,10 +19,16 @@ package foundation.e.advancedprivacy.trackers.service import android.content.Context import android.content.Intent +import androidx.work.CoroutineWorker +import androidx.work.ExistingPeriodicWorkPolicy +import androidx.work.PeriodicWorkRequestBuilder +import androidx.work.WorkManager +import androidx.work.WorkerParameters import foundation.e.advancedprivacy.domain.entities.FeatureState import foundation.e.advancedprivacy.domain.usecases.VpnSupervisorUseCase import foundation.e.advancedprivacy.trackers.domain.externalinterfaces.TrackersSupervisor import foundation.e.advancedprivacy.trackers.service.TrackersService.Companion.ACTION_START +import java.time.Duration import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.isActive @@ -30,12 +37,27 @@ import org.koin.core.module.dsl.factoryOf import org.koin.core.module.dsl.singleOf import org.koin.core.qualifier.named import org.koin.dsl.module +import org.koin.java.KoinJavaComponent.inject +import timber.log.Timber class TrackersSupervisorEos(private val context: Context) : TrackersSupervisor { + companion object { + private const val STAYAWAKE_WORKER_TAG = "STAYAWAKE_WORKER" + private const val STAYAWAKE_PERIODE_MINUTES = 15L + } override val state: StateFlow = MutableStateFlow(FeatureState.ON) override fun start(): Boolean { + startStayAwayWorker() + return startService() + } + + fun wakeUpService(): Boolean { + return startService() + } + + private fun startService(): Boolean { val intent = Intent(context, TrackersService::class.java) intent.action = ACTION_START return context.startService(intent) != null @@ -50,6 +72,30 @@ class TrackersSupervisorEos(private val context: Context) : TrackersSupervisor { } override val dnsFilterForIpScrambling = null + + private fun startStayAwayWorker() { + val workRequest = PeriodicWorkRequestBuilder(Duration.ofMinutes(STAYAWAKE_PERIODE_MINUTES)) + .addTag(STAYAWAKE_WORKER_TAG).build() + + WorkManager.getInstance(context).enqueueUniquePeriodicWork(STAYAWAKE_WORKER_TAG, ExistingPeriodicWorkPolicy.REPLACE, workRequest) + } +} + +class StayAwakeWorker( + context: Context, + workerParams: WorkerParameters +) : CoroutineWorker(context, workerParams) { + override suspend fun doWork(): Result { + return try { + val trackerSupervisor: TrackersSupervisorEos by inject(TrackersSupervisor::class.java) + + trackerSupervisor.wakeUpService() + Result.success() + } catch (e: Exception) { + Timber.w(e, "Can't Wakeup tracker service") + Result.failure() + } + } } val trackerServiceModule = module { -- GitLab From 3efd40f4a402829c51c9e469bbde34536eaaeeff Mon Sep 17 00:00:00 2001 From: jacquarg Date: Mon, 23 Jun 2025 09:09:41 +0200 Subject: [PATCH 3/5] fix:3399: fix typos --- .../e/advancedprivacy/AdvancedPrivacyApplication.kt | 2 +- .../advancedprivacy/trackers/service/TrackersSupervisorEos.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt b/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt index fc6fed0a..8c5a4a4d 100644 --- a/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt +++ b/app/src/main/java/foundation/e/advancedprivacy/AdvancedPrivacyApplication.kt @@ -43,7 +43,7 @@ import org.koin.java.KoinJavaComponent.get import timber.log.Timber class AdvancedPrivacyApplication : Application() { - // AttachBaseContext is called before ContentProvider::onCreate (Application::onCreate isnt !) + // AttachBaseContext is called before ContentProvider::onCreate (Application::onCreate isn't !) override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) diff --git a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt index d2d6fc9c..0c6c3aaa 100644 --- a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt +++ b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt @@ -43,7 +43,7 @@ import timber.log.Timber class TrackersSupervisorEos(private val context: Context) : TrackersSupervisor { companion object { private const val STAYAWAKE_WORKER_TAG = "STAYAWAKE_WORKER" - private const val STAYAWAKE_PERIODE_MINUTES = 15L + private const val STAYAWAKE_PERIOD_IN_MINUTES = 15L } override val state: StateFlow = MutableStateFlow(FeatureState.ON) @@ -74,7 +74,7 @@ class TrackersSupervisorEos(private val context: Context) : TrackersSupervisor { override val dnsFilterForIpScrambling = null private fun startStayAwayWorker() { - val workRequest = PeriodicWorkRequestBuilder(Duration.ofMinutes(STAYAWAKE_PERIODE_MINUTES)) + val workRequest = PeriodicWorkRequestBuilder(Duration.ofMinutes(STAYAWAKE_PERIOD_IN_MINUTES)) .addTag(STAYAWAKE_WORKER_TAG).build() WorkManager.getInstance(context).enqueueUniquePeriodicWork(STAYAWAKE_WORKER_TAG, ExistingPeriodicWorkPolicy.REPLACE, workRequest) -- GitLab From 5749d53f2aadc9d26ab983b16fe41428901d682b Mon Sep 17 00:00:00 2001 From: jacquarg Date: Wed, 25 Jun 2025 09:12:15 +0200 Subject: [PATCH 4/5] feat:3399: Move StayAwayWorker to its own file. --- .../trackers/service/StayAwakeWorker.kt | 27 +++++++++++++++++++ .../trackers/service/TrackersSupervisorEos.kt | 21 --------------- 2 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/StayAwakeWorker.kt diff --git a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/StayAwakeWorker.kt b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/StayAwakeWorker.kt new file mode 100644 index 00000000..ea634e1e --- /dev/null +++ b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/StayAwakeWorker.kt @@ -0,0 +1,27 @@ +package foundation.e.advancedprivacy.trackers.service + +import android.content.Context +import androidx.work.CoroutineWorker +import androidx.work.WorkerParameters +import foundation.e.advancedprivacy.trackers.domain.externalinterfaces.TrackersSupervisor +import org.koin.java.KoinJavaComponent +import timber.log.Timber + +class StayAwakeWorker( + context: Context, + workerParams: WorkerParameters +) : CoroutineWorker(context, workerParams) { + override suspend fun doWork(): Result { + return try { + val trackerSupervisor: TrackersSupervisorEos by KoinJavaComponent.inject( + TrackersSupervisor::class.java + ) + + trackerSupervisor.wakeUpService() + Result.success() + } catch (e: Exception) { + Timber.Forest.w(e, "Can't Wakeup tracker service") + Result.failure() + } + } +} diff --git a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt index 0c6c3aaa..f6bd3c52 100644 --- a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt +++ b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/TrackersSupervisorEos.kt @@ -19,11 +19,9 @@ package foundation.e.advancedprivacy.trackers.service import android.content.Context import android.content.Intent -import androidx.work.CoroutineWorker import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager -import androidx.work.WorkerParameters import foundation.e.advancedprivacy.domain.entities.FeatureState import foundation.e.advancedprivacy.domain.usecases.VpnSupervisorUseCase import foundation.e.advancedprivacy.trackers.domain.externalinterfaces.TrackersSupervisor @@ -37,8 +35,6 @@ import org.koin.core.module.dsl.factoryOf import org.koin.core.module.dsl.singleOf import org.koin.core.qualifier.named import org.koin.dsl.module -import org.koin.java.KoinJavaComponent.inject -import timber.log.Timber class TrackersSupervisorEos(private val context: Context) : TrackersSupervisor { companion object { @@ -81,23 +77,6 @@ class TrackersSupervisorEos(private val context: Context) : TrackersSupervisor { } } -class StayAwakeWorker( - context: Context, - workerParams: WorkerParameters -) : CoroutineWorker(context, workerParams) { - override suspend fun doWork(): Result { - return try { - val trackerSupervisor: TrackersSupervisorEos by inject(TrackersSupervisor::class.java) - - trackerSupervisor.wakeUpService() - Result.success() - } catch (e: Exception) { - Timber.w(e, "Can't Wakeup tracker service") - Result.failure() - } - } -} - val trackerServiceModule = module { factoryOf(::DNSBlocker) singleOf(::TrackersSupervisorEos) { -- GitLab From e9a349eeefa0a52979fc962419625788a10b92d9 Mon Sep 17 00:00:00 2001 From: jacquarg Date: Wed, 25 Jun 2025 09:36:34 +0200 Subject: [PATCH 5/5] feat:3399: fix stayawakeworkerextraction artefacts. --- .../trackers/service/StayAwakeWorker.kt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/StayAwakeWorker.kt b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/StayAwakeWorker.kt index ea634e1e..239febf1 100644 --- a/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/StayAwakeWorker.kt +++ b/trackersserviceeos/src/main/java/foundation/e/advancedprivacy/trackers/service/StayAwakeWorker.kt @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2025 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 . + */ + package foundation.e.advancedprivacy.trackers.service import android.content.Context @@ -20,7 +37,7 @@ class StayAwakeWorker( trackerSupervisor.wakeUpService() Result.success() } catch (e: Exception) { - Timber.Forest.w(e, "Can't Wakeup tracker service") + Timber.w(e, "Can't Wakeup tracker service") Result.failure() } } -- GitLab