diff --git a/app/src/main/java/foundation/e/advancedprivacy/Notifications.kt b/app/src/main/java/foundation/e/advancedprivacy/Notifications.kt
index ec92ebe9d159119593a44633e8fb865121a8213b..d6e50a87e09e70610450e38d3ffbd5f911eed93e 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/Notifications.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/Notifications.kt
@@ -93,7 +93,7 @@ object Notifications {
permissionsPrivacyModule = permissionsPrivacyModule,
channelId = CHANNEL_TRACKER_FLAG,
channelName = R.string.notifications_tracker_channel_name,
- channelDescription = R.string.notifications_ipscrambling_channel_description
+ channelDescription = R.string.notifications_tracker_channel_description
)
getQuickPrivacyStateUseCase.isLocationHidden.onEach {
diff --git a/app/src/main/java/foundation/e/advancedprivacy/common/Factory.kt b/app/src/main/java/foundation/e/advancedprivacy/common/Factory.kt
deleted file mode 100644
index 3af0b371283fe7adaa6e47cd7adccbf9abed301d..0000000000000000000000000000000000000000
--- a/app/src/main/java/foundation/e/advancedprivacy/common/Factory.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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 .
- */
-
-package foundation.e.advancedprivacy.common
-
-// Definition of a Factory interface with a function to create objects of a type
-interface Factory {
- fun create(): T
-}
diff --git a/app/src/main/java/foundation/e/advancedprivacy/domain/entities/AppWithCounts.kt b/app/src/main/java/foundation/e/advancedprivacy/domain/entities/AppWithCounts.kt
deleted file mode 100644
index 244b1337587d29d033c657c02c39f5936ac25c44..0000000000000000000000000000000000000000
--- a/app/src/main/java/foundation/e/advancedprivacy/domain/entities/AppWithCounts.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2023 MURENA SAS
- * 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 .
- */
-
-package foundation.e.advancedprivacy.domain.entities
-
-import android.graphics.drawable.Drawable
-
-data class AppWithCounts(
- val appDesc: ApplicationDescription,
- val packageName: String,
- val uid: Int,
- var label: CharSequence?,
- var icon: Drawable?,
- val isWhitelisted: Boolean = false,
- val trackersCount: Int = 0,
- val whiteListedTrackersCount: Int = 0,
- val blockedLeaks: Int = 0,
- val leaks: Int = 0
-) {
- constructor(
- app: ApplicationDescription,
- isWhitelisted: Boolean,
- trackersCount: Int,
- whiteListedTrackersCount: Int,
- blockedLeaks: Int,
- leaks: Int
- ) :
- this(
- appDesc = app,
- packageName = app.packageName,
- uid = app.uid,
- label = app.label,
- icon = app.icon,
- isWhitelisted = isWhitelisted,
- trackersCount = trackersCount,
- whiteListedTrackersCount = whiteListedTrackersCount,
- blockedLeaks = blockedLeaks,
- leaks = leaks
- )
-
- val blockedTrackersCount get() = if (isWhitelisted) {
- 0
- } else {
- Math.max(trackersCount - whiteListedTrackersCount, 0)
- }
-}
diff --git a/app/src/main/java/foundation/e/advancedprivacy/domain/entities/QuickPrivacyState.kt b/app/src/main/java/foundation/e/advancedprivacy/domain/entities/QuickPrivacyState.kt
deleted file mode 100644
index 247e83495e1f9ed7796ed62259c436bbb53f6134..0000000000000000000000000000000000000000
--- a/app/src/main/java/foundation/e/advancedprivacy/domain/entities/QuickPrivacyState.kt
+++ /dev/null
@@ -1,26 +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 .
- */
-
-package foundation.e.advancedprivacy.domain.entities
-
-enum class QuickPrivacyState {
- DISABLED,
- ENABLED,
- FULL_ENABLED;
-
- fun isEnabled(): Boolean = this != DISABLED
-}
diff --git a/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/GetQuickPrivacyStateUseCase.kt b/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/GetQuickPrivacyStateUseCase.kt
index 962a87ad12a1d2c7420f903ccdfc4e699433a4b7..4f8afb02f26504d73b011ad8d36cc72ff9d2e872 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/GetQuickPrivacyStateUseCase.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/GetQuickPrivacyStateUseCase.kt
@@ -21,40 +21,16 @@ package foundation.e.advancedprivacy.domain.usecases
import foundation.e.advancedprivacy.domain.entities.ApplicationDescription
import foundation.e.advancedprivacy.domain.entities.FeatureState
import foundation.e.advancedprivacy.domain.entities.LocationMode
-import foundation.e.advancedprivacy.domain.entities.QuickPrivacyState
import foundation.e.advancedprivacy.domain.entities.TrackerMode
import foundation.e.advancedprivacy.domain.repositories.LocalStateRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharedFlow
-import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
class GetQuickPrivacyStateUseCase(
private val localStateRepository: LocalStateRepository
) {
- val quickPrivacyState: Flow = combine(
- localStateRepository.blockTrackers,
- localStateRepository.areAllTrackersBlocked,
- localStateRepository.locationMode,
- localStateRepository.internetPrivacyMode
- ) { isBlockTrackers, isAllTrackersBlocked, locationMode, internetPrivacyMode ->
- when {
- !isBlockTrackers &&
- locationMode == LocationMode.REAL_LOCATION &&
- internetPrivacyMode == FeatureState.OFF -> QuickPrivacyState.DISABLED
-
- isAllTrackersBlocked &&
- locationMode != LocationMode.REAL_LOCATION &&
- internetPrivacyMode in listOf(
- FeatureState.ON,
- FeatureState.STARTING
- ) -> QuickPrivacyState.FULL_ENABLED
-
- else -> QuickPrivacyState.ENABLED
- }
- }
-
val trackerMode: Flow = combine(
localStateRepository.blockTrackers,
localStateRepository.areAllTrackersBlocked
@@ -70,8 +46,6 @@ class GetQuickPrivacyStateUseCase(
locationMode != LocationMode.REAL_LOCATION
}
- val locationMode: StateFlow = localStateRepository.locationMode
-
val ipScramblingMode: Flow =
localStateRepository.internetPrivacyMode
diff --git a/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/TrackersStatisticsUseCase.kt b/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/TrackersStatisticsUseCase.kt
index 374afe661f3d750a604b0c029465ec8522c7690c..765255fc0cb4597ff7fabbacb4e34364e7a87160 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/TrackersStatisticsUseCase.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/domain/usecases/TrackersStatisticsUseCase.kt
@@ -29,17 +29,14 @@ import foundation.e.advancedprivacy.trackers.data.StatsDatabase
import foundation.e.advancedprivacy.trackers.data.TrackersRepository
import foundation.e.advancedprivacy.trackers.data.WhitelistRepository
import foundation.e.advancedprivacy.trackers.domain.entities.Tracker
-import foundation.e.advancedprivacy.trackers.domain.usecases.StatisticsUseCase
import java.time.ZonedDateTime
import java.time.temporal.ChronoUnit
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.FlowPreview
-import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
class TrackersStatisticsUseCase(
- private val statisticsUseCase: StatisticsUseCase,
private val whitelistRepository: WhitelistRepository,
private val trackersRepository: TrackersRepository,
private val appListsRepository: AppListsRepository,
@@ -55,10 +52,6 @@ class TrackersStatisticsUseCase(
.throttleFirst(windowDuration = debounce)
.onStart { emit(Unit) }
- fun getDayTrackersCalls() = statisticsUseCase.getTrackersCallsOnPeriod(24, ChronoUnit.HOURS)
-
- fun getDayTrackersCount() = statisticsUseCase.getActiveTrackersByPeriod(24, ChronoUnit.HOURS)
-
private fun buildGraduations(period: Period): List {
return when (period) {
Period.DAY -> buildDayGraduations()
@@ -159,7 +152,10 @@ class TrackersStatisticsUseCase(
suspend fun getGraphData(period: Period): TrackersPeriodicStatistics {
return TrackersPeriodicStatistics(
- callsBlockedNLeaked = statisticsUseCase.getTrackersCallsOnPeriod(period.periodsCount, period.periodUnit),
+ callsBlockedNLeaked = statsDatabase.getTrackersCallsOnPeriod(
+ period.periodsCount,
+ period.periodUnit
+ ),
periods = buildLabels(period),
trackersCount = statsDatabase.getTrackersCount(period.periodsCount, period.periodUnit),
trackersAllowedCount = statsDatabase.getLeakedTrackersCount(period.periodsCount, period.periodUnit),
diff --git a/app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardState.kt b/app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardState.kt
index e7b39b6457b46085f5e7810fc72c9b555b15ccd6..7dc3c0b50e1f4e2f176f1bf78f95c10f4c876f34 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardState.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/features/dashboard/DashboardState.kt
@@ -18,11 +18,9 @@
package foundation.e.advancedprivacy.features.dashboard
import foundation.e.advancedprivacy.domain.entities.FeatureState
-import foundation.e.advancedprivacy.domain.entities.QuickPrivacyState
import foundation.e.advancedprivacy.domain.entities.TrackerMode
data class DashboardState(
- val quickPrivacyState: QuickPrivacyState = QuickPrivacyState.DISABLED,
val trackerMode: TrackerMode = TrackerMode.VULNERABLE,
val isLocationHidden: Boolean = false,
val ipScramblingMode: FeatureState = FeatureState.STOPPING,
diff --git a/app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyFragment.kt b/app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyFragment.kt
index fb01c437fbf2f346dd26a922e120989c826c203f..9fec91e5a3b979417536fa385021b31dcc15ab32 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyFragment.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/InternetPrivacyFragment.kt
@@ -29,7 +29,6 @@ import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager
import foundation.e.advancedprivacy.R
import foundation.e.advancedprivacy.common.NavToolbarFragment
-import foundation.e.advancedprivacy.common.ToggleAppsAdapter
import foundation.e.advancedprivacy.common.setToolTipForAsterisk
import foundation.e.advancedprivacy.databinding.FragmentInternetActivityPolicyBinding
import foundation.e.advancedprivacy.domain.entities.FeatureState
diff --git a/app/src/main/java/foundation/e/advancedprivacy/common/ToggleAppsAdapter.kt b/app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/ToggleAppsAdapter.kt
similarity index 97%
rename from app/src/main/java/foundation/e/advancedprivacy/common/ToggleAppsAdapter.kt
rename to app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/ToggleAppsAdapter.kt
index 8a0cc83dc47ec659a104ffed9161c32959d4a3d7..205abce4de9172477743751ed16ca8b7a5257079 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/common/ToggleAppsAdapter.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/features/internetprivacy/ToggleAppsAdapter.kt
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package foundation.e.advancedprivacy.common
+package foundation.e.advancedprivacy.features.internetprivacy
import android.view.LayoutInflater
import android.view.View
diff --git a/app/src/main/java/foundation/e/advancedprivacy/widget/Widget.kt b/app/src/main/java/foundation/e/advancedprivacy/widget/Widget.kt
index 66cf87ea96e33ac962e804237bc8695f3ba37c95..a7cec14af9e3c27eb63c33b541d5aa7bbb1ebc83 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/widget/Widget.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/widget/Widget.kt
@@ -25,6 +25,7 @@ import foundation.e.advancedprivacy.domain.usecases.GetQuickPrivacyStateUseCase
import foundation.e.advancedprivacy.domain.usecases.TrackersStatisticsUseCase
import foundation.e.advancedprivacy.widget.State
import foundation.e.advancedprivacy.widget.render
+import foundation.e.advancedprivacy.widget.renderAll
import java.time.temporal.ChronoUnit
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
@@ -51,7 +52,9 @@ import kotlinx.coroutines.launch
class Widget : AppWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
- render(context, state.value, appWidgetManager)
+ appWidgetIds.forEach { id ->
+ render(context, state.value, appWidgetManager, id)
+ }
}
override fun onEnabled(context: Context) {
@@ -77,14 +80,11 @@ class Widget : AppWidgetProvider() {
coroutineScope: CoroutineScope
): StateFlow {
return combine(
- getPrivacyStateUseCase.quickPrivacyState,
getPrivacyStateUseCase.trackerMode,
getPrivacyStateUseCase.isLocationHidden,
getPrivacyStateUseCase.ipScramblingMode
- ) { quickPrivacyState, trackerMode, isLocationHidden, ipScramblingMode ->
-
+ ) { trackerMode, isLocationHidden, ipScramblingMode ->
State(
- quickPrivacyState = quickPrivacyState,
trackerMode = trackerMode,
isLocationHidden = isLocationHidden,
ipScramblingMode = ipScramblingMode
@@ -105,8 +105,8 @@ class Widget : AppWidgetProvider() {
)
) { state, _ ->
state.copy(
- dayStatistics = trackersStatisticsUseCase.getDayTrackersCalls(),
- activeTrackersCount = trackersStatisticsUseCase.getDayTrackersCount()
+ blockedCallsCount = trackersStatisticsUseCase.getLastMonthBlockedLeaksCount(),
+ appsWithCallsCount = trackersStatisticsUseCase.getLastMonthAppsWithBLockedLeaksCount()
)
}.stateIn(
scope = coroutineScope,
@@ -130,7 +130,7 @@ class Widget : AppWidgetProvider() {
updateWidgetJob?.cancel()
updateWidgetJob = GlobalScope.launch(Dispatchers.Main) {
state.collect {
- render(appContext, it, AppWidgetManager.getInstance(appContext))
+ renderAll(appContext, it)
}
}
}
@@ -141,6 +141,7 @@ class Widget : AppWidgetProvider() {
if (newOptions != null) {
isDarkText = newOptions.getBoolean(DARK_TEXT_KEY)
}
- render(context, state.value, appWidgetManager)
+
+ render(context, state.value, appWidgetManager, appWidgetId)
}
}
diff --git a/app/src/main/java/foundation/e/advancedprivacy/widget/WidgetUI.kt b/app/src/main/java/foundation/e/advancedprivacy/widget/WidgetUI.kt
index 3d58999b28e42b828617651318b70981c20fe377..f5ae2c7f3c9b95533accb6b599e1d29fc630f149 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/widget/WidgetUI.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/widget/WidgetUI.kt
@@ -25,14 +25,16 @@ import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
-import android.view.View
+import android.graphics.drawable.Icon
+import android.text.Spannable
+import android.text.SpannableString
+import android.text.style.ForegroundColorSpan
import android.widget.RemoteViews
+import androidx.annotation.StringRes
import foundation.e.advancedprivacy.R
import foundation.e.advancedprivacy.Widget
import foundation.e.advancedprivacy.Widget.Companion.isDarkText
-import foundation.e.advancedprivacy.common.extensions.dpToPxF
import foundation.e.advancedprivacy.domain.entities.FeatureState
-import foundation.e.advancedprivacy.domain.entities.QuickPrivacyState
import foundation.e.advancedprivacy.domain.entities.TrackerMode
import foundation.e.advancedprivacy.main.MainActivity
import foundation.e.advancedprivacy.widget.WidgetCommandReceiver.Companion.ACTION_TOGGLE_IPSCRAMBLING
@@ -41,17 +43,27 @@ import foundation.e.advancedprivacy.widget.WidgetCommandReceiver.Companion.ACTIO
import foundation.e.advancedprivacy.widget.WidgetCommandReceiver.Companion.PARAM_FEATURE_ENABLED
data class State(
- val quickPrivacyState: QuickPrivacyState = QuickPrivacyState.DISABLED,
val trackerMode: TrackerMode = TrackerMode.VULNERABLE,
val isLocationHidden: Boolean = false,
val ipScramblingMode: FeatureState = FeatureState.STOPPING,
- val dayStatistics: List> = emptyList(),
- val activeTrackersCount: Int = 0
+ val blockedCallsCount: Int = 0,
+ val appsWithCallsCount: Int = 0
)
-fun render(context: Context, state: State, appWidgetManager: AppWidgetManager) {
- val views = RemoteViews(context.packageName, R.layout.widget)
- applyDarkText(context, state, views)
+fun renderAll(context: Context, state: State) {
+ val appWidgetManager = AppWidgetManager.getInstance(context)
+ appWidgetManager.getAppWidgetIds(
+ ComponentName(context, Widget::class.java)
+ ).forEach { id ->
+ render(context, state, appWidgetManager, id)
+ }
+}
+
+fun render(context: Context, state: State, appWidgetManager: AppWidgetManager, widgetId: Int) {
+ val views = buildLayout(context, appWidgetManager, widgetId)
+
+ applyDarkText(context, isDarkText, views)
+
views.apply {
val openPIntent = PendingIntent.getActivity(
context,
@@ -63,24 +75,21 @@ fun render(context: Context, state: State, appWidgetManager: AppWidgetManager) {
setOnClickPendingIntent(R.id.widget_container, openPIntent)
setTextViewText(
- R.id.state_label,
- context.getString(
- when (state.quickPrivacyState) {
- QuickPrivacyState.DISABLED -> R.string.widget_state_title_off
- QuickPrivacyState.FULL_ENABLED -> R.string.widget_state_title_on
- QuickPrivacyState.ENABLED -> R.string.widget_state_title_custom
- }
- )
+ R.id.data_blocked_trackers_secondary,
+ buildDataSecondarySpan(context, isDarkText, state.blockedCallsCount, R.string.widget_data_blocked_trackers_secondary)
)
- val trackersEnabled = state.trackerMode != TrackerMode.VULNERABLE
- setImageViewResource(
- R.id.toggle_trackers,
- if (trackersEnabled) R.drawable.ic_switch_enabled else R.drawable.ic_switch_disabled
+ setTextViewText(
+ R.id.data_apps_secondary,
+ buildDataSecondarySpan(context, isDarkText, state.appsWithCallsCount, R.string.widget_data_apps_secondary)
)
+ val trackersEnabled = state.trackerMode != TrackerMode.VULNERABLE
+
+ setSwitchState(views, R.id.toggle_trackers, trackersEnabled)
+
setOnClickPendingIntent(
- R.id.toggle_trackers,
+ R.id.trackers_control,
PendingIntent.getBroadcast(
context,
REQUEST_CODE_TOGGLE_TRACKERS,
@@ -92,28 +101,10 @@ fun render(context: Context, state: State, appWidgetManager: AppWidgetManager) {
)
)
- setTextViewText(
- R.id.state_trackers,
- context.getString(
- when (state.trackerMode) {
- TrackerMode.DENIED -> R.string.widget_state_trackers_on
- TrackerMode.VULNERABLE -> R.string.widget_state_trackers_off
- TrackerMode.CUSTOM -> R.string.widget_state_trackers_custom
- }
- )
- )
-
- setImageViewResource(
- R.id.toggle_location,
- if (state.isLocationHidden) {
- R.drawable.ic_switch_enabled
- } else {
- R.drawable.ic_switch_disabled
- }
- )
+ setSwitchState(views, R.id.toggle_location, state.isLocationHidden)
setOnClickPendingIntent(
- R.id.toggle_location,
+ R.id.fake_location,
PendingIntent.getBroadcast(
context,
REQUEST_CODE_TOGGLE_LOCATION,
@@ -125,28 +116,10 @@ fun render(context: Context, state: State, appWidgetManager: AppWidgetManager) {
)
)
- setTextViewText(
- R.id.state_geolocation,
- context.getString(
- if (state.isLocationHidden) {
- R.string.widget_state_geolocation_on
- } else {
- R.string.widget_state_geolocation_off
- }
- )
- )
-
- setImageViewResource(
- R.id.toggle_ipscrambling,
- if (state.ipScramblingMode.isChecked) {
- R.drawable.ic_switch_enabled
- } else {
- R.drawable.ic_switch_disabled
- }
- )
+ setSwitchState(views, R.id.toggle_ipscrambling, state.ipScramblingMode.isChecked)
setOnClickPendingIntent(
- R.id.toggle_ipscrambling,
+ R.id.ipscrambling,
PendingIntent.getBroadcast(
context,
REQUEST_CODE_TOGGLE_IPSCRAMBLING,
@@ -157,233 +130,113 @@ fun render(context: Context, state: State, appWidgetManager: AppWidgetManager) {
FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT
)
)
-
- setTextViewText(
- R.id.state_ip_address,
- context.getString(
- if (state.ipScramblingMode == FeatureState.ON) {
- R.string.widget_state_ipaddress_on
- } else {
- R.string.widget_state_ipaddress_off
- }
- )
- )
-
- val loading = state.ipScramblingMode.isLoading
-
- setViewVisibility(R.id.state_ip_address, if (loading) View.GONE else View.VISIBLE)
-
- setViewVisibility(R.id.state_ip_address_loader, if (loading) View.VISIBLE else View.GONE)
-
- if (state.dayStatistics.all { it.first == 0 && it.second == 0 }) {
- setViewVisibility(R.id.graph, View.GONE)
- setViewVisibility(R.id.graph_legend, View.GONE)
- setViewVisibility(R.id.graph_empty, View.VISIBLE)
- setViewVisibility(R.id.graph_legend_values, View.GONE)
- setViewVisibility(R.id.graph_view_trackers_btn, View.GONE)
- } else {
- setViewVisibility(R.id.graph, View.VISIBLE)
- setViewVisibility(R.id.graph_legend, View.VISIBLE)
- setViewVisibility(R.id.graph_empty, View.GONE)
- setViewVisibility(R.id.graph_legend_values, View.VISIBLE)
- setViewVisibility(R.id.graph_view_trackers_btn, View.VISIBLE)
-
- val pIntent = MainActivity.deepLinkBuilder(context)
- .setDestination(R.id.trackersFragment)
- .createPendingIntent()
-
- setOnClickPendingIntent(R.id.graph_view_trackers_btn, pIntent)
-
- val graphHeightPx = 26.dpToPxF(context)
- val maxValue =
- state.dayStatistics
- .map { it.first + it.second }
- .maxOrNull()
- .let { if (it == null || it == 0) 1 else it }
- val ratio = graphHeightPx / maxValue
-
- state.dayStatistics.forEachIndexed { index, (blocked, leaked) ->
- // blocked (the bar below)
- val middlePadding = graphHeightPx - blocked * ratio
- setViewPadding(blockedBarIds[index], 0, middlePadding.toInt(), 0, 0)
-
- // leaked (the bar above)
- val topPadding = graphHeightPx - (blocked + leaked) * ratio
- setViewPadding(leakedBarIds[index], 0, topPadding.toInt(), 0, 0)
- }
-
- setTextViewText(
- R.id.graph_legend,
- context.getString(
- R.string.widget_graph_trackers_legend,
- state.activeTrackersCount.toString()
- )
- )
- }
}
- appWidgetManager.updateAppWidget(ComponentName(context, Widget::class.java), views)
+ appWidgetManager.updateAppWidget(widgetId, views)
}
-private val containerBarIds = listOf(
- R.id.widget_graph_bar_container_0,
- R.id.widget_graph_bar_container_1,
- R.id.widget_graph_bar_container_2,
- R.id.widget_graph_bar_container_3,
- R.id.widget_graph_bar_container_4,
- R.id.widget_graph_bar_container_5,
- R.id.widget_graph_bar_container_6,
- R.id.widget_graph_bar_container_7,
- R.id.widget_graph_bar_container_8,
- R.id.widget_graph_bar_container_9,
- R.id.widget_graph_bar_container_10,
- R.id.widget_graph_bar_container_11,
- R.id.widget_graph_bar_container_12,
- R.id.widget_graph_bar_container_13,
- R.id.widget_graph_bar_container_14,
- R.id.widget_graph_bar_container_15,
- R.id.widget_graph_bar_container_16,
- R.id.widget_graph_bar_container_17,
- R.id.widget_graph_bar_container_18,
- R.id.widget_graph_bar_container_19,
- R.id.widget_graph_bar_container_20,
- R.id.widget_graph_bar_container_21,
- R.id.widget_graph_bar_container_22,
- R.id.widget_graph_bar_container_23
-)
-
-private val blockedBarIds = listOf(
- R.id.widget_graph_bar_0,
- R.id.widget_graph_bar_1,
- R.id.widget_graph_bar_2,
- R.id.widget_graph_bar_3,
- R.id.widget_graph_bar_4,
- R.id.widget_graph_bar_5,
- R.id.widget_graph_bar_6,
- R.id.widget_graph_bar_7,
- R.id.widget_graph_bar_8,
- R.id.widget_graph_bar_9,
- R.id.widget_graph_bar_10,
- R.id.widget_graph_bar_11,
- R.id.widget_graph_bar_12,
- R.id.widget_graph_bar_13,
- R.id.widget_graph_bar_14,
- R.id.widget_graph_bar_15,
- R.id.widget_graph_bar_16,
- R.id.widget_graph_bar_17,
- R.id.widget_graph_bar_18,
- R.id.widget_graph_bar_19,
- R.id.widget_graph_bar_20,
- R.id.widget_graph_bar_21,
- R.id.widget_graph_bar_22,
- R.id.widget_graph_bar_23
-)
-
-private val leakedBarIds = listOf(
- R.id.widget_leaked_graph_bar_0,
- R.id.widget_leaked_graph_bar_1,
- R.id.widget_leaked_graph_bar_2,
- R.id.widget_leaked_graph_bar_3,
- R.id.widget_leaked_graph_bar_4,
- R.id.widget_leaked_graph_bar_5,
- R.id.widget_leaked_graph_bar_6,
- R.id.widget_leaked_graph_bar_7,
- R.id.widget_leaked_graph_bar_8,
- R.id.widget_leaked_graph_bar_9,
- R.id.widget_leaked_graph_bar_10,
- R.id.widget_leaked_graph_bar_11,
- R.id.widget_leaked_graph_bar_12,
- R.id.widget_leaked_graph_bar_13,
- R.id.widget_leaked_graph_bar_14,
- R.id.widget_leaked_graph_bar_15,
- R.id.widget_leaked_graph_bar_16,
- R.id.widget_leaked_graph_bar_17,
- R.id.widget_leaked_graph_bar_18,
- R.id.widget_leaked_graph_bar_19,
- R.id.widget_leaked_graph_bar_20,
- R.id.widget_leaked_graph_bar_21,
- R.id.widget_leaked_graph_bar_22,
- R.id.widget_leaked_graph_bar_23
-)
-
private const val REQUEST_CODE_DASHBOARD = 1
-private const val REQUEST_CODE_TRACKERS = 3
private const val REQUEST_CODE_TOGGLE_TRACKERS = 4
private const val REQUEST_CODE_TOGGLE_LOCATION = 5
private const val REQUEST_CODE_TOGGLE_IPSCRAMBLING = 6
-private const val REQUEST_CODE_HIGHLIGHT = 100
-fun applyDarkText(context: Context, state: State, views: RemoteViews) {
- views.apply {
- listOf(
- R.id.state_label,
- R.id.graph_legend_blocked,
- R.id.graph_legend_allowed
+private const val NARROW_MAXWIDTH_DP_BREAKPOINT = 240
+private fun buildLayout(context: Context, appWidgetManager: AppWidgetManager, widgetId: Int): RemoteViews {
+ val width = appWidgetManager.getAppWidgetOptions(widgetId)
+ .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)
+
+ return RemoteViews(
+ context.packageName,
+ when (width) {
+ in 0..NARROW_MAXWIDTH_DP_BREAKPOINT ->
+ R.layout.widget_narrow
+ else -> R.layout.widget_large
+ }
+ )
+}
- )
- .forEach {
- setTextColor(
- it,
- context.getColor(if (isDarkText) R.color.on_surface_disabled_light else R.color.on_primary_medium_emphasis)
- )
+private fun applyDarkText(context: Context, isDarkText: Boolean, views: RemoteViews) {
+ views.apply {
+ // FFFFFF %87
+ val primaryColor = context.getColor(
+ if (isDarkText) {
+ R.color.on_surface_medium_emphasis_light
+ } else {
+ R.color.on_surface_high_emphasis
}
- setTextColor(
- R.id.widget_title,
- context.getColor(if (isDarkText) R.color.on_surface_medium_emphasis_light else R.color.on_surface_high_emphasis)
)
+
listOf(
- R.id.state_trackers,
- R.id.state_geolocation,
- R.id.state_ip_address,
- R.id.graph_legend,
- R.id.graph_view_trackers_btn
- )
- .forEach {
- setTextColor(
- it,
- context.getColor(if (isDarkText) R.color.on_surface_medium_emphasis_light else R.color.on_primary_high_emphasis)
- )
- }
+ R.id.widget_title,
+ R.id.data_blocked_trackers_primary,
+ R.id.data_apps_primary,
+ R.id.trackers_control_label,
+ R.id.fake_location_label,
+ R.id.ipscrambling_label
+ ).forEach {
+ setTextColor(
+ it,
+ primaryColor
+ )
+ }
listOf(
- R.id.trackers_label,
- R.id.geolocation_label,
- R.id.ip_address_label,
- R.id.graph_empty
+ R.id.settings_btn to R.drawable.ic_settings,
+ R.id.data_blocked_trackers_icon to R.drawable.ic_block_24,
+ R.id.data_apps_icon to R.drawable.ic_apps_24
+ ).forEach { (viewId, drawableId) ->
+ setImageViewIcon(
+ viewId,
+ Icon.createWithResource(context, drawableId).apply { setTint(primaryColor) }
+ )
+ }
- )
- .forEach {
- setTextColor(
- it,
- context.getColor(if (isDarkText) R.color.on_surface_disabled_light else R.color.on_primary_disabled)
- )
- }
- setTextViewCompoundDrawables(
- R.id.graph_view_trackers_btn,
- 0,
- 0,
- if (isDarkText) R.drawable.ic_chevron_right_24dp_light else R.drawable.ic_chevron_right_24dp,
- 0
- )
- setImageViewResource(
- R.id.settings_btn,
- if (isDarkText) R.drawable.ic_settings_light else R.drawable.ic_settings
- )
- setImageViewResource(
- R.id.state_icon,
- if (isDarkText) {
- if (state.quickPrivacyState.isEnabled()) {
- R.drawable.ic_shield_on_light
- } else {
- R.drawable.ic_shield_off_light
- }
- } else {
- if (state.quickPrivacyState.isEnabled()) {
- R.drawable.ic_shield_on_white
- } else {
- R.drawable.ic_shield_off_white
- }
- }
- )
+ // FFFFFF %60
+ val secondaryColor = context.getColor(if (isDarkText) R.color.on_surface_disabled_light else R.color.on_primary_medium_emphasis)
+
+ setTextColor(R.id.period_label, secondaryColor)
}
}
+
+private fun buildDataSecondarySpan(context: Context, isDarkText: Boolean, count: Int, @StringRes secondaryRes: Int): CharSequence {
+ val primaryColor = context.getColor(
+ if (isDarkText) {
+ R.color.on_surface_medium_emphasis_light
+ } else {
+ R.color.on_surface_high_emphasis
+ }
+ )
+
+ val secondaryColor = context.getColor(if (isDarkText) R.color.on_surface_disabled_light else R.color.on_primary_medium_emphasis)
+
+ val countStr = count.toString()
+ val secondary = context.getString(secondaryRes)
+
+ val spannable = SpannableString("$countStr $secondary")
+
+ spannable.setSpan(
+ ForegroundColorSpan(primaryColor),
+ 0,
+ countStr.length,
+ Spannable.SPAN_INCLUSIVE_EXCLUSIVE
+ )
+
+ spannable.setSpan(
+ ForegroundColorSpan(secondaryColor),
+ countStr.length,
+ spannable.length,
+ Spannable.SPAN_INCLUSIVE_EXCLUSIVE
+ )
+ return spannable
+}
+
+private fun setSwitchState(views: RemoteViews, switchId: Int, checked: Boolean) {
+ views.setImageViewResource(
+ switchId,
+ if (checked) {
+ R.drawable.ic_switch_enabled_raster
+ } else {
+ R.drawable.ic_switch_disabled_raster
+ }
+ )
+}
diff --git a/app/src/main/res/drawable-night/ic_shield_off.xml b/app/src/main/res/drawable-night/ic_shield_off.xml
deleted file mode 100644
index f45fd988b6568dcffeed887110bc532e7b728001..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable-night/ic_shield_off.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable-night/ic_shield_on.xml b/app/src/main/res/drawable-night/ic_shield_on.xml
deleted file mode 100644
index ecc27b4c9313e93ee8edb0c385d3383cb51b5deb..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable-night/ic_shield_on.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_legend_blocked_2.xml b/app/src/main/res/drawable/bg_stroke_rounded_8.xml
similarity index 78%
rename from app/src/main/res/drawable/ic_legend_blocked_2.xml
rename to app/src/main/res/drawable/bg_stroke_rounded_8.xml
index 9a146a8bd85b2641ab5b732cb7399a38f90fce01..488961c16e0c6c6629056a987edd8d5cc64474f0 100644
--- a/app/src/main/res/drawable/ic_legend_blocked_2.xml
+++ b/app/src/main/res/drawable/bg_stroke_rounded_8.xml
@@ -1,6 +1,6 @@
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_back_24dp.xml b/app/src/main/res/drawable/ic_back_24dp.xml
deleted file mode 100644
index ec67587b18c3cb53ca33a0f786689bd89454f124..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_back_24dp.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_chevron_right_24dp_light.xml b/app/src/main/res/drawable/ic_chevron_right_24dp_light.xml
deleted file mode 100644
index acbf2f2a71c65cf957161b8f3109ec7d87e1d5cd..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_chevron_right_24dp_light.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_legend_blocked.xml b/app/src/main/res/drawable/ic_legend_blocked.xml
index 15f8c56549e2951ade8316a742eb33ddf5af743b..9a146a8bd85b2641ab5b732cb7399a38f90fce01 100644
--- a/app/src/main/res/drawable/ic_legend_blocked.xml
+++ b/app/src/main/res/drawable/ic_legend_blocked.xml
@@ -1,4 +1,5 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_map_marker_blue.xml b/app/src/main/res/drawable/ic_map_marker_blue.xml
deleted file mode 100644
index 619dc47cd861278a003a151dbc6d519f502d9caf..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_map_marker_blue.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_map_marker_red.xml b/app/src/main/res/drawable/ic_map_marker_red.xml
deleted file mode 100644
index 48fae251f0cf905fbcd5520f235000ca3bbf274f..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_map_marker_red.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_settings_light.xml b/app/src/main/res/drawable/ic_settings_light.xml
deleted file mode 100644
index 4eca968d3fdda179bc23708ac762c9f5eccf8575..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_settings_light.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_shield_off.xml b/app/src/main/res/drawable/ic_shield_off.xml
deleted file mode 100644
index cd60ba4a04edb042989e8c533df1961092881903..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_shield_off.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_shield_off_light.xml b/app/src/main/res/drawable/ic_shield_off_light.xml
deleted file mode 100644
index c5628357c59fb10db1a4d8e5cc4e5924039bc70a..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_shield_off_light.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_shield_off_white.xml b/app/src/main/res/drawable/ic_shield_off_white.xml
deleted file mode 100644
index f45fd988b6568dcffeed887110bc532e7b728001..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_shield_off_white.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_shield_on.xml b/app/src/main/res/drawable/ic_shield_on.xml
deleted file mode 100644
index e29f766f013f87e9297dfc7c39ffce4d633ffaa9..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_shield_on.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_shield_on_light.xml b/app/src/main/res/drawable/ic_shield_on_light.xml
deleted file mode 100644
index ef34c063acf6cae326115b3d1b267dd58261bfba..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_shield_on_light.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_shield_on_white.xml b/app/src/main/res/drawable/ic_shield_on_white.xml
deleted file mode 100644
index ecc27b4c9313e93ee8edb0c385d3383cb51b5deb..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_shield_on_white.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_switch_disabled.xml b/app/src/main/res/drawable/ic_switch_disabled.xml
deleted file mode 100644
index 41584832ba2e82012a4e295928921329fbc2c5b9..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_switch_disabled.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_switch_disabled_raster.png b/app/src/main/res/drawable/ic_switch_disabled_raster.png
new file mode 100644
index 0000000000000000000000000000000000000000..d07fc453ff8c289df60affc625ef3e8ae7ea1a17
Binary files /dev/null and b/app/src/main/res/drawable/ic_switch_disabled_raster.png differ
diff --git a/app/src/main/res/drawable/ic_switch_enabled.xml b/app/src/main/res/drawable/ic_switch_enabled.xml
deleted file mode 100644
index 10e83f7ddefcec7d72856b815af5316b6cd21302..0000000000000000000000000000000000000000
--- a/app/src/main/res/drawable/ic_switch_enabled.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_switch_enabled_raster.png b/app/src/main/res/drawable/ic_switch_enabled_raster.png
new file mode 100644
index 0000000000000000000000000000000000000000..72cc22b7ef0401b7aac0b2941fd40baaa2d84d4d
Binary files /dev/null and b/app/src/main/res/drawable/ic_switch_enabled_raster.png differ
diff --git a/app/src/main/res/layout/item_list_tracker.xml b/app/src/main/res/layout/item_list_tracker.xml
deleted file mode 100644
index 1b5ecc22beb1810d59cff9369fe58aceaa936324..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/item_list_tracker.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/trackers_item_graph.xml b/app/src/main/res/layout/trackers_item_graph.xml
index b21371d28a8f59e5842a7148ad18a5a783faed82..e6f2d1ab87263ab37c4a2cce9d18891e7886ed46 100644
--- a/app/src/main/res/layout/trackers_item_graph.xml
+++ b/app/src/main/res/layout/trackers_item_graph.xml
@@ -68,7 +68,7 @@
app:layout_constraintTop_toBottomOf="@+id/graph"
android:layout_marginTop="19dp"
android:layout_marginStart="16dp"
- android:background="@drawable/ic_legend_blocked_2"
+ android:background="@drawable/ic_legend_blocked"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintHorizontal_bias="0"
/>
diff --git a/app/src/main/res/layout/widget.xml b/app/src/main/res/layout/widget.xml
deleted file mode 100644
index 8a84112f046e58792e93aaaab3c9126133f1e30c..0000000000000000000000000000000000000000
--- a/app/src/main/res/layout/widget.xml
+++ /dev/null
@@ -1,812 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/widget_large.xml b/app/src/main/res/layout/widget_large.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1f1015e7a53db9d51619ea3f4694c8ab14ff797f
--- /dev/null
+++ b/app/src/main/res/layout/widget_large.xml
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/widget_narrow.xml b/app/src/main/res/layout/widget_narrow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e354167ff974aa34f3441a44ac9d7dd44d880e93
--- /dev/null
+++ b/app/src/main/res/layout/widget_narrow.xml
@@ -0,0 +1,254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 0a08efdc5968e3627f4aec9d24f891494d30db6a..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index ef14e5731e45ab7f9f0655cc06e589181210ce2e..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index b6b63b6726bb22124da5b4b8d6474050a6414189..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index f75ced5fe499c7048a7b8234e0f319a7d5450d22..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index c5d002ca8df5e1aba1698a3d20bc995ce1701229..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 04564373ed2e53b86241f8aa014b8c09c76131e3..83636df8d891f4f118fb9a6fad674bc14f90ade9 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -24,7 +24,7 @@
Verschleiere meine echte IP-Adresse
Ich bin anonym im Internet
Bemerkung: Wenn diese Option aktiviert ist, kann das Internet spürbar langsamer sein.
- Aktiviere „Schneller Datenschutz“, um diese Funktionen zu benutzen
Unser IP-Verschlüsselungsdienst benötigt Zeit zum Starten. Das kann einige Minuten dauern. Der Bildschirm kann verlassen werden, ohne dass der Prozess unterbrochen wird.
Meinen echten Standort benutzen
Einen zufälligen, aber möglichen Standort benutzen
@@ -59,24 +58,14 @@
Tracker-Kontrolle anschalten
Es wurden noch keine Tracker gefunden. Sobald welche entdeckt werden, wird das hier aktualisiert.
Es wurden noch keine Tracker entdeckt. Alle zukünftigen Tracker werden blockiert.
- Aktiviere „Schneller Datenschutz“, um Tracker aktivieren und deaktivieren zu können.
- App ist nicht installiert.
- Dein Online-Datenschutz ist gewährleistet
- Dein Online-Datenschutz ist nicht gewährleistet
Meine Internetaktivität soll erscheinen von:
Deine Internetadresse oder IP-Adresse ist die Kennung deines Telefons, wenn es mit dem Internet verbunden ist.
\n
\n„Meine IP-Adresse verwalten“ ermöglicht dir, eine gefälschte IP-Adresse anstatt deiner echten IP-Adresse zu benutzen. Auf diese Weise kann deine Internetaktivität nicht mit deiner echten IP-Adresse und deinem Telefon verknüpft werden.
Glückwunsch! Es wird kein Profil über dich von Trackern erstellt.
- Blockierte Lecks
- Erlaubte Lecks
Entdecke Advanced Privacy
- Tippe auf die Balken für weitere Informationen.
Tippe, um herauszufinden, wie Tracker einfach blockiert, dein Standort gefälscht und deine IP-Adresse verschleiert werden kann.
Benutzerdefinierte Datenschutz-Einstellungen werden angewendet
- Schließen
- Benutzerdefinierte Datenschutz-Einstellungen werden angewandt
- Ansicht
Ansicht
Nur Apps mit Internet-Berechtigung sind aufgeführt.
Benutzerdefiniert
@@ -123,7 +112,6 @@
Bemerkung:
Schalte die Tracker aus, die du zulassen möchtest:
%s Tracker-Übersicht
- Tracker verwalten
Schalte die Apps um, für die du diesen Tracker erlauben willst:
Tracker-Kontrolle Warnung
Blockierte Datenlecks
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 787e49d65f6e0aca2e4810a3938de2db9f4c541f..7f6bb29fbdfddbe8a90912eac383ada134d5dca2 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -1,24 +1,12 @@
- Rastreadores
Vulnerable
Rechazado
- Ubicación
Expuesto
Falso
- Direccion IP real
Expuesto
Oculto
- Filtración de datos personales:
- Hoy
- Gestionar rastreadores de aplicaciones
- %1$d rastreadores detectados, %2$d rastreadores permitidos
Gestionar permisos de aplicaciones
- Geolocalización real
- Geolocalización falsa específica
- Geolocalización falsa al azar
- Gestionar mi dirección de Internet
- Dirección IP real oculta
Gestionar mi dirección de Internet
Usar mi dirección IP real
Puedo ser rastreado por mi dirección IP
@@ -27,9 +15,6 @@
Mi actividad en internet debe aparecer desde:
País al azar
Aplicar esta configuración a todas las aplicaciones seleccionadas * :
- Tu privacidad en linea está desprotegida
- Gestiona tus permisos
- Activar \"Privacidad rápida\" para poder activar/desactivar rastreadores.
Gestionar mi ubicación
Usar mi ubicación real
Usar una ubicación aceptable al azar
@@ -49,12 +34,8 @@
Rastreadores bloqueados
No se ha detectado ningún rastreador. Nuevos rastreadores se actualizarán aquí.
- Privacidad rápida activada para utilizar funciones
No se ha detectado ningún rastreador. Futuros rastreadores serán todos bloqueados.
- Tu privacidad en línea está protegida
- %s rastreadores te han perfilado en las últimas 24 horas
Gestionar mi ubicación
- Dirección IP real expuesta
Nuestro servicio de codificación de IP está tardando en lanzarse. Puede tardar unos minutos. Salir de la pantalla no interrumpirá el proceso.
Tu dirección de Internet o dirección IP es el identificador asignado a tu teléfono cuando estás conectado al Internet.
\n
@@ -65,9 +46,6 @@
Los rastreadores son fragmentos de código ocultos en las aplicaciones. Recopilan tus datos y siguen tu actividad 24/7. Comprueba qué rastreadores están activos y bloquéalos todos para una mejor protección. Puedes elegir específicamente qué rastreadores quieres bloquear para evitar el mal funcionamiento de algunas aplicaciones.
Nota: Mientras esta opción esté activa, es probable que tu velocidad de Internet se reduzca considerablemente.
Sistema
- Tu privacidad en línea está protegida
- Tu privacidad en línea está desprotegida
- Aplicación no instalada.
Esto podría afectar el funcionamiento de algunas aplicaciones.
IP real oculta
Resaltar que la IP está actualmente oculta por Advanced Privacy
@@ -78,7 +56,6 @@
Indicador de ubicación falsa
Toca para descubrir cómo bloquear rastreadores, falsificar tu ubicación y ocultar tu dirección IP facilmente.
Primer arranque
- Configuración de privacidad personalizada
Entendido
Esta opción utiliza la red TOR para ocultar tu dirección IP real. Utilízala sólo para aplicaciones específicas. Mientras tu IP sea falsa, es probable que tu velocidad de Internet se vea reducida.
\nImportante: te aconsejamos que desactives esta función para los servicios de correo electrónico, ya que tu dirección podría ser bloqueada permanentemente por tu proveedor.
@@ -94,15 +71,8 @@
Por favor, desactiva la VPN %s de terceros para que Advanced Privacy pueda ocultar tu dirección IP real.
Sólo aparecen aplicaciones con acceso a Internet.
Personalizado
- Configuración de privacidad personalizada
No hay aplicación para ver páginas web
- Pulse en las barras para más información.
- Fugas permitidas
- Fugas bloqueadas
- Cerrar
Ok
Enhorabuena. Ningún rastreador te está haciendo un perfil.
- Vista
- Vista
Ocultar mi indicador IP
\ No newline at end of file
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index f9a16c065c28629bd9c0137b0e245fb59e55e3ff..7148e866a8561e6dfd2050f9b98083497242e4e8 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -1,14 +1,7 @@
- Yksityisyyttäsi verkossa ei ole suojattu
Napauta nädäksesi, miten helposti voit estää seuraimet, väärentää sijaintisi ja piilottaa IP-osoitteesi.
Tutustu Advanced Privacy:n
- Näytä
- Sovelletaan mukautettuja yksityisyysasetuksia
- Yksityisyyttäsi verkossa ei ole suojattu
- Yksityisyytesi verkossa on suojattu
- Sovellusta ei ole asennettu.
- Ota Quick Privacy käyttöön, jotta voit ottaa käyttöön tai poistaa käytöstä seuraimia.
Seuraimia ei ole vielä havaittu. Kaikki jatkossa ilmestyvät seuraimet estetään.
Seuraimia ei ole vielä havaittu. Jos uusia seuraimia havaitaan, ne päivitetään tähän.
Estä seuraimet
@@ -25,7 +18,6 @@
Virheelliset koordinaatit
Leveysaste
Pituusaste
- Tietty väärennetty sijainti
Käytä tiettyä sijaintia
Käytä satunnaista uskottavaa sijaintia
Käytä oikeaa sijaintiani
@@ -34,38 +26,18 @@
\nSijainnin hallinta mahdollistaa väärennetyn sijainnin käyttämisen todellisen sijaintisi sijasta. Näin todellista sijaintiasi ei jaeta sovelluksille, jotka saattavat nuuskia liikaa.
Hallitse sijaintiani
Piilotetun IP-palvelumme käynnistäminen vie aikaa. Se voi kestää muutaman minuutin. Ruudulta poistuminen ei keskeytä prosessia.
- Quick Privacy on otettu käyttöön toimintojen käyttöä varten
Sovella tätä asetusta kaikkiin valittuihin sovelluksiin * :
Satunnaisesta maasta
Internet-toimintani täytyy näyttää olevan peräisin:
Huomaa: Kun tämä vaihtoehto on käytössä, Internetyhteytesi nopeus todennäköisesti alenee merkittävästi.
- Hallitse Internet-osoitettani
- Satunnainen väärennetty sijainti
- Todellinen sijainti
Hallitse sijaintiasi
- Hallitse käyttöoikeuksiasi
Hallitse sovellusten käyttöoikeuksia
- %1$d havaittua seurainta, %2$d sallittua seurainta
- Hallitse sovellusten seuraimia
- Näytä
- %s seurainta on profiloinut tietojasi viimeisen 24 tunnin aikana
- Tänään
- Henkilötietojen vuoto:
Piilotettu
Paljastettu
- Todellinen IP-osoite
Väärennetty
Paljastettu
- Sijainti
Estetty
Haavoittuvainen
- Seuraimet
- Sovelletaan mukautettuja yksityisyysasetuksia
- Yksityisyytesi verkossa on suojattu
- Sulje
- Napauta palkkeja saadaksesi lisätietoja.
- Sallittuja tietovuotoja
- Estettyjä tietovuotoja
Onnittelut! Yksikään seurain ei profiloi sinua.
Järjestelmä
Olen anonyymi Internetissä
@@ -76,8 +48,6 @@
\n
\nInternet-osoitteen hallinta mahdollistaa väärennetyn IP-osoitteen käyttämisen oikean IP-osoitteesi sijaan. Näin Internet-toimintaasi ei voida yhdistää oikeaan IP-osoitteeseesi eikä laitteeseesi.
Hallitse Internet-osoitettani
- Todellinen IP-osoite piilotettu
- Todellinen IP-osoite paljastettu
Tämä voi vaikuttaa joidenkin sovellusten toimintaan.
Todellinen IP piilotettu
Korosta, että sijainti on tällä hetkellä väärennetty Advanced Privacy -sovelluksella
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index aebb68b421cc3f410a054f147caad4fd049f3e2a..b0279454b0115d27d34e33e47f2192fb228b53c8 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -44,7 +44,6 @@
Activer le contrôle des pisteurs
Aucun pisteur n\'a été détecté pour l\'instant. Si de nouveaux pisteurs sont détectés, ils seront listés ici.
Aucun pisteur n\'a été détecté pour l\'instant. Tous les futurs pisteurs seront bloqués.
- Activez \"Confidentialité Rapide\" pour pouvoir bloquer/autoriser les pisteurs.
Gérer ma position
Utiliser ma vraie position
Utiliser une position aléatoire plausible
@@ -52,26 +51,16 @@
Votre adresse Internet ou adresse IP est l\'identifiant attribué à votre téléphone lorsqu\'il est connecté à Internet.
\n
\n\"Gérer mon adresse Internet\" vous permet d\'utiliser une adresse IP fictive au lieu de votre véritable adresse IP. Ainsi, votre activité Internet ne peut pas être liée à votre vraie adresse IP et à votre appareil.
- Activation de la confidentialité rapide pour utiliser les fonctionnalités
Notre service de brouillage des adresses IP prend du temps à se lancer. Cela peut prendre quelques minutes. Quitter l\'écran n\'interrompra pas le processus.
Votre position peut révéler beaucoup de choses sur vous-même ou sur vos activités.
\n
\n\"Gérer ma position\" vous permet d\'utiliser une position fictive au lieu de votre véritable position. De cette façon, votre vraie position n\'est pas partagée avec des applications qui pourraient vous espionner.
Les pisteurs sont des morceaux de code dissimulés dans les applications. Ils collectent vos données et suivent votre activité 24h/24 et 7j/7. Découvrez les pisteurs actifs et bloquez-les tous pour une meilleure protection. Pour éviter le dysfonctionnement de certaines applications, vous pouvez également choisir spécifiquement les pisteurs que vous souhaitez bloquer.
- Fuites autorisées
- Fuites bloquées
- Appuyez sur les barres pour plus d\'informations.
Félicitations ! Aucun pisteur ne vous profile.
Paramètres de confidentialité personnalisés appliqués
Découvrez Advanced Privacy
- Application non installée.
Cliquez pour découvrir comment bloquer facilement les pisteurs, falsifier votre position et masquer votre adresse IP.
- Voir
- Paramètres de confidentialité personnalisés appliqués
- Votre vie privée en ligne n\'est pas protégée
- Votre vie privée en ligne est protégée
Voir
- Fermer
Applications Système
Merci de désactiver le VPN tiers %s afin de permettre à Advanced Privacy de masquer votre vraie adresse IP.
Seules les applications ayant la permission Internet sont listées.
@@ -119,7 +108,6 @@
Note :
Désactivez les pisteur que vous voulez autoriser :
Activité de %s
- Gérer les pisteurs
Désactiver les apps pour lesquelles vous souhaitez autoriser ce pisteur
Fuites bloquées
Voir plus.
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index 10ee239d4006d61ecfdd3cdd820bec97ce2a2a14..392cf5aff72d2d12209acdd13d3955e22517fb34 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -1,11 +1,8 @@
- Loka
Í lagi
Kerfi
Samhæfni forrita
- Útilokaðir lekar
- Leyfðir lekar
Rekjarar
Viðkvæmt
Hafnað
@@ -33,12 +30,10 @@
dd/MM
MMM
Víxla á rekjarastýringu
- Forritið er ekki uppsett.
Ekki sýna þetta aftur
Falsa staðsetninguna þína
Fela IP-vistfangið mitt
Ég skil
- Skoða
Friðhelgi þín á netinu er óvarin
Handahófskennd fölsuð hnattstaðsetning
Sýsla með internetslóðina mína
@@ -54,7 +49,6 @@
Nota handahófskennda en sennilega staðsetningu
Fyrsta ræsing
Til hamingju! Engir rekjarar eru að njósna um þig.
- Ýttu á stikurnar til að fá frekari upplýsingar.
Ekkert forrit til að skoða vefsíður
Friðhelgi þín á netinu er varin
Sérsniðnar stillingar á friðhelgi virkjaðar
@@ -69,9 +63,6 @@
Sýsla með rekjara í forriti
Frumstilla rekjara
Sýsla með rekjara í forritum
- Friðhelgi þín á netinu er varin
- Friðhelgi þín á netinu er óvarin
- Sérsniðnar stillingar á friðhelgi virkjaðar
Raunverulegt IP-vistfang falið
Hægt er að rekja slóðir mínar frá IP-vistfanginu mínu
Virkni mín á netinu verður að sýnast vera frá:
@@ -82,12 +73,10 @@
Kveikt á falsaðri staðsetningu
Þetta gæti haft áhrif á virkni sumra forrita.
Athugaðu: Á meðan þessi kostur er virkur, er hraði internettengingarinnar þinnar líklega verulega takmarkaður.
- Virkjaði flýtileynd (Quick Privacy) til að nota eiginleika
Gerðu utanaðkomandi %s VPN-tenginguna þína óvirka til að ítarlega persónuverndin geti falið raunverulega IP-vistfangið þitt.
Engir rekjarar hafa enn fundist. Ef nýir rekjarar finnast mun það sjást hér.
Engir rekjarar hafa enn fundist. Allir rekjarar sem finnast munu verða útilokaðir.
Engir rekjarar hafa enn fundist. Einhverjir rekjarar hafa verið teknir úr banni.
- Virkjaðu flýtileynd (Quick Privacy) til að geta virkjað rekjara eða gert óvirka.
Breytingar taka gildi þegar kveikt er á útilokun rekjara.
Falsa staðsetningarflagg
Merkja að þessi staðsetning sé núna fölsuð af ítarlegu persónuverndinni
@@ -124,7 +113,6 @@
Athugaðu:
Veldu hvaða rekjara þú vilt leyfa:
%s yfirlit rekjara
- Stýra rekjara
Víxlaðu af þeim forritum þar sem þú vilt leyfa þennan rekjara:
Útilokaðir lekar
Kanna nánar.
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 1842dd53395d20921ccc97cd6b2341c39db24b53..2812faeeda047cd4354dff11924a30ea72f0a1e9 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -1,27 +1,13 @@
- La tua privacy online non è protetta
- Tracker
Vulnerabile
Negato
- Posizione
Esposta
Fasulla
- Indirizzo IP reale
Esposto
Nascosto
- Fuga di dati personali:
- Oggi
- Gestisci i trackers delle app
- %1$d tracker trovati, %2$d ammessi
Gestisci i permessi delle app
- Gestisci i permessi
Gestisci la posizione
- Posizione reale
- Posizione fasulla casuale
- Gestisci indirizzo Internet
- Indirizzo IP reale esposto
- Indirizzo IP reale nascosto
Gestisci indirizzo Internet
Usa indirizzo IP reale
Posso essere tracciato dal mio indirizzo IP
@@ -51,14 +37,9 @@
Blocca tracker
Non sono ancora stati rilevati tracker. Nel caso in cui accadesse verranno mostrati qui.
Non sono ancora stati rilevati tracker. Tutti quelli trovati in futuro verranno bloccati.
- Abilita Quick Privacy per poter attivare/disattivare i tracker.
- La tua privacy online è protetta
- %s tracker ti hanno profilato nelle ultime 24 ore
- Scegli posizione fasulla
L\'indirizzo Internet o indirizzo IP è l\'identificatore assegnato al telefono quando è connesso a Internet.
\n
\nGestisci indirizzo Internet ti permette di utilizzare un falso indirizzo IP al posto di quello reale. In questo modo, la tua attività su Internet non può essere collegata al tuo indirizzo IP reale e al tuo dispositivo.
- Quick Privacy abilitato ad usare le sue funzioni
Il servizio di cifratura dell\'IP richiede tempo per essere lanciato. Può richiedere alcuni minuti. Chiudere lo schermo non interromperà il processo.
La posizione può rivelare molto su di te o sulle tue attività.
\n
@@ -66,17 +47,6 @@
I tracker sono pezzi di codice nascosti nelle app. Raccolgono i tuoi dati e seguono la tua attività 24/7. Guarda quali tracker sono attivi e bloccali tutti per una migliore protezione. Dal momento che ciò potrebbe causare il malfunzionamento di alcune app, puoi scegliere di bloccarne solo alcuni.
Tocca per scoprire com\'è facile bloccare i tracker, nascondere la posizione & l\'indirizzo IP.
Scopri Advanced Privacy
- Visualizza
- Impostazioni privacy personalizzate applicate
- La tua privavy online non è protetta
- La tua privacy online è protetta
- App non installata.
- Visualizza
- Impostazioni della privacy personalizzate applicate
- Chiudi
- Tocca le barre per maggiori informazioni.
- Fughe di dati ammesse
- Fughe di dati bloccate
Complimenti! Nessun tracker ti sta profilando.
Sistema
Disabilita la VPN %s di terze parti in modo da permettere ad Advanced Privacy di nascondere l\'indirizzo IP reale.
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index d96d54c034b265f3b12ff193e0b26cccbe0392e3..a321023698366056e9f4b9fe35f633b4a68d3a38 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -1,10 +1,6 @@
OK
- Sluiten
- Tik op de balk voor meer info.
- Toegestane lekken
- Geblokkeerde lekken
Gefeliciteerd! Er zijn geen trackers you aan het profileren.
Systeem
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 2793ec627ff69190c6816b4e3c3527f051316752..e9cbb0c950ce4e01c21fdc4316ecd2d36afaf6a2 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -2,25 +2,15 @@
Скрытый
Раскрыто
- Настоящий IP-адрес
Поддельный
Раскрыто
- Местоположение
Пользовательские
Отказано
Уязвимые места
- Трекеры
- Применение пользовательских настроек конфиденциальности
- Ваша конфиденциальность в Интернете не защищена
- Ваша конфиденциальность в Интернете защищена
Нет приложения для просмотра веб-страниц
- Нажмите на полоски для получения дополнительной информации.
- Допустимые утечки
- Заблокированные утечки
Поздравляем! Никакие трекеры не профилируют вас.
Система
ОК
- Закрыть
Это может повлиять на работу некоторых приложений.
Настоящий IP-адрес скрыт
Выделите тот IP, который в настоящее время скрыт с помощью \"Advanced Privacy\"
@@ -32,10 +22,6 @@
Нажмите, чтобы узнать, как легко блокировать трекеры, подделывать свое местоположение и скрывать свой IP-адрес.
Откройте для себя \"Advanced Privacy\"
Первая Загрузка
- Вид
- Применение пользовательских настроек конфиденциальности
- Ваша конфиденциальность в Интернете не защищена
- Ваша конфиденциальность в Интернете защищена
Я понимаю
Этот параметр использует сеть TOR, чтобы скрыть ваш реальный IP-адрес. Используйте его только для определенных приложений. Хотя ваш IP-адрес подделан, скорость вашего Интернета, скорее всего, будет снижена.
\nВажно: мы рекомендуем отключить эту функцию для служб электронной почты, так как ваш адрес может быть заблокирован вашим провайдером навсегда.
@@ -45,8 +31,6 @@
Управление трекерами приложений
Пока эта опция активна, в редких случаях, некоторые приложения могут работать некорректно. Если у вас возникли проблемы, вы можете в любое время отключить контроль за трекерами для определенных приложений и веб-сайтов.
Изменения вступят в силу, если включен блокировщик трекеров.
- Приложение не установлено.
- Включите \"Quick Privacy\", чтобы иметь возможность активировать/деактивировать трекеры.
Контроль за трекерами
Не показывать снова
Трекеры пока не обнаружены. Все будущие трекеры будут заблокированы.
@@ -75,7 +59,6 @@
\nФункция \"Управление моим местоположением\" позволяет вам использовать поддельное местоположение вместо вашего настоящего. Таким образом, ваше настоящее местоположение не будет передано приложениям, которые могут слишком много шпионить.
Управление своим местоположением
Запуск нашей услуги скремблирования IP-адресов занимает некоторое время. Это может занять несколько минут. Уход с экрана не прервет процесс.
- Включена \"Quick Privacy\" для использования функциональных возможностей
Пожалуйста, отключите сторонние VPN %s, чтобы \"Advanced Privacy\" скрыл ваш реальный IP-адрес.
В списке отображаются только приложения с разрешением на использование Интернета.
Применить эту настройку ко всем выбранным приложениям * :
@@ -90,20 +73,7 @@
\n
\nУправление своим интернет-адресом позволяет использовать поддельный IP-адрес вместо своего настоящего IP-адреса. Таким образом, ваша деятельность в Интернете не может быть связана с вашим настоящим IP-адресом и вашим устройством.
Управление своим Интернет-адресом
- Настоящий IP-адрес скрыт
- Настоящие IP-адрес раскрыт
- Управление своим Интернет-адресом
- Случайная поддельная геолокация
- Специфичная поддельная геолокация
- Реальная геолокация
Управление личным местоположением
- Управление правами доступа
Управление разрешениями приложения
- %1$d обнаруженных трекеров, %2$d разрешенных трекеров
- Управление трекерами приложений
- %s трекеров составили ваш профиль за последние 24 часа
- Вид
- Сегодня
- Утечка персональных данных:
Совместимость приложений
\ No newline at end of file
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 5c2c59eb86562498fe7b9d01b32f5c9720182ec2..58d5a9921888e5b266965133510b656702dc136b 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -2,15 +2,10 @@
Göm mitt IP
Jag förstår
- Visa
- Stäng
OK
System
Applikationers kompabilitet
Grattis! Inga spårare profilerar dig.
- Blockerade läckor
- Tillåtna läckor
- Tryck på staplarna för mer information.
Ingen applikation för att kunna se webbsidor
Din integritet online är skyddad
Din integritet online är inte skyddad
@@ -73,19 +68,14 @@
Inga spårare har upptäckts än. Om nya spårare upptäcks kommer de uppdateras här.
Inga spårare har upptäckts än. Alla framtida spårare kommer blockeras.
Inga spårare har upptäckts än. Vissa spårare har tidigare avblockerats.
- Appen är inte installerad.
Ändringar kommer gälla från när spårarblockeraren är på.
Återställ spårare
Visa inte igen
- Din integritet online är skyddad
- Din integritet online är inte skyddad
- Anpassade integritetsinställningar applicerade
Första start
Upptäck Avancerad Integritet
Tryck för att få reda på hur du lätt blockerar spårare, fejkar din plats & gömmer din IP-adress.
Verklig IP är dold
Detta kan påverka funktionen hos vissa appar.
- Aktivera Snabb integritet för att använda funktionerna
Inaktivera tredjeparts-VPN %s för att dölja din verkliga IP-adress med Avancerad Integritet.
Vår tjänst för förvrängning av IP tar tid att starta. Det kan ta några minuter. Att lämna sidan kommer inte avbryta processen.
HH:mm
@@ -93,7 +83,6 @@
MMMM yyyy
dd/MM
MMM
- Aktivera Snabb integritet för att kunna aktivera/inaktivera spårare.
Spårarkontroll
Medan detta alternativ är aktiverat kan, i sällsynta fall, vissa appar sluta fungera korrekt. Om du stöter på problem kan du inaktivera Spårarkontroll för specifika appar och webbsidor när som helst.
Hantera spårare i appar
@@ -128,7 +117,6 @@
Läckor senaste 30 dagarna
%d tillåtna
%s spårarsammandrag
- Hantera spårare
Läckor senaste 12 månaderna
Växla av apparna där du vill tillåta denna spårare:
Tryck för mer info
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index edebac181d46bf52451cabe487313d2fb2c183a6..bc8041a0655311acd3b5671ef43131cfd04a60f5 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -2,16 +2,8 @@
Відхилені
Вразливі
- Трекери
- Опції приватності застосовані
- Ваша приватність в інтернеті не захищена
- Ваша приватність в інтернеті захищена
Нема застосунку для перегляду вебсторінок
- Натисніть на панель щоб показати більше інформації.
- Дозволені витіки
- Заблоковані витіки
Вітаємо! Жодних трекерів, що за вами стежать.
Система
Ок
- Закрити
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 8b9d534d57784e91abfb45abfe029041b06bf2b2..240694c71d81f73c8ca998a257a4339690b898c2 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -44,9 +44,6 @@
-
- #AADCFE
-
@color/e_primary_text_color_dark
@color/e_secondary_text_color_dark
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5177868b47d3b32974e2fe96d7122506d10b7721..926a4f48ed4b4a9f43e905651c2ad9dbb99a2c73 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -21,40 +21,35 @@
- Close
OK
System
Applications compatibility
- Congratulations! No trackers are profiling you.
- Blocked leaks
- Allowed leaks
- Tap on the bars for more information.
-
+ Congratulations! No trackers are profiling you.
No application to see webpages
@string/app_name
- Last 30 days
- View Statistics
- Blocked
- Leaks
- From
- Apps
- Your Privacy Settings
- App trackers
- Vulnerable
+ Last 30 days
+ View Statistics
+ Blocked
+ Leaks
+ From
+ Apps
+ Your Privacy Settings
+ App trackers
+ Vulnerable
Denied
Custom
- Geolocation
+ Geolocation
Exposed
Protected
- Real IP address
+ Real IP address
Exposed
Hidden
- App permission request
+ App permission request
Your online privacy is protected
Your online privacy is unprotected
@@ -93,7 +88,6 @@
Random country
Apply this setting to all selected applications * :
Only apps with Internet permission are listed.
- Enabled Quick Privacy to use functionalities
Please disable the 3rd-party VPN %s in order for Advanced Privacy to hide your real IP address.
Our scrambling IP service is taking time to launch. It can take a few minutes. Leaving the screen won\'t interrupt the process.
@@ -113,24 +107,24 @@
Know more
Day
- Month
+ Month
Year
- Leaks in the last 24 hours
- Leaks in the last 30 days
- Leaks in the last 12 months
- Tap for more info
- Blocked leaks
- Allowed leaks
- %d detected trackers
- %d allowed
-
- Apps
- Trackers
- Trackers Activity Summary
- Apps with trackers
-
- %s trackers detected
- detected in %s apps
+ Leaks in the last 24 hours
+ Leaks in the last 30 days
+ Leaks in the last 12 months
+ Tap for more info
+ Blocked leaks
+ Allowed leaks
+ %d detected trackers
+ %d allowed
+
+ Apps
+ Trackers
+ Trackers Activity Summary
+ Apps with trackers
+
+ %s trackers detected
+ detected in %s apps
HH:mm
EEE d MMMM
@@ -140,33 +134,30 @@
MMM
- %s tracking summary
- Total
- Detected trackers
- Blocked
- Trackers
- Blocked leaks
- %s allowed leaks
- Manage tracker
- Toggle on trackers control
- Toggle off the trackers you want to allow:
- No trackers were detected yet. If new trackers are detected they will be updated here.
- No trackers were detected yet. All future trackers will be blocked.
- No trackers were detected yet. Some trackers were unblocked previously.
- Enable Quick Privacy to be able to activate/deactivate trackers.
- App not installed.
- Changes will take effect when tracker blocker is on.
- Reset trackers
+ %s tracking summary
+ Total
+ Detected trackers
+ Blocked
+ Trackers
+ Blocked leaks
+ %s allowed leaks
+ Toggle on trackers control
+ Toggle off the trackers you want to allow:
+ No trackers were detected yet. If new trackers are detected they will be updated here.
+ No trackers were detected yet. All future trackers will be blocked.
+ No trackers were detected yet. Some trackers were unblocked previously.
+ Changes will take effect when tracker blocker is on.
+ Reset trackers
- %s tracking summary
- Detected in
- Different applications
- Blocked leaks
- %s allowed leaks
- Manage tracker
- Block this tracker across all apps
- Toggle off the apps for which you want to allow this tracker:
+ %s tracking summary
+ Detected in
+ Different applications
+ Blocked leaks
+ %s allowed leaks
+ Manage tracker
+ Block this tracker across all apps
+ Toggle off the apps for which you want to allow this tracker:
Note:
@@ -187,22 +178,17 @@
- @string/app_name
- Your online privacy is protected
- Your online privacy is unprotected
- Custom privacy settings applied
- @string/dashboard_state_trackers_label
- @string/dashboard_state_trackers_off
- @string/dashboard_state_trackers_on
- @string/dashboard_state_trackers_custom
- @string/dashboard_state_geolocation_label
- @string/dashboard_state_geolocation_off
- @string/dashboard_state_geolocation_on
- @string/dashboard_state_ipaddress_label
- @string/dashboard_state_ipaddress_off
- @string/dashboard_state_ipaddress_on
- @string/dashboard_graph_trackers_legend
- View
+ @string/app_name
+
+ @string/dashboard_number_period
+ @string/dashboard_data_blocked_trackers_primary
+ @string/dashboard_data_blocked_trackers_secondary
+ @string/dashboard_data_apps_primary
+ @string/dashboard_data_apps_secondary
+
+ Block app trackers
+ Fake geolocation
+ Hide IP Address
First Boot
diff --git a/app/src/main/res/xml/widget_info.xml b/app/src/main/res/xml/widget_info.xml
index ade68495838b6eab31710bf39ac9f7dec3a6aed2..388252f3a76b188532ab5ab3df2aefd7c64c946b 100644
--- a/app/src/main/res/xml/widget_info.xml
+++ b/app/src/main/res/xml/widget_info.xml
@@ -18,14 +18,14 @@
-->
$COLUMN_NAME_NUMBER_BLOCKED"
- val selectionArg = arrayOf("" + minTimestamp)
- val projection =
- "COUNT(DISTINCT $COLUMN_NAME_TRACKER) $PROJECTION_NAME_TRACKERS_COUNT"
-
- val cursor = db.rawQuery(
- "SELECT $projection FROM $TABLE_NAME WHERE $selection",
- selectionArg
- )
- var count = 0
- if (cursor.moveToNext()) {
- count = cursor.getInt(0)
- }
- cursor.close()
- db.close()
- return count
- }
- }
-
suspend fun getTrackersCount(periodsCount: Int, periodUnit: TemporalUnit): Int = withContext(Dispatchers.IO) {
synchronized(lock) {
val minTimestamp = getPeriodStartTs(periodsCount, periodUnit)
diff --git a/trackers/src/main/java/foundation/e/advancedprivacy/trackers/domain/usecases/StatisticsUseCase.kt b/trackers/src/main/java/foundation/e/advancedprivacy/trackers/domain/usecases/StatisticsUseCase.kt
deleted file mode 100644
index a36a6bf1859e07ac130c5fe76b52c048ed0834d2..0000000000000000000000000000000000000000
--- a/trackers/src/main/java/foundation/e/advancedprivacy/trackers/domain/usecases/StatisticsUseCase.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2023 MURENA SAS
- * 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 .
- */
-
-package foundation.e.advancedprivacy.trackers.domain.usecases
-
-import foundation.e.advancedprivacy.trackers.data.StatsDatabase
-import java.time.temporal.TemporalUnit
-
-class StatisticsUseCase(
- private val database: StatsDatabase
-) {
- fun getTrackersCallsOnPeriod(periodsCount: Int, periodUnit: TemporalUnit): List> {
- return database.getTrackersCallsOnPeriod(periodsCount, periodUnit)
- }
-
- fun getActiveTrackersByPeriod(periodsCount: Int, periodUnit: TemporalUnit): Int {
- return database.getActiveTrackersByPeriod(periodsCount, periodUnit)
- }
-}