Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate usages of VPNFeatureRegistry to specific features #4289

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,9 @@ interface AppTrackingProtection {
* This method will stop the App Tracking Protection feature
*/
fun stop()

/**
* This method will start the App Tracking Protection feature
*/
fun start()
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ import android.content.pm.PackageManager
import android.util.LruCache
import com.duckduckgo.common.utils.extensions.isDdgApp
import com.duckduckgo.di.scopes.VpnScope
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.vpn.apps.isSystemApp
import com.duckduckgo.mobile.android.vpn.dao.VpnAppTrackerBlockingDao
import com.duckduckgo.mobile.android.vpn.model.TrackingApp
Expand All @@ -44,12 +42,12 @@ class RealAppTrackerDetector constructor(
private val appTrackerRecorder: AppTrackerRecorder,
private val vpnAppTrackerBlockingDao: VpnAppTrackerBlockingDao,
private val packageManager: PackageManager,
private val vpnFeaturesRegistry: VpnFeaturesRegistry,
private val appTrackingProtection: AppTrackingProtection,
private val context: Context,
) : AppTrackerDetector {

private fun isAppTpDisabled(): Boolean {
return runBlocking { !vpnFeaturesRegistry.isFeatureRegistered(AppTpVpnFeature.APPTP_VPN) }
return runBlocking { !appTrackingProtection.isEnabled() }
}

// cache packageId -> app name
Expand Down Expand Up @@ -138,7 +136,7 @@ object AppTrackerDetectorModule {
appTrackerRecorder: AppTrackerRecorder,
vpnDatabase: VpnDatabase,
packageManager: PackageManager,
vpnFeaturesRegistry: VpnFeaturesRegistry,
appTrackingProtection: AppTrackingProtection,
context: Context,
): AppTrackerDetector {
return RealAppTrackerDetector(
Expand All @@ -147,7 +145,7 @@ object AppTrackerDetectorModule {
appTrackerRecorder = appTrackerRecorder,
vpnAppTrackerBlockingDao = vpnDatabase.vpnAppTrackerBlockingDao(),
packageManager = packageManager,
vpnFeaturesRegistry = vpnFeaturesRegistry,
appTrackingProtection = appTrackingProtection,
context = context,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,10 @@ class RealAppTrackingProtection @Inject constructor(
vpnFeaturesRegistry.unregisterFeature(AppTpVpnFeature.APPTP_VPN)
}
}

override fun start() {
coroutineScope.launch {
vpnFeaturesRegistry.registerFeature(AppTpVpnFeature.APPTP_VPN)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.common.utils.extensions.registerExportedReceiver
import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.di.scopes.VpnScope
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.app.tracking.AppTrackingProtection
import com.duckduckgo.mobile.android.vpn.service.VpnServiceCallbacks
import com.duckduckgo.mobile.android.vpn.service.goAsync
import com.duckduckgo.mobile.android.vpn.state.VpnStateMonitor.VpnStopReason
Expand All @@ -48,7 +47,7 @@ class NewAppBroadcastReceiver @Inject constructor(
private val applicationContext: Context,
private val appTrackerRepository: AppTrackerRepository,
private val dispatcherProvider: DispatcherProvider,
private val vpnFeaturesRegistry: VpnFeaturesRegistry,
private val appTrackingProtection: AppTrackingProtection,
) : BroadcastReceiver(), VpnServiceCallbacks {

@MainThread
Expand All @@ -68,7 +67,7 @@ class NewAppBroadcastReceiver @Inject constructor(
goAsync(pendingResult) {
if (isInExclusionList(packageName)) {
logcat { "Newly installed package $packageName is in exclusion list, disabling/re-enabling vpn" }
vpnFeaturesRegistry.refreshFeature(AppTpVpnFeature.APPTP_VPN)
appTrackingProtection.restart()
} else {
logcat { "Newly installed package $packageName not in exclusion list" }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,8 @@ import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.common.utils.extensions.launchAlwaysOnSystemSettings
import com.duckduckgo.common.utils.extensions.launchIgnoreBatteryOptimizationSettings
import com.duckduckgo.di.scopes.ActivityScope
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.app.tracking.AppTrackingProtection
import com.duckduckgo.mobile.android.vpn.R
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.vpn.apps.Command
import com.duckduckgo.mobile.android.vpn.apps.ManageAppsProtectionViewModel
import com.duckduckgo.mobile.android.vpn.apps.ManageAppsProtectionViewModel.RecommendedSettings
Expand Down Expand Up @@ -70,7 +69,7 @@ class ManageRecentAppsProtectionActivity :

@Inject lateinit var dispatcherProvider: DispatcherProvider

@Inject lateinit var vpnFeaturesRegistry: VpnFeaturesRegistry
@Inject lateinit var appTrackingProtection: AppTrackingProtection

@Inject lateinit var reportBreakageContract: Provider<ReportBreakageContract>

Expand Down Expand Up @@ -217,8 +216,8 @@ class ManageRecentAppsProtectionActivity :
private fun restartVpn() {
// we use the app coroutine scope to ensure this call outlives the Activity
appCoroutineScope.launch(dispatcherProvider.io()) {
if (vpnFeaturesRegistry.isFeatureRegistered(AppTpVpnFeature.APPTP_VPN)) {
vpnFeaturesRegistry.refreshFeature(AppTpVpnFeature.APPTP_VPN)
if (appTrackingProtection.isEnabled()) {
appTrackingProtection.restart()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,9 @@ import com.duckduckgo.common.ui.viewbinding.viewBinding
import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.di.scopes.ActivityScope
import com.duckduckgo.mobile.android.R as commonR
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature.APPTP_VPN
import com.duckduckgo.mobile.android.app.tracking.AppTrackingProtection
import com.duckduckgo.mobile.android.vpn.R
import com.duckduckgo.mobile.android.vpn.R.string
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.vpn.apps.Command
import com.duckduckgo.mobile.android.vpn.apps.ManageAppsProtectionViewModel
import com.duckduckgo.mobile.android.vpn.apps.TrackingProtectionAppInfo
Expand Down Expand Up @@ -80,7 +78,7 @@ class TrackingProtectionExclusionListActivity :
lateinit var deviceShieldPixels: DeviceShieldPixels

@Inject
lateinit var vpnFeaturesRegistry: VpnFeaturesRegistry
lateinit var appTrackingProtection: AppTrackingProtection

@Inject lateinit var reportBreakageContract: Provider<ReportBreakageContract>

Expand Down Expand Up @@ -233,8 +231,8 @@ class TrackingProtectionExclusionListActivity :
private fun restartVpn() {
// we use the app coroutine scope to ensure this call outlives the Activity
appCoroutineScope.launch(dispatcherProvider.io()) {
if (vpnFeaturesRegistry.isFeatureRegistered(APPTP_VPN)) {
vpnFeaturesRegistry.refreshFeature(AppTpVpnFeature.APPTP_VPN)
if (appTrackingProtection.isEnabled()) {
appTrackingProtection.restart()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,19 @@
package com.duckduckgo.mobile.android.vpn.bugreport

import com.duckduckgo.di.scopes.ActivityScope
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.app.tracking.AppTrackingProtection
import com.duckduckgo.mobile.android.vpn.state.VpnStateCollectorPlugin
import com.squareup.anvil.annotations.ContributesMultibinding
import javax.inject.Inject
import org.json.JSONObject

@ContributesMultibinding(ActivityScope::class)
class AppTPStateCollector @Inject constructor(
private val vpnFeaturesRegistry: VpnFeaturesRegistry,
private val appTrackingProtection: AppTrackingProtection,
) : VpnStateCollectorPlugin {
override suspend fun collectVpnRelatedState(appPackageId: String?): JSONObject {
return JSONObject().apply {
put("enabled", vpnFeaturesRegistry.isFeatureRunning(AppTpVpnFeature.APPTP_VPN))
put("enabled", appTrackingProtection.isRunning())
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.common.utils.checkMainThread
import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.di.scopes.VpnScope
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.app.tracking.AppTrackingProtection
import com.duckduckgo.mobile.android.vpn.prefs.VpnSharedPreferencesProvider
import com.duckduckgo.mobile.android.vpn.service.VpnServiceCallbacks
import com.duckduckgo.mobile.android.vpn.state.VpnStateMonitor.VpnStopReason
Expand Down Expand Up @@ -62,7 +61,7 @@ interface CohortStore {
)
class RealCohortStore @Inject constructor(
private val sharedPreferencesProvider: VpnSharedPreferencesProvider,
private val vpnFeaturesRegistry: VpnFeaturesRegistry,
private val appTrackingProtection: AppTrackingProtection,
private val dispatcherProvider: DispatcherProvider,
private val appBuildConfig: AppBuildConfig,
) : CohortStore, VpnServiceCallbacks {
Expand Down Expand Up @@ -97,7 +96,7 @@ class RealCohortStore @Inject constructor(

override fun onVpnStarted(coroutineScope: CoroutineScope) {
coroutineScope.launch(dispatcherProvider.io()) {
if (vpnFeaturesRegistry.isFeatureRegistered(AppTpVpnFeature.APPTP_VPN)) {
if (appTrackingProtection.isEnabled()) {
// skip if already stored
getCohortStoredLocalDate()?.let { return@launch }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.feature.toggles.api.FeatureSettings
import com.duckduckgo.feature.toggles.api.RemoteFeatureStoreNamed
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.app.tracking.AppTrackingProtection
import com.duckduckgo.mobile.android.vpn.feature.AppTpRemoteFeatures
import com.duckduckgo.mobile.android.vpn.store.VpnDatabase
import com.duckduckgo.mobile.android.vpn.trackers.AppTrackerExceptionRule
Expand All @@ -42,7 +41,7 @@ import logcat.logcat
class ExceptionListsSettingStore @Inject constructor(
private val vpnDatabase: VpnDatabase,
@AppCoroutineScope private val appCoroutineScope: CoroutineScope,
private val vpnFeaturesRegistry: VpnFeaturesRegistry,
private val appTrackingProtection: AppTrackingProtection,
private val dispatcherProvider: DispatcherProvider,
) : FeatureSettings.Store {
private val jsonAdapter = Moshi.Builder().build().adapter(JsonConfigModel::class.java)
Expand All @@ -69,7 +68,7 @@ class ExceptionListsSettingStore @Inject constructor(

// Restart VPN now that the lists were updated
appCoroutineScope.launch(dispatcherProvider.io()) {
vpnFeaturesRegistry.refreshFeature(AppTpVpnFeature.APPTP_VPN)
appTrackingProtection.restart()
}
}
}.onFailure {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ import com.duckduckgo.app.di.AppCoroutineScope
import com.duckduckgo.app.statistics.api.RefreshRetentionAtbPlugin
import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.app.tracking.AppTrackingProtection
import com.squareup.anvil.annotations.ContributesMultibinding
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
Expand All @@ -30,14 +29,14 @@ import kotlinx.coroutines.launch
@ContributesMultibinding(AppScope::class)
class DeviceShieldRetentionPixelSender @Inject constructor(
private val deviceShieldPixels: DeviceShieldPixels,
private val vpnFeaturesRegistry: VpnFeaturesRegistry,
private val appTrackingProtection: AppTrackingProtection,
@AppCoroutineScope private val coroutineScope: CoroutineScope,
private val dispatcherProvider: DispatcherProvider,
) : RefreshRetentionAtbPlugin {

override fun onSearchRetentionAtbRefreshed() {
coroutineScope.launch(dispatcherProvider.io()) {
if (vpnFeaturesRegistry.isFeatureRunning(AppTpVpnFeature.APPTP_VPN)) {
if (appTrackingProtection.isRunning()) {
deviceShieldPixels.deviceShieldEnabledOnSearch()
} else {
deviceShieldPixels.deviceShieldDisabledOnSearch()
Expand All @@ -47,7 +46,7 @@ class DeviceShieldRetentionPixelSender @Inject constructor(

override fun onAppRetentionAtbRefreshed() {
coroutineScope.launch(dispatcherProvider.io()) {
if (vpnFeaturesRegistry.isFeatureRunning(AppTpVpnFeature.APPTP_VPN)) {
if (appTrackingProtection.isRunning()) {
deviceShieldPixels.deviceShieldEnabledOnAppLaunch()
} else {
deviceShieldPixels.deviceShieldDisabledOnAppLaunch()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ import androidx.work.*
import com.duckduckgo.anvil.annotations.ContributesWorker
import com.duckduckgo.app.lifecycle.MainProcessLifecycleObserver
import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
import com.duckduckgo.mobile.android.vpn.VpnFeaturesRegistry
import com.duckduckgo.mobile.android.app.tracking.AppTrackingProtection
import com.duckduckgo.mobile.android.vpn.dao.VpnServiceStateStatsDao
import com.duckduckgo.mobile.android.vpn.store.VpnDatabase
import com.squareup.anvil.annotations.ContributesTo
Expand Down Expand Up @@ -80,10 +79,10 @@ class DeviceShieldStatusReportingWorker(
lateinit var deviceShieldPixels: DeviceShieldPixels

@Inject
lateinit var vpnFeaturesRegistry: VpnFeaturesRegistry
lateinit var appTrackingProtection: AppTrackingProtection

override suspend fun doWork(): Result {
if (vpnFeaturesRegistry.isFeatureRegistered(AppTpVpnFeature.APPTP_VPN)) {
if (appTrackingProtection.isEnabled()) {
deviceShieldPixels.reportEnabled()
} else {
deviceShieldPixels.reportDisabled()
Expand Down