Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 95d9421d authored by Guillaume Jacquart's avatar Guillaume Jacquart
Browse files

Merge branch 'epic18-standalone_trackers_tor' into 'main'

epic18: Manage VPN services for Tor or Tracker control

See merge request !149
parents 50e213ce 9d559780
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ test-debug:
build-e-release:
  stage: build
  script:
    - ./gradlew :app:assembleERelease
    - ./gradlew :app:assembleEosRelease
  rules:
    - if: '$CI_COMMIT_REF_PROTECTED == "true" && $CI_COMMIT_TAG =~ /^eOS-/'
      variables:
+6 −7
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'kotlin-parcelize'
    id 'androidx.navigation.safeargs.kotlin'
}

@@ -82,7 +81,7 @@ android {
    // expected by the android gradle plugin.
    flavorDimensions 'os'
    productFlavors {
        e {
        eos {
            dimension 'os'
            minSdkVersion 29
            targetSdkVersion 32
@@ -144,20 +143,20 @@ android {
dependencies {
    implementation project(':core')
    standaloneImplementation project(':permissionsstandalone')
    eImplementation project(':permissionse')
    eosImplementation project(':permissionseos')

    implementation project(':fakelocation')

    eImplementation files('libs/lineage-sdk.jar')
    eosImplementation files('libs/lineage-sdk.jar')

    implementation project(':trackers')

    implementation project(':ipscrambling')
    eImplementation project(':trackersservicee')
    eosImplementation project(':trackersserviceeos')
    standaloneImplementation project(':trackersservicestandalone')

    implementation (
        libs.e.elib,
        libs.eos.elib,

        libs.androidx.core.ktx,
        libs.androidx.appcompat,
@@ -174,7 +173,7 @@ dependencies {
        libs.maplibre,
        libs.mpandroidcharts,

        libs.e.telemetry,
        libs.eos.telemetry,
        libs.timber
    )

+4 −1
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 E FOUNDATION, 2022 - 2023 MURENA SAS
 * Copyright (C) 2022 - 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
@@ -25,6 +26,7 @@ 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.domain.usecases.VpnSupervisorUseCase
import foundation.e.advancedprivacy.externalinterfaces.permissions.IPermissionsPrivacyModule
import foundation.e.advancedprivacy.trackers.services.UpdateTrackersWorker
import foundation.e.lib.telemetry.Telemetry
@@ -70,5 +72,6 @@ class AdvancedPrivacyApplication : Application() {
        get<IpScramblingStateUseCase>(IpScramblingStateUseCase::class.java)
        get<TrackersStateUseCase>(TrackersStateUseCase::class.java)
        get<FakeLocationStateUseCase>(FakeLocationStateUseCase::class.java)
        get<VpnSupervisorUseCase>(VpnSupervisorUseCase::class.java).listenSettings()
    }
}
+6 −7
Original line number Diff line number Diff line
@@ -20,11 +20,12 @@ 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.data.repositories.LocalStateRepositoryImpl
import foundation.e.advancedprivacy.domain.entities.ApplicationDescription
import foundation.e.advancedprivacy.domain.entities.CHANNEL_TRACKER_FLAG
import foundation.e.advancedprivacy.domain.entities.NotificationContent
import foundation.e.advancedprivacy.domain.entities.ProfileType
import foundation.e.advancedprivacy.domain.repositories.LocalStateRepository
import foundation.e.advancedprivacy.domain.usecases.AppListUseCase
import foundation.e.advancedprivacy.domain.usecases.FakeLocationStateUseCase
import foundation.e.advancedprivacy.domain.usecases.GetQuickPrivacyStateUseCase
@@ -55,8 +56,8 @@ val appModule = module {
    includes(coreModule, trackersModule, fakelocationModule, ipScramblerModule, trackerServiceModule)

    factory<Resources> { androidContext().resources }
    single {
        LocalStateRepository(context = androidContext())
    single<LocalStateRepository> {
        LocalStateRepositoryImpl(context = androidContext())
    }

    single<ApplicationDescription>(named("AdvancedPrivacy")) {
@@ -120,15 +121,13 @@ val appModule = module {
    singleOf(::GetQuickPrivacyStateUseCase)
    single {
        IpScramblingStateUseCase(
            orbotServiceSupervisor = get(),
            permissionsPrivacyModule = get(),
            appDesc = get(named("AdvancedPrivacy")),
            orbotSupervisor = get(),
            localStateRepository = get(),
            appListsRepository = get(),
            trackersServiceSupervisor = get(),
            coroutineScope = get()
        )
    }

    singleOf(::ShowFeaturesWarningUseCase)
    singleOf(::TrackersStateUseCase)
    singleOf(::TrackersStatisticsUseCase)
+11 −17
Original line number Diff line number Diff line
@@ -29,8 +29,7 @@ import foundation.e.advancedprivacy.domain.entities.CHANNEL_FAKE_LOCATION_FLAG
import foundation.e.advancedprivacy.domain.entities.CHANNEL_FIRST_BOOT
import foundation.e.advancedprivacy.domain.entities.CHANNEL_IPSCRAMBLING_FLAG
import foundation.e.advancedprivacy.domain.entities.CHANNEL_TRACKER_FLAG
import foundation.e.advancedprivacy.domain.entities.FeatureServiceState
import foundation.e.advancedprivacy.domain.entities.MainFeatures
import foundation.e.advancedprivacy.domain.entities.FeatureState
import foundation.e.advancedprivacy.domain.entities.NOTIFICATION_FAKE_LOCATION_FLAG
import foundation.e.advancedprivacy.domain.entities.NOTIFICATION_FIRST_BOOT
import foundation.e.advancedprivacy.domain.entities.NOTIFICATION_IPSCRAMBLING_FLAG
@@ -98,19 +97,19 @@ object Notifications {

        getQuickPrivacyStateUseCase.isLocationHidden.onEach {
            if (it) {
                showFlagNotification(appContext, MainFeatures.FAKE_LOCATION)
                showFlagNotification(appContext, NOTIFICATION_FAKE_LOCATION_FLAG)
            } else {
                hideFlagNotification(appContext, MainFeatures.FAKE_LOCATION)
                hideFlagNotification(appContext, NOTIFICATION_FAKE_LOCATION_FLAG)
            }
        }.launchIn(appScope)

        getQuickPrivacyStateUseCase.ipScramblingMode.map {
            it != FeatureServiceState.OFF
            it != FeatureState.OFF
        }.distinctUntilChanged().onEach {
            if (it) {
                showFlagNotification(appContext, MainFeatures.IP_SCRAMBLING)
                showFlagNotification(appContext, NOTIFICATION_IPSCRAMBLING_FLAG)
            } else {
                hideFlagNotification(appContext, MainFeatures.IP_SCRAMBLING)
                hideFlagNotification(appContext, NOTIFICATION_IPSCRAMBLING_FLAG)
            }
        }.launchIn(appScope)
    }
@@ -139,9 +138,9 @@ object Notifications {
        NotificationManagerCompat.from(context).createNotificationChannel(channel)
    }

    private fun showFlagNotification(context: Context, feature: MainFeatures) {
        when (feature) {
            MainFeatures.FAKE_LOCATION -> showFlagNotification(
    private fun showFlagNotification(context: Context, id: Int) {
        when (id) {
            NOTIFICATION_FAKE_LOCATION_FLAG -> showFlagNotification(
                context = context,
                id = NOTIFICATION_FAKE_LOCATION_FLAG,
                content = NotificationContent(
@@ -154,7 +153,7 @@ object Notifications {
                        .createPendingIntent()
                )
            )
            MainFeatures.IP_SCRAMBLING -> showFlagNotification(
            NOTIFICATION_IPSCRAMBLING_FLAG -> showFlagNotification(
                context = context,
                id = NOTIFICATION_IPSCRAMBLING_FLAG,
                content = NotificationContent(
@@ -183,12 +182,7 @@ object Notifications {
        NotificationManagerCompat.from(context).notify(id, builder.build())
    }

    private fun hideFlagNotification(context: Context, feature: MainFeatures) {
        val id = when (feature) {
            MainFeatures.FAKE_LOCATION -> NOTIFICATION_FAKE_LOCATION_FLAG
            MainFeatures.IP_SCRAMBLING -> NOTIFICATION_IPSCRAMBLING_FLAG
            else -> return
        }
    private fun hideFlagNotification(context: Context, id: Int) {
        NotificationManagerCompat.from(context).cancel(id)
    }
}
Loading