diff options
19 files changed, 517 insertions, 372 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b5836dc..3bcd764 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,6 +86,13 @@ <category android:name="${mainActivityIntentFilterCategory}"/> </intent-filter> </activity> + <activity + android:name=".common.WarningDialog" + android:noHistory="true" + android:excludeFromRecents="true" + android:launchMode="singleInstance" + android:theme="@style/Theme.InvisibleActivity" + /> </application> </manifest>
\ No newline at end of file diff --git a/app/src/main/java/foundation/e/privacycentralapp/DependencyContainer.kt b/app/src/main/java/foundation/e/privacycentralapp/DependencyContainer.kt index 345307c..f241e67 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/DependencyContainer.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/DependencyContainer.kt @@ -24,6 +24,7 @@ import androidx.lifecycle.DEFAULT_ARGS_KEY import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewmodel.CreationExtras +import foundation.e.privacycentralapp.common.WarningDialog import foundation.e.privacycentralapp.data.repositories.AppListsRepository import foundation.e.privacycentralapp.data.repositories.LocalStateRepository import foundation.e.privacycentralapp.data.repositories.TrackersRepository @@ -31,6 +32,7 @@ import foundation.e.privacycentralapp.domain.usecases.AppListUseCase import foundation.e.privacycentralapp.domain.usecases.FakeLocationStateUseCase import foundation.e.privacycentralapp.domain.usecases.GetQuickPrivacyStateUseCase import foundation.e.privacycentralapp.domain.usecases.IpScramblingStateUseCase +import foundation.e.privacycentralapp.domain.usecases.ShowFeaturesWarningUseCase import foundation.e.privacycentralapp.domain.usecases.TrackersStateUseCase import foundation.e.privacycentralapp.domain.usecases.TrackersStatisticsUseCase import foundation.e.privacycentralapp.dummy.CityDataSource @@ -106,6 +108,10 @@ class DependencyContainer(val app: Application) { ) } + val showFeaturesWarningUseCase by lazy { + ShowFeaturesWarningUseCase(localStateRepository = localStateRepository) + } + val viewModelsFactory by lazy { ViewModelsFactory( getQuickPrivacyStateUseCase = getQuickPrivacyStateUseCase, @@ -126,6 +132,12 @@ class DependencyContainer(val app: Application) { UpdateTrackersWorker.periodicUpdate(context) + WarningDialog.startListening( + showFeaturesWarningUseCase, + GlobalScope, + context + ) + Widget.startListening( context, getQuickPrivacyStateUseCase, diff --git a/app/src/main/java/foundation/e/privacycentralapp/common/WarningDialog.kt b/app/src/main/java/foundation/e/privacycentralapp/common/WarningDialog.kt new file mode 100644 index 0000000..cbbeffa --- /dev/null +++ b/app/src/main/java/foundation/e/privacycentralapp/common/WarningDialog.kt @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2022 E FOUNDATION + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package foundation.e.privacycentralapp.common + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.util.Log +import android.view.View +import android.widget.CheckBox +import androidx.appcompat.app.AlertDialog +import foundation.e.privacycentralapp.PrivacyCentralApplication +import foundation.e.privacycentralapp.R +import foundation.e.privacycentralapp.domain.entities.MainFeatures +import foundation.e.privacycentralapp.domain.entities.MainFeatures.FAKE_LOCATION +import foundation.e.privacycentralapp.domain.entities.MainFeatures.IP_SCRAMBLING +import foundation.e.privacycentralapp.domain.entities.MainFeatures.TRACKERS_CONTROL +import foundation.e.privacycentralapp.domain.usecases.ShowFeaturesWarningUseCase +import foundation.e.privacycentralapp.main.MainActivity +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map + +class WarningDialog : Activity() { + companion object { + private const val PARAM_FEATURE = "feature" + + fun startListening( + showFeaturesWarningUseCase: ShowFeaturesWarningUseCase, + appScope: CoroutineScope, + appContext: Context + ) { + showFeaturesWarningUseCase.showWarning().map { feature -> + appContext.startActivity( + createIntent(context = appContext, feature = feature) + ) + }.launchIn(appScope) + } + + private fun createIntent( + context: Context, + feature: MainFeatures, + ): Intent { + val intent = Intent(context, WarningDialog::class.java) + intent.putExtra(PARAM_FEATURE, feature.name) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + return intent + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + getWindow().setBackgroundDrawable(ColorDrawable(0)) + + val feature = try { + MainFeatures.valueOf(intent.getStringExtra(PARAM_FEATURE) ?: "") + } catch (e: Exception) { + Log.e("WarningDialog", "Missing mandatory activity parameter", e) + finish() + return + } + + showWarningDialog(feature) + } + + private fun showWarningDialog(feature: MainFeatures) { + val builder = AlertDialog.Builder(this) + builder.setOnDismissListener { finish() } + + val content: View = layoutInflater.inflate(R.layout.alertdialog_do_not_show_again, null) + val checkbox = content.findViewById<CheckBox>(R.id.checkbox) + builder.setView(content) + + builder.setMessage( + when (feature) { + TRACKERS_CONTROL -> R.string.warningdialog_trackers_message + FAKE_LOCATION -> R.string.warningdialog_location_message + IP_SCRAMBLING -> R.string.warningdialog_ipscrambling_message + } + ) + + builder.setTitle( + when (feature) { + TRACKERS_CONTROL -> R.string.warningdialog_trackers_title + FAKE_LOCATION -> R.string.warningdialog_location_title + IP_SCRAMBLING -> R.string.warningdialog_ipscrambling_title + } + ) + + builder.setPositiveButton( + when (feature) { + IP_SCRAMBLING -> R.string.warningdialog_ipscrambling_cta + else -> R.string.ok + } + ) { _, _ -> + if (checkbox.isChecked()) { + (application as PrivacyCentralApplication) + .dependencyContainer.showFeaturesWarningUseCase + .doNotShowAgain(feature) + } + finish() + } + + if (feature == TRACKERS_CONTROL) { + builder.setNeutralButton(R.string.warningdialog_trackers_secondary_cta) { _, _ -> + startActivity(MainActivity.createTrackersIntent(this)) + finish() + } + } + + builder.show() + } +} diff --git a/app/src/main/java/foundation/e/privacycentralapp/data/repositories/LocalStateRepository.kt b/app/src/main/java/foundation/e/privacycentralapp/data/repositories/LocalStateRepository.kt index 92ee0c1..6cb4f81 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/data/repositories/LocalStateRepository.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/data/repositories/LocalStateRepository.kt @@ -36,6 +36,9 @@ class LocalStateRepository(context: Context) { private const val KEY_FAKE_LATITUDE = "fakeLatitude" private const val KEY_FAKE_LONGITUDE = "fakeLongitude" private const val KEY_FIRST_BOOT = "firstBoot" + private const val KEY_HIDE_WARNING_TRACKERS = "hide_warning_trackers" + private const val KEY_HIDE_WARNING_LOCATION = "hide_warning_location" + private const val KEY_HIDE_WARNING_IPSCRAMBLING = "hide_warning_ipscrambling" } private val sharedPref = context.getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE) @@ -50,7 +53,7 @@ class LocalStateRepository(context: Context) { val areAllTrackersBlocked: MutableStateFlow<Boolean> = MutableStateFlow(false) - private val _fakeLocationEnabled = MutableStateFlow(sharedPref.getBoolean(KEY_FAKE_LOCATION, true)) + private val _fakeLocationEnabled = MutableStateFlow(sharedPref.getBoolean(KEY_FAKE_LOCATION, false)) val fakeLocationEnabled = _fakeLocationEnabled.asStateFlow() @@ -99,6 +102,18 @@ class LocalStateRepository(context: Context) { get() = sharedPref.getBoolean(KEY_FIRST_BOOT, true) set(value) = set(KEY_FIRST_BOOT, value) + var hideWarningTrackers: Boolean + get() = sharedPref.getBoolean(KEY_HIDE_WARNING_TRACKERS, false) + set(value) = set(KEY_HIDE_WARNING_TRACKERS, value) + + var hideWarningLocation: Boolean + get() = sharedPref.getBoolean(KEY_HIDE_WARNING_LOCATION, false) + set(value) = set(KEY_HIDE_WARNING_LOCATION, value) + + var hideWarningIpScrambling: Boolean + get() = sharedPref.getBoolean(KEY_HIDE_WARNING_IPSCRAMBLING, false) + set(value) = set(KEY_HIDE_WARNING_IPSCRAMBLING, value) + private fun set(key: String, value: Boolean) { sharedPref.edit().putBoolean(key, value).apply() } diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/entities/MainFeatures.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/entities/MainFeatures.kt new file mode 100644 index 0000000..0e7f99c --- /dev/null +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/entities/MainFeatures.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2022 E FOUNDATION + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package foundation.e.privacycentralapp.domain.entities + +enum class MainFeatures { + TRACKERS_CONTROL, FAKE_LOCATION, IP_SCRAMBLING +} diff --git a/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/ShowFeaturesWarningUseCase.kt b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/ShowFeaturesWarningUseCase.kt new file mode 100644 index 0000000..e347b34 --- /dev/null +++ b/app/src/main/java/foundation/e/privacycentralapp/domain/usecases/ShowFeaturesWarningUseCase.kt @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2022 E FOUNDATION + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package foundation.e.privacycentralapp.domain.usecases + +import foundation.e.privacycentralapp.data.repositories.LocalStateRepository +import foundation.e.privacycentralapp.domain.entities.MainFeatures +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.drop +import kotlinx.coroutines.flow.dropWhile +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.merge + +class ShowFeaturesWarningUseCase( + private val localStateRepository: LocalStateRepository +) { + + fun showWarning(): Flow<MainFeatures> { + return merge( + localStateRepository.blockTrackers.drop(1).dropWhile { !it } + .filter { it && !localStateRepository.hideWarningTrackers } + .map { MainFeatures.TRACKERS_CONTROL }, + localStateRepository.fakeLocationEnabled.drop(1).dropWhile { !it } + .filter { it && !localStateRepository.hideWarningLocation } + .map { MainFeatures.FAKE_LOCATION }, + localStateRepository.ipScramblingSetting.drop(1).dropWhile { !it } + .filter { it && !localStateRepository.hideWarningIpScrambling } + .map { MainFeatures.IP_SCRAMBLING } + ) + } + + fun doNotShowAgain(feature: MainFeatures) { + when (feature) { + MainFeatures.TRACKERS_CONTROL -> localStateRepository.hideWarningTrackers = true + MainFeatures.FAKE_LOCATION -> localStateRepository.hideWarningLocation = true + MainFeatures.IP_SCRAMBLING -> localStateRepository.hideWarningIpScrambling = true + } + } +} diff --git a/app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt b/app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt index 4fdbb03..fccfd48 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt @@ -184,7 +184,6 @@ fun render( ) setOnClickPendingIntent(R.id.graph_view_trackers_btn, pIntent) - // setOnClickPendingIntent(R.id.graph_view_trackers_btn_icon, pIntent) val graphHeightPx = 26.dpToPxF(context) val maxValue = diff --git a/app/src/main/res/layout/alertdialog_do_not_show_again.xml b/app/src/main/res/layout/alertdialog_do_not_show_again.xml new file mode 100644 index 0000000..1b60843 --- /dev/null +++ b/app/src/main/res/layout/alertdialog_do_not_show_again.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?><!-- + ~ Copyright (C) 2022 E FOUNDATION + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU General Public License as published by + ~ the Free Software Foundation, either version 3 of the License, or + ~ (at your option) any later version. + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU General Public License for more details. + ~ + ~ You should have received a copy of the GNU General Public License + ~ along with this program. If not, see <https://www.gnu.org/licenses/>. + --> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:paddingHorizontal="16dp" + android:paddingTop="24dp" + android:paddingBottom="8dp" + > + <CheckBox + android:id="@+id/checkbox" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + + android:text="@string/warningdialog_do_not_show_again" + /> +</LinearLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/dashboard_item_submenu_button.xml b/app/src/main/res/layout/dashboard_item_submenu_button.xml index 9129d07..ef03ea3 100644 --- a/app/src/main/res/layout/dashboard_item_submenu_button.xml +++ b/app/src/main/res/layout/dashboard_item_submenu_button.xml @@ -27,7 +27,7 @@ android:id="@+id/container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:padding="16dp" + android:paddingHorizontal="16dp" android:background="?attr/selectableItemBackground" > <ImageView diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index cedf569..b1fdaa0 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -49,122 +49,154 @@ android:background="@color/divider" /> - + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="16dp" + android:layout_marginTop="8dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="16dp" - - android:layout_marginTop="8dp" - android:layout_marginBottom="16dp"> - <LinearLayout + android:layout_marginBottom="8dp" + android:gravity="bottom" + android:baselineAligned="false" + > + <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:orientation="vertical" android:gravity="center_horizontal" - > - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/dashboard_state_trackers_label" - android:textSize="12sp" - android:textColor="@color/secondary_text" - android:layout_marginBottom="8dp" - android:textAllCaps="true" - /> - <TextView - android:id="@+id/state_trackers" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/dashboard_state_trackers_off" - android:textSize="12sp" - android:textColor="@color/primary_text" - android:textAllCaps="true" - /> - <Switch - android:id="@+id/toggle_trackers" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_margin="12dp" - /> - </LinearLayout> - <LinearLayout + android:text="@string/dashboard_state_trackers_label" + android:textSize="12sp" + android:textColor="@color/secondary_text" + android:textAllCaps="true" + /> + <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:orientation="vertical" android:gravity="center_horizontal" - > - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/dashboard_state_geolocation_label" - android:textSize="12sp" - android:textColor="@color/secondary_text" - android:layout_marginBottom="8dp" - android:textAllCaps="true" - /> - <TextView - android:id="@+id/state_geolocation" - android:layout_width="wrap_content" + android:text="@string/dashboard_state_geolocation_label" + android:textSize="12sp" + android:textColor="@color/secondary_text" + android:textAllCaps="true" + /> + <TextView + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:gravity="center_horizontal" + android:text="@string/dashboard_state_ipaddress_label" + android:textSize="12sp" + android:textColor="@color/secondary_text" + android:textAllCaps="true" + /> + </LinearLayout> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="bottom" + android:baselineAligned="false" + > + <TextView + android:id="@+id/state_trackers" + android:layout_width="0dp" + android:layout_weight="1" + android:gravity="center_horizontal" android:layout_height="wrap_content" - android:text="@string/dashboard_state_geolocation_off" + android:text="@string/dashboard_state_trackers_off" android:textSize="12sp" android:textColor="@color/primary_text" android:textAllCaps="true" /> - <Switch - android:id="@+id/toggle_location" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_margin="12dp" - /> - </LinearLayout> - <LinearLayout + + <TextView + android:id="@+id/state_geolocation" android:layout_width="0dp" + android:layout_weight="1" + android:gravity="center_horizontal" android:layout_height="wrap_content" + android:text="@string/dashboard_state_geolocation_off" + android:textSize="12sp" + android:textColor="@color/primary_text" + android:textAllCaps="true" + /> + <FrameLayout + android:layout_width="0dp" android:layout_weight="1" - android:orientation="vertical" android:gravity="center_horizontal" - > - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/dashboard_state_ipaddress_label" - android:textSize="12sp" - android:textColor="@color/secondary_text" - android:layout_marginBottom="8dp" - android:textAllCaps="true" - /> + android:layout_height="wrap_content"> <TextView android:id="@+id/state_ip_address" android:layout_width="wrap_content" android:layout_height="wrap_content" -android:text="@string/dashboard_state_ipaddress_off" + android:layout_gravity="center_horizontal" + android:gravity="center_horizontal" + android:text="@string/dashboard_state_ipaddress_off" android:textSize="12sp" android:textColor="@color/primary_text" android:textAllCaps="true" - android:visibility="gone" + android:visibility="visible" /> <ProgressBar android:id="@+id/state_ip_address_loader" + android:layout_gravity="center_horizontal" android:layout_width="16dp" android:layout_height="16dp" android:indeterminate="true" + android:visibility="visible"/> + </FrameLayout> + </LinearLayout> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + > + <View + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_weight="1" + /> + <Switch + android:id="@+id/toggle_trackers" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:padding="12dp" + /> + <View + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_weight="2" + /> + <Switch + android:id="@+id/toggle_location" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:padding="12dp" + /> + <View + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_weight="2" + /> <Switch android:id="@+id/toggle_ipscrambling" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:layout_margin="12dp" + android:padding="12dp" /> + <View + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_weight="1" + /> </LinearLayout> </LinearLayout> - <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" @@ -219,7 +251,7 @@ android:text="@string/dashboard_state_ipaddress_off" android:padding="1dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/graph_legend" - android:layout_marginTop="8dp" + android:layout_marginTop="9dp" android:layout_marginStart="16dp" android:background="@drawable/ic_legend_blocked" /> @@ -227,13 +259,11 @@ android:text="@string/dashboard_state_ipaddress_off" android:id="@+id/graph_legend_blocked" android:layout_width="0dp" android:layout_height="wrap_content" - tools:text="0 Trackers" - android:ellipsize="end" - android:maxLines="1" + tools:text="Blockierte Datenlecks" android:layout_marginStart="8dp" android:textSize="12sp" app:layout_constraintLeft_toRightOf="@+id/graph_legend_blocked_icon" - app:layout_constraintBottom_toBottomOf="@+id/graph_legend_blocked_icon" + app:layout_constraintTop_toBottomOf="@+id/graph_legend" app:layout_constraintRight_toLeftOf="@id/graph_legend_allowed_icon" android:layout_marginTop="8dp" android:text="@string/graph_legend_blocked" @@ -247,22 +277,20 @@ android:text="@string/dashboard_state_ipaddress_off" app:layout_constraintLeft_toRightOf="@+id/graph_legend_blocked" app:layout_constraintBottom_toBottomOf="@+id/graph_legend_blocked_icon" app:layout_constraintRight_toLeftOf="@id/graph_legend_allowed" - android:layout_marginTop="8dp" + android:layout_marginTop="9dp" android:layout_marginStart="16dp" android:background="@drawable/ic_legend_leaked" /> <TextView android:id="@+id/graph_legend_allowed" android:layout_width="0dp" - android:ellipsize="end" - android:maxLines="1" android:layout_height="wrap_content" tools:text="0 Trackers" android:layout_marginStart="8dp" android:textSize="12sp" app:layout_constraintRight_toLeftOf="@id/leaking_app_button" app:layout_constraintLeft_toRightOf="@+id/graph_legend_allowed_icon" - app:layout_constraintBottom_toBottomOf="@+id/graph_legend_blocked_icon" + app:layout_constraintTop_toBottomOf="@+id/graph_legend" android:layout_marginTop="8dp" android:text="@string/graph_legend_allowed" /> diff --git a/app/src/main/res/layout/trackers_item_graph.xml b/app/src/main/res/layout/trackers_item_graph.xml index 20106f7..aabc108 100644 --- a/app/src/main/res/layout/trackers_item_graph.xml +++ b/app/src/main/res/layout/trackers_item_graph.xml @@ -63,22 +63,19 @@ android:padding="1dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/graph" - android:layout_marginTop="8dp" + android:layout_marginTop="9dp" android:layout_marginStart="16dp" android:background="@drawable/ic_legend_blocked" /> <TextView android:id="@+id/graph_legend_blocked" android:layout_width="0dp" - android:maxLines="1" - android:ellipsize="end" android:layout_height="wrap_content" tools:text="0 Trackers" android:layout_marginStart="8dp" android:textSize="12sp" app:layout_constraintLeft_toRightOf="@+id/graph_legend_blocked_icon" - app:layout_constraintBottom_toBottomOf="@+id/graph_legend_blocked_icon" - app:layout_constraintRight_toLeftOf="@id/graph_legend_allowed_icon" + app:layout_constraintTop_toBottomOf="@+id/graph" app:layout_constraintRight_toLeftOf="@id/graph_legend_allowed_icon" android:layout_marginTop="8dp" android:text="@string/graph_legend_blocked" /> @@ -89,9 +86,8 @@ android:layout_height="16dp" android:padding="1dp" app:layout_constraintLeft_toRightOf="@+id/graph_legend_blocked" - app:layout_constraintBottom_toBottomOf="@+id/graph_legend_blocked_icon" - app:layout_constraintRight_toLeftOf="@id/graph_legend_allowed" - android:layout_marginTop="8dp" + app:layout_constraintTop_toBottomOf="@+id/graph" app:layout_constraintRight_toLeftOf="@id/graph_legend_allowed" + android:layout_marginTop="9dp" android:layout_marginStart="16dp" android:background="@drawable/ic_legend_leaked" /> @@ -99,14 +95,11 @@ android:id="@+id/graph_legend_allowed" android:layout_width="0dp" android:layout_height="wrap_content" - android:maxLines="1" - android:ellipsize="end" tools:text="0 Trackers" android:layout_marginStart="8dp" android:textSize="12sp" app:layout_constraintLeft_toRightOf="@+id/graph_legend_allowed_icon" - app:layout_constraintBottom_toBottomOf="@+id/graph_legend_blocked_icon" - app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toBottomOf="@+id/graph" app:layout_constraintRight_toRightOf="parent" android:layout_marginTop="8dp" android:layout_marginRight="16dp" android:text="@string/graph_legend_allowed" diff --git a/app/src/main/res/layout/widget.xml b/app/src/main/res/layout/widget.xml index 1e78bc7..ad7e2b9 100644 --- a/app/src/main/res/layout/widget.xml +++ b/app/src/main/res/layout/widget.xml @@ -73,132 +73,158 @@ android:textColor="@color/on_primary_medium_emphasis" /> </LinearLayout> + <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="horizontal" + android:orientation="vertical" android:layout_marginHorizontal="24dp" android:layout_marginTop="16dp" android:layout_marginBottom="16dp"> + <LinearLayout - android:layout_width="0dp" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="1" - android:orientation="vertical" - android:gravity="center_horizontal" + android:orientation="horizontal" + android:layout_marginBottom="4dp" + android:gravity="bottom" + android:baselineAligned="false" > <TextView android:id="@+id/trackers_label" - android:layout_width="wrap_content" + android:layout_width="0dp" + android:layout_weight="1" + android:layout_marginHorizontal="2dp" + android:gravity="center_horizontal" android:layout_height="wrap_content" android:text="@string/dashboard_state_trackers_label" android:textSize="10sp" android:textColor="@color/on_primary_disabled" - android:layout_marginBottom="4dp" android:textAllCaps="true" /> <TextView - android:id="@+id/state_trackers" - android:layout_width="wrap_content" - android:layout_height="18dp" - android:text="@string/dashboard_state_trackers_off" - android:textSize="12sp" - android:textColor="@color/on_primary_high_emphasis" + android:id="@+id/geolocation_label" + android:layout_width="0dp" + android:layout_weight="1" + android:layout_marginHorizontal="2dp" + android:gravity="center_horizontal" + android:layout_height="wrap_content" + android:text="@string/dashboard_state_geolocation_label" + android:textSize="10sp" + android:textColor="@color/on_primary_disabled" android:textAllCaps="true" - android:gravity="center" /> - <ImageView - android:id="@+id/toggle_trackers" - android:layout_width="wrap_content" + <TextView + android:id="@+id/ip_address_label" + android:layout_width="0dp" + android:layout_weight="1" + android:layout_marginHorizontal="2dp" + android:gravity="center_horizontal" android:layout_height="wrap_content" - android:layout_marginTop="8dp" - android:src="@drawable/ic_switch_disabled" + android:text="@string/dashboard_state_ipaddress_label" + android:textSize="10sp" + android:textColor="@color/on_primary_disabled" + android:textAllCaps="true" /> </LinearLayout> <LinearLayout - android:layout_width="0dp" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="1" - android:orientation="vertical" - android:gravity="center_horizontal" + android:orientation="horizontal" + android:gravity="bottom" + android:baselineAligned="false" > <TextView - android:id="@+id/geolocation_label" - android:layout_width="wrap_content" + android:id="@+id/state_trackers" android:layout_height="wrap_content" - android:text="@string/dashboard_state_geolocation_label" - android:textSize="10sp" - android:textColor="@color/on_primary_disabled" - android:layout_marginBottom="4dp" + android:layout_width="0dp" + android:layout_weight="1" + android:layout_marginHorizontal="2dp" + android:gravity="center_horizontal" + android:text="@string/dashboard_state_trackers_off" + android:textSize="12sp" + android:textColor="@color/on_primary_high_emphasis" android:textAllCaps="true" /> <TextView android:id="@+id/state_geolocation" - android:layout_width="wrap_content" - android:layout_height="18dp" + android:layout_height="wrap_content" + android:layout_width="0dp" + android:layout_weight="1" + android:layout_marginHorizontal="2dp" android:text="@string/dashboard_state_geolocation_off" android:textSize="12sp" android:textColor="@color/on_primary_high_emphasis" android:textAllCaps="true" - android:gravity="center" + android:gravity="center_horizontal" /> - <ImageView - android:id="@+id/toggle_location" - android:layout_width="wrap_content" + <FrameLayout android:layout_height="wrap_content" - android:layout_marginTop="8dp" - android:src="@drawable/ic_switch_disabled" - /> + android:layout_width="0dp" + android:layout_weight="1" + android:layout_marginHorizontal="2dp" + android:gravity="center_horizontal" + > + <TextView + android:id="@+id/state_ip_address" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_gravity="center" + android:gravity="center_horizontal" + android:text="@string/dashboard_state_ipaddress_off" + android:textSize="12sp" + android:textColor="@color/on_primary_high_emphasis" + android:textAllCaps="true" + android:visibility="gone" + /> + <ProgressBar + android:id="@+id/state_ip_address_loader" + android:layout_width="16dp" + android:layout_height="16dp" + android:layout_gravity="center" + android:indeterminate="true" + android:visibility="visible" + + /> + </FrameLayout> </LinearLayout> <LinearLayout - android:layout_width="0dp" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="1" - android:orientation="vertical" - android:gravity="center_horizontal" + android:orientation="horizontal" + android:gravity="center" > - <TextView - android:id="@+id/ip_address_label" - android:layout_width="wrap_content" + <ImageView + android:id="@+id/toggle_trackers" + android:layout_width="0dp" + android:layout_weight="1" android:layout_height="wrap_content" - android:text="@string/dashboard_state_ipaddress_label" - android:textSize="10sp" - android:textColor="@color/on_primary_disabled" - android:layout_marginBottom="4dp" - android:textAllCaps="true" + android:padding="8dp" + android:src="@drawable/ic_switch_disabled" /> - <TextView - android:id="@+id/state_ip_address" - android:layout_width="wrap_content" - android:layout_height="18dp" - android:text="@string/dashboard_state_ipaddress_off" - android:textSize="12sp" - android:textColor="@color/on_primary_high_emphasis" - android:textAllCaps="true" - android:visibility="gone" - android:gravity="center" + <ImageView + android:id="@+id/toggle_location" + android:layout_width="0dp" + android:layout_weight="1" + android:layout_height="wrap_content" + android:padding="8dp" + android:src="@drawable/ic_switch_disabled" /> - <ProgressBar - android:id="@+id/state_ip_address_loader" - android:layout_width="18dp" - android:layout_height="18dp" - android:indeterminate="true" - android:visibility="visible"/> <ImageView android:id="@+id/toggle_ipscrambling" - android:layout_width="wrap_content" + android:layout_width="0dp" + android:layout_weight="1" android:layout_height="wrap_content" - android:layout_marginTop="8dp" + android:padding="8dp" android:src="@drawable/ic_switch_disabled" /> </LinearLayout> </LinearLayout> - <LinearLayout android:id="@+id/graph" android:layout_width="match_parent" - android:layout_marginTop="16dp" + android:layout_marginTop="8dp" android:layout_marginHorizontal="24dp" android:layout_height="26dp" > @@ -711,7 +737,7 @@ android:layout_marginTop="16dp" android:layout_marginHorizontal="24dp" android:layout_marginBottom="24dp" - android:gravity="center_vertical" + android:gravity="top" > <ImageView @@ -719,15 +745,14 @@ android:layout_width="16dp" android:layout_height="16dp" android:padding="1dp" + android:layout_marginTop="4dp" android:src="@drawable/ic_legend_blocked" /> <TextView - android:ellipsize="end" android:id="@+id/graph_legend_blocked" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" - android:maxLines="1" tools:text="0 Trackers" android:textColor="@color/on_primary_medium_emphasis" android:layout_marginStart="8dp" @@ -740,17 +765,16 @@ android:layout_width="16dp" android:layout_height="16dp" android:padding="1dp" + android:layout_marginTop="4dp" android:layout_marginStart="10dp" android:src="@drawable/ic_legend_leaked" /> <TextView - android:ellipsize="end" android:id="@+id/graph_legend_allowed" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" - android:maxLines="1" tools:text="0 Trackers" android:textColor="@color/on_primary_medium_emphasis" android:layout_marginStart="8dp" diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ea0bacd..75e3ce4 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -46,33 +46,6 @@ \n„Mein Standort verwalten“ ermöglicht dir, einen gefälschten Standort anstatt deines echten Aufenthaltsortes zu benutzen. Auf diese Weise wird dein echter Standort nicht mit Apps geteilt, die zu sehr herumspionieren.</string> <string name="ipscrambling_any_location">Zufälliges Land</string> <string name="ipscrambling_select_app">Wende diese Einstellungen auf alle ausgewählten Anwendungen an * :</string> - <string name="user_location_permission_not_granted">Du hast keine Standort-Berechtigung erteilt</string> - <string name="please_enter_valid_lat_long">Bitte gib einen gültigen Längen- und Breitengrad an</string> - <string name="quick_protection">Schneller Datenschutz</string> - <string name="privacy_dashboard">Datenschutz-Überblick</string> - <string name="click_to_learn_more">Tippe für mehr Information</string> - <string name="apps_permissions">App-Berechtigungen</string> - <string name="trackers">Tracker</string> - <string name="following_trackers_in_use">Folgende Tracker sind in Benutzung</string> - <string name="enable_disable_tracker_info">Aktiviere oder deaktiviere diesen Tracker in den folgenden Apps</string> - <string name="tracker">Tracker</string> - <string name="i_am_exposing">Ich lasse meine echte IP-Adresse ungeschützt</string> - <string name="ipscrambling_all_apps_scrambled">Alle Apps benutzen eine verschleierte IP</string> - <string name="ipscrambling_only_selected_apps_scrambled">Nur die folgenden Apps benutzen eine verschleierte IP</string> - <string name="ipscrambling_is_starting">Tor startet gerade …</string> - <string name="ipscrambling_is_stopping">Tor wird angehalten …</string> - - ipscrambling_any_location - <string name="permission_control_info">Verwalte und kontrolliere die verschiedenen Berechtigungen der Apps.</string> - <string name="apps_allowed">%1$d von %2$d App erlaubt</string> - <string name="apps_access_to_permission">Apps, die Zugriff auf %1$s Berechtigung haben</string> - <string name="real_location_mode">Echter Standort-Modus</string> - <string name="random_location_mode">Zufälliger Standort-Modus</string> - <string name="fake_location_mode">Gefälschter Standort-Modus</string> - <string name="user_location_permission_explanation">Diese App benötigt Standort-Berechtigungen, um zu funktionieren.</string> - <string name="appwidget_text">BEISPIEL</string> - <string name="add_widget">Widget hinzufügen</string> - <string name="add_location">Standort hinzufügen</string> <string name="dummy_system_app_label">System</string> <string name="trackers_info">Tracker (Verfolger) sind kleine Programme, die in Anwendungen eingebaut werden. Sie sammeln deine Daten und verfolgen andauernd deine Aktivität. Du kannst sehen, wie viele Tracker aktiv sind, und kannst sie alle für den bestmöglichen Schutz blockieren. Das kann aber auch manche Apps am korrekten Funktionieren hindern, darum kannst du selbst auswählen, welche Tracker du blockieren möchtest.</string> <string name="trackers_count_label">%d Tracker</string> @@ -91,13 +64,7 @@ <string name="apptrackers_error_quickprivacy_disabled">Aktiviere „Schneller Datenschutz“, um Tracker aktivieren und deaktivieren zu können.</string> <string name="apptrackers_trackers_count_summary">%2$d Tracker entdeckt, davon sind %1$d blockiert, %3$d blockierte Lecks und %4$d erlaubte Lecks.</string> <string name="apptrackers_error_no_app">App ist nicht installiert.</string> - <string name="app_widget_description">Das ist eine App-Widget-Beschreibung</string> <string name="widget_state_title_on">Dein Online-Datenschutz ist gewährleistet</string> - <string name="quick_protection_info">Der „Schnelle Datenschutz“ aktiviert diese Einstellungen, wenn er angeschaltet wird</string> - <string name="quick_protection_settings_list">- Alle Tracker sind ausgeschaltet. -\n- Dein Standort wird verschleiert. -\n- Deine echte IP-Adresse wird versteckt.</string> - <string name="learn_more">Erfahre mehr darüber</string> <string name="widget_state_title_off">Dein Online-Datenschutz ist nicht gewährleistet</string> <string name="ipscrambling_location_label">Meine Internetaktivität soll erscheinen von:</string> <string name="ipscrambling_info">Deine Internetadresse oder IP-Adresse ist die Kennung deines Telefons, wenn es mit dem Internet verbunden ist. @@ -118,4 +85,5 @@ <string name="ipscrambling_app_list_infos">Nur Apps mit Internet-Berechtigung sind aufgeführt.</string> <string name="dashboard_state_trackers_custom">Benutzerdefiniert</string> <string name="ipscrambling_error_always_on_vpn_already_running">Bitte deaktiviere die Drittanbieter-VPN %s, damit Advanced Privacy deine echte IP-Adresse verschleiern kann.</string> + <string name="apptrackers_tracker_control_disabled_message">Die Veränderungen werden angewendet, wenn der Tracker-Blockierer aktiviert ist.</string> </resources>
\ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 213a9d7..e7a4509 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -30,21 +30,6 @@ <string name="dashboard_state_title_off">Tu privacidad en linea está desprotegida</string> <string name="dashboard_apps_permissions_subtitle">Gestiona tus permisos</string> <string name="apptrackers_error_quickprivacy_disabled">Habilitar la \"Privacidad rápida\" para poder activar/desactivar los rastreadores.</string> - <string name="quick_protection_info">La \"Protección rápida\" habilita estos ajustes cuando está activada</string> - <string name="learn_more">Más información</string> - <string name="add_location">Añadir ubicación</string> - <string name="i_am_exposing">Estoy exponiendo mi dirección IP real</string> - <string name="ipscrambling_all_apps_scrambled">Todas las aplicaciones utilizan la IP oculta</string> - <string name="ipscrambling_only_selected_apps_scrambled">Solo las siguientes aplicaciones utilizan la IP oculta</string> - <string name="ipscrambling_is_starting">Tor está iniciando...</string> - <string name="ipscrambling_is_stopping">Tor está parando...</string> - - ipscrambling_any_location - <string name="apps_allowed">%1$d de %2$d aplicaciones permitidas</string> - <string name="real_location_mode">Modo de ubicación real</string> - <string name="random_location_mode">Modo de ubicación aleatoria</string> - <string name="fake_location_mode">Modo de ubicación falsa</string> - <string name="permission_control_info">Gestionar y controlar las aplicaciones que solicitan varios permisos.</string> <string name="location_title">Gestionar mi ubicación</string> <string name="location_use_real_location">Usar mi ubicación real</string> <string name="location_use_random_location">Usar una ubicación aceptable al azar</string> @@ -64,21 +49,8 @@ <string name="apptrackers_no_trackers_yet_block_off">Todavía no se ha detectado ningún rastreador. Si se detectan nuevos rastreadores se actualizarán aquí.</string> <string name="ipscrambling_error_quickprivacy_disabled">Habilitada la \"Privacidad rápida\" para utilizar las funcionalidades</string> <string name="apptrackers_trackers_list_title">Selecciona los rastreadores que deseas activar/desactivar.</string> - <string name="quick_protection">Protección rápida</string> - <string name="privacy_dashboard">Panel de control de privacidad</string> - <string name="apps_permissions">Permiso de aplicaciones</string> - <string name="trackers">Rastreadores</string> - <string name="following_trackers_in_use">Se utilizan los siguientes rastreadores</string> - <string name="tracker">Rastreador</string> - <string name="please_enter_valid_lat_long">Por favor, introduce un valor válido de longitud y latitud</string> <string name="trackers_count_label">%d rastreadores</string> <string name="apptrackers_no_trackers_yet_block_on">Todavía no se ha detectado ningún rastreador. Todos los rastreadores futuros serán bloqueados.</string> - <string name="quick_protection_settings_list">- Todos los rastreadores están desactivados. -\n- Tu geolocalización será falseada. -\n- Tu dirección IP real estará oculta.</string> - <string name="apps_access_to_permission">Aplicaciones que tienen acceso al permiso %1$s</string> - <string name="user_location_permission_explanation">Esta aplicación necesita permisos de ubicación para poder mostrar su funcionalidad.</string> - <string name="enable_disable_tracker_info">Activar o desactivar este rastreador para las siguientes aplicaciones</string> <string name="dashboard_state_title_on">Su privacidad en línea está protegida</string> <string name="dashboard_graph_trackers_legend">%s rastreadores te han perfilado en las últimas 24 horas</string> <string name="dashboard_location_title">Gestionar mi ubicación</string> @@ -90,17 +62,12 @@ <string name="location_info">Tu ubicación puede revelar mucho sobre ti o tus actividades. \n \n\"Gestionar mi ubicación\" te permite utilizar una ubicación falsa en lugar de tu posición real. De este modo, tu ubicación real no se comparte con aplicaciones que podrían husmear demasiado.</string> - <string name="user_location_permission_not_granted">No has concedido el permiso de ubicación</string> - <string name="click_to_learn_more">Haz clic para saber más</string> <string name="trackers_info">Los rastreadores son partes de código ocultas dentro de las aplicaciones. Recogen tus datos y siguen tu actividad las 24 horas del día: parece que tu teléfono te escucha. \n \nPuedes ver cuantos rastreadores están activos, y puedes bloquear todos los rastreadores para obtener una mejor protección. Como podría causar el mal funcionamiento de algunas aplicaciones, también puedes ajustar la configuración y elegir específicamente qué rastreadores quieres bloquear.</string> <string name="ipscrambling_tor_disclaimer"><b>Nota:</b> Mientras esta opción esté activa, es probable que tu velocidad de Internet se reduzca considerablemente.</string> <string name="dummy_system_app_label">Sistema</string> - <string name="appwidget_text">Ejemplo</string> - <string name="add_widget">Añadir widget</string> <string name="widget_state_title_on">Su privacidad en línea está protegida</string> <string name="widget_state_title_off">Su privacidad en línea está desprotegida</string> <string name="apptrackers_error_no_app">Aplicación no instalada.</string> - <string name="app_widget_description">Esta es la descripción de un widget de aplicación</string> </resources> diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index b5932de..3b9a53f 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -7,39 +7,6 @@ <string name="widget_state_title_custom">Sovelletaan mukautettuja yksityisyysasetuksia</string> <string name="widget_state_title_off">Yksityisyyttäsi verkossa ei ole suojattu</string> <string name="widget_state_title_on">Yksityisyytesi verkossa on suojattu</string> - <string name="app_widget_description">Tämä on sovelluksen widgetin kuvaus</string> - <string name="add_widget">Lisää widget</string> - <string name="appwidget_text">ESIMERKKI</string> - <string name="tracker">Seurain</string> - <string name="enable_disable_tracker_info">Ota tämä seurain käyttöön tai poista se käytöstä seuraavissa sovelluksissa</string> - <string name="following_trackers_in_use">Käytössä olevat seuraimet</string> - <string name="trackers">Seuraimet</string> - <string name="apps_permissions">Sovellusten käyttöoikeudet</string> - <string name="click_to_learn_more">Napauta saadaksesi lisätietoja</string> - <string name="privacy_dashboard">Tietosuojan hallintapaneeli</string> - <string name="quick_protection">Quick Protection</string> - <string name="please_enter_valid_lat_long">Syötä kelvollinen leveys- ja pituusaste</string> - <string name="user_location_permission_not_granted">Et antanut sijaintilupaa</string> - <string name="user_location_permission_explanation">Tämä sovellus tarvitsee sijaintiluvat, jotta se voi näyttää toimintonsa.</string> - <string name="fake_location_mode">Väärennetyn sijainnin tila</string> - <string name="random_location_mode">Satunnaisen sijainnin tila</string> - <string name="real_location_mode">Todellisen sijainnin tila</string> - <string name="apps_access_to_permission">Sovellukset, joilla on pääsy %1$s käyttöoikeuksiin</string> - <string name="apps_allowed">%1$d / %2$d sovelluksista sallittu</string> - <string name="permission_control_info">Hallitse ja valvo useita käyttöoikeuksia pyytäviä sovelluksia.</string> - <string name="ipscrambling_is_stopping">Tor pysähtyy...</string> - - ipscrambling_any_location - <string name="ipscrambling_is_starting">Tor käynnistyy...</string> - <string name="ipscrambling_only_selected_apps_scrambled">Vain seuraavat sovellukset käyttävät piilotettua IP-osoitetta</string> - <string name="ipscrambling_all_apps_scrambled">Kaikki sovellukset käyttävät piilotettua IP-osoitetta</string> - <string name="i_am_exposing">Paljastan todellisen IP-osoitteeni</string> - <string name="add_location">Lisää sijainti</string> - <string name="learn_more">Lue lisää</string> - <string name="quick_protection_settings_list">- Kaikki seuraimet on kytketty pois päältä. -\n- Sijaintisi väärennetään. -\n- Todellinen IP-osoitteesi piilotetaan.</string> - <string name="quick_protection_info">Quick Protection ottaa käyttöön nämä asetukset, kun se otetaan käyttöön</string> <string name="apptrackers_error_no_app">Sovellusta ei ole asennettu.</string> <string name="apptrackers_trackers_count_summary">%1$d estettyä seurainta %2$d:stä havaitusta seuraimesta, %3$d estettyä tietovuotoa ja %4$d sallittua tietovuotoa.</string> <string name="apptrackers_error_quickprivacy_disabled">Ota Quick Privacy käyttöön, jotta voit ottaa käyttöön tai poistaa käytöstä seuraimia.</string> diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b4db80f..fdd8468 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -43,20 +43,6 @@ <string name="trackers_graph_hours_period_format">HH:mm</string> <string name="trackers_graph_days_period_format">EEE d MMMM</string> <string name="trackers_graph_months_period_format">MMMM yyyy</string> - <string name="quick_protection_info">L\'activation de \"Protection rapide\" active ces paramètres</string> - <string name="learn_more">En savoir plus</string> - <string name="i_am_exposing">J\'expose ma véritable adresse IP</string> - <string name="ipscrambling_all_apps_scrambled">Toutes les apps utilisent une adresse IP masquée</string> - <string name="ipscrambling_only_selected_apps_scrambled">Seules les applications suivantes utilisent une adresse IP masquée</string> - <string name="ipscrambling_is_starting">Tor démarre...</string> - <string name="ipscrambling_is_stopping">Tor s\'arrête...</string> - - ipscrambling_any_location - <string name="apps_allowed">%1$d applications autorisées sur %2$d</string> - <string name="apps_access_to_permission">Apps ayant accès à %1$s autorisation·s</string> - <string name="real_location_mode">Mode de localisation réelle</string> - <string name="random_location_mode">Mode de localisation aléatoire</string> - <string name="fake_location_mode">Mode de fausse localisation</string> <string name="trackers_title">Gérer les pisteurs des applications</string> <string name="trackers_count_label">%d pisteurs</string> <string name="trackers_applist_title">Gérer les pisteurs utilisés dans les applications * :</string> @@ -67,21 +53,10 @@ <string name="apptrackers_no_trackers_yet_block_on">Pour l\'instant, aucun pisteur n\'a été détecté. Tous les futurs pisteurs seront bloqués.</string> <string name="apptrackers_error_quickprivacy_disabled">Activez \"Confidentialité Rapide\" pour pouvoir activer/désactiver les pisteurs.</string> <string name="apptrackers_trackers_count_summary">%1$d pisteurs bloqués sur %2$d pisteurs détectés, %3$d fuites bloquées et %4$d fuites autorisées.</string> - <string name="add_location">Ajouter une localisation</string> <string name="location_title">Gérer ma localisation</string> <string name="location_use_real_location">Utiliser ma localisation réelle</string> <string name="location_use_random_location">Utiliser une localisation aléatoire plausible</string> <string name="location_use_specific_location">Utiliser une localisation spécifique</string> - <string name="user_location_permission_not_granted">Vous n\'avez pas accordé d\'autorisation de localisation</string> - <string name="please_enter_valid_lat_long">Merci d\'entrer une valeur de latitude et de longitude valides</string> - <string name="quick_protection">Protection Rapide</string> - <string name="privacy_dashboard">Tableau de bord de Confidentialité</string> - <string name="click_to_learn_more">Cliquez pour en savoir plus</string> - <string name="apps_permissions">Autorisations des apps</string> - <string name="trackers">Pisteurs</string> - <string name="following_trackers_in_use">Les pisteurs suivants sont en cours d\'utilisation</string> - <string name="enable_disable_tracker_info">Activer ou désactiver ce pisteur pour les apps suivantes</string> - <string name="tracker">Pisteur</string> <string name="ipscrambling_info">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 fausse adresse IP au lieu de votre véritable adresse IP. Ainsi, votre activité Internet ne peut pas être liée à votre véritable adresse IP et à votre appareil.</string> @@ -90,12 +65,7 @@ <string name="location_info">Votre localisation 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 fausse position au lieu de votre position réelle. De cette façon, votre localisation réelle n\'est pas partagé avec des applications qui pourraient vous espionner.</string> - <string name="permission_control_info">Gérez et contrôlez les apps demandant diverses autorisations.</string> - <string name="user_location_permission_explanation">Cette app a besoin d\'autorisations de localisation pour afficher ses fonctionnalités.</string> <string name="trackers_info">Les pisteurs sont des morceaux de code caché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.</string> - <string name="quick_protection_settings_list">- Tous les pisteurs sont désactivés. -\n- Votre géolocalisation sera falsifiée. -\n- Votre adresse IP réelle sera masquée.</string> <string name="dashboard_first_ipscrambling_activation">Votre vitesse Internet risque d\'être réduite tant que votre adresse IP est masquée.</string> <string name="graph_legend_allowed">Fuites autorisées</string> <string name="graph_legend_blocked">Fuites bloquées</string> @@ -109,9 +79,6 @@ <string name="widget_state_title_custom">Paramètres de confidentialité personnalisés appliqués</string> <string name="widget_state_title_off">Votre vie privée en ligne n\'est pas protégée</string> <string name="widget_state_title_on">Votre vie privée en ligne est protégée</string> - <string name="app_widget_description">Ceci est une description de widget d\'application</string> - <string name="add_widget">Ajouter un widget</string> - <string name="appwidget_text">EXEMPLE</string> <string name="dashboard_graph_leaking_app">Voir</string> <string name="close">Fermer</string> <string name="dummy_system_app_label">Système</string> diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 316aa4f..ee23327 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -54,33 +54,6 @@ <string name="apptrackers_no_trackers_yet_block_on">Non sono ancora stati rilevati trackers. Tutti quelli trovati in futuro verranno bloccati.</string> <string name="apptrackers_error_quickprivacy_disabled">Abilita Privacy Rapida per poter attivare/disattivare i trackers.</string> <string name="apptrackers_trackers_count_summary">%1$d trackers bloccati su %2$d trovati, %3$d perdite di dati bloccate e %4$d ammesse.</string> - <string name="quick_protection_info">Se attivato, Protezione rapida attiva queste impostazioni</string> - <string name="quick_protection_settings_list">- Tutti i tracker sono spenti. -\n- La tua posizione verrà falsificata. -\n- Il tuo vero indirizzo IP verrà nascosto.</string> - <string name="learn_more">Altre informazioni</string> - <string name="add_location">Aggiungi posizione</string> - <string name="i_am_exposing">Sto esponendo il mio indirizzo IP reale</string> - <string name="ipscrambling_all_apps_scrambled">Tutte le app usano un IP nascosto</string> - <string name="ipscrambling_only_selected_apps_scrambled">Solo le app seguenti utilizzano un IP nascosto</string> - <string name="ipscrambling_is_starting">Tor sta partendo...</string> - <string name="ipscrambling_is_stopping">Tor si sta fermando...</string> - - ipscrambling_any_location - <string name="permission_control_info">Gestisci e verifica le app che richiedono permessi vari.</string> - <string name="apps_allowed">%1$d di %2$d app abilitate</string> - <string name="apps_access_to_permission">App che hanno accesso a %1$s permessi</string> - <string name="real_location_mode">Modalità posizione reale</string> - <string name="fake_location_mode">Modalità posizione fasulla</string> - <string name="user_location_permission_not_granted">Non hai dato il permesso di conoscere la posizione</string> - <string name="please_enter_valid_lat_long">Inserisci un valore di latitudine e longitudine valido</string> - <string name="quick_protection">Protezione Rapida</string> - <string name="privacy_dashboard">Cruscotto Privacy</string> - <string name="click_to_learn_more">Clicca per altre informazioni</string> - <string name="apps_permissions">Permessi App</string> - <string name="trackers">Tracker</string> - <string name="following_trackers_in_use">Sono attivi i seguenti trackers</string> - <string name="tracker">Tracker</string> <string name="dashboard_state_title_on">La tua privacy online è protetta</string> <string name="dashboard_graph_trackers_legend">%s tracker ti hanno profilato nelle ultime 24 ore</string> <string name="dashboard_location_subtitle_specific">Specifica geolocalizzazione fasulla</string> @@ -93,18 +66,12 @@ \n \nGestisci la mia posizione ti permette di utilizzare una posizione fittizia al posto della tua posizione reale. In questo modo, la tua vera posizione non viene condivisa con le app troppo curiose.</string> <string name="trackers_info">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.</string> - <string name="random_location_mode">Modalità posizione casuale</string> - <string name="user_location_permission_explanation">Questa app necessita il permesso di conoscere la posizione per poter funzionare.</string> - <string name="enable_disable_tracker_info">Abilita o disabilita questo tracker per le app seguenti</string> <string name="first_notification_summary">Tocca per scoprire com\'è facile bloccare i trackers, nascondere la posizione & il tuo indirizzo IP.</string> <string name="first_notification_title">Scopri Advanced Privacy</string> <string name="widget_graph_view_trackers">Guarda</string> <string name="widget_state_title_custom">Impostazioni privacy personalizzate applicate</string> <string name="widget_state_title_off">La tua privavy online non è protetta</string> <string name="widget_state_title_on">La tua privacy online è protetta</string> - <string name="app_widget_description">Questa è la descrizione del widget app</string> - <string name="add_widget">Aggiungi widget</string> - <string name="appwidget_text">ESEMPIO</string> <string name="apptrackers_error_no_app">App non installata.</string> <string name="dashboard_first_ipscrambling_activation">Mentre l\'indirizzo IP è nascosto, la velocità su Internet risulta rallentata.</string> <string name="dashboard_graph_leaking_app">Guarda</string> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a4d1040..b1d241d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,12 +3,14 @@ <string name="app_name" translatable="false">Advanced Privacy</string> <!-- Commons --> + <string name="close">Close</string> + <string name="ok">OK</string> + <string name="dummy_system_app_label">System</string> <string name="graph_empty_message">Congratulations! No trackers are profiling you.</string> <string name="graph_legend_blocked">Blocked leaks</string> <string name="graph_legend_allowed">Allowed leaks</string> <string name="graph_subtitle">Tap on the bars for more information.</string> - <string name="close">Close</string> <!-- Dashboard --> <string name="dashboard_title" translatable="false">@string/app_name</string> <string name="dashboard_state_title_on">Your online privacy is protected</string> @@ -30,7 +32,7 @@ <string name="dashboard_graph_leaking_app">View</string> <string name="dashboard_first_ipscrambling_activation">While your IP is faked, your Internet speed is likely to be reduced.</string> <string name="dashboard_am_i_tracked_title">Manage apps\' trackers</string> - <string name="dashboard_am_i_tracked_subtitle">%1$d app trackers, %2$d allowed trackers</string> + <string name="dashboard_am_i_tracked_subtitle">%1$d detected trackers, %2$d allowed trackers</string> <string name="dashboard_apps_permissions_title">Manage apps\' permissions</string> <string name="dashboard_apps_permissions_subtitle">Manage your permissions</string> <string name="dashboard_location_title">Manage my location</string> @@ -55,6 +57,7 @@ <string name="ipscrambling_error_quickprivacy_disabled">Enabled Quick Privacy to use functionalities</string> <string name="ipscrambling_error_always_on_vpn_already_running">Please disable the 3rd-party VPN %s in order for Advanced Privacy to hide your real IP address.</string> <string name="ipscrambling_warning_starting_long">Our scrambling IP service is taking time to launch. It can take a few minutes. Leaving the screen won\'t interrupt the process.</string> + <!-- Location --> <string name="location_title">Manage my location</string> <string name="location_info">Your location can reveal a lot about yourself or your activities.\n\nManage my location enables you to use a fake location instead of your real position. This way, your real location isn\'t shared with applications that might be snooping too much.</string> @@ -64,6 +67,7 @@ <string name="location_hint_longitude">Longitude</string> <string name="location_hint_latitude">Latitude</string> <string name="location_input_error">Invalid coordinates</string> + <!-- Trackers --> <string name="trackers_title">Manage apps\' trackers</string> <string name="trackers_info">Trackers are pieces of code hidden in apps. They collect your data and follow your activity 24/7. See which trackers are active and block them all for best protection. As it could cause some applications to malfunction, you can choose specifically which trackers you want to block.</string> @@ -77,7 +81,7 @@ <string name="trackers_graph_hours_period_format">HH:mm</string> <string name="trackers_graph_days_period_format">MMMM d - EEE</string> <string name="trackers_graph_months_period_format">MMMM yyyy</string> - <string name="trackers_app_trackers_counts">%1$d blocked trackers out of %2$d, %3$d leaks</string> + <string name="trackers_app_trackers_counts">%1$d/%2$d blocked trackers, %3$d leaks</string> <!-- App Trackers --> <string name="apptrackers_block_all_toggle">Block trackers</string> <string name="apptrackers_trackers_list_title">Opt for the trackers you want to activate/deactivate.</string> @@ -87,38 +91,18 @@ <string name="apptrackers_trackers_count_summary">%1$d blocked trackers out of %2$d detected trackers, %3$d blocked leaks and %4$d allowed leaks.</string> <string name="apptrackers_error_no_app">App not installed.</string> <string name="apptrackers_tracker_control_disabled_message">Changes will take effect when tracker blocker is on.</string> - <!-- --> - <string name="quick_protection_info">Quick protection enables these settings when turned on</string> - <string name="quick_protection_settings_list"> - All trackers are turned off.\n- Your geolocation will be faked.\n- Your real IP address will be hidden.</string> - <string name="learn_more">Learn more</string> - <string name="add_location">Add location</string> - <string name="i_am_exposing">I am exposing my real IP address</string> - <string name="ipscrambling_all_apps_scrambled">All apps use hidden IP</string> - <string name="ipscrambling_only_selected_apps_scrambled">Only the following apps use hidden IP</string> - <string name="ipscrambling_is_starting">Tor is starting...</string> - <string name="ipscrambling_is_stopping">Tor is stopping...</string> - ipscrambling_any_location - <string name="permission_control_info">Manage and control apps requesting various permissions.</string> - <string name="apps_allowed">%1$d of %2$d apps allowed</string> - <string name="apps_access_to_permission">Apps which has access to %1$s permission</string> - <string name="real_location_mode">Real location mode</string> - <string name="random_location_mode">Random location mode</string> - <string name="fake_location_mode">Fake location mode</string> - <string name="user_location_permission_explanation">This app needs location permissions in order to show its functionality.</string> - <string name="user_location_permission_not_granted">You didn\'t grant location permission</string> - <string name="please_enter_valid_lat_long">Please enter valid latitude and longitude value</string> - <string name="quick_protection">Quick Protection</string> - <string name="privacy_dashboard">Privacy Dashboard</string> - <string name="click_to_learn_more">Click to learn more</string> - <string name="apps_permissions">Apps Permission</string> - <string name="trackers">Trackers</string> - <string name="following_trackers_in_use">Following trackers are in use</string> - <string name="enable_disable_tracker_info">Enable or disable this tracker for the following apps</string> - <string name="tracker">Tracker</string> - <string name="appwidget_text">EXAMPLE</string> - <string name="add_widget">Add widget</string> - <string name="app_widget_description">This is an app widget description</string> + <!-- Features warning dialog --> + <string name="warningdialog_do_not_show_again">Do not show again</string> + <string name="warningdialog_trackers_title">Trackers control</string> + <string name="warningdialog_trackers_message">While this option is active, in some rare cases, some apps may not work properly. If you meet any problems, you can disable trackers control for specific apps and websites at anytime.</string> + <string name="warningdialog_trackers_secondary_cta">Manage app trackers</string> + <string name="warningdialog_location_title">Fake my location</string> + <string name="warningdialog_location_message">While this option is active, some apps that rely on your real location may not work properly. It\'s recommended to enable it only occasionally, only when needed.</string> + <string name="warningdialog_ipscrambling_title">Hide my IP</string> + <string name="warningdialog_ipscrambling_message">This option uses the TOR network to hide your real IP address. Only use it for specific applications. <b>Important:</b> we advise disabling this feature for email services as your address may end into permanent ban from your provider.</string> + <string name="warningdialog_ipscrambling_cta">I understand</string> + <!-- Widget --> <string name="widget_title" translatable="false">@string/app_name</string> <string name="widget_state_title_on">Your online privacy is protected</string> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index febea31..7047f3f 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -12,9 +12,18 @@ <item name="android:windowLightNavigationBar">@bool/is_day</item> <item name="android:windowLightStatusBar">@bool/is_day</item> - <!-- Customize your theme here. --> <item name="android:textColor">@color/primary_text</item> <item name="android:textSize">16sp</item> </style> + + <style name="Theme.InvisibleActivity" parent="Theme.PrivacyCentralApp"> + <item name="android:windowFrame">@null</item> + <item name="android:windowIsFloating">true</item> + <item name="android:windowIsTranslucent">true</item> + <item name="android:windowNoTitle">true</item> + <item name="android:background">@android:color/transparent</item> + <item name="android:windowBackground">@null</item> + </style> + </resources>
\ No newline at end of file |