]> gitweb.stoutner.com Git - PrivacyCell.git/commitdiff
Release 1.10. master v1.10
authorSoren Stoutner <soren@stoutner.com>
Mon, 30 Oct 2023 19:10:55 +0000 (12:10 -0700)
committerSoren Stoutner <soren@stoutner.com>
Mon, 30 Oct 2023 19:10:55 +0000 (12:10 -0700)
193 files changed:
COPYING
app/build.gradle
app/src/main/AndroidManifest.xml
app/src/main/assets/css/theme.css
app/src/main/assets/de/changelog.html
app/src/main/assets/de/explanations/antiquated_network.html
app/src/main/assets/de/explanations/network_1xrtt.html
app/src/main/assets/de/explanations/network_cdma.html
app/src/main/assets/de/explanations/network_edge.html
app/src/main/assets/de/explanations/network_ehrpd.html
app/src/main/assets/de/explanations/network_evdo_0.html
app/src/main/assets/de/explanations/network_evdo_a.html
app/src/main/assets/de/explanations/network_evdo_b.html
app/src/main/assets/de/explanations/network_gprs.html
app/src/main/assets/de/explanations/network_gsm.html
app/src/main/assets/de/explanations/network_hsdpa.html
app/src/main/assets/de/explanations/network_hspa.html
app/src/main/assets/de/explanations/network_hspap.html
app/src/main/assets/de/explanations/network_hsupa.html
app/src/main/assets/de/explanations/network_iden.html
app/src/main/assets/de/explanations/network_iwlan.html
app/src/main/assets/de/explanations/network_lte.html
app/src/main/assets/de/explanations/network_nr.html
app/src/main/assets/de/explanations/network_td_scdma.html
app/src/main/assets/de/explanations/network_umts.html
app/src/main/assets/de/explanations/network_unknown.html
app/src/main/assets/de/explanations/override_network_lte_advanced_pro.html
app/src/main/assets/de/explanations/override_network_lte_ca.html
app/src/main/assets/de/explanations/override_network_none.html
app/src/main/assets/de/explanations/override_network_nr_advanced.html
app/src/main/assets/de/explanations/override_network_nr_nsa.html
app/src/main/assets/de/explanations/override_network_nr_nsa_mmwave.html
app/src/main/assets/de/explanations/stingrays.html
app/src/main/assets/de/licenses.html
app/src/main/assets/de/permissions.html
app/src/main/assets/en/changelog.html
app/src/main/assets/en/explanations/network_1xrtt.html
app/src/main/assets/en/explanations/network_evdo_0.html
app/src/main/assets/en/explanations/network_evdo_a.html
app/src/main/assets/en/explanations/network_evdo_b.html
app/src/main/assets/en/explanations/network_nr.html
app/src/main/assets/en/licenses.html
app/src/main/assets/en/permissions.html
app/src/main/assets/es/changelog.html
app/src/main/assets/es/explanations/network_1xrtt.html
app/src/main/assets/es/explanations/network_evdo_0.html
app/src/main/assets/es/explanations/network_evdo_a.html
app/src/main/assets/es/explanations/network_evdo_b.html
app/src/main/assets/es/explanations/network_nr.html
app/src/main/assets/es/licenses.html
app/src/main/assets/es/permissions.html
app/src/main/assets/fr/changelog.html
app/src/main/assets/fr/explanations/network_1xrtt.html
app/src/main/assets/fr/explanations/network_evdo_0.html
app/src/main/assets/fr/explanations/network_evdo_a.html
app/src/main/assets/fr/explanations/network_evdo_b.html
app/src/main/assets/fr/explanations/network_nr.html
app/src/main/assets/fr/licenses.html
app/src/main/assets/fr/permissions.html
app/src/main/assets/images/list_alt_rounded.svg [deleted file]
app/src/main/assets/images/list_alt_rounded_24.svg [new file with mode: 0644]
app/src/main/assets/images/notification_important_rounded_filled.svg [new file with mode: 0644]
app/src/main/assets/images/payments_rounded.svg
app/src/main/assets/it/changelog.html
app/src/main/assets/it/explanations/network_1xrtt.html
app/src/main/assets/it/explanations/network_evdo_0.html
app/src/main/assets/it/explanations/network_evdo_a.html
app/src/main/assets/it/explanations/network_evdo_b.html
app/src/main/assets/it/explanations/network_nr.html
app/src/main/assets/it/licenses.html
app/src/main/assets/it/permissions.html
app/src/main/assets/ru/changelog.html
app/src/main/assets/ru/explanations/network_1xrtt.html
app/src/main/assets/ru/explanations/network_evdo_0.html
app/src/main/assets/ru/explanations/network_evdo_a.html
app/src/main/assets/ru/explanations/network_evdo_b.html
app/src/main/assets/ru/explanations/network_nr.html
app/src/main/assets/ru/licenses.html
app/src/main/assets/ru/permissions.html
app/src/main/java/com/stoutner/privacycell/activities/LogcatActivity.kt
app/src/main/java/com/stoutner/privacycell/activities/PrivacyCellActivity.kt
app/src/main/java/com/stoutner/privacycell/activities/ProtocolsActivity.kt
app/src/main/java/com/stoutner/privacycell/activities/SettingsActivity.kt
app/src/main/java/com/stoutner/privacycell/dialogs/NotificationPermissionDialog.kt [new file with mode: 0644]
app/src/main/java/com/stoutner/privacycell/dialogs/PhonePermissionDialog.kt
app/src/main/java/com/stoutner/privacycell/dialogs/WebViewDialog.kt
app/src/main/java/com/stoutner/privacycell/fragments/SettingsFragment.kt
app/src/main/java/com/stoutner/privacycell/helpers/ProtocolHelper.kt [new file with mode: 0644]
app/src/main/java/com/stoutner/privacycell/receivers/OnBootCompletedReceiver.kt
app/src/main/java/com/stoutner/privacycell/services/RealtimeMonitoringService.kt
app/src/main/java/com/stoutner/privacycell/workers/RegisterRealtimeListenerWorker.kt
app/src/main/java/com/stoutner/privacycell/workers/RestartServiceWorker.kt
app/src/main/res/drawable/antiquated_3g_disabled.xml
app/src/main/res/drawable/antiquated_3g_enabled.xml
app/src/main/res/drawable/antiquated_notification_disabled.xml
app/src/main/res/drawable/antiquated_notification_ghosted.xml
app/src/main/res/drawable/bottom_app_bar_disabled.xml
app/src/main/res/drawable/bottom_app_bar_enabled.xml
app/src/main/res/drawable/bug_tracker.xml
app/src/main/res/drawable/changelog.xml
app/src/main/res/drawable/clear.xml
app/src/main/res/drawable/contributors.xml
app/src/main/res/drawable/copy.xml
app/src/main/res/drawable/donations.xml
app/src/main/res/drawable/forum.xml
app/src/main/res/drawable/insecure_notification_disabled.xml
app/src/main/res/drawable/insecure_notification_ghosted.xml
app/src/main/res/drawable/licenses.xml
app/src/main/res/drawable/logcat.xml
app/src/main/res/drawable/news.xml
app/src/main/res/drawable/notification_permission.xml [new file with mode: 0644]
app/src/main/res/drawable/permissions.xml
app/src/main/res/drawable/phone_permission.xml
app/src/main/res/drawable/privacy_cell_monochrome.xml [new file with mode: 0644]
app/src/main/res/drawable/privacy_policy.xml
app/src/main/res/drawable/protocols.xml
app/src/main/res/drawable/roadmap.xml
app/src/main/res/drawable/save.xml
app/src/main/res/drawable/secure_notification_disabled.xml
app/src/main/res/drawable/secure_notification_enabled.xml
app/src/main/res/drawable/secure_notification_ghosted.xml
app/src/main/res/drawable/settings.xml
app/src/main/res/layout/privacy_cell_bottom_appbar.xml
app/src/main/res/layout/privacy_cell_top_appbar.xml
app/src/main/res/layout/settings_bottom_appbar.xml
app/src/main/res/layout/settings_top_appbar.xml
app/src/main/res/layout/webview_dialog.xml
app/src/main/res/mipmap-anydpi-v26/privacy_cell.xml [deleted file]
app/src/main/res/mipmap/privacy_cell.xml [new file with mode: 0644]
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-fr/strings.xml
app/src/main/res/values-it/strings.xml
app/src/main/res/values-night/colors.xml
app/src/main/res/values-ru/strings.xml
app/src/main/res/values/colors.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/locales_config.xml [new file with mode: 0644]
app/src/main/res/xml/preferences.xml
build.gradle
fastlane/metadata/android/de-DE/changelogs/10.txt [new file with mode: 0644]
fastlane/metadata/android/de-DE/changelogs/11.txt [new file with mode: 0644]
fastlane/metadata/android/de-DE/changelogs/9.txt [new file with mode: 0644]
fastlane/metadata/android/de-DE/full_description.txt [new file with mode: 0644]
fastlane/metadata/android/de-DE/images/phoneScreenshots/01-SecureNetwork-de.png [new file with mode: 0644]
fastlane/metadata/android/de-DE/images/phoneScreenshots/02-InsecureNetwork-de.png [new file with mode: 0644]
fastlane/metadata/android/de-DE/images/phoneScreenshots/03-AntiquatedNetwork-de.png [new file with mode: 0644]
fastlane/metadata/android/de-DE/images/phoneScreenshots/04-NavigationMenu-de.png [new file with mode: 0644]
fastlane/metadata/android/de-DE/images/phoneScreenshots/05-DarkTheme-de.png [new file with mode: 0644]
fastlane/metadata/android/de-DE/short_description.txt [new file with mode: 0644]
fastlane/metadata/android/de-DE/title.txt [new file with mode: 0644]
fastlane/metadata/android/en-US/changelogs/10.txt [new file with mode: 0644]
fastlane/metadata/android/en-US/changelogs/11.txt [new file with mode: 0644]
fastlane/metadata/android/en-US/changelogs/12.txt [new file with mode: 0644]
fastlane/metadata/android/en-US/changelogs/9.txt [new file with mode: 0644]
fastlane/metadata/android/en-US/images/phoneScreenshots/02-InsecureNetwork-en.png
fastlane/metadata/android/en-US/images/phoneScreenshots/03-AntiquatedNetwork-en.png
fastlane/metadata/android/en-US/images/phoneScreenshots/04-NavigationMenu-en.png
fastlane/metadata/android/en-US/images/phoneScreenshots/05-DarkTheme-en.png
fastlane/metadata/android/es-ES/changelogs/10.txt [new file with mode: 0644]
fastlane/metadata/android/es-ES/changelogs/11.txt [new file with mode: 0644]
fastlane/metadata/android/es-ES/changelogs/12.txt [new file with mode: 0644]
fastlane/metadata/android/es-ES/changelogs/9.txt [new file with mode: 0644]
fastlane/metadata/android/es-ES/images/phoneScreenshots/02-InsecureNetwork-es.png
fastlane/metadata/android/es-ES/images/phoneScreenshots/03-AntiquatedNetework-es.png [deleted file]
fastlane/metadata/android/es-ES/images/phoneScreenshots/03-AntiquatedNetwork-es.png [new file with mode: 0644]
fastlane/metadata/android/es-ES/images/phoneScreenshots/04-NavigationMenu-es.png
fastlane/metadata/android/es-ES/images/phoneScreenshots/05-DarkTheme-es.png
fastlane/metadata/android/fr-FR/changelogs/10.txt [new file with mode: 0644]
fastlane/metadata/android/fr-FR/changelogs/11.txt [new file with mode: 0644]
fastlane/metadata/android/fr-FR/changelogs/8.txt [new file with mode: 0644]
fastlane/metadata/android/fr-FR/changelogs/9.txt [new file with mode: 0644]
fastlane/metadata/android/fr-FR/images/phoneScreenshots/02-InsecureNetwork-fr.png
fastlane/metadata/android/fr-FR/images/phoneScreenshots/03-AntiquatedNetwork-fr.png
fastlane/metadata/android/fr-FR/images/phoneScreenshots/04-NavigationMenu-fr.png
fastlane/metadata/android/fr-FR/images/phoneScreenshots/05-DarkTheme-fr.png
fastlane/metadata/android/it-IT/changelogs/10.txt [new file with mode: 0644]
fastlane/metadata/android/it-IT/changelogs/11.txt [new file with mode: 0644]
fastlane/metadata/android/it-IT/changelogs/9.txt [new file with mode: 0644]
fastlane/metadata/android/it-IT/images/phoneScreenshots/02-InsecureNetwork-it.png
fastlane/metadata/android/it-IT/images/phoneScreenshots/03-AntiquatedNetwork-it.png
fastlane/metadata/android/it-IT/images/phoneScreenshots/04-NavigationMenu-it.png
fastlane/metadata/android/it-IT/images/phoneScreenshots/05-DarkTheme-it.png
fastlane/metadata/android/ru-RU/changelogs/10.txt [new file with mode: 0644]
fastlane/metadata/android/ru-RU/changelogs/11.txt [new file with mode: 0644]
fastlane/metadata/android/ru-RU/changelogs/12.txt [new file with mode: 0644]
fastlane/metadata/android/ru-RU/changelogs/9.txt [new file with mode: 0644]
fastlane/metadata/android/ru-RU/images/phoneScreenshots/02-InsecureNetwork-ru.png
fastlane/metadata/android/ru-RU/images/phoneScreenshots/03-AntiquatedNetwork-ru.png
fastlane/metadata/android/ru-RU/images/phoneScreenshots/04-NavigationMenu-ru.png
fastlane/metadata/android/ru-RU/images/phoneScreenshots/05-DarkTheme-ru.png
gradle.properties
gradle/wrapper/gradle-wrapper.properties

diff --git a/COPYING b/COPYING
index aa4972b9c554a871dbea8d73512e1ecda907c41d..1f575758110b7dce179c8571e888499b441b5552 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,4 @@
-Privacy Cell copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+Privacy Cell copyright © 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
 This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
index 6474dbfd5a16dee3c7eb9ee63ce19f11d21089cf..766effbe0a3c9022bf79e9c00c47d1f430b74272 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -23,14 +23,26 @@ plugins {
 }
 
 android {
 }
 
 android {
-    compileSdk 31
+    compileSdk 34
 
     defaultConfig {
         applicationId "com.stoutner.privacycell"
         minSdk 30
 
     defaultConfig {
         applicationId "com.stoutner.privacycell"
         minSdk 30
-        targetSdk 31
-        versionCode 8
-        versionName "1.7"
+        targetSdk 34
+        versionCode 12
+        versionName "1.10"
+        resourceConfigurations += ['en', 'de', 'es', 'fr', 'it', 'ru']
+    }
+
+    // Specify the compile Java version.  This must match the Kotlin JVM target.  For some reason the system was not setting this correctly.  These can probably be removed in the future.
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_17
+        targetCompatibility JavaVersion.VERSION_17
+    }
+
+    // Specify the Kotlin JVM target.  This must match the compile Java version.  For some reason the system was not setting this correctly.  These can probably be removed in the future.
+    kotlinOptions {
+        jvmTarget = 17
     }
 
     buildTypes {
     }
 
     buildTypes {
@@ -45,20 +57,23 @@ android {
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }
     }
+
+    namespace 'com.stoutner.privacycell'
 }
 
 dependencies {
     // Include the following AndroidX libraries.
 }
 
 dependencies {
     // Include the following AndroidX libraries.
-    implementation 'androidx.appcompat:appcompat:1.4.1'
-    implementation 'androidx.core:core-ktx:1.7.0'
-    implementation 'androidx.preference:preference-ktx:1.2.0'
+    implementation 'androidx.appcompat:appcompat:1.6.1'
+    implementation 'androidx.core:core-ktx:1.12.0'
+    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2'
+    implementation 'androidx.preference:preference-ktx:1.2.1'
     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
-    implementation 'androidx.webkit:webkit:1.4.0'
-    implementation 'androidx.work:work-runtime-ktx:2.7.1'
+    implementation 'androidx.webkit:webkit:1.8.0'
+    implementation 'androidx.work:work-runtime-ktx:2.8.1'
 
     // Include the Kotlin standard library.  This should be the same version number listed in the project build.gradle.
 
     // Include the Kotlin standard library.  This should be the same version number listed in the project build.gradle.
-    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10'
+    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22'
 
     // Include the Google material library.
 
     // Include the Google material library.
-    implementation 'com.google.android.material:material:1.5.0'
-}
\ No newline at end of file
+    implementation 'com.google.android.material:material:1.10.0'
+}
index 4deb14c892c6e639af9f0ba45986889b08945674..7a0c5ca1a2d4b6b981468101c3e1bcda604786fe 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    package="com.stoutner.privacycell"
     android:installLocation="auto" >
 
     android:installLocation="auto" >
 
-    <!-- Required to read cell network information. -->
+    <!-- Required to read cell network information.  <Dangerous permission> -->
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 
-    <!-- Required to display a realtime notification icon. -->
-    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+    <!-- Required to display a notification.  <Dangerous permission> -->
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 
     <!-- Required to start the realtime notification icon at boot. -->
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 
 
     <!-- Required to start the realtime notification icon at boot. -->
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 
+    <!-- Required to run a foreground service (which is the only type of service that can display notifications). -->
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
+
     <!-- Disabled the unneeded permissions that are automatically added by `androidx.work`.  <https://developer.android.com/reference/androidx/work/package-summary> -->
     <uses-permission android:name="android.permission.WAKE_LOCK" tools:node="remove" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" tools:node="remove" />
     <!-- Disabled the unneeded permissions that are automatically added by `androidx.work`.  <https://developer.android.com/reference/androidx/work/package-summary> -->
     <uses-permission android:name="android.permission.WAKE_LOCK" tools:node="remove" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" tools:node="remove" />
     <!-- Support Chromebooks that don't have a touch screen. -->
     <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
 
     <!-- Support Chromebooks that don't have a touch screen. -->
     <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
 
-    <!-- App data is automatically backed up to Google cloud servers unless `android:allowBackup="false"` and `android:fullBackupContent="false"` is set.
-        `tools:ignore="DataExtractionRules` removes the warning that backups can still transfer data device to device. -->
+    <!-- `tools:ignore="UnusedAttribute` removes the warning that `android:localeConfig` only applies to API >= 33. -->
     <application
         android:label="@string/privacy_cell"
         android:icon="@mipmap/privacy_cell"
     <application
         android:label="@string/privacy_cell"
         android:icon="@mipmap/privacy_cell"
-        android:allowBackup="false"
-        android:fullBackupContent="false"
         android:supportsRtl="true"
         android:theme="@style/Theme.PrivacyCell"
         android:supportsRtl="true"
         android:theme="@style/Theme.PrivacyCell"
-        tools:ignore="DataExtractionRules" >
+        android:localeConfig="@xml/locales_config"
+        tools:ignore="UnusedAttribute" >
 
         <!-- Privacy Cell Activity.  The label uses the short name so that it isn't truncated under the icon in the launcher on most phones.
             `android:launchMode="singleTask"` makes the app launch in a new task instead of inside the task of the program that sends it an intent.
 
         <!-- Privacy Cell Activity.  The label uses the short name so that it isn't truncated under the icon in the launcher on most phones.
             `android:launchMode="singleTask"` makes the app launch in a new task instead of inside the task of the program that sends it an intent.
         <activity
             android:name=".activities.SettingsActivity"
             android:label="@string/settings"
         <activity
             android:name=".activities.SettingsActivity"
             android:label="@string/settings"
-            android:screenOrientation="fullUser"
-            android:parentActivityName=".activities.PrivacyCellActivity" />
+            android:parentActivityName=".activities.PrivacyCellActivity"
+            android:screenOrientation="fullUser" />
 
         <!-- Protocols Activity.  The `parentActivityName` is used when navigating back. -->
         <activity
             android:name=".activities.ProtocolsActivity"
             android:label="@string/protocols"
 
         <!-- Protocols Activity.  The `parentActivityName` is used when navigating back. -->
         <activity
             android:name=".activities.ProtocolsActivity"
             android:label="@string/protocols"
-            android:screenOrientation="fullUser"
-            android:parentActivityName=".activities.PrivacyCellActivity" />
+            android:parentActivityName=".activities.PrivacyCellActivity"
+            android:screenOrientation="fullUser" />
 
         <!-- Logcat Activity. The `parentActivityName` is used when navigating back. -->
         <activity
 
         <!-- Logcat Activity. The `parentActivityName` is used when navigating back. -->
         <activity
             android:screenOrientation="fullUser" />
 
         <!-- Realtime Monitoring Service. -->
             android:screenOrientation="fullUser" />
 
         <!-- Realtime Monitoring Service. -->
-        <service android:name=".services.RealtimeMonitoringService" />
+        <service
+            android:name=".services.RealtimeMonitoringService"
+            android:foregroundServiceType="specialUse" >
+
+            <property
+                android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
+                android:value="Displays current cell protocol security information." />
+        </service>
 
         <!-- On Boot Completed Receiver. -->
         <receiver
 
         <!-- On Boot Completed Receiver. -->
         <receiver
             </intent-filter>
         </receiver>
     </application>
             </intent-filter>
         </receiver>
     </application>
-</manifest>
\ No newline at end of file
+</manifest>
index 4ba9d884b20385a86f4973b54f224d1e9981b710..a78eb750a68b05fb75051d87b7e45cef4021fa28 100644 (file)
@@ -34,7 +34,7 @@ a {
 
 @media (prefers-color-scheme: dark) {
   a {
 
 @media (prefers-color-scheme: dark) {
   a {
-    color: #8AB4F8;  /* Violet 500 */
+    color: #5785C5;  /* Violet 700 */
   }
 }
 
   }
 }
 
index 842e2ef8c8de0a3cc11554d46fc100bded78ae50..0689f8d64c54f5071f41e64029100e132fdd4a78 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021-2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2021-2023 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <h3>1.7 (Version Code 8)</h3>
-        <p>24. März 2022 - Mindest-API 30, Ziel-API 31</p>
+        <h3>1.10 (Version Code 12)</h3>
+        <p>30. Oktober 2023 - Mindest-API 30, Ziel-API 34</p>
+        <ul>
+            <li>Create an optional <a href="https://redmine.stoutner.com/issues/988">monochrome icon</a> (can be used in Android >= 13).</li>
+            <li>Allow Privacy Cell to be included in <a href="https://redmine.stoutner.com/issues/1001">system backups</a>.</li>
+            <li>Bump the <a href="https://redmine.stoutner.com/issues/1104">target API to 34</a> (Android 14).</li>
+            <li>Document <a href="https://redmine.stoutner.com/issues/940">permissions needed</a> for <a href="https://redmine.stoutner.com/issues/942">newer versions of Android</a>.</li>
+            <li>Repopulate the realtime monitoring notification every <a href="https://redmine.stoutner.com/issues/1105">15 minutes</a>.</li>
+            <li>Erste komplette deutsche Übersetzung von Bernhard G. Keller.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-9/">1.9</a> (Version Code 11)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=53f5dd586d2e9eb38280648b9084db15163fe682">5. Dezember 2022</a> - Mindest-API 30, Ziel-API 33</p>
+        <ul>
+            <li><a href="https://redmine.stoutner.com/issues/890">Ziel-API auf 33</a> (Android 13) angehoben.</li>
+            <li><a href="https://redmine.stoutner.com/issues/894">Wischgeste zum zum Ablehnen</a> der Benachrichtigungen des Echtzeit-Monitorings unter  Android 13 deaktiviert.</li>
+            <li><a href="https://redmine.stoutner.com/issues/935">App-Sprachauswahl</a> zur Auswahl der Sprache von Privacy Cell unter Android 13 hinzugefügt.</li>
+            <li><a href="https://redmine.stoutner.com/issues/913">Scroll-Position im Einstellungs-Dialog</a> wird nun bei Neustarts beibehalten.</li>
+            <li>Erste komplette deutsche Übersetzung von Bernhard G. Keller.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8-1/">1.8.1</a> (Version Code 10)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=ab7601a6d91b6035862bb47b1ac259855e3aba3b">8. August 2022</a> - Mindest-API 30, Ziel-API 32</p>
+        <ul>
+            <li>Fehler behoben, durch den nach Änderung der Netzwerk-Verbindung <a href="https://redmine.stoutner.com/issues/864">Benachrichtigungen wieder aktiviert</a> wurden.</li>
+            <li><a href="https://redmine.stoutner.com/issues/884">Zweifarbig violetten Text</a> zum Nachtmodus (Theme) hinzugefügt.</li>
+            <li>Erste komplette deutsche Übersetzung von Bernhard G. Keller.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8/">1.8</a> (Version Code 9)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=f60b140868c2f0d564657e96d48508b4fbdc546b">14. Juni 2022</a> - Mindest-API 30, Ziel-API 32</p>
+        <ul>
+            <li>Der <a href="https://redmine.stoutner.com/issues/851">Sprach-Netzwerk-Status</a> wird nun bei der Einschätzung der Gesamt-Sicherheit des Funknetzwerks berücksichtigt.</li>
+            <li>Fehler behoben, durch den gelegentlich <a href="https://redmine.stoutner.com/issues/850">Benachrichtigungen nicht abgeschaltet werden konnten</a>.</li>
+            <li><a href="https://redmine.stoutner.com/issues/827">Ziel-API auf 32</a> (Android 12L) angehoben.</li>
+            <li>Erste komplette deutsche Übersetzung von Bernhard G. Keller.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-7/">1.7</a> (Version Code 8)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=b11b84b24c660fac3a69f2dbe4bd615d73811219">24. März 2022</a> - Mindest-API 30, Ziel-API 31</p>
         <ul>
             <li>Warnung bei Verbindungen zu <a href="https://redmine.stoutner.com/issues/795">älteren, unsicheren Netzwerken</a> hinzugefügt.</li>
             <li><a href="https://redmine.stoutner.com/issues/774">Protokoll-Ansicht</a> hinzugefügt.</li>
         <ul>
             <li>Warnung bei Verbindungen zu <a href="https://redmine.stoutner.com/issues/795">älteren, unsicheren Netzwerken</a> hinzugefügt.</li>
             <li><a href="https://redmine.stoutner.com/issues/774">Protokoll-Ansicht</a> hinzugefügt.</li>
             <li>Erst-Veröffentlichung.</li>
         </ul>
     </body>
             <li>Erst-Veröffentlichung.</li>
         </ul>
     </body>
-</html>
\ No newline at end of file
+</html>
index 5dac071c7a8c15435e71fc5c346dbe04cda9b7e2..0571ab53f3541192e0385a5d334f48e5ef9105b9 100644 (file)
     </head>
 
     <body>
     </head>
 
     <body>
-        <p>You are connected to a cell phone network using antiquated protocols, which have multiple known vulnerabilities.</p>
+        <p>Ihr Gerät ist mit einem Netzwerk verbunden, das veraltete Protokolle verwendet, welche etliche bekannte Sicherheits-Schwachstellen beinhalten.</p>
 
 
-        <p>2G networks have been <a href="https://www.eff.org/deeplinks/2022/01/victory-google-releases-disable-2g-feature-new-android-smartphones">decommissioned in most of the world</a>.
-            3G networks are currently being decommissioned. Unless you know that the carrier in your area is running antiquated protocols, you should consider your device under active attack.</p>
+        <p>2G-Netzwerke wurden in vielen Ländern bereits <a href="https://www.eff.org/deeplinks/2022/01/victory-google-releases-disable-2g-feature-new-android-smartphones">deaktiviert</a>.
+            3G-Netzwerke werden derzeit ebenfalls abgeschaltet. Sofern Sie nicht sicher sind, dass der Provider in Ihrem Gebiet tatsächlich veraltete Protokolle nutzt, sollten Sie in Erwägung ziehen,
+            dass Ihr Gerät aktuell attackiert wird.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 65e03222ac0562cfc1dc5917df44551b41aa7a05..d7842148c6148e2f665a86a7fa34377a906dee60 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,9 +29,9 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) is the first version of the
-            <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard, which is the 3G update of the older 2G
-            <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
-            It is the competitor to <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
+        <p><a href="https://de.wikipedia.org/wiki/CDMA2000#Typen">1 times Radio Transmission Technology</a> (1xRTT) ist die erste Version des
+            <a href="https://de.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) Standards, welches das 3G-Update des älteren 2G-Standards
+            <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne) ist.
+            Es ist der vorwiegend in Amerika und Teilen von Asien und Afrika genutzte Konkurrent zu <a href="https://de.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 7a7a2a68764f356a642ea71538d0a31399599e3b..ae870631a2d681e58a10cd93f29b12d7e8e35c6a 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,7 +29,7 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access</a> (CDMA, also known as CDMAOne) is a 2G standard than can be considered a direct competitor to
-            <a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM).</p>
+        <p><a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access</a> (CDMA, auch bekannt als CDMAOne) ist ein 2G-Standard, der als direkter Konkurrent von
+            <a href="https://de.wikipedia.org/wiki/Global_System_for_Mobile_Communications">Global System for Mobile Communications</a> (GSM) angesehen werden kann.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 3d23adda7036d00d862415e58e1492331bb8b771..45412449aa33f824701c838efe567fd8ffe2e1d3 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Enhanced_Data_rates_for_GSM_Evolution">Enhanced Data rates for GSM Evolution</a> (EDGE)
-            is a 2.5G/3G technology which can be thought of as the next step up from <a href="https://en.wikipedia.org/wiki/General_Packet_Radio_Service">General Packet Radio Service</a> (GPRS),
-            which is the first evolution of the 2G <a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM),
-            which is the competitor to <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access</a> (CDMA, also known as CDMAOne).</p>
+        <p><a href="https://de.wikipedia.org/wiki/Enhanced_Data_Rates_for_GSM_Evolution">Enhanced Data rates for GSM Evolution</a> (EDGE)
+            ist eine 2.5G/3G-Technologie, die eine Weiterentwicklung von <a href="https://de.wikipedia.org/wiki/General_Packet_Radio_Service">General Packet Radio Service</a> (GPRS) darstellt,
+            die wiederum die erste Evolutionsstufe des 2G-Standards <a href="https://de.wikipedia.org/wiki/Global_System_for_Mobile_Communications">Global System for Mobile Communications</a> (GSM) und
+            die Konkurrenz-Technologie zum in Amerika und Teilen von Asien und Afrika gebräuchlichen <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access</a>
+            (CDMA, auch bekannt als CDMAOne) ist.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 9f575f701865109aa5c847663e18c8c900a89606..d577acc943386879d0b0a6c3aa48d663b92906e4 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://ieeexplore.ieee.org/document/6618535">Enhanced High-Rate Packet Data</a> (eHRPD) is a 3.5G/4G protocol designed to ease the transition in mixed networks to 4G
-            <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE),
-            particularly those coming from <a href="https://www.iotevolutionworld.com/topics/mobile-communications/articles/37366-evolution-options-from-cdma-lte-benefits-ehrpd.htm">CDMA2000</a>.</p>
+        <p><a href="https://ieeexplore.ieee.org/document/6618535">Enhanced High-Rate Packet Data</a> (eHRPD) ist ein 3.5G/4G-Protokoll, das entwickelt wurde, um den Übergang in gemischten Netzwerken zu 4G
+            <a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">Long-Term Evolution</a> (LTE) zu erleichtern -
+            insbesonders für jene mit <a href="https://www.iotevolutionworld.com/topics/mobile-communications/articles/37366-evolution-options-from-cdma-lte-benefits-ehrpd.htm">CDMA2000</a>-Technologie.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 90d5ce339f3166685173b05f9509740b8cef8231..592198013bf31bd7450696a93c5152e94e4278f5 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) is a 3.5G evolution of the 3G
-            <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
-            It is a competitor to the <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) protocol.
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) ist eine 3.5G-Weiterentwicklung des 3G-Standards
+            <a href="https://de.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
+            Es ist die Konkurrenz-Technologie zum <a href="https://de.wikipedia.org/wiki/HSPA">High Speed Packet Access</a> (HSPA)-Protokoll.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 18cf0679603a9dec834ab15f55712b2c0e7b0bcd..6b958a820267b9b0525a1a14bbd33d1f8b1b7d28 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized release A</a> (EVDO_A) is the second release of the EVDO standard,
-            which is a 3.5G evolution of the 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
-            It is a competitor to the <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) protocol.
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized revision A</a> (EVDO_A) ist die zweite Version des EVDO-Standards,
+            welche die 3.5G-Weiterentwicklung des 3G-Standards <a href="https://de.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) darstellt.
+            Es ist die Konkurrenz-Technologie zum <a href="https://de.wikipedia.org/wiki/HSPA">High Speed Packet Access</a> (HSPA)-Protokoll.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 2b4479404dfc3320c1243f79a4d7e6e56e295edf..33b4bff49f1df721c2674d77ec8275e96b703a27 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized release B</a> (EVDO_B) is the third release of the EVDO standard,
-            which is a 3.5G evolution of the 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
-            It is a competitor to the <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP) protocol.
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized revision B</a> (EVDO_B) ist die dritte Version des EVDO-Standards,
+            welche die 3.5G-Weiterentwicklung des 3G-Standards <a href="https://de.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) darstellt.
+            Es ist die Konkurrenz-Technologie zum <a href="https://de.wikipedia.org/wiki/HSPA">High Speed Packet Access</a> (HSPA)-Protokoll.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 4ef62c780f601fb951cf79489637e4176e00fe9c..2b4679f1add1086f882fd0ab085c6054dcf223e0 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/General_Packet_Radio_Service">General Packet Radio Service</a> (GPRS) is a 2.5G/3G packet-switched protocol
-            (meaning that information is split up into multiple packets similar to <a href="https://en.wikipedia.org/wiki/Internet_protocol_suite">TCP/IP</a> on the general internet).
-            It is the evolution of the 2G <a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM),
-            which is the competitor to <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access</a> (CDMA, also known as CDMAOne).</p>
+        <p><a href="https://de.wikipedia.org/wiki/General_Packet_Radio_Service">General Packet Radio Service</a> (GPRS) ist ein paketorientiertes 2.5G/3G-Protokoll
+            (die Daten werden dabei - wie bei <a href="https://en.wikipedia.org/wiki/Internet_protocol_suite">TCP/IP</a> im Internet -
+            in einzelne Pakete umgewandelt, als solche übertragen und beim Empfänger wieder zusammengesetzt).
+            Es stellt die Weiterentwicklung des 2G-Standards <a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM) und die Konkurrenz-Technologie zu
+            <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access</a> (CDMA, auch bekannt als CDMAOne) dar.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 7f691e76312b26ca825d06efe815d49bfa630c80..7a9e8a3f09a8d85f24722befb39e56e008657bd6 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM) is a 2G standard.
-            It is the competitor to <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access</a> (CDMA, also known as CDMAOne).
-            GSM eventually evolved into the 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE), which was also adopted by CDMA networks.</p>
+        <p><a href="https://de.wikipedia.org/wiki/Global_System_for_Mobile_Communications">Global System for Mobile Communications</a> (GSM) ist ein 2G-Standard.
+            Er stellt die Konkurrenz-Technologie zu <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access</a> (CDMA, auch bekannt als CDMAOne) dar.
+            Aus GSM ging schließlich der 4G-Standard <a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">Long-Term Evolution</a> (LTE) hervor, der auch in CDMA-Netzwerke übernommen wurde.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 30b47990e7e1d687129d290c129988f73b33a8f9..636b06c9e0311b7de0e2df09730e8373fc1bb91f 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,9 +29,9 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access#High_Speed_Downlink_Packet_Access_(HSDPA)">High Speed Downlink Packet Access</a> (HSDPA)
-            is a 3.5G protocol that makes up one portion of the <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) update to the 3G
-            <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
-            It is a competitor to the 3.5G <a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized">Evolution-Data Optimized</a> (EVDO) protocols.</p>
+        <p><a href="https://de.wikipedia.org/wiki/High_Speed_Downlink_Packet_Access">High Speed Downlink Packet Access</a> (HSDPA)
+            ist ein 3.5G-Protokoll, das einen Teil des <a href="https://de.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA)-Updates zum 3G-Standard
+            <a href="https://de.wikipedia.org/wiki/Universal_Mobile_Telecommunications_System">Universal Mobile Telecommunications System</a> (UMTS) darstellt.
+            Es ist eine Konkurrenz-Technologie zu den 3.5G-<a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized">Evolution-Data Optimized</a> (EVDO)-Protokollen.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index ec96cb161761573a4085115c70a3d3d6d1b223cb..deedc44ece30937fe8fc01a1dbd843f977ff1dbd 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) is a 3.5G update to the 3G
-            <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
-            It is a competitor to the 3.5G <a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized">Evolution-Data Optimized</a> (EVDO) protocols.</p>
+        <p><a href="https://de.wikipedia.org/wiki/HSPA">High Speed Packet Access</a> (HSPA) ist ein 3.5G-Update zum 3G-Standard
+            <a href="https://de.wikipedia.org/wiki/Universal_Mobile_Telecommunications_System">Universal Mobile Telecommunications System</a> (UMTS).
+            Es ist eine Konkurrenz-Technologie zu den 3.5G-<a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized">Evolution-Data Optimized</a> (EVDO)-Protokollen.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 9df717ebf6e11a4078d406f2c6e1c4ecea8bb15f..07d54a047a21cc8d76a941ae3da3725665db73c2 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,9 +29,9 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP) is a boost to the 3.5G
-            <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) update to the 3G
-            <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
-            It is a competitor to the 3.5G <a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized">Evolution-Data Optimized</a> (EVDO) protocols.</p>
+        <p><a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP) ist eine Steigerungsstufe des 3.5G-Updates
+            <a href="https://de.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) der 3G-Technologie
+            <a href="https://de.wikipedia.org/wiki/Universal_Mobile_Telecommunications_System">Universal Mobile Telecommunications System</a> (UMTS).
+            Es ist eine Konkurrenz-Technologie zu den 3.5G-<a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized">Evolution-Data Optimized</a> (EVDO)-Protokollen.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 397035ee575e68f037bc2e57e63e548a081cfb14..11ea0b11cbc82359b4f4c1443c7fe5fea8d2a65a 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,9 +29,9 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access#High_Speed_Uplink_Packet_Access_(HSUPA)">High Speed Uplink Packet Access</a> (HSUPA)
-            is a 3.5G protocol that makes up one portion of the <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) update to the 3G
-            <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
-            It is a competitor to the 3.5G <a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized">Evolution-Data Optimized</a> (EVDO) protocols.</p>
+        <p><a href="https://de.wikipedia.org/wiki/High_Speed_Uplink_Packet_Access">High Speed Uplink Packet Access</a> (HSUPA)
+            ist ein 3.5G-Protokoll, das einen Teil des <a href="https://de.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA)-Updates zum 3G-Standard
+            <a href="https://de.wikipedia.org/wiki/Universal_Mobile_Telecommunications_System">Universal Mobile Telecommunications System</a> (UMTS) darstellt.
+            Es ist eine Konkurrenz-Technologie zu den 3.5G-<a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized">Evolution-Data Optimized</a> (EVDO)-Protokollen.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 346375cd868926dcd24bd6d92b9535a74532922b..aea8168ded68d0e2f92217cf395e27e1c0b0bc02 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,7 +29,7 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/IDEN">Integrated Digital Enhanced Network</a> (iDEN) was a 2G protocol developed to work around some of the limitations of the 2G
-            <a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM).</p>
+        <p><a href="https://de.wikipedia.org/wiki/IDEN">Integrated Digital Enhanced Network</a> (iDEN) war ein Protokoll, um 2G-
+            <a href="https://de.wikipedia.org/wiki/Global_System_for_Mobile_Communications">Global System for Mobile Communications</a> (GSM)-Netzwerke um zusätzliche Dienste zu ergänzen.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 5a097b4674dd7c3b36d863065b87d1e707512e2f..95a3b9e5dbf46cd3d3df23c122e87cf01c49d8a1 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -30,6 +30,6 @@
 
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Mobile_data_offloading#Cellular_and_Wi-Fi_network_interworking">Interworking Wireless LAN</a> (IWLAN)
 
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Mobile_data_offloading#Cellular_and_Wi-Fi_network_interworking">Interworking Wireless LAN</a> (IWLAN)
-            is a fancy name for using an <a href="https://en.wikipedia.org/wiki/IEEE_802.11">802.11 Wi-Fi network</a> to route cell phone data.</p>
+            ist ein origineller Name für die Nutzung eines <a href="https://de.wikipedia.org/wiki/IEEE_802.11">802.11 WLAN-Netzwerks</a> zum Routen von Mobilfunkdaten.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 7d036e82a41666dc5a885aca020c250bdb82479d..cf3016190a5c55d5523b57ef3f3032e47726db4f 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE) is the 4G evolution of the 3G
-            <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS). Notably, it replaced both UMTS,
-            which descended from the 2G <a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM), as well as the 3G
-            <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000), which was the main competitor to UMTS.
-            For the first time, this meant that cell phone networks worldwide coalesced around a single protocol, removing the need for world travelers to carry a phone with dual radios.
-            One reason LTE was able to achieve this was by supporting a mixed-mode network, where CDMA2000 (or UMTS) was used for voice calls and LTE for data communications.
-            This provided a seamless upgrade path for cell phone operators. Over time, most carriers eventually switched to <a href="https://en.wikipedia.org/wiki/Voice_over_LTE">Voice over LTE</a> (VoLTE).</p>
+        <p><a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">Long-Term Evolution</a> (LTE) ist die 4G-Weiterentwicklung des 3G-Standards
+            <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS). Es ersetzte sowohl UMTS,
+            das vom 2G-Standard <a href="https://de.wikipedia.org/wiki/Global_System_for_Mobile_Communications">Global System for Mobile Communications</a> (GSM) abstammte, als auch das 3G-System
+            <a href="https://de.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000), das den Haupt-Konkurrenten zu UMTS darstellte.
+            Zum ersten Mal war damit möglich, Mobiltelefone weltweit mit einem Protokoll anstatt wie vorher mit zwei Funkmodulen zu nutzen.
+            Ein Grund dafür war die Unterstützung von Mixed-Mode-Netzwerken, bei denen CDMA2000 oder UMTS für Sprachanrufe und LTE für die Datenübertragung genutzt wurde.
+            Dies bot Mobilfunk-Anbietern einen nahtlosen Aufrüstungs-Pfad. Mit der Zeit wechselten die meisten Anbieter letztlich zu <a href="https://de.wikipedia.org/wiki/VoLTE">Voice over LTE</a> (VoLTE).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 30614a084ef655885c1c3b112285df006c474aef..f393f3a3b1f55566d95007f013ab026f9bd21797 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,9 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> is the main 5G protocol.
-            It is the successor to 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
-            It is the first wireless protocol to generally include the generation (5G) in the name.
-        </p>
+        <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> ist das Haupt-Protokoll für 5G.
+            Es ist der Nachfolger des 4G-Systems <a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">Long-Term Evolution</a> (LTE).
+            Es ist das erste drahtlose Protokoll, das die Netzwerk-Generation (5G) im Namen verwendet.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 1a545bdfcf6ab0086ca1d27c5d037f374513b1df..474fc48c03337685e68e487332bea7eba64f6cf0 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/UMTS#TD-SCDMA_(UTRA-TDD_1.28_Mcps_Low_Chip_Rate_(LCR))">Time-Division Synchronous Code-Division Multiple Access</a> (TD-SCDMA) is an extension to the 3G
-            <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS),
-            which is the 3G successor of the 2G <a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM)
-            and a competitor to the <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
-            TD-SCDMA was only used in China.
-            UMTS evolved into the 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE), which was also adopted by CDMA networks.</p>
+        <p><a href="https://en.wikipedia.org/wiki/UMTS#TD-SCDMA_(UTRA-TDD_1.28_Mcps_Low_Chip_Rate_(LCR))">Time-Division Synchronous Code-Division Multiple Access</a>
+            (TD-SCDMA) ist eine Erweiterung des 3G-Standards <a href="https://de.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS),
+            welches der Nachfolger des 2G-Standards <a href="https://de.wikipedia.org/wiki/Global_System_for_Mobile_Communications">Global System for Mobile Communications</a> (GSM)
+            und eine Konkurrenz-Technologie zu <a href="https://de.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) war. TD-SCDMA wurde nur in China genutzt.
+            UMTS wurde zu <a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">Long-Term Evolution</a> (LTE) weiterentwickelt, das auch in CDMA-Netzwerke übernommen wurde.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 17494f1117d7a45d48dcdb223c8a5247d2d6fd95..d4004c60b8fca526e7a8122bc80fd395aa9fa72b 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -30,8 +30,8 @@
 
     <body>
         <p><a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS)
 
     <body>
         <p><a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS)
-            is the 3G successor to the 2G <a href="https://en.wikipedia.org/wiki/GSM">Global System for Mobile Communications</a> (GSM)
-            and a competitor to the <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
-            UMTS evolved into 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE), which was also adopted by CDMA networks.</p>
+            ist der Nachfolger des 2G-Standards <a href="https://de.wikipedia.org/wiki/Global_System_for_Mobile_Communications">Global System for Mobile Communications</a> (GSM)
+            und eine Konkurrenz-Technologie zu <a href="https://de.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
+            UMTS wurde zu <a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">Long-Term Evolution</a> (LTE) weiterentwickelt, das auch in CDMA-Netzwerke übernommen wurde.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 4ca9bd3fe180057894c9a853e8562d1fcb719553..bee4bb73f4e5e0aef047fee4b1e156ca03bbcfb4 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,6 +29,6 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p>The network type is unknown.</p>
+        <p>Der Netzwerk-Typ ist unbekannt.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 0007ffd157aa62faacccb79c313cd5326eabc2c4..2c1464865f00c0669feb27901667deb101ab1be7 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -30,6 +30,6 @@
 
     <body>
         <p><a href="https://en.wikipedia.org/wiki/LTE_Advanced#LTE_Advanced_Pro">Long-Term Evolution Advanced Pro</a> (LTE-A Pro)
 
     <body>
         <p><a href="https://en.wikipedia.org/wiki/LTE_Advanced#LTE_Advanced_Pro">Long-Term Evolution Advanced Pro</a> (LTE-A Pro)
-            is a 4.5G update to the 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">LTE</a> protocol.</p>
+            ist eine 4.5G-Erweiterung zum 4G-Protokoll <a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">LTE</a>.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index f21db103b12baa5566ab3187827889dbc840af0d..318ec3a8d16f48b80b41da3e390a0c53821bc73d 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,7 +29,7 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Carrier_aggregation">Long-Term Evolution Carrier Aggregation</a> (LTE CA)
-            allows a 4G LTE connection to aggregate non-contiguous blocks of spectrum to increase data throughput.</p>
+        <p><a href="https://de.wikipedia.org/wiki/Carrier_Aggregation">Long-Term Evolution Carrier Aggregation</a> (LTE CA)
+            erlaubt einer 4G-LTE-Verbindung, mehrere einzelne Frequenzblöcke zu nutzen und so die maximale Datenrate pro Nutzer zu erhöhen.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index f99f5ad3981d5d1684f475cd535ad5a147143a4e..c8c9450b676b7cc5419eaa8a728fe3d167333dd9 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,6 +29,6 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p>There is no additional network information. Usually this category only applies to certain 4G and 5G networks.</p>
+        <p>Es gibt keine zusätzlichen Netzwerk-Informationen. Üblicherweise betrifft dies nur gewisse 4G- and 5G-Netzwerke.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 5ba8e260974e5b3dd720f8d385271c919291e03f..be4ca9b3827984f59978eb63256cb7b8946fcc32 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
     <body>
         <p><a href="https://developer.android.com/reference/android/telephony/TelephonyDisplayInfo#OVERRIDE_NETWORK_TYPE_NR_ADVANCED">New Radio Advanced</a>
 
     <body>
         <p><a href="https://developer.android.com/reference/android/telephony/TelephonyDisplayInfo#OVERRIDE_NETWORK_TYPE_NR_ADVANCED">New Radio Advanced</a>
-            is a marketing term that indicates that the carrier has done something beyond the bare minimum to qualify for the 5G logo.
-            It likely indicates that speeds beyond those typically associated with standard 5G are available.
-            For example, the carrier might be using the <a href="https://en.wikipedia.org/wiki/5G_NR#Frequency_bands">mmWave spectrum</a> (24.25–52.6 GHz), which goes really fast but doesn't penetrate walls.
-            Or, they might be using <a href="https://en.wikipedia.org/wiki/Carrier_aggregation">carrier aggregation</a> to increase bandwidth.</p>
+            ist ein Marketing-Begriff, der darauf hinweist, dass der Mobilfunk-Anbieter mehr als das Minimum anbietet, welches für die Qualifikation für das 5G-Logo notwendig wäre.
+            Er bedeutet, dass vermutlich Geschwindigkeiten oberhalb des typischen 5G-Standards erreicht werden können.
+            Zum Beispiel kann der Anbieter das <a href="https://en.wikipedia.org/wiki/5G_NR#Frequency_bands">mmWave-Spektrum</a> (24.25–52.6 GHz) nutzen,
+            mit dem große Geschwindigkeiten erreicht werden können, das aber Wände nicht durchdringt.
+            Auch die Nutzung von <a href="https://de.wikipedia.org/wiki/Carrier_Aggregation">Carrier Aggregation</a> (CA) zur Erhöhung von Bandbreite ist denkbar.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index c6866688e5b261a5d21afc2b758cf65cbcc96bd7..f914eef4c0944bfddd606a1908ea2f6c2424b4e9 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,9 +29,9 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/5G_NR#Non-standalone_mode">New Radio Non-Standalone</a> (NR NSA) uses the 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">LTE</a>
-            protocols for the control channel and 5G NR for the data channel.
-            It provides much of the speed of 5G without any of the additional security benefits.
-            Android phones will list this as a 5G connection, but it is not protected against modern <a href="https://en.wikipedia.org/wiki/IMSI-catcher">stingray attacks</a>.</p>
+    <p><a href="https://en.wikipedia.org/wiki/5G_NR#Non-standalone_mode">New Radio Non-Standalone</a> (NR NSA) nutzt die 4G-<a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">LTE</a>-Protokolle
+        für den Kontroll-Kanal und 5G NR für den Daten-Kanal.
+        Dies bietet weitgehend die Geschwindigkeit von 5G ohne zusätzliche Sicherheits-Vorteile.
+        Android-Geräte zeigen diese Verbindungen als 5G an, es besteht jedoch keine Absicherung gegen moderne <a href="https://de.wikipedia.org/wiki/IMSI-Catcher">Stingray-Attacken</a>.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 498672b21c465f6dc4e894cc44a9dd0939ca2efe..db8a8133fd4dc3348120305fe1f13d1221755324 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/5G_NR#Non-standalone_mode">New Radio Non-Standalone millimeter Wave</a> (NR NSA mmWave) uses the 4G
-            <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">LTE</a> protocols for the control channel and 5G NR on the
-            <a href="https://en.wikipedia.org/wiki/5G_NR#Frequency_bands">mmWave spectrum</a> (24.25–52.6 GHz) for the data channel.
-            It provides much of the speed of 5G without any of the additional security benefits.
-            Android phones will list this as a 5G connection, but it is not protected against modern <a href="https://en.wikipedia.org/wiki/IMSI-catcher">stingray attacks</a>.</p>
+    <p><a href="https://en.wikipedia.org/wiki/5G_NR#Non-standalone_mode">New Radio Non-Standalone millimeter Wave</a> (NR NSA mmWave) nutzt die 4G-
+        <a href="https://de.wikipedia.org/wiki/Long_Term_Evolution">LTE</a>-Protokolle für den Kontroll-Kanal and 5G NR im
+        <a href="https://en.wikipedia.org/wiki/5G_NR#Frequency_bands">mmWave-Spektrum</a> (24.25–52.6 GHz) für den Daten-Kanal.
+        Dies bietet weitgehend die Geschwindigkeit von 5G ohne zusätzliche Sicherheits-Vorteile.
+        Android-Geräte zeigen diese Verbindungen als 5G an, es besteht jedoch keine Absicherung gegen moderne <a href="https://de.wikipedia.org/wiki/IMSI-Catcher">Stingray-Attacken</a>.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 645fc4098bf5e44a3e559fce6fad450e7a9bda88..bf15601c605d5fa0bf8274fc870828ae34f4c772 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/IMSI-catcher">IMSI catchers</a>, also known as stingrays, are fake cell phone towers that intercept your traffic and spy on you.
-            Each generation of cell phone protocols has attempted to mitigate stingrays, but each has generally failed.
-            With 5G, more of the traffic is encrypted in such a way that it prevents stingray spying.
-            However, 5G networks can run in a blended 4G/5G mode, where the control channel is 4G and the data channel is 5G.
-            This is known as <a href="https://en.wikipedia.org/wiki/5G_NR#Non-standalone_mode">5G NR NSA</a> (5G New Radio Non-Standalone) mode.
-            When connected to such a blended network, a cell phone is not protected against
-            <a href="https://www.wired.com/story/5g-network-stingray-surveillance-non-standalone/">modern stingray attacks</a>.</p>
-
-        <p>The Android status bar does not differentiate between 5G modes. It will display the same 5G icon for Standalone and Non-Standalone networks.
-            The purpose of Privacy Cell is to make it easy to tell what type of network you are connected to.
-            If you are in an area where you usually are connected to a <a href="https://en.wikipedia.org/wiki/5G_NR#Standalone_mode">5G NR SA</a> network and Privacy Cell shows a 5G NR NSA connection,
-            it is possible that a stingray has performed a downgrade attack to spy on your communications.</p>
-
-        <p>It should be noted that paltry attempts have been made to secure cell phone protocols in the past, which have never been sufficiently well designed to provide real protection.
-            Even if you are connected to a 5G NR SA network, it is likely that there are still unknown weaknesses in the network that can be exploited by a sufficiently funded adversary.
-            Privacy Cell will be updated regarding these types of vulnerabilities as future research identifies them.</p>
+        <p><a href="https://de.wikipedia.org/wiki/IMSI-Catcher">IMSI-Catcher</a>, auch als Stingrays bekannt, sind Fake-Basisstationen in Mobilfunk-Netzen,
+            die den Datenverkehr abfangen und so Nutzer ausspionieren können.
+            Jede Generation von Mobilfunk-Protokollen versuchte, solche Attacken zu verhindern, jedoch scheiterten diese Versuche grundsätzlich.
+            Mit 5G wird mehr Datenverkehr verschlüsselt, um Stingray-Angriffe zu vermeiden.
+            Allerdings können 5G-Netzwerke in gemischten 4G/5G-Modi betrieben werden, in denen für den Kontroll-Kanal 4G und für den Daten-Kanal 5G genutzt wird.
+            Dies wird als <a href="https://en.wikipedia.org/wiki/5G_NR#Non-standalone_mode">5G NR NSA</a> (5G New Radio Non-Standalone) bezeichnet.
+            Verbunden mit einem solchen gemischten Netzwerk ist ein Mobiltelefon nicht gegen moderne
+            <a href="https://www.wired.com/story/5g-network-stingray-surveillance-non-standalone/">Stingray-Attacken</a> abgesichert.</p>
+
+        <p>Die Status-Anzeige in Android unterscheidet nicht zwischen den verschiedenen 5G-Modi und zeigt dasselbe 5G-Icon für Standalone- (SA) und Nicht-Standalone-Netzwerke (NSA).
+            Der Zweck von Privacy Cell ist, eine Einschätzung des Netzwerks, mit dem das eigene Gerät verbunden ist, zu ermöglichen.
+            Wenn Sie in einem Gebiet üblicherweise mit einem
+            <a href="https://en.wikipedia.org/wiki/5G_NR#Standalone_mode">5G NR SA</a>-Netzwerk verbunden sind und Privacy Cell eine 5G NR NSA-Verbindung anzeigt,
+            könnte es sein, dass ein Stingray eine Downgrade-Attacke durchgeführt hat und Ihre Kommunikation ausspioniert.</p>
+
+        <p>Es sollte bedacht werden, dass die bisherigen dürftigen Versuche, Mobilfunk-Protokolle abzusichern, nie ausreichend konzipiert waren, um tatsächlichen Schutz zu bieten.
+            Selbst bei Verbindungen über 5G NR SA-Netzwerke besteht grundsätzlich die Gefahr unbekannter Schwachstellen im Netzwerk, die von hinreichend geförderten Widersachern ausgenutzt werden können.
+            Privacy Cell wird entsprechend aktualisiert, sobald solche Schwachstellen zukünftig erforscht und erkannt werden.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index bb23459db8c235d33b374f97157bc6afe89a6fb9..209cf52e63f2766ff12f178a10e97d745bc6dc86 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021-2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Cell ist Copyright © 2021-2022 von <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Cell ist Copyright 2021-2023 von <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>Lizenz</h3>
         <p>Privacy Cell wird unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+-Lizenz</a> veröffentlicht. Den gesamten Text der Lizenz finden Sie unterhalb.
 
         <h3>Lizenz</h3>
         <p>Privacy Cell wird unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+-Lizenz</a> veröffentlicht. Den gesamten Text der Lizenz finden Sie unterhalb.
 
         <h3>Icons</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> sind abgeleitet von <code>security</code> und <code>5g</code>,
 
         <h3>Icons</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> sind abgeleitet von <code>security</code> und <code>5g</code>,
-            welche Teil des <a href="https://material.io/icons/">Android Material Icon-Sets</a> sind und unter der
+            welche Teil des <a href="https://fonts.google.com/icons">Android Material Icon-Sets</a> sind und unter der
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 Lizenz</a> veröffentlicht werden.
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 Lizenz</a> veröffentlicht werden.
-            Den gesamten Text der Lizenz finden Sie unterhalb. Copyright der Änderungen: © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Den gesamten Text der Lizenz finden Sie unterhalb. Copyright der Änderungen: 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Die resultierenden Grafiken werden unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+-Lizenz</a> veröffentlicht.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> sind abgeleitet von <code>security</code> und <code>warning_amber_rounded</code>,
             Die resultierenden Grafiken werden unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+-Lizenz</a> veröffentlicht.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> sind abgeleitet von <code>security</code> und <code>warning_amber_rounded</code>,
-            welche Teil des <a href="https://material.io/icons/">Android Material Icon-Sets</a> sind und unter der
+            welche Teil des <a href="https://fonts.google.com/icons">Android Material Icon-Sets</a> sind und unter der
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 Lizenz</a> veröffentlicht werden.
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 Lizenz</a> veröffentlicht werden.
-            Copyright der Änderungen: © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Copyright der Änderungen: 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Die resultierenden Grafiken werden unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+-Lizenz</a> veröffentlicht.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> sind abgeleitet von <code>security</code> und <code>do_not_disturb</code>,
             Die resultierenden Grafiken werden unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+-Lizenz</a> veröffentlicht.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> sind abgeleitet von <code>security</code> und <code>do_not_disturb</code>,
-            welche Teil des <a href="https://material.io/icons/">Android Material Icon-Sets</a> sind und unter der
+            welche Teil des <a href="https://fonts.google.com/icons">Android Material Icon-Sets</a> sind und unter der
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 Lizenz</a> veröffentlicht werden.
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 Lizenz</a> veröffentlicht werden.
-            Copyright der Änderungen: © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Copyright der Änderungen: 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Die resultierenden Grafiken werden unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+-Lizenz</a> veröffentlicht.</p>
             Die resultierenden Grafiken werden unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+-Lizenz</a> veröffentlicht.</p>
-        <p><img class="left" src="../images/antiquated_3g.svg"/> is derived from <code>security</code> and <code>3g_mobiledata_rounded</code>,
-            which are part of the <a href="https://material.io/icons/">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Modifications copyright © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
-            The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
-        <p>Die folgenden Icons stammen aus dem <a href="https://material.io/icons/">Android Material Icon-Sets</a>,
+        <p><img class="left" src="../images/antiquated_3g.svg"/> ist abgeleitet von <code>security</code> und <code>3g_mobiledata_rounded</code>,
+            welche ein Teil des <a href="https://fonts.google.com/icons">Android Material icon set</a> und unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            lizensiert sind. Die Änderungen stehen under dem Copyright 2016, 2022 von <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Die abgeleitete Grafik steht unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ Lizenz</a>.</p>
+        <p>Die folgenden Icons stammen aus dem <a href="https://fonts.google.com/icons">Android Material Icon-Sets</a>,
             das unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 Lizenz</a> veröffentlicht wird.
             Sie sind bis auf Layout-Informationen wie Farbe und Größe unverändert. Einige von Ihnen wurden Ihrer Verwendung im Code entsprechend umbenannt.
             Die Origina-Icons und -Namen findend Sie unterhalb.</p>
             das unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 Lizenz</a> veröffentlicht wird.
             Sie sind bis auf Layout-Informationen wie Farbe und Größe unverändert. Einige von Ihnen wurden Ihrer Verwendung im Code entsprechend umbenannt.
             Die Origina-Icons und -Namen findend Sie unterhalb.</p>
@@ -75,8 +75,9 @@
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
-        <p><svg class="icon"><use href="../images/list_alt_rounded.svg#icon"/></svg> list_alt_rounded.</p>
+        <p><svg class="icon"><use href="../images/list_alt_rounded_24.svg#icon"/></svg> list_alt_rounded_24.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
+        <p><svg class="icon"><use href="../images/notification_important_rounded_filled.svg#icon"/></svg> notification_important_<wbr>rounded_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
@@ -1009,4 +1010,6 @@ ANY KIND, either express or
 implied. See the License for
 the specific language governing
 permissions and limitations
 implied. See the License for
 the specific language governing
 permissions and limitations
-under the License.</pre>
\ No newline at end of file
+under the License.</pre>
+    </body>
+</html>
index ddd1bbc70f4bc1a9e5898ffd5161efa884cf7744..b6895010dcda7d23b2358be4e5179dc1fbd2e54c 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2021-2023 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
         <p>Privacy Cell verwendet folgende Berechtigungen:</p>
 
         <h3>Telefon-Status und Identität lesen</h3>
         <p>Privacy Cell verwendet folgende Berechtigungen:</p>
 
         <h3>Telefon-Status und Identität lesen</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission. READ_PHONE_STATE</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission.<wbr>READ_<wbr>PHONE_<wbr>STATE</a></p>
         <p>Benötigt, um die vom Mobilfunk-Netzwerk genutzten Protokolle zu ermitteln.</p>
 
         <p>Benötigt, um die vom Mobilfunk-Netzwerk genutzten Protokolle zu ermitteln.</p>
 
-        <h3>Vordergrund-Service ausführen</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission. FOREGROUND_SERVICE</a></p>
+        <h3>Zeige Benachrichtigungen</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#POST_NOTIFICATIONS">android.permission.<wbr>POST_<wbr>NOTIFICATIONS</a></p>
         <p>Erlaubt Privacy Cell, ein Benachrichtigungs-Icon für die Echtzeit-Überwachung in der Status-Zeile anzuzeigen.</p>
 
         <p>Erlaubt Privacy Cell, ein Benachrichtigungs-Icon für die Echtzeit-Überwachung in der Status-Zeile anzuzeigen.</p>
 
+        <h3>Vordergrund-Service ausführen</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE</a></p>
+        <p>Erlaubt Privacy Cell, das Benachrichtigungs-Icon für die Echtzeit-Überwachung in der Status-Zeile zu aktualisieren, auch wenn die App im Hintergrund läuft.</p>
+
+        <h3>Spezieller Vordergrund-Service</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_SPECIAL_USE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE_<wbr>SPECIAL_<wbr>USE</a></p>
+        <p>Legt den Typ des verwendeten Vordergrund-Services fest. "Special Use" wird für Services verwendet, die nicht in die
+            <a href="https://developer.android.com/about/versions/14/changes/fgs-types-required">Standard-Kategorien</a> für Vordergrund-Services (z.B. Medienwiedergabe, Positionsbestimmung, etc.) fallen.</p>
+
         <h3>Ausführung bei Systemstart</h3>
         <h3>Ausführung bei Systemstart</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission. RECEIVE_BOOT_COMPLETED</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission.<wbr>RECEIVE_<wbr>BOOT_<wbr>COMPLETED</a></p>
         <p>Erlaubt Privacy Cell die Echtzeit-Überwachung zu aktivieren, wenn das Smartphone gebootet wird.</p>
         <p>Erlaubt Privacy Cell die Echtzeit-Überwachung zu aktivieren, wenn das Smartphone gebootet wird.</p>
+
+        <h3><a href="https://developer.android.com/about/versions/13/features#runtime-receivers">com.stoutner.privacycell.<wbr>DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a></h3>
+        <p>Automatisch hinzugefügt für alle Apps mit API >= 33 (Android 13), um zu verhindern, dass sich andere Apps ohne expliziter Erlaubnis mit dynamischen BroadcastReceivern verbinden.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 1153bfa4de4fb03cc6a9e45ec8decf205feb40e0..12075791a0d7d2e060e80fa206b40294173d0660 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <h3>1.7 (version code 8)</h3>
-        <p>24 March 2022 - minimum API 30, target API 31</p>
+        <h3>1.10 (version code 12)</h3>
+        <p>30 October 2023 - minimum API 30, target API 34</p>
+        <ul>
+            <li>Create an optional <a href="https://redmine.stoutner.com/issues/988">monochrome icon</a> (can be used in Android >= 13).</li>
+            <li>Allow Privacy Cell to be included in <a href="https://redmine.stoutner.com/issues/1001">system backups</a>.</li>
+            <li>Bump the <a href="https://redmine.stoutner.com/issues/1104">target API to 34</a> (Android 14).</li>
+            <li>Document <a href="https://redmine.stoutner.com/issues/940">permissions needed</a> for <a href="https://redmine.stoutner.com/issues/942">newer versions of Android</a>.</li>
+            <li>Repopulate the realtime monitoring notification every <a href="https://redmine.stoutner.com/issues/1105">15 minutes</a>.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-9/">1.9</a> (version code 11)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=53f5dd586d2e9eb38280648b9084db15163fe682">5 December 2022</a> - minimum API 30, target API 33</p>
+        <ul>
+            <li>Bump the <a href="https://redmine.stoutner.com/issues/890">target API to 33</a> (Android 13).</li>
+            <li>Disable <a href="https://redmine.stoutner.com/issues/894">swiping to dismiss</a> the realtime monitoring notification on Android 13.</li>
+            <li>Enable <a href="https://redmine.stoutner.com/issues/935">per-app language support</a> on Android 13.</li>
+            <li>Preserve the <a href="https://redmine.stoutner.com/issues/913">Settings scroll location</a> on restart.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8-1/">1.8.1</a> (version code 10)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=ab7601a6d91b6035862bb47b1ac259855e3aba3b">8 August 2022</a> - minimum API 30, target API 32</p>
+        <ul>
+            <li>Fix a bug that <a href="https://redmine.stoutner.com/issues/864">re-enabled notifications</a> when the network changed.</li>
+            <li>Add <a href="https://redmine.stoutner.com/issues/884">dual-toned violet text</a> to the Night Theme.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8/">1.8</a> (version code 9)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=f60b140868c2f0d564657e96d48508b4fbdc546b">14 June 2022</a> - minimum API 30, target API 32</p>
+        <ul>
+            <li>Include the <a href="https://redmine.stoutner.com/issues/851">voice network status</a> in determining the overall security of the cell network.</li>
+            <li>Fix a bug that sometimes <a href="https://redmine.stoutner.com/issues/850">prevented notifications from being disabled</a>.</li>
+            <li>Bump the <a href="https://redmine.stoutner.com/issues/827">target API to 32</a> (Android 12L).</li>
+            <li>First full German translation contributed by Bernhard G. Keller.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-7/">1.7</a> (version code 8)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=b11b84b24c660fac3a69f2dbe4bd615d73811219">24 March 2022</a> - minimum API 30, target API 31</p>
         <ul>
             <li>Add a warning when connecting to <a href="https://redmine.stoutner.com/issues/795">older, insecure networks</a>.</li>
             <li>Add a <a href="https://redmine.stoutner.com/issues/774">protocols activity</a>.</li>
         <ul>
             <li>Add a warning when connecting to <a href="https://redmine.stoutner.com/issues/795">older, insecure networks</a>.</li>
             <li>Add a <a href="https://redmine.stoutner.com/issues/774">protocols activity</a>.</li>
             <li>Initial release.</li>
         </ul>
     </body>
             <li>Initial release.</li>
         </ul>
     </body>
-</html>
\ No newline at end of file
+</html>
index cfa1baf11491373ae17f01e9bf905317d902c730..720dbdf0e0cfa7408fb7d2f65d99dfb02e918e1d 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -30,6 +30,6 @@
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) is the first version of the
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard, which is the 3G update of the older 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) is the first version of the
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard, which is the 3G update of the older 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
-            It is the competitor to <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
+            It is the competitor to <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 8881be7c6aa1a2b5b0612b364d6d3da17574be7a..4108d0e41d464560886a18aff8781854d218c910 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,6 +29,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) is a 3.5G evolution of the 3G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) is a 3.5G evolution of the 3G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
-            It is a competitor to the <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) protocol.
+            It is a competitor to the <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) protocol.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index d1beafbb248e1c5d418da99321bbf91420f1eb30..6c3f130aafb7dae546fef1fddb3268ee855bec16 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -27,8 +27,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized release A</a> (EVDO_A) is the second release of the EVDO standard,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized revision A</a> (EVDO_A) is the second release of the EVDO standard,
             which is a 3.5G evolution of the 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
             which is a 3.5G evolution of the 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
-            It is a competitor to the <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) protocol.
+            It is a competitor to the <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA) protocol.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index ddf0a18228e57a60d4a3f0382f91d0cc5afa9339..1855fdb1be1cc9042f688a406ce1656bb5d353fd 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -27,8 +27,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized release B</a> (EVDO_B) is the third release of the EVDO standard,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized revision B</a> (EVDO_B) is the third release of the EVDO standard,
             which is a 3.5G evolution of the 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
             which is a 3.5G evolution of the 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000) standard.
-            It is a competitor to the <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP) protocol.
+            It is a competitor to the <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP) protocol.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 177bf272eb34630b82d6e2deb7b7250dca169d77..06bd20597598a0bd1f916d79b7324e9743037277 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,7 +29,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> is the main 5G protocol.
             It is the successor to 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> is the main 5G protocol.
             It is the successor to 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
-            It is the first wireless protocol to generally include the generation (5G) in the name.
-        </p>
+            It is the first wireless protocol to generally include the generation (5G) in the name.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index a7f17438df9db5b23f2988d5d7addb7e40540ef2..d45eb48073b0158677f722b3d592a92066af9837 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -28,7 +28,7 @@
 
     <body>
         <h3>Copyright</h3>
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Cell copyright © 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Cell copyright 2021-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>License</h3>
         <p>Privacy Cell is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>. The full text of the license is below.
 
         <h3>License</h3>
         <p>Privacy Cell is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>. The full text of the license is below.
 
         <h3>Icons</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> are derived from <code>security</code> and <code>5g</code>,
 
         <h3>Icons</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> are derived from <code>security</code> and <code>5g</code>,
-            which are part of the <a href="https://material.io/icons/">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            The full text of the license is below. Modifications copyright © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            The full text of the license is below. Modifications copyright 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> are derived from <code>security</code> and <code>warning_amber_rounded</code>,
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> are derived from <code>security</code> and <code>warning_amber_rounded</code>,
-            which are part of the <a href="https://material.io/icons/">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Modifications copyright © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            Modifications copyright 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> are derived from <code>security</code> and <code>do_not_disturb</code>,
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> are derived from <code>security</code> and <code>do_not_disturb</code>,
-            which are part of the <a href="https://material.io/icons/">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Modifications copyright © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            Modifications copyright 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> is derived from <code>security</code> and <code>3g_mobiledata_rounded</code>,
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> is derived from <code>security</code> and <code>3g_mobiledata_rounded</code>,
-            which are part of the <a href="https://material.io/icons/">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Modifications copyright © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            Modifications copyright 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
-        <p>The following icons come from the <a href="https://material.io/icons/">Android Material icon set</a>,
+        <p>The following icons come from the <a href="https://fonts.google.com/icons">Android Material icon set</a>,
             which is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             They are unchanged except for layout information like color and size. Some of them have been renamed to match their use in the code. The original icons and names are shown below.</p>
         <p><svg class="icon"><use href="../images/bug_report_rounded.svg#icon"/></svg> bug_report_rounded.</p>
             which is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             They are unchanged except for layout information like color and size. Some of them have been renamed to match their use in the code. The original icons and names are shown below.</p>
         <p><svg class="icon"><use href="../images/bug_report_rounded.svg#icon"/></svg> bug_report_rounded.</p>
@@ -69,8 +69,9 @@
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
-        <p><svg class="icon"><use href="../images/list_alt_rounded.svg#icon"/></svg> list_alt_rounded.</p>
+        <p><svg class="icon"><use href="../images/list_alt_rounded_24.svg#icon"/></svg> list_alt_rounded_24.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
+        <p><svg class="icon"><use href="../images/notification_important_rounded_filled.svg#icon"/></svg> notification_important_<wbr>rounded_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
@@ -1003,4 +1004,6 @@ ANY KIND, either express or
 implied. See the License for
 the specific language governing
 permissions and limitations
 implied. See the License for
 the specific language governing
 permissions and limitations
-under the License.</pre>
\ No newline at end of file
+under the License.</pre>
+    </body>
+</html>
index aa77ee31f73d37f6767a892ac7bb2acdb9385633..162b5e3192acddacca60270c2e130985a3cfd507 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
         <p>Privacy Cell uses the following permissions.</p>
 
         <h3>Read phone status and identity</h3>
         <p>Privacy Cell uses the following permissions.</p>
 
         <h3>Read phone status and identity</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission. READ_PHONE_STATE</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission.<wbr>READ_<wbr>PHONE_<wbr>STATE</a></p>
         <p>Required to determine which protocols are being used by the cell phone network.</p>
 
         <p>Required to determine which protocols are being used by the cell phone network.</p>
 
-        <h3>Run foreground service</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission. FOREGROUND_SERVICE</a></p>
+        <h3>Show Notifications</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#POST_NOTIFICATIONS">android.permission.<wbr>POST_<wbr>NOTIFICATIONS</a></p>
         <p>Allows Privacy Cell to display a realtime monitoring notification icon in the status bar.</p>
 
         <p>Allows Privacy Cell to display a realtime monitoring notification icon in the status bar.</p>
 
+        <h3>Run foreground service</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE</a></p>
+        <p>Allows Privacy Cell to update the realtime monitoring notification icon when the app is not in the foreground.</p>
+
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_SPECIAL_USE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE_<wbr>SPECIAL_<wbr>USE</a></p>
+        <p>Specifies the type of foreground service.
+            Special Use is for services that don't fit into any of the <a href="https://developer.android.com/about/versions/14/changes/fgs-types-required">standard categories</a>.</p>
+
         <h3>Run at startup</h3>
         <h3>Run at startup</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission. RECEIVE_BOOT_COMPLETED</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission.<wbr>RECEIVE_<wbr>BOOT_<wbr>COMPLETED</a></p>
         <p>Allows Privacy Cell to enable the realtime monitoring service when the phone boots.</p>
         <p>Allows Privacy Cell to enable the realtime monitoring service when the phone boots.</p>
+
+        <h3><a href="https://developer.android.com/about/versions/13/features#runtime-receivers">com.stoutner.privacycell.<wbr>DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a></h3>
+        <p>Automatically added to all apps targeting API >= 33 (Android 13) to prevent other apps from connecting to dynamic receivers without explicit permission.</p>
     </body>
     </body>
-</html>
\ No newline at end of file
+</html>
index 917f9fa9e170c120faa58231c5d37553595e7ba1..02e462bf704998a88384f64be8411c6fcb86061e 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021-2022 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2021-2023 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <h3>1.7 (versión del código 8)</h3>
-        <p>24 de marzo de 2022 - API mínimo 30, API objetivo 31</p>
+        <h3>1.10 (versión del código 12)</h3>
+        <p>30 de octubre de 2023 - API mínimo 30, API objetivo 34</p>
+        <ul>
+            <li>Crear un icono <a href="https://redmine.stoutner.com/issues/988">monocromo opcional</a> (puede usarse en Android >= 13).</li>
+            <li>Permitir que Privacy Cell se incluya en <a href="https://redmine.stoutner.com/issues/1001">las copias de seguridad del sistema</a>.</li>
+            <li>Subir la <a href="https://redmine.stoutner.com/issues/1104">API objetivo a 34</a> (Android 14).</li>
+            <li>Documentar <a href="https://redmine.stoutner.com/issues/940">los permisos necesarios</a> para <a href="https://redmine.stoutner.com/issues/942">las nuevas versiones de Android</a>.</li>
+            <li>Repoblar la notificación de seguimiento en tiempo real cada <a href="https://redmine.stoutner.com/issues/1105">15 minutos</a>.</li>
+            <li>Traducción actualizada al español aportada por Jose A. León.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-9/">1.9</a> (versión del código 11)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=53f5dd586d2e9eb38280648b9084db15163fe682">5 de diciembre de 2022</a> - API mínimo 30, API objetivo 33</p>
+        <ul>
+            <li>Subir la <a href="https://redmine.stoutner.com/issues/890">API de destino a 33</a> (Android 13).</li>
+            <li>Desactivar <a href="https://redmine.stoutner.com/issues/894">el deslizamiento para descartar</a> la notificación de seguimiento en tiempo real en Android 13.</li>
+            <li>Habilitar <a href="https://redmine.stoutner.com/issues/935">el soporte de idiomas por aplicación</a> en Android 13.</li>
+            <li>Preservar la <a href="https://redmine.stoutner.com/issues/913">localización de desplazamiento de los Ajustes</a> al reiniciar.</li>
+            <li>Traducción actualizada al español aportada por Jose A. León.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8-1/">1.8.1</a> (versión del código 10)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=ab7601a6d91b6035862bb47b1ac259855e3aba3b">8 de agosto de 2022</a> - API mínimo 30, API objetivo 32</p>
+        <ul>
+            <li>Corregir un error que <a href="https://redmine.stoutner.com/issues/864">volvía a activar las notificaciones</a> cuando cambiaba la red.</li>
+            <li>Añadir <a href="https://redmine.stoutner.com/issues/884">un texto violeta de doble tono</a>al Tema Nocturno.</li>
+            <li>Traducción actualizada al español aportada por Jose A. León.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8/">1.8</a> (versión del código 9)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=f60b140868c2f0d564657e96d48508b4fbdc546b">14 de junio de 2022</a> - API mínimo 30, API objetivo 32</p>
+        <ul>
+            <li>Incluir el <a href="https://redmine.stoutner.com/issues/851">estado de la red de voz</a> para determinar la seguridad general de la red celular.</li>
+            <li>Corregir un error que a veces <a href="https://redmine.stoutner.com/issues/850">impedía desactivar las notificaciones</a>.</li>
+            <li>Aumentar la <a href="https://redmine.stoutner.com/issues/827">API de destino a 32</a> (Android 12L).</li>
+            <li>Primera traducción completa al alemán aportada por Bernhard G. Keller.</li>
+            <li>Traducción actualizada al español aportada por Jose A. León.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-7/">1.7</a> (versión del código 8)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=b11b84b24c660fac3a69f2dbe4bd615d73811219">24 de marzo de 2022</a> - API mínimo 30, API objetivo 31</p>
         <ul>
             <li>Añadir una advertencia al conectarse a <a href="https://redmine.stoutner.com/issues/795">redes antiguas e inseguras</a>.</li>
             <li>Añadir una <a href="https://redmine.stoutner.com/issues/774">actividad de protocolos</a>.</li>
         <ul>
             <li>Añadir una advertencia al conectarse a <a href="https://redmine.stoutner.com/issues/795">redes antiguas e inseguras</a>.</li>
             <li>Añadir una <a href="https://redmine.stoutner.com/issues/774">actividad de protocolos</a>.</li>
             <li>Versión inicial.</li>
         </ul>
     </body>
             <li>Versión inicial.</li>
         </ul>
     </body>
-</html>
\ No newline at end of file
+</html>
index 4126ad575d32e1a691ca5ece5dae12eb5e9ead34..fe55b007a2b7138216f0a22e894ea5ec45f225df 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -32,6 +32,6 @@
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology </a> (1xRTT) es la primera versión del
             <a href="https://en.wikipedia.org/wiki/CDMA2000">estándar Code-Division Multiple Access 2000</a> (CDMA2000), que es la actualización 3G del antiguo 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology </a> (1xRTT) es la primera versión del
             <a href="https://en.wikipedia.org/wiki/CDMA2000">estándar Code-Division Multiple Access 2000</a> (CDMA2000), que es la actualización 3G del antiguo 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
-            Es el competidor del <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
+            Es el competidor del <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 22768365038e52057d04fb5a25e9471fa1caf8e2..828a6548e1aca6887b6a3d6f84f2a995f1c39a20 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -31,6 +31,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) es una evolución 3.5G del 3G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">estándar Code-Division Multiple Access 2000</a> (CDMA2000).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) es una evolución 3.5G del 3G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">estándar Code-Division Multiple Access 2000</a> (CDMA2000).
-            Es un competidor del <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">protocolo High Speed Packet Access</a> (HSPA).
+            Es un competidor del <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">protocolo High Speed Packet Access</a> (HSPA).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index e4034ad63b6c957dce40efd6490ddf585409f9c5..43362bd26d40d8e5f79f4ce3c64ac1db5925627a 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized release A</a> (EVDO_A) es la segunda versión del estándar EVDO,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized revision A</a> (EVDO_A) es la segunda versión del estándar EVDO,
             que es la evolución 3.5G del 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">estándar Code-Division Multiple Access 2000</a> (CDMA2000).
             que es la evolución 3.5G del 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">estándar Code-Division Multiple Access 2000</a> (CDMA2000).
-            Es un competidor del <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">protocolo High Speed Packet Access</a> (HSPA).
+            Es un competidor del <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">protocolo High Speed Packet Access</a> (HSPA).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index e7cbabc2534740d44cb4bce7c8bf275cd9ebc0e5..457c9553ee5cc0cac750a3727d75552342518c88 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized release B</a> (EVDO_B) es la tercera versión del estándar EVDO,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized revision B</a> (EVDO_B) es la tercera versión del estándar EVDO,
             que es una evolución 3.5G del 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">estándar Code-Division Multiple Access 2000</a> (CDMA2000).
             que es una evolución 3.5G del 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">estándar Code-Division Multiple Access 2000</a> (CDMA2000).
-            Es un competidor del <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">protocolo High Speed Packet Access Plus</a> (HSPAP).
+            Es un competidor del <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">protocolo High Speed Packet Access Plus</a> (HSPAP).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 780e5c8f591cccd5f65e6f4dff8b9acaa3ba14ea..043e45260904c2327c2e0c01b91071b0e05a83be 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -31,7 +31,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> es el principal protocolo 5G.
             Es el sucesor del 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> es el principal protocolo 5G.
             Es el sucesor del 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
-            Es el primer protocolo inalámbrico que incluye generalmente la generación (5G) en el nombre.
-        </p>
+            Es el primer protocolo inalámbrico que incluye generalmente la generación (5G) en el nombre.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 3a606fa1cef19fda5ab80ed611a27b118434ee81..b651d18c4bf028bdf08e3248f36a296f7a74dffd 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021-2022 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
 
     <body>
         <h3>Copyright</h3>
-        <p>Copyright de Privacy Cell © 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Copyright de Privacy Cell 2021-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>Licencia</h3>
         <p>Privacy Cell se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>. El texto completo de la licencia se muestra abajo.
 
         <h3>Licencia</h3>
         <p>Privacy Cell se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>. El texto completo de la licencia se muestra abajo.
 
         <h3>Iconos</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> derivan de <code>security</code> y <code>5g</code>,
 
         <h3>Iconos</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> derivan de <code>security</code> y <code>5g</code>,
-            que son parte del <a href="https://material.io/icons/">conjunto de iconos de Android Material</a>
+            que son parte del <a href="https://fonts.google.com/icons">conjunto de iconos de Android Material</a>
             y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
-            El texto completo de la licencia se muestra abajo. Copyright de modificaciones © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            El texto completo de la licencia se muestra abajo. Copyright de modificaciones 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Las imágenes resultante se liberan bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> derivan de <code>security</code> y <code>warning_amber_rounded</code>,
             Las imágenes resultante se liberan bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> derivan de <code>security</code> y <code>warning_amber_rounded</code>,
-            que son parte del <a href="https://material.io/icons/">conjunto de iconos de Android Material</a>
+            que son parte del <a href="https://fonts.google.com/icons">conjunto de iconos de Android Material</a>
             y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
-            Copyright de modificaciones © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Copyright de modificaciones 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Las imágenes resultantes se liberan bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> derivan de <code>security</code> y <code>do_not_disturb</code>,
             Las imágenes resultantes se liberan bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> derivan de <code>security</code> y <code>do_not_disturb</code>,
-            que son parte del <a href="https://material.io/icons/">conjunto de iconos de Android Material</a>
+            que son parte del <a href="https://fonts.google.com/icons">conjunto de iconos de Android Material</a>
             y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
-            Copyright de modificaciones © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Copyright de modificaciones 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Las imágenes resultantes se liberan bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> se deriva de <code>security</code> y <code>3g_mobiledata_rounded</code>,
             Las imágenes resultantes se liberan bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> se deriva de <code>security</code> y <code>3g_mobiledata_rounded</code>,
-            que son parte del <a href="https://material.io/icons/">conjunto de iconos de Android Material</a>
+            que son parte del <a href="https://fonts.google.com/icons">conjunto de iconos de Android Material</a>
             y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
-            Copyright de modificaciones © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Copyright de modificaciones 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
-        <p>Los siguientes iconos vienen del <a href="https://material.io/icons/">conjunto de iconos de Android Material</a>,
+        <p>Los siguientes iconos vienen del <a href="https://fonts.google.com/icons">conjunto de iconos de Android Material</a>,
             que se liberan bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">licencia Apache 2.0</a>.
             No se han modificado, salvo la información sobre el diseño, como el color y el tamaño. Algunos de ellos han sido renombrados para que coincidan con su uso en el código.
             Los iconos y nombres originales se muestran a continuación.</p>
             que se liberan bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">licencia Apache 2.0</a>.
             No se han modificado, salvo la información sobre el diseño, como el color y el tamaño. Algunos de ellos han sido renombrados para que coincidan con su uso en el código.
             Los iconos y nombres originales se muestran a continuación.</p>
@@ -76,8 +76,9 @@
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
-        <p><svg class="icon"><use href="../images/list_alt_rounded.svg#icon"/></svg> list_alt_rounded.</p>
+        <p><svg class="icon"><use href="../images/list_alt_rounded_24.svg#icon"/></svg> list_alt_rounded_24.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
+        <p><svg class="icon"><use href="../images/notification_important_rounded_filled.svg#icon"/></svg> notification_important_<wbr>rounded_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
@@ -1010,4 +1011,6 @@ ANY KIND, either express or
 implied. See the License for
 the specific language governing
 permissions and limitations
 implied. See the License for
 the specific language governing
 permissions and limitations
-under the License.</pre>
\ No newline at end of file
+under the License.</pre>
+    </body>
+</html>
index 83824ed717df9fceef6af1755047c51cb0105b3d..eabd8e0900fcb9bba3fc751065b4f764797db236 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2021-2023 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
         <p>Privacy Cell usa los siguientes permisos.</p>
 
         <h3>Leer el estado del teléfono e identidad</h3>
         <p>Privacy Cell usa los siguientes permisos.</p>
 
         <h3>Leer el estado del teléfono e identidad</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission. READ_PHONE_STATE</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission.<wbr>READ_<wbr>PHONE_<wbr>STATE</a></p>
         <p>Requerido para determinar qué protocolos se están usando por la red del teléfono celular.</p>
 
         <p>Requerido para determinar qué protocolos se están usando por la red del teléfono celular.</p>
 
-        <h3>Run foreground service</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission. FOREGROUND_SERVICE</a></p>
-        <p>Allows Privacy Cell to display a realtime monitoring notification icon in the status bar.</p>
+        <h3>Mostrar notificaciones</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#POST_NOTIFICATIONS">android.permission.<wbr>POST_<wbr>NOTIFICATIONS</a></p>
+        <p>Permite a Privacy Cell mostrar un icono de notificación de supervisión en tiempo real en la barrra de estado.</p>
 
 
-        <h3>Run at startup</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission. RECEIVE_BOOT_COMPLETED</a></p>
-        <p>Allows Privacy Cell to enable the realtime monitoring service when the phone boots.</p>
+        <h3>Ejecutar servicio en primer plano</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE</a></p>
+        <p>Permite a Privacy Cell actualizar el icono de notificación de supervisión cuando la aplicación no está en primer plano.</p>
+
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_SPECIAL_USE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE_<wbr>SPECIAL_<wbr>USE</a></p>
+        <p>Especifica el tipo de servicio en primer plano.
+            El uso especial es para servicios que no encajan en ninguna de las <a href="https://developer.android.com/about/versions/14/changes/fgs-types-required">categorías estándar</a>.</p>
+
+        <h3>Ejecutar al inicio</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission.<wbr>RECEIVE_<wbr>BOOT_<wbr>COMPLETED</a></p>
+        <p>Permite a Privacy Cell activar el servicio de monitorización en tiempo real al arrancar el teléfono.</p>
+
+        <h3><a href="https://developer.android.com/about/versions/13/features#runtime-receivers">com.stoutner.privacycell.<wbr>DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a></h3>
+        <p>Se añade automáticamente a todas las aplicaciones con API >= 33 (Android 13) para impedir que otras aplicaciones se conecten a receptores dinámicos sin permiso explícito.</p>
     </body>
     </body>
-</html>
\ No newline at end of file
+</html>
index c314e7bf2a1fb510869cc5cab15f5a94e05554f7..adaddb5aa31308b40bb64dc592700df61877e234 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021-2022 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2021-2023 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <h3>1.7 (version de code 8)</h3>
-        <p>24 March 2022 - API minimum 30, API cible 31</p>
+        <h3>1.10 (version du code 12)</h3>
+        <p>30 Octobre 2023 - API minimale : 30, API optimale : 34</p>
         <ul>
         <ul>
-            <li>Add a warning when connecting to <a href="https://redmine.stoutner.com/issues/795">older, insecure networks</a>.</li>
-            <li>Add a <a href="https://redmine.stoutner.com/issues/774">protocols activity</a>.</li>
+            <li>Create an optional <a href="https://redmine.stoutner.com/issues/988">monochrome icon</a> (can be used in Android >= 13).</li>
+            <li>Allow Privacy Cell to be included in <a href="https://redmine.stoutner.com/issues/1001">system backups</a>.</li>
+            <li>Bump the <a href="https://redmine.stoutner.com/issues/1104">target API to 34</a> (Android 14).</li>
+            <li>Document <a href="https://redmine.stoutner.com/issues/940">permissions needed</a> for <a href="https://redmine.stoutner.com/issues/942">newer versions of Android</a>.</li>
+            <li>Repopulate the realtime monitoring notification every <a href="https://redmine.stoutner.com/issues/1105">15 minutes</a>.</li>
             <li>Mise à jour de la traduction française par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
         </ul>
 
             <li>Mise à jour de la traduction française par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
         </ul>
 
-        <h3><a href="https://www.stoutner.com/privacy-cell-1-6/">1.6</a> (version de code 7)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=2be052aa618f414a18d73f5075b3b3776180bee5">21 Décembre 2021</a> - API minimum 30, API cible 31</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-9/">1.9</a> (version du code 11)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=53f5dd586d2e9eb38280648b9084db15163fe682">5 Décembre 2022</a> - API minimale : 30, API optimale : 33</p>
+        <ul>
+            <li>Passage de <a href="https://redmine.stoutner.com/issues/890">l'API cible à 33</a> (Android 13).</li>
+            <li>Désactivation <a href="https://redmine.stoutner.com/issues/894">du glissement pour rejeter </a> la notification de surveillance en temps réel sur Android 13.</li>
+            <li>Activation <a href="https://redmine.stoutner.com/issues/935">du support de la langue par application</a> sur Android 13.</li>
+            <li>Conservation de <a href="https://redmine.stoutner.com/issues/913">l'emplacement du défilement des paramètres </a>au redémarrage.</li>
+            <li>Mise à jour de la traduction française par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8-1/">1.8.1</a> (version du code 10)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=ab7601a6d91b6035862bb47b1ac259855e3aba3b">8 Août 2022</a> - API minimale : 30, API optimale : 32</p>
+        <ul>
+            <li>Correction d'un bug qui <a href="https://redmine.stoutner.com/issues/864">réactivait les notifications</a> lorsque le réseau changeait.</li>
+            <li>Ajout <a href="https://redmine.stoutner.com/issues/884">d'un texte violet à deux tons</a> sur le thème de Nuit.</li>
+            <li>Mise à jour de la traduction française par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8/">1.8</a> (version du code 9)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=f60b140868c2f0d564657e96d48508b4fbdc546b">14 Juin 2022</a> - API minimale : 30, API optimale : 32</p>
+        <ul>
+            <li>Inclure l'état <a href="https://redmine.stoutner.com/issues/851">du réseau voix</a> dans la détermination de la sécurité globale du réseau cellulaire.</li>
+            <li>Correction d'un bogue <a href="https://redmine.stoutner.com/issues/850">qui empêchait parfois la désactivation des notifications</a>.</li>
+            <li>Passage <a href="https://redmine.stoutner.com/issues/827">de l'API cible à 32</a> (Android 12L).</li>
+            <li>Première traduction allemande complète réalisée par Bernhard G. Keller.</li>
+            <li>Mise à jour de la traduction française par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-7/">1.7</a> (version du code 8)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=b11b84b24c660fac3a69f2dbe4bd615d73811219">24 Mars 2022</a> - API minimale : 30, API optimale : 31</p>
+        <ul>
+            <li>Ajout d'un ajout d'un avertissement lors de la connexion à <a href="https://redmine.stoutner.com/issues/795">des réseaux anciens et peu sûrs</a>.</li>
+            <li>Ajout d'une <a href="https://redmine.stoutner.com/issues/774">entrée listant l'ensemble des protocoles</a>.</li>
+            <li>Mise à jour de la traduction française par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-6/">1.6</a> (version du code 7)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=2be052aa618f414a18d73f5075b3b3776180bee5">21 Décembre 2021</a> - API minimale : 30, API optimale : 31</p>
         <ul>
             <li>Suppression des permissions inutiles ajoutées <a href="https://redmine.stoutner.com/issues/775">androidx.work</a>.</li>
             <li>Correction du service de notification ne pouvant pas <a href="https://redmine.stoutner.com/issues/777">se redémarrer en arrière-plan</a> sur Android 12.</li>
         <ul>
             <li>Suppression des permissions inutiles ajoutées <a href="https://redmine.stoutner.com/issues/775">androidx.work</a>.</li>
             <li>Correction du service de notification ne pouvant pas <a href="https://redmine.stoutner.com/issues/777">se redémarrer en arrière-plan</a> sur Android 12.</li>
             <li>Première traduction complète en russe.</li>
         </ul>
 
             <li>Première traduction complète en russe.</li>
         </ul>
 
-        <h3><a href="https://www.stoutner.com/privacy-cell-1-5/">1.5</a> (version de code 6)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=6ee1470b74f7643f50bf7f1ebfdb578dcac829f2">3 Novembre 2021</a> - API minimum 30, API cible 31</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-5/">1.5</a> (version du code 6)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=6ee1470b74f7643f50bf7f1ebfdb578dcac829f2">3 Novembre 2021</a> - API minimale : 30, API optimale : 31</p>
         <ul>
             <li>Correction d'un <a href="https://redmine.stoutner.com/issues/771">plantage avec la supervision temps-réel </a> si la permission READ_PHONE_STATE était désactivée.</li>
             <li>Page de <a href="https://redmine.stoutner.com/issues/772">l'API cible à 31</a> (Android 12).</li>
             <li>Première traduction française complète effectuée par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
         </ul>
 
         <ul>
             <li>Correction d'un <a href="https://redmine.stoutner.com/issues/771">plantage avec la supervision temps-réel </a> si la permission READ_PHONE_STATE était désactivée.</li>
             <li>Page de <a href="https://redmine.stoutner.com/issues/772">l'API cible à 31</a> (Android 12).</li>
             <li>Première traduction française complète effectuée par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
         </ul>
 
-        <h3><a href="https://www.stoutner.com/privacy-cell-1-4/">1.4</a> (version de code 5)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=a1d76c6e3ed465dd14385c5a37416ee30922021f">18 Octobre 2021</a> - API minimum 30, API cible 30.</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-4/">1.4</a> (version du code 5)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=a1d76c6e3ed465dd14385c5a37416ee30922021f">18 Octobre 2021</a> - API minimale : 30, API optimale : 30.</p>
         <ul>
             <li>Correction de problèmes <a href="https://redmine.stoutner.com/issues/764">de plantage du monitoring en temps réel</a> ou
                 <a href="https://redmine.stoutner.com/issues/763">lorsque le mauvais son est joué</a>.</li>
         <ul>
             <li>Correction de problèmes <a href="https://redmine.stoutner.com/issues/764">de plantage du monitoring en temps réel</a> ou
                 <a href="https://redmine.stoutner.com/issues/763">lorsque le mauvais son est joué</a>.</li>
             <li>Première traduction italienne intégrale réalisée par Francesco Buratti.</li>
         </ul>
 
             <li>Première traduction italienne intégrale réalisée par Francesco Buratti.</li>
         </ul>
 
-        <h3><a href="https://www.stoutner.com/privacy-cell-1-3/">1.3</a> (version de code 4)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=0611c698c5c7163dbe84e4d592fb3bf6150ab1a2">29 Septembre 2021</a> – API minimum 30, API cible 30.</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-3/">1.3</a> (version du code 4)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=0611c698c5c7163dbe84e4d592fb3bf6150ab1a2">29 Septembre 2021</a> – API minimale : 30, API optimale : 30.</p>
         <ul>
             <li>Ajout d'une <a href="https://redmine.stoutner.com/issues/750">option de vérification en temps réel</a>.</li>
             <li>Traduction française mise à jour par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
         </ul>
 
         <ul>
             <li>Ajout d'une <a href="https://redmine.stoutner.com/issues/750">option de vérification en temps réel</a>.</li>
             <li>Traduction française mise à jour par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
         </ul>
 
-        <h3><a href="https://www.stoutner.com/privacy-cell-1-2/">1.2</a> (version de code 3)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=70a8bdb781941d9f433b18a91befe03137d65a6f">15 Septembre 2021</a> - API minimum 30, API cible 30.</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-2/">1.2</a> (version du code 3)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=70a8bdb781941d9f433b18a91befe03137d65a6f">15 Septembre 2021</a> - API minimale : 30, API optimale : 30.</p>
         <ul>
             <li>Ajout d'une option permettant d'utiliser un <a href="https://redmine.stoutner.com/issues/749">barre d'application inférieure</a>.</li>
             <li>Traduction française partielle réalisée par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
         <ul>
             <li>Ajout d'une option permettant d'utiliser un <a href="https://redmine.stoutner.com/issues/749">barre d'application inférieure</a>.</li>
             <li>Traduction française partielle réalisée par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
             <li>Traduction italienne partielle réalisée par Francesco Buratti.</li>
         </ul>
 
             <li>Traduction italienne partielle réalisée par Francesco Buratti.</li>
         </ul>
 
-        <h3><a href="https://www.stoutner.com/privacy-cell-1-1/">1.1</a> (version de code 2)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=62586b5aaccbfa0fa265040513f3984264bd0379">30 Août 2021</a> - API minimum 30, API cible 30.</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-1/">1.1</a> (version du code 2)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=62586b5aaccbfa0fa265040513f3984264bd0379">30 Août 2021</a> - API minimale : 30, API optimale : 30.</p>
         <ul>
             <li>Ajout <a href="https://redmine.stoutner.com/issues/756">de menus d'information</a> pour les types de réseaux.</li>
             <li>Traduction espagnole partielle réalisée par Jose A. León.</li>
         </ul>
 
         <ul>
             <li>Ajout <a href="https://redmine.stoutner.com/issues/756">de menus d'information</a> pour les types de réseaux.</li>
             <li>Traduction espagnole partielle réalisée par Jose A. León.</li>
         </ul>
 
-        <h3><a href="https://www.stoutner.com/privacy-cell-1-0/">1.0</a> (version de code 1)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=13c6fd95ce6986c052fed7918576b77619dc9c2a">25 Août 2021</a> - API minimum 30, API cible 30.</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-0/">1.0</a> (version du code 1)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=13c6fd95ce6986c052fed7918576b77619dc9c2a">25 Août 2021</a> - API minimale : 30, API optimale : 30.</p>
         <ul>
             <li>Version initiale.</li>
         </ul>
     </body>
         <ul>
             <li>Version initiale.</li>
         </ul>
     </body>
-</html>
\ No newline at end of file
+</html>
index 2cf0a526f1db64178eebc298528841733b170404..71f69e6adcf70a1dcf56822902b0802e903c5f27 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -32,6 +32,6 @@
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) est la première version du standard
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000), qui est une évolution 3G du standard 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) est la première version du standard
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000), qui est une évolution 3G du standard 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
-            C'est un concurrent à <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
+            C'est un concurrent à <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 5821a2280a9ec432f5c698a72cc107a538c4e153..83f4506e25672089c36e39236ac7fb8e6840da86 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -31,6 +31,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) est une évolution 3.5G du standard 3G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) est une évolution 3.5G du standard 3G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            C'est un concurrent du protocole <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).
+            C'est un concurrent du protocole <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index d8de191591b7253f00f50cd4cd951a0b688730e6..709a7fb41bed0217a55dfdb03ad3b71ffbce8358 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized release A</a> (EVDO_A) est la deuxième version du standard EVDO,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized revision A</a> (EVDO_A) est la deuxième version du standard EVDO,
             qui est une évolution 3.5G du standard 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
             qui est une évolution 3.5G du standard 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            C'est un concurrent du protocole <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).
+            C'est un concurrent du protocole <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 075909dfb03d038477043fbd268ffd358cbf9590..4c8882c533b4b712a938cc19d316fd670749e1b2 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized release B</a> (EVDO_B) est la troisième version du standard EVDO,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized revision B</a> (EVDO_B) est la troisième version du standard EVDO,
             qui est une évolution 3.5G du standard 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
             qui est une évolution 3.5G du standard 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            C'est un concurrent du protocole <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP).
+            C'est un concurrent du protocole <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 93f87a1d3053473dfae5ea9f44625036ddcce5d8..605bce4025b2d5980e7918a0b1a797c051ade57c 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -31,7 +31,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> est le protocole 5G principal.
             Il s'agit du successeur de la 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> est le protocole 5G principal.
             Il s'agit du successeur de la 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
-            Il s'agit du premier protocole sans fil à inclure généralement la génération (5G) dans son nom.
-        </p>
+            Il s'agit du premier protocole sans fil à inclure généralement la génération (5G) dans son nom.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index ddf7b8642aca6f9b09918c4c482ad5285ce3c2b4..f5ff5946a66daf85fcf82b13acb3978669743c3e 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021-2022 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Cell copyright © 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Cell copyright 2021-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>Licence</h3>
         <p>Privacy Cell est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>. Le texte intégral de la licence se trouve ci-dessous.
 
         <h3>Licence</h3>
         <p>Privacy Cell est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>. Le texte intégral de la licence se trouve ci-dessous.
 
         <h3>Icônes</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> sont dérivés de <code>security</code> et de <code>5g</code>,
 
         <h3>Icônes</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> sont dérivés de <code>security</code> et de <code>5g</code>,
-            qui font partie de l'ensemble d'icônes <a href="https://material.io/icons/">Android Material</a>
+            qui font partie de l'ensemble d'icônes <a href="https://fonts.google.com/icons">Android Material</a>
             et sont publiés sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             et sont publiés sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
-            Le texte intégral de la licence est ci-dessous. Les modifications font l'objet d'un copyright © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Le texte intégral de la licence est ci-dessous. Les modifications font l'objet d'un copyright 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Les images résultantes sont publiées sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> sont dérivés de <code>security</code> et de <code>warning_amber_rounded</code>,
             Les images résultantes sont publiées sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> sont dérivés de <code>security</code> et de <code>warning_amber_rounded</code>,
-            qui font partie de l'ensemble d'icônes <a href="https://material.io/icons/">Android Material</a>
+            qui font partie de l'ensemble d'icônes <a href="https://fonts.google.com/icons">Android Material</a>
             et sont publiés sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             et sont publiés sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
-            Les modifications font l'objet d'un copyright © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Les modifications font l'objet d'un copyright 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Les images résultantes sont publiées sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> sont dérivés de <code>security</code> et de <code>do_not_disturb</code>,
             Les images résultantes sont publiées sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> sont dérivés de <code>security</code> et de <code>do_not_disturb</code>,
-            qui font partie de l'ensemble d'icônes <a href="https://material.io/icons/">Android Material</a>
+            qui font partie de l'ensemble d'icônes <a href="https://fonts.google.com/icons">Android Material</a>
             et sont publiés sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             et sont publiés sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
-            Les modifications font l'objet d'un copyright © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Les modifications font l'objet d'un copyright 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Les images résultantes sont publiées sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> est un dérivé de <code>security</code> et de <code>3g_mobiledata_rounded</code>,
             Les images résultantes sont publiées sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> est un dérivé de <code>security</code> et de <code>3g_mobiledata_rounded</code>,
-            qui font partie de l'ensemble d'icônes <a href="https://material.io/icons/">Android Material</a>
+            qui font partie de l'ensemble d'icônes <a href="https://fonts.google.com/icons">Android Material</a>
             et sont publiés sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             et sont publiés sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Les modifications font l'objet d'un copyright © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            Les modifications font l'objet d'un copyright 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
-        <p>Les icônes suivantes proviennent de l'ensemble d'icônes <a href="https://material.io/icons/">Android Material</a>,
+        <p>Les icônes suivantes proviennent de l'ensemble d'icônes <a href="https://fonts.google.com/icons">Android Material</a>,
             qui sont publiées sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Elles sont inchangés, à l'exception des informations de mise en page comme la couleur et la taille. Certaines d'entre elles ont été renommées pour correspondre à leur utilisation dans le code.
             Les icônes et les noms originaux sont présentés ci-dessous.</p>
             qui sont publiées sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Elles sont inchangés, à l'exception des informations de mise en page comme la couleur et la taille. Certaines d'entre elles ont été renommées pour correspondre à leur utilisation dans le code.
             Les icônes et les noms originaux sont présentés ci-dessous.</p>
@@ -76,8 +76,9 @@
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
-        <p><svg class="icon"><use href="../images/list_alt_rounded.svg#icon"/></svg> list_alt_rounded.</p>
+        <p><svg class="icon"><use href="../images/list_alt_rounded_24.svg#icon"/></svg> list_alt_rounded_24.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
+        <p><svg class="icon"><use href="../images/notification_important_rounded_filled.svg#icon"/></svg> notification_important_<wbr>rounded_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
@@ -1010,4 +1011,6 @@ ANY KIND, either express or
 implied. See the License for
 the specific language governing
 permissions and limitations
 implied. See the License for
 the specific language governing
 permissions and limitations
-under the License.</pre>
\ No newline at end of file
+under the License.</pre>
+    </body>
+</html>
index 9353e50b20a1e8f7b78ce602d75a6f05ac1ac56d..7f7ebac8acc2729ba54d4948e9a163d290286501 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2021-2023 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
         <p>Privacy Cell utilise l'autorisation suivante.</p>
 
         <h3>Lecture du statut et de l'identité du téléphone</h3>
         <p>Privacy Cell utilise l'autorisation suivante.</p>
 
         <h3>Lecture du statut et de l'identité du téléphone</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission. READ_PHONE_STATE</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission.<wbr>READ_<wbr>PHONE_<wbr>STATE</a></p>
         <p>Nécessaire pour déterminer quels protocoles sont utilisés par le réseau de téléphonie mobile.</p>
 
         <p>Nécessaire pour déterminer quels protocoles sont utilisés par le réseau de téléphonie mobile.</p>
 
-        <h3>Exécuter un service en premier plan</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission. FOREGROUND_SERVICE</a></p>
+        <h3>Show Notifications</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#POST_NOTIFICATIONS">android.permission.<wbr>POST_<wbr>NOTIFICATIONS</a></p>
         <p>Permet à Privacy Cell d'afficher une icône de notification de surveillance en temps réel dans la barre d'état.</p>
 
         <p>Permet à Privacy Cell d'afficher une icône de notification de surveillance en temps réel dans la barre d'état.</p>
 
+        <h3>Exécuter un service en premier plan</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE</a></p>
+        <p>Allows Privacy Cell to update the realtime monitoring notification icon when the app is not in the foreground.</p>
+
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_SPECIAL_USE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE_<wbr>SPECIAL_<wbr>USE</a></p>
+        <p>Specifies the type of foreground service.
+            Special Use is for services that don't fit into any of the <a href="https://developer.android.com/about/versions/14/changes/fgs-types-required">standard categories</a>.</p>
+
         <h3>Exécution au démarrage</h3>
         <h3>Exécution au démarrage</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission. RECEIVE_BOOT_COMPLETED</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission.<wbr>RECEIVE_<wbr>BOOT_<wbr>COMPLETED</a></p>
         <p>Permet à Privacy Cell d'activer le service de surveillance en temps réel lorsque le téléphone démarre.</p>
         <p>Permet à Privacy Cell d'activer le service de surveillance en temps réel lorsque le téléphone démarre.</p>
+
+        <h3><a href="https://developer.android.com/about/versions/13/features#runtime-receivers">com.stoutner.privacycell.<wbr>DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a></h3>
+        <p>Ajout automatique à toutes les applications ciblant l'API >= 33 (Android 13) pour empêcher les autres applications de se connecter aux destinataires dynamiques sans autorisation explicite.</p>
     </body>
     </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/app/src/main/assets/images/list_alt_rounded.svg b/app/src/main/assets/images/list_alt_rounded.svg
deleted file mode 100644 (file)
index c07743c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-
-<!--
-  This file is a modified version of `list_alt_rounded`, which is part of the Android Material icon set and is released under the Apache License 2.0.
-
-  Changes copyright © 2021 Soren Stoutner <soren@stoutner.com>.  The resulting file is released under the GPLv3+ license.
-
-  This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
-
-  Privacy Cell 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.
-
-  Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<svg
-    xmlns="http://www.w3.org/2000/svg"
-    viewBox="0 0 24 24"
-    id="icon" >
-
-    <path
-        d="M12 9h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1s.45 1 1 1zm0 4h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1s.45 1 1 1zm0 4h4c.55 0 1-.45 1-1s-.45-1-1-1h-4c-.55 0-1 .45-1 1s.45 1 1 1zM7 7h2v2H7zm0 4h2v2H7zm0 4h2v2H7zM20 3H4c-.55 0-1 .45-1 1v16c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-1 16H5V5h14v14z" />
-</svg>
diff --git a/app/src/main/assets/images/list_alt_rounded_24.svg b/app/src/main/assets/images/list_alt_rounded_24.svg
new file mode 100644 (file)
index 0000000..c888193
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+
+<!--
+  This file is a modified version of `list_alt_rounded_24`, which is part of the Android Material icon set and is released under the Apache License 2.0.
+
+  Changes copyright 2022 Soren Stoutner <soren@stoutner.com>.  The resulting file is released under the GPLv3+ license.
+
+  This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+
+  Privacy Cell 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.
+
+  Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<svg
+    xmlns="http://www.w3.org/2000/svg"
+    viewBox="0 0 24 24"
+    id="icon" >
+
+    <path
+        d="M5 21q-.825 0-1.413-.587Q3 19.825 3 19V5q0-.825.587-1.413Q4.175 3 5 3h14q.825 0 1.413.587Q21 4.175 21 5v14q0 .825-.587 1.413Q19.825 21 19 21Zm0-2h14V5H5v14Zm3-2q.425 0 .713-.288Q9 16.425 9 16t-.287-.713Q8.425 15 8 15t-.713.287Q7 15.575 7 16t.287.712Q7.575 17 8 17Zm0-4q.425 0 .713-.288Q9 12.425 9 12t-.287-.713Q8.425 11 8 11t-.713.287Q7 11.575 7 12t.287.712Q7.575 13 8 13Zm0-4q.425 0 .713-.288Q9 8.425 9 8t-.287-.713Q8.425 7 8 7t-.713.287Q7 7.575 7 8t.287.712Q7.575 9 8 9Zm4 8h4q.425 0 .712-.288Q17 16.425 17 16t-.288-.713Q16.425 15 16 15h-4q-.425 0-.712.287Q11 15.575 11 16t.288.712Q11.575 17 12 17Zm0-4h4q.425 0 .712-.288Q17 12.425 17 12t-.288-.713Q16.425 11 16 11h-4q-.425 0-.712.287Q11 11.575 11 12t.288.712Q11.575 13 12 13Zm0-4h4q.425 0 .712-.288Q17 8.425 17 8t-.288-.713Q16.425 7 16 7h-4q-.425 0-.712.287Q11 7.575 11 8t.288.712Q11.575 9 12 9ZM5 19V5v14Z" />
+</svg>
diff --git a/app/src/main/assets/images/notification_important_rounded_filled.svg b/app/src/main/assets/images/notification_important_rounded_filled.svg
new file mode 100644 (file)
index 0000000..202926a
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+
+<!--
+  This file is a modified version of `notification_importang_rounded_filled`, which is part of the Android Material icon set and is released under the Apache License 2.0.
+
+  Changes copyright 2022 Soren Stoutner <soren@stoutner.com>.  The resulting file is released under the GPLv3+ license.
+
+  This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+
+  Privacy Cell 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.
+
+  Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<svg
+    xmlns="http://www.w3.org/2000/svg"
+    viewBox="0 0 48 48"
+    id="icon">
+
+    <path
+        d="M24 26.6q.65 0 1.075-.425.425-.425.425-1.075v-7.6q0-.65-.425-1.075Q24.65 16 24 16q-.65 0-1.075.425-.425.425-.425 1.075v7.6q0 .65.425 1.075.425.425 1.075.425Zm0 5.4q.7 0 1.175-.475.475-.475.475-1.175 0-.7-.475-1.175Q24.7 28.7 24 28.7q-.7 0-1.175.475-.475.475-.475 1.175 0 .7.475 1.175Q23.3 32 24 32ZM9.5 38q-.65 0-1.075-.425Q8 37.15 8 36.5q0-.65.425-1.075Q8.85 35 9.5 35h2.7V19.7q0-4.1 2.475-7.425T21.2 8.1V6.65q0-1.15.825-1.9T24 4q1.15 0 1.975.75.825.75.825 1.9V8.1q4.05.85 6.55 4.175 2.5 3.325 2.5 7.425V35h2.65q.65 0 1.075.425Q40 35.85 40 36.5q0 .65-.425 1.075Q39.15 38 38.5 38ZM24 44q-1.6 0-2.8-1.175Q20 41.65 20 40h8q0 1.65-1.175 2.825Q25.65 44 24 44Z" />
+</svg>
index 8a9b2b67011999fb23379516b5ebc1f956020723..7d707ee076bf7e2e4f1a0a8bd686d74c782b54e0 100644 (file)
@@ -3,7 +3,7 @@
 <!--
   This file is a modified version of `payments_rounded`, which is part of the Android Material icon set and is released under the Apache License 2.0.
 
 <!--
   This file is a modified version of `payments_rounded`, which is part of the Android Material icon set and is released under the Apache License 2.0.
 
-  Changes copyright © 2021 Soren Stoutner <soren@stoutner.com>.  The resulting file is released under the GPLv3+ license.
+  Changes copyright 2021 Soren Stoutner <soren@stoutner.com>.  The resulting file is released under the GPLv3+ license.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -27,4 +27,4 @@
 
     <path
         d="M23,8v10c0,1.1-0.9,2-2,2H5c-0.55,0-1-0.45-1-1c0-0.55,0.45-1,1-1h16V8c0-0.55,0.45-1,1-1S23,7.45,23,8z M4,16 c-1.66,0-3-1.34-3-3V7c0-1.66,1.34-3,3-3h12c1.66,0,3,1.34,3,3v7c0,1.1-0.9,2-2,2H4z M7,10c0,1.66,1.34,3,3,3s3-1.34,3-3 s-1.34-3-3-3S7,8.34,7,10z" />
 
     <path
         d="M23,8v10c0,1.1-0.9,2-2,2H5c-0.55,0-1-0.45-1-1c0-0.55,0.45-1,1-1h16V8c0-0.55,0.45-1,1-1S23,7.45,23,8z M4,16 c-1.66,0-3-1.34-3-3V7c0-1.66,1.34-3,3-3h12c1.66,0,3,1.34,3,3v7c0,1.1-0.9,2-2,2H4z M7,10c0,1.66,1.34,3,3,3s3-1.34,3-3 s-1.34-3-3-3S7,8.34,7,10z" />
-</svg>
\ No newline at end of file
+</svg>
index 318b4c02d8b91bc32a1fe47eddc4027d7a129001..557229d97e3071d3925d7be16d69ed99fe92e186 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021-2022 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2021-2023 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <h3>1.7 (versione codice 8)</h3>
-        <p>24 Marzo 2022 - minima API 30, target API 31</p>
+        <h3>1.10 (versione codice 12)</h3>
+        <p>30 Ottobre 2023 - minima API 30, target API 34</p>
+        <ul>
+            <li>Create an optional <a href="https://redmine.stoutner.com/issues/988">monochrome icon</a> (can be used in Android >= 13).</li>
+            <li>Allow Privacy Cell to be included in <a href="https://redmine.stoutner.com/issues/1001">system backups</a>.</li>
+            <li>Bump the <a href="https://redmine.stoutner.com/issues/1104">target API to 34</a> (Android 14).</li>
+            <li>Document <a href="https://redmine.stoutner.com/issues/940">permissions needed</a> for <a href="https://redmine.stoutner.com/issues/942">newer versions of Android</a>.</li>
+            <li>Repopulate the realtime monitoring notification every <a href="https://redmine.stoutner.com/issues/1105">15 minutes</a>.</li>
+            <li>Aggiornamento della traduzione in lingua Italiana fornito da Francesco Buratti.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-9/">1.9</a> (versione codice 11)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=53f5dd586d2e9eb38280648b9084db15163fe682">5 Dicembre 2022</a> - minima API 30, target API 33</p>
+        <ul>
+            <li>Modifica della <a href="https://redmine.stoutner.com/issues/890">target API a 33</a> (Android 13).</li>
+            <li>Disabilitata la possibilità di <a href="https://redmine.stoutner.com/issues/894">effettuare lo swipe per eliminare</a> la notifica di monitoraggio in tempo reale su Android 13.</li>
+            <li>Abilitato il <a href="https://redmine.stoutner.com/issues/935">supporto della lingua per-app</a> su Android 13.</li>
+            <li>Mantenimento della <a href="https://redmine.stoutner.com/issues/913">posizione dello scorrimento delle impostazioni</a> al riavvio.</li>
+            <li>Aggiornamento della traduzione in lingua Italiana fornito da Francesco Buratti.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8-1/">1.8.1</a> (versione codice 10)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=ab7601a6d91b6035862bb47b1ac259855e3aba3b">8 Agosto 2022</a> - minima API 30, target API 32</p>
+        <ul>
+            <li>Correzione di un baco che <a href="https://redmine.stoutner.com/issues/864">riabilitava le notifiche</a> quando la rete cambiava.</li>
+            <li>Aggiunta di <a href="https://redmine.stoutner.com/issues/884">un testo con doppio tono di viola</a> al tema scuro.</li>
+            <li>Aggiornamento della traduzione in lingua Italiana fornito da Francesco Buratti.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8/">1.8</a> (versione codice 9)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=f60b140868c2f0d564657e96d48508b4fbdc546b">14 Giugno 2022</a> - minima API 30, target API 32</p>
+        <ul>
+            <li>Incluso lo <a href="https://redmine.stoutner.com/issues/851">stato della rete voce</a> nella determinazione della sicurezza complessiva della rete.</li>
+            <li>Correzione di un baco che talvolta <a href="https://redmine.stoutner.com/issues/850">impediva di disabilitare le notifiche</a>.</li>
+            <li>Spostamento della <a href="https://redmine.stoutner.com/issues/827">target API a 32</a> (Android 12L).</li>
+            <li>Prima traduzione completa in lingua tedesca fornita da Bernhard G. Keller.</li>
+            <li>Aggiornamento della traduzione in lingua Italiana fornito da Francesco Buratti.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-7/">1.7</a> (versione codice 8)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=b11b84b24c660fac3a69f2dbe4bd615d73811219">24 Marzo 2022</a> - minima API 30, target API 31</p>
         <ul>
             <li>Aggiunta di un avviso nel caso in cui ci si connetta a <a href="https://redmine.stoutner.com/issues/795">reti più vecchie e insicure</a>.</li>
             <li>Aggiunta di una <a href="https://redmine.stoutner.com/issues/774">scheda relativa ai protocolli</a>.</li>
         <ul>
             <li>Aggiunta di un avviso nel caso in cui ci si connetta a <a href="https://redmine.stoutner.com/issues/795">reti più vecchie e insicure</a>.</li>
             <li>Aggiunta di una <a href="https://redmine.stoutner.com/issues/774">scheda relativa ai protocolli</a>.</li>
             <li>Primo rilascio.</li>
         </ul>
     </body>
             <li>Primo rilascio.</li>
         </ul>
     </body>
-</html>
\ No newline at end of file
+</html>
index a5ea227bdcef987bbf54e6e37e7ede78b9c5c548..af5dcdbbad21a48dac0d3acf01e0078f79f1309f 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -32,6 +32,6 @@
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) è la prima versione dello standard
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000), che è il primo aggiornamento 3G del vecchio protocollo 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) è la prima versione dello standard
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000), che è il primo aggiornamento 3G del vecchio protocollo 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
-            E' il concorrente del protocollo <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
+            E' il concorrente del protocollo <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 343fc004d5c780ca12390841f0ce1c06a7b7d4fd..b1bcd5ab13169ad3ff4b3da4b0282fd874fe1d47 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -31,6 +31,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) è una evoluzione 3.5G dello standard 3G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) è una evoluzione 3.5G dello standard 3G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            E' un concorrente del protocollo <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).
+            E' un concorrente del protocollo <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 978ea21314b5cde106387a83bbe42ca2c6009ef8..aede48031ce2f90f93b3f41813ff3f671951572e 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized release A</a> (EVDO_A) è la seconda release dello standard EVDO,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized revision A</a> (EVDO_A) è la seconda release dello standard EVDO,
             che è una evoluzione 3.5G dello standard 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
             che è una evoluzione 3.5G dello standard 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            E' un concorrente del protocollo <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).
+            E' un concorrente del protocollo <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index fabbc25b910d99ed0b34fa00de29b3fe785a9776..b022ff2970eb959b47791f7b0f3764a4e227a5cb 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -29,8 +29,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized release B</a> (EVDO_B) è la terza release dello standard EVDO,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized revision B</a> (EVDO_B) è la terza release dello standard EVDO,
             che è una evoluzione 3.5G dello standard 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
             che è una evoluzione 3.5G dello standard 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            E' un concorrente del protocollo <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP).
+            E' un concorrente del protocollo <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 468b7b9853ad87837099ebb1d9acd9134a405623..70271d46c2f473df1b13506bfe96baa1b4e3a70d 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -31,7 +31,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> è il protocollo principale 5G.
             E' il successore del protocollo 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> è il protocollo principale 5G.
             E' il successore del protocollo 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
-            E' il primo protocollo wireless che contiene la generazione (in questo caso 5G) all'interno del proprio nome.
-        </p>
+            E' il primo protocollo wireless che contiene la generazione (in questo caso 5G) all'interno del proprio nome.</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 4ac32f11c882fcd394b02224329346ddd35b9033..3d63167d7b350e205d9233cbb5f9027fb6662088 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021-2022 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Cell copyright © 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Cell copyright 2021-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>Licenza</h3>
         <p>Privacy Cell è rilasciato con <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>. Il testo completo è riportato di seguito.
 
         <h3>Licenza</h3>
         <p>Privacy Cell è rilasciato con <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>. Il testo completo è riportato di seguito.
 
         <h3>Icone</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> sono derivate da <code>security</code> e <code>5g</code>,
 
         <h3>Icone</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> sono derivate da <code>security</code> e <code>5g</code>,
-            che sono parte del <a href="https://material.io/icons/">set di icone Android Material</a> e sono rilasciate sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
-            Il testo completo della licenza è riportato qui sotto. Il copyright delle modifiche © 2016, 2021-2022 appartiene a <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            che sono parte del <a href="https://fonts.google.com/icons">set di icone Android Material</a> e sono rilasciate sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            Il testo completo della licenza è riportato qui sotto. Il copyright delle modifiche 2016, 2021-2022 appartiene a <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Le immagini risultanti sono rilasciate sotto la <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> sono derivate da <code>security</code> e <code>warning_amber_rounded</code>,
             Le immagini risultanti sono rilasciate sotto la <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> sono derivate da <code>security</code> e <code>warning_amber_rounded</code>,
-            che sono parte del <a href="https://material.io/icons/">set di icone Android Material</a> e sono rilasciate sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
-            Il copyright delle modifiche © 2016, 2022 appartiene a <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            che sono parte del <a href="https://fonts.google.com/icons">set di icone Android Material</a> e sono rilasciate sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            Il copyright delle modifiche 2016, 2022 appartiene a <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Le immagini risultanti sono rilasciate sotto la <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> sono derivate da <code>security</code> e <code>do_not_disturb</code>,
             Le immagini risultanti sono rilasciate sotto la <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> sono derivate da <code>security</code> e <code>do_not_disturb</code>,
-            che sono parte del <a href="https://material.io/icons/">set di icone Android Material</a> e sono rilasciate sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
-            Il copyright delle modifiche © 2016, 2021-2022 appartiene a <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            che sono parte del <a href="https://fonts.google.com/icons">set di icone Android Material</a> e sono rilasciate sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            Il copyright delle modifiche 2016, 2021-2022 appartiene a <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Le immagini risultanti sono rilasciate sotto la <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> è derivata da <code>security</code> e <code>3g_mobiledata_rounded</code>,
             Le immagini risultanti sono rilasciate sotto la <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> è derivata da <code>security</code> e <code>3g_mobiledata_rounded</code>,
-            che sono parte del <a href="https://material.io/icons/">set di icone Android Material</a> e sono rilasciate sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
-            Il copyright delle modifiche © 2016, 2022 appartiene a <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            che sono parte del <a href="https://fonts.google.com/icons">set di icone Android Material</a> e sono rilasciate sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            Il copyright delle modifiche 2016, 2022 appartiene a <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'immagine risultante è rilasciata sotto la <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
             L'immagine risultante è rilasciata sotto la <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
-        <p>Le icone seguenti provengono dal <a href="https://material.io/icons/">set di icone Android Material</a>,
+        <p>Le icone seguenti provengono dal <a href="https://fonts.google.com/icons">set di icone Android Material</a>,
             che è rilasciato sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Non sono state modificate ad eccezione delle informazioni del layout come il colore e le dimensioni. Alcune sono state rinominate per essere coerenti con il loro utilizzo nel codice.
             Le icone originali e i loro nomi sono riportate di seguito.</p>
             che è rilasciato sotto la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Non sono state modificate ad eccezione delle informazioni del layout come il colore e le dimensioni. Alcune sono state rinominate per essere coerenti con il loro utilizzo nel codice.
             Le icone originali e i loro nomi sono riportate di seguito.</p>
@@ -72,8 +72,9 @@
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
-        <p><svg class="icon"><use href="../images/list_alt_rounded.svg#icon"/></svg> list_alt_rounded.</p>
+        <p><svg class="icon"><use href="../images/list_alt_rounded_24.svg#icon"/></svg> list_alt_rounded_24.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
+        <p><svg class="icon"><use href="../images/notification_important_rounded_filled.svg#icon"/></svg> notification_important_<wbr>rounded_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
@@ -1006,4 +1007,6 @@ ANY KIND, either express or
 implied. See the License for
 the specific language governing
 permissions and limitations
 implied. See the License for
 the specific language governing
 permissions and limitations
-under the License.</pre>
\ No newline at end of file
+under the License.</pre>
+    </body>
+</html>
index f904133b25e40d0697a5acf260bb284e979fbf5b..bd71ddb04d14606b020aa4213146c0bfaf739024 100644 (file)
@@ -1,7 +1,7 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
 
-  Translation 2021 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2021-2023 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
         <p>Privacy Cell richiede le seguenti autorizzazioni.</p>
 
         <h3>Lettura dello stato e dell'identità del telefono</h3>
         <p>Privacy Cell richiede le seguenti autorizzazioni.</p>
 
         <h3>Lettura dello stato e dell'identità del telefono</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission. READ_PHONE_STATE</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission.<wbr>READ_<wbr>PHONE_<wbr>STATE</a></p>
         <p>Richiesta per determinare i protocolli utilizzati dalla rete.</p>
 
         <p>Richiesta per determinare i protocolli utilizzati dalla rete.</p>
 
-        <h3>Run foreground service</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission. FOREGROUND_SERVICE</a></p>
-        <p>Allows Privacy Cell to display a realtime monitoring notification icon in the status bar.</p>
+        <h3>Mostra notifiche</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#POST_NOTIFICATIONS">android.permission.<wbr>POST_<wbr>NOTIFICATIONS</a></p>
+        <p>Permette a Privacy Cell di mostrare una icona di notifica di monitoraggio in tempo reale nella barra di stato.</p>
 
 
-        <h3>Run at startup</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission. RECEIVE_BOOT_COMPLETED</a></p>
-        <p>Allows Privacy Cell to enable the realtime monitoring service when the phone boots.</p>
+        <h3>Esegui il servizio in primo piano</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE</a></p>
+        <p>Permette a Privacy Cell di aggiornare licona di notifica di monitoraggio in tempo reale anche quando la app non è in primo piano.</p>
+
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_SPECIAL_USE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE_<wbr>SPECIAL_<wbr>USE</a></p>
+        <p>Specifica il tipo di servizio in primo piano.
+            L'utilizzo speciale è per i servizi che non ricadono in nessuna delle <a href="https://developer.android.com/about/versions/14/changes/fgs-types-required">categorie standard</a>.</p>
+
+        <h3>Esegui all'avvio</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission.<wbr>RECEIVE_<wbr>BOOT_<wbr>COMPLETED</a></p>
+        <p>Permette a Privacy Cell di abilitare il servizio di monitoraggio in tempo reale durante l'avvio del dispositivo.</p>
+
+        <h3><a href="https://developer.android.com/about/versions/13/features#runtime-receivers">com.stoutner.privacycell.<wbr>DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a></h3>
+        <p>Aggiunta automaticamente a tutte le App che hanno come target API >= 33 (Android 13) per impedire ad altre App di connettersi ai ricevitori dinamici senza una autorizzazione esplicita.</p>
     </body>
     </body>
-</html>
\ No newline at end of file
+</html>
index a7849375d89240372ffac2f8c70acb4f3ee31a46..ac7586838c2b6d21568f77809daba40b2798046a 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     </head>
 
     <body>
     </head>
 
     <body>
-        <h3>1.7 (код версии 8)</h3>
-        <p>24 мая 2022 года - минимальный API 30, целевой API 31</p>
+        <h3>1.10 (код версии 12)</h3>
+        <p>30 октября 2023 года - минимальный API 30, целевой API 34</p>
+        <ul>
+            <li>Создан дополнительный <a href="https://redmine.stoutner.com/issues/988">монохромный значок</a> (может использоваться в Android >= 13).</li>
+            <li>Разрешено включать Privacy Cell в <a href="https://redmine.stoutner.com/issues/1001">системные резервные копии</a>.</li>
+            <li>Целевой API <a href="https://redmine.stoutner.com/issues/1104">повышен до 34</a> (Android 14).</li>
+            <li>Документированы <a href="https://redmine.stoutner.com/issues/940">необходимые разрешения</a> для <a href="https://redmine.stoutner.com/issues/942">новых версий Android</a>.</li>
+            <li>Повторное формирование уведомления о мониторинге в реальном времени каждые <a href="https://redmine.stoutner.com/issues/1105">15 минут</a>.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-9/">1.9</a> (код версии 11)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=53f5dd586d2e9eb38280648b9084db15163fe682">5 декабря 2022 года</a> - минимальный API 30, целевой API 33</p>
+        <ul>
+            <li>Целевой API <a href="https://redmine.stoutner.com/issues/890">повышен до 33</a> (Android 13).</li>
+            <li>Отключен <a href="https://redmine.stoutner.com/issues/894">свайп уведомления</a> о мониторинге в реальном времени на Android 13.</li>
+            <li>Включена <a href="https://redmine.stoutner.com/issues/935">поддержка языков для каждого приложения</a> на Android 13.</li>
+            <li>При перезапуске <a href="https://redmine.stoutner.com/issues/913">сохраняется положение прокрутки</a> настроек.</li>
+            <li>Первый полный перевод на русский язык.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8-1/">1.8.1</a> (код версии 10)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=ab7601a6d91b6035862bb47b1ac259855e3aba3b">8 августа 2022 года</a> - минимальный API 30, целевой API 32</p>
+        <ul>
+            <li>Исправлена ошибка, <a href="https://redmine.stoutner.com/issues/864">из-за которой при изменении сети</a> повторно включались уведомления.</li>
+            <li>Для ночной темы <a href="https://redmine.stoutner.com/issues/884">добавлен двухтоновый фиолетовый текст</a>.</li>
+            <li>Первый полный перевод на русский язык.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-8/">1.8</a> (код версии 9)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=f60b140868c2f0d564657e96d48508b4fbdc546b">14 июня 2022 года</a> - минимальный API 30, целевой API 32</p>
+        <ul>
+            <li>Теперь при определении общей безопасности сотовой сети <a href="https://redmine.stoutner.com/issues/851">будет учитываться статус голосовой сети</a>.</li>
+            <li>Исправлена ошибка, из-за которой иногда <a href="https://redmine.stoutner.com/issues/850">не удавалось отключить уведомления</a>.</li>
+            <li>Повышен <a href="https://redmine.stoutner.com/issues/827">целевой API до 32</a> (Android 12L).</li>
+            <li>Первый полный перевод на немецкий язык, выполненный Бернхардом Г. Келлером (Bernhard G. Keller).</li>
+            <li>Первый полный перевод на русский язык.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-7/">1.7</a> (код версии 8)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=b11b84b24c660fac3a69f2dbe4bd615d73811219">24 мая 2022 года</a> - минимальный API 30, целевой API 31</p>
         <ul>
             <li>Добавлено предупреждение при подключении к <a href="https://redmine.stoutner.com/issues/795">устаревшим, небезопасным сетям</a>.</li>
             <li>Добавлена <a href="https://redmine.stoutner.com/issues/774">опция протоколирования</a>.</li>
         <ul>
             <li>Добавлено предупреждение при подключении к <a href="https://redmine.stoutner.com/issues/795">устаревшим, небезопасным сетям</a>.</li>
             <li>Добавлена <a href="https://redmine.stoutner.com/issues/774">опция протоколирования</a>.</li>
             <li>Первый релиз.</li>
         </ul>
     </body>
             <li>Первый релиз.</li>
         </ul>
     </body>
-</html>
\ No newline at end of file
+</html>
index f584e1e612d91f7775d81c475761e9e7da18dd0d..f6eaba15b18da48e710c956c9da242ef820fce03 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -30,6 +30,6 @@
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) - это первая версия стандарта
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000), который является обновлением стандарта 3G более старого стандарта 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
         <p><a href="https://en.wikipedia.org/wiki/CDMA2000#1X">1 times Radio Transmission Technology</a> (1xRTT) - это первая версия стандарта
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000), который является обновлением стандарта 3G более старого стандарта 2G
             <a href="https://en.wikipedia.org/wiki/CdmaOne">Code-Division Multiple Access One</a> (CDMAOne).
-            Он является конкурентом <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).
+            Он является конкурентом <a href="https://en.wikipedia.org/wiki/UMTS">Universal Mobile Telecommunications System</a> (UMTS).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 1d26929d0a7600b7d40e07107efcceb18f998bda..15ebf060335f86bc5180c50fa131af22f719649f 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,6 +29,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) - это развитие стандарта 3G в стандарт 3.5G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rel._0_(TIA-856_Release_0)">Evolution-Data Optimized release 0</a> (EVDO_0) - это развитие стандарта 3G в стандарт 3.5G
             <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            Он является конкурентом <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).
+            Он является конкурентом <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index 4ae33ddc7011d7f5285932dbb5b74df52d2ecf76..701e5f62a69b8be3ebd670de5c9821fbc28df869 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -27,8 +27,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized release A</a> (EVDO_A) - это вторая версия стандарта EVDO,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._A_(TIA-856_Revision_A)">Evolution-Data Optimized revision A</a> (EVDO_A) - это вторая версия стандарта EVDO,
             который является развитием стандарта 3.5G из 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
             который является развитием стандарта 3.5G из 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            Он является конкурентом <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).
+            Он является конкурентом <a href="https://en.wikipedia.org/wiki/High_Speed_Packet_Access">High Speed Packet Access</a> (HSPA).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index a00bb1a4efee31976e70f810de74637c6f37f111..70dcced73e397c37700359537949ffb2f2685cb5 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -27,8 +27,8 @@
     </head>
 
     <body>
     </head>
 
     <body>
-        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized release B</a> (EVDO_B) - это третий релиз стандарта EVDO,
+        <p><a href="https://en.wikipedia.org/wiki/Evolution-Data_Optimized#EV-DO_Rev._B_(TIA-856_Revision_B)">Evolution-Data Optimized revision B</a> (EVDO_B) - это третий релиз стандарта EVDO,
             который является развитием стандарта 3.5G из 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
             который является развитием стандарта 3.5G из 3G <a href="https://en.wikipedia.org/wiki/CDMA2000">Code-Division Multiple Access 2000</a> (CDMA2000).
-            Он является конкурентом <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP).
+            Он является конкурентом <a href="https://en.wikipedia.org/wiki/Evolved_High_Speed_Packet_Access">High Speed Packet Access Plus</a> (HSPAP).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index faab2d36f0147fb302251b2463cab7b406ae053f..b3c6e6024edc169a64f78b136905ac9bdd59502d 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,7 +29,6 @@
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> это основной протокол 5G.
             Он является преемником 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
     <body>
         <p><a href="https://en.wikipedia.org/wiki/5G_NR">5G New Radio</a> это основной протокол 5G.
             Он является преемником 4G <a href="https://en.wikipedia.org/wiki/LTE_(telecommunication)">Long-Term Evolution</a> (LTE).
-            Это первый протокол беспроводной связи, в названии которого присутствует слово "поколение" (5G).
-        </p>
+            Это первый протокол беспроводной связи, в названии которого присутствует слово "поколение" (5G).</p>
     </body>
 </html>
\ No newline at end of file
     </body>
 </html>
\ No newline at end of file
index a45c0e73b190da8317fc11423b4982ac257bb3a5..68c6ec509f2255c28243d7e8bdebb7196331b452 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -28,7 +28,7 @@
 
     <body>
         <h3>Авторские права</h3>
 
     <body>
         <h3>Авторские права</h3>
-        <p>Авторские права Privacy Cell © 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Авторские права Privacy Cell 2021-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>Лицензия</h3>
         <p>Privacy Cell выпускается под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>. Полный текст лицензии приведен ниже.
 
         <h3>Лицензия</h3>
         <p>Privacy Cell выпускается под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>. Полный текст лицензии приведен ниже.
 
         <h3>Значки</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> являются производными от <code>security</code> и <code>5g</code>,
 
         <h3>Значки</h3>
         <p><img class="left" src="../images/secure.svg"/> <img class="left" src="../images/secure_notification.svg"/> являются производными от <code>security</code> и <code>5g</code>,
-            которые являются частью набора значков <a href="https://material.io/icons/">Android Material</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
-            Полный текст лицензии приведен ниже. Модификации авторских прав © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            которые являются частью набора значков <a href="https://fonts.google.com/icons">Android Material</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
+            Полный текст лицензии приведен ниже. Модификации авторских прав 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Получившиеся изображения выпускаются под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> являются производными от <code>security</code> и <code>warning_amber_rounded</code>,
             Получившиеся изображения выпускаются под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><img class="left" src="../images/insecure.svg"> <img class="left" src="../images/insecure_notification.svg"/> являются производными от <code>security</code> и <code>warning_amber_rounded</code>,
-            которые являются частью набора значков <a href="https://material.io/icons/">Android Material</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
-            Модификации авторских прав © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            которые являются частью набора значков <a href="https://fonts.google.com/icons">Android Material</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
+            Модификации авторских прав 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Получившиеся изображения выпускаются под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> являются производными от <code>security</code> и <code>do_not_disturb</code>,
             Получившиеся изображения выпускаются под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated.svg"/> <img class="left" src="../images/antiquated_notification.svg"/> являются производными от <code>security</code> и <code>do_not_disturb</code>,
-            которые являются частью набора значков <a href="https://material.io/icons/">Android Material</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
-            Модификации авторских прав © 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            которые являются частью набора значков <a href="https://fonts.google.com/icons">Android Material</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
+            Модификации авторских прав 2016, 2021-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Получившиеся изображения выпускаются под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> является производной от <code>security</code> и <code>3g_mobiledata_rounded</code>,
             Получившиеся изображения выпускаются под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><img class="left" src="../images/antiquated_3g.svg"/> является производной от <code>security</code> и <code>3g_mobiledata_rounded</code>,
-            которые являются частью набора значков <a href="https://material.io/icons/">Android Material</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
-            Модификации авторских прав © 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            которые являются частью набора значков <a href="https://fonts.google.com/icons">Android Material</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
+            Модификации авторских прав 2016, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Получившееся изображение выпускается под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
             Получившееся изображение выпускается под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
-        <p>Следующие значки взяты из набора значков <a href="https://material.io/icons/">Android Material</a>,
+        <p>Следующие значки взяты из набора значков <a href="https://fonts.google.com/icons">Android Material</a>,
             который выпущен под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
             Они не изменились, за исключением информации о макете, такой как цвет и размер. Некоторые из них были переименованы, чтобы обеспечить их соответствие использованию в коде.
             Оригинальные значки и их названия показаны ниже.</p>
             который выпущен под <a href ="https://www.apache.org/licenses/LICENSE-2.0">лицензией Apache 2.0</a>.
             Они не изменились, за исключением информации о макете, такой как цвет и размер. Некоторые из них были переименованы, чтобы обеспечить их соответствие использованию в коде.
             Оригинальные значки и их названия показаны ниже.</p>
@@ -70,8 +70,9 @@
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
         <p><svg class="icon"><use href="../images/format_list_bulleted_rounded.svg#icon"/></svg> format_list_bulleted_rounded.</p>
         <p><svg class="icon"><use href="../images/forum_rounded.svg#icon"/></svg> forum_rounded.</p>
         <p><svg class="icon"><use href="../images/groups_filled.svg#icon"/></svg> groups_filled.</p>
-        <p><svg class="icon"><use href="../images/list_alt_rounded.svg#icon"/></svg> list_alt_rounded.</p>
+        <p><svg class="icon"><use href="../images/list_alt_rounded_24.svg#icon"/></svg> list_alt_rounded_24.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
         <p><svg class="icon"><use href="../images/map_rounded.svg#icon"/></svg> map_rounded.</p>
+        <p><svg class="icon"><use href="../images/notification_important_rounded_filled.svg#icon"/></svg> notification_important_<wbr>rounded_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
         <p><svg class="icon"><use href="../images/payments_rounded.svg#icon"/></svg> payments_rounded.</p>
         <p><svg class="icon"><use href="../images/phone_android_outlined.svg#icon"/></svg> phone_android_outlined.</p>
         <p><svg class="icon"><use href="../images/policy_filled.svg#icon"/></svg> policy_filled.</p>
@@ -1004,4 +1005,6 @@ ANY KIND, either express or
 implied. See the License for
 the specific language governing
 permissions and limitations
 implied. See the License for
 the specific language governing
 permissions and limitations
-under the License.</pre>
\ No newline at end of file
+under the License.</pre>
+    </body>
+</html>
index 13da9bf58e28245df00b8bd45a4031b2a700ed1e..9f8b4897614adbac339bffe352b2be22de2415a2 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
         <p>Privacy Cell использует следующие разрешения:</p>
 
         <h3>Чтение статуса и идентификатора телефона</h3>
         <p>Privacy Cell использует следующие разрешения:</p>
 
         <h3>Чтение статуса и идентификатора телефона</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission. READ_PHONE_STATE</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#READ_PHONE_STATE">android.permission.<wbr>READ_<wbr>PHONE_<wbr>STATE</a></p>
         <p>Необходим для определения используемых протоколов в сети сотовой связи.</p>
 
         <p>Необходим для определения используемых протоколов в сети сотовой связи.</p>
 
-        <h3>Ð\97апÑ\83Ñ\81к Ñ\84оновой Ñ\81лÑ\83жбÑ\8b</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission. FOREGROUND_SERVICE</a></p>
+        <h3>Ð\9eÑ\82обÑ\80ажение Ñ\83ведомлений</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#POST_NOTIFICATIONS">android.permission.<wbr>POST_<wbr>NOTIFICATIONS</a></p>
         <p>Разрешает Privacy Cell отображать значок уведомления о мониторинге в реальном времени в строке состояния.</p>
 
         <p>Разрешает Privacy Cell отображать значок уведомления о мониторинге в реальном времени в строке состояния.</p>
 
+        <h3>Запуск фоновой службы</h3>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE</a></p>
+        <p>Разрешает Privacy Cell обновлять значок уведомления о мониторинге в реальном времени при работе приложения в фоновом режиме.</p>
+
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_SPECIAL_USE">android.permission.<wbr>FOREGROUND_<wbr>SERVICE_<wbr>SPECIAL_<wbr>USE</a></p>
+        <p>Определяет тип сервиса фонового режима.
+            Специальное использование предназначено для сервисов, которые не соответствуют ни одной из
+            <a href="https://developer.android.com/about/versions/14/changes/fgs-types-required">стандартных категорий</a>.</p>
+
         <h3>Запуск при загрузке</h3>
         <h3>Запуск при загрузке</h3>
-        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission. RECEIVE_BOOT_COMPLETED</a></p>
+        <p><a href="https://developer.android.com/reference/android/Manifest.permission#RECEIVE_BOOT_COMPLETED">android.permission.<wbr>RECEIVE_<wbr>BOOT_<wbr>COMPLETED</a></p>
         <p>Разрешает Privacy Cell включать службу мониторинга в реальном времени при загрузке телефона.</p>
         <p>Разрешает Privacy Cell включать службу мониторинга в реальном времени при загрузке телефона.</p>
+
+        <h3><a href="https://developer.android.com/about/versions/13/features#runtime-receivers">com.stoutner.privacycell.<wbr>DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a></h3>
+        <p>Автоматически добавляется во все приложения, использующие API >= 33 (Android 13) для предотвращения подключения других приложений к динамическим приемникам без явного разрешения.</p>
     </body>
     </body>
-</html>
\ No newline at end of file
+</html>
index ca396c233c010dadecc5d8721b9eee28b3982a03..e7ba180168a2c39cc54715aef9197f393e31c9cb 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -40,6 +40,11 @@ import com.google.android.material.snackbar.Snackbar
 
 import com.stoutner.privacycell.R
 
 
 import com.stoutner.privacycell.R
 
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
 import java.io.BufferedReader
 import java.io.IOException
 import java.io.InputStreamReader
 import java.io.BufferedReader
 import java.io.IOException
 import java.io.InputStreamReader
@@ -59,7 +64,7 @@ class LogcatActivity : AppCompatActivity() {
     private lateinit var logcatTextView: TextView
 
     // Define the save logcat activity result launcher.  It must be defined before `onCreate()` is run or the app will crash.
     private lateinit var logcatTextView: TextView
 
     // Define the save logcat activity result launcher.  It must be defined before `onCreate()` is run or the app will crash.
-    private val saveLogcatActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument()) { fileNameUri: Uri? ->
+    private val saveLogcatActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { fileNameUri: Uri? ->
         // Only save the file if the URI is not null, which happens if the user exited the file picker by pressing back.
         if (fileNameUri != null) {
             try {
         // Only save the file if the URI is not null, which happens if the user exited the file picker by pressing back.
         if (fileNameUri != null) {
             try {
@@ -69,11 +74,16 @@ class LogcatActivity : AppCompatActivity() {
                 // Open an output stream.
                 val outputStream = contentResolver.openOutputStream(fileNameUri)!!
 
                 // Open an output stream.
                 val outputStream = contentResolver.openOutputStream(fileNameUri)!!
 
-                // Write the logcat string to the output stream.
-                outputStream.write(logcatString.toByteArray(StandardCharsets.UTF_8))
+                // Save the logcat using a coroutine with Dispatchers.IO.
+                CoroutineScope(Dispatchers.Main).launch {
+                    withContext(Dispatchers.IO) {
+                        // Write the logcat string to the output stream.
+                        outputStream.write(logcatString.toByteArray(StandardCharsets.UTF_8))
 
 
-                // Close the output stream.
-                outputStream.close()
+                        // Close the output stream.
+                        outputStream.close()
+                    }
+                }
 
                 // Get a cursor from the content resolver.
                 val contentResolverCursor = contentResolver.query(fileNameUri, null, null, null)!!
 
                 // Get a cursor from the content resolver.
                 val contentResolverCursor = contentResolver.query(fileNameUri, null, null, null)!!
@@ -260,4 +270,4 @@ class LogcatActivity : AppCompatActivity() {
         // Stop the swipe to refresh animation if it is displayed.
         swipeRefreshLayout.isRefreshing = false
     }
         // Stop the swipe to refresh animation if it is displayed.
         swipeRefreshLayout.isRefreshing = false
     }
-}
\ No newline at end of file
+}
index 86e7be51dfdec9270bd4d606cc1ee03053300d77..dcdd6a3a0fb882554a66561ad2fe8ea6b29b45a6 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -54,17 +54,31 @@ import com.google.android.material.navigation.NavigationView
 
 import com.stoutner.privacycell.R
 import com.stoutner.privacycell.dialogs.PhonePermissionDialog
 
 import com.stoutner.privacycell.R
 import com.stoutner.privacycell.dialogs.PhonePermissionDialog
+import com.stoutner.privacycell.dialogs.PhonePermissionDialog.StoragePermissionDialogListener
 import com.stoutner.privacycell.dialogs.WebViewDialog
 import com.stoutner.privacycell.dialogs.WebViewDialog
+import com.stoutner.privacycell.helpers.ProtocolHelper
 import com.stoutner.privacycell.services.RealtimeMonitoringService
 
 import com.stoutner.privacycell.services.RealtimeMonitoringService
 
-class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, PhonePermissionDialog.StoragePermissionDialogListener {
+class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, StoragePermissionDialogListener {
+    // Define the class variables.
+    private var voiceNetworkSecurityStatus = ProtocolHelper.UNPOPULATED
+    private var dataNetworkSecurityStatus = ProtocolHelper.UNPOPULATED
+
     // Declare the class variables.
     // Declare the class variables.
-    private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle
     private lateinit var phoneStateListener: PhoneStateListener  // The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
 
     // Declare the class views.
     private lateinit var phoneStateListener: PhoneStateListener  // The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
 
     // Declare the class views.
+    private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle
     private lateinit var drawerLayout: DrawerLayout
     private lateinit var drawerLayout: DrawerLayout
-    private lateinit var summaryTextView: TextView
+    private lateinit var overallStatusLinearLayout: LinearLayout
+    private lateinit var overallStatusImageView: ImageView
+    private lateinit var overallStatusTextView: TextView
+
+    companion object {
+        // Define the public constants.
+        const val PHONE_PERMISSION_REQUEST_CODE = 0
+        const val NOTIFICATION_PERMISSION_REQUEST_CODE = 1
+    }
 
     override fun onCreate(savedInstanceState: Bundle?) {
         // Run the default commands.
 
     override fun onCreate(savedInstanceState: Bundle?) {
         // Run the default commands.
@@ -88,9 +102,9 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
         // Get handles for the views.
         drawerLayout = findViewById(R.id.drawerlayout)
         val toolbar = findViewById<Toolbar>(R.id.toolbar)
         // Get handles for the views.
         drawerLayout = findViewById(R.id.drawerlayout)
         val toolbar = findViewById<Toolbar>(R.id.toolbar)
-        val stingrayLinearLayout = findViewById<LinearLayout>(R.id.stingray_linearlayout)
-        val stingrayImageView = findViewById<ImageView>(R.id.stingray_imageview)
-        summaryTextView = findViewById(R.id.summary_textview)
+        overallStatusLinearLayout = findViewById(R.id.overall_status_linearlayout)
+        overallStatusImageView = findViewById(R.id.overall_status_imageview)
+        overallStatusTextView = findViewById(R.id.overall_status_textview)
         val voiceNetworkLinearLayout = findViewById<LinearLayout>(R.id.voice_network_linearlayout)
         val voiceNetworkTextView = findViewById<TextView>(R.id.voice_network)
         val voiceNetworkDetailsTextView = findViewById<TextView>(R.id.voice_network_details)
         val voiceNetworkLinearLayout = findViewById<LinearLayout>(R.id.voice_network_linearlayout)
         val voiceNetworkTextView = findViewById<TextView>(R.id.voice_network)
         val voiceNetworkDetailsTextView = findViewById<TextView>(R.id.voice_network_details)
@@ -140,82 +154,40 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
             }
         })
 
             }
         })
 
+        // Instantiate the protocol helper.
+        val protocolHelper = ProtocolHelper()
+
         // Define the phone state listener.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
         phoneStateListener = object : PhoneStateListener() {
         // Define the phone state listener.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
         phoneStateListener = object : PhoneStateListener() {
-            @SuppressLint("SwitchIntDef")
-            override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
-                // Declare the stingray dialog type integer.
-                val summaryDialogTypeInteger: Int
-
-                // Populate the stingray security information.  <https://source.android.com/devices/tech/connect/acts-5g-testing>
-                if ((telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_NR) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_IWLAN) ||
-                    (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_UNKNOWN)) {  // This is a secure network.
-                    // Populate the image view.
-                    stingrayImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.secure))
-
-                    // Set the text.
-                    summaryTextView.text = getString(R.string.secure_protocols)
-
-                    // Set the text color.
-                    summaryTextView.setTextColor(getColor(R.color.blue_text))
-
-                    // Set the stingray dialog type integer.
-                    summaryDialogTypeInteger = WebViewDialog.STINGRAY
-                } else if ((telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_LTE) || (!consider3gAntiquated && (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_1xRTT ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_0) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_A) ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_B) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EHRPD) ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_UMTS) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_TD_SCDMA) ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSDPA) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSUPA) ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSPA) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSPAP)))) {
-                            // This is an insecure network.
-                    // Populate the image view.
-                    stingrayImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.insecure))
-
-                    // Set the text.
-                    summaryTextView.text = getString(R.string.insecure_protocols)
-
-                    // Set the text color.
-                    summaryTextView.setTextColor(getColor(R.color.yellow_900))
-
-                    // Set the stingray dialog type integer.
-                    summaryDialogTypeInteger = WebViewDialog.STINGRAY
-                } else {  // This is an antiquated network.
-                    // Populate the image view.
-                    stingrayImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.antiquated))
-
-                    // Set the text.
-                    summaryTextView.text = getString(R.string.antiquated_protocols)
-
-                    // Set the text color.
-                    summaryTextView.setTextColor(getColor(R.color.red_text))
-
-                    // Set the stingray dialog type integer.
-                    summaryDialogTypeInteger = WebViewDialog.ANTIQUATED_NETWORK
-                }
+            @Deprecated("Deprecated in Java")
+            override fun onServiceStateChanged(serviceState: ServiceState) {  // Update the voice network.
+                // Get the network registration info for the voice network, which is the second of the three entries (the first appears to be Wi-Fi and the third appears to be the cell data network).
+                val networkRegistrationInfo = serviceState.networkRegistrationInfoList[1]
 
 
-                // Get the strings that correspond to the network information.
-                val dataNetworkType = getNetworkType(telephonyDisplayInfo.networkType)
-                val additionalNetworkInfo = getAdditionalNetworkInfo(telephonyDisplayInfo.overrideNetworkType)
+                // Get the voice network type int.
+                val voiceNetworkTypeInt = networkRegistrationInfo.accessNetworkTechnology
 
 
-                // Populate the data network text views.
-                dataNetworkTextView.text = getString(R.string.data_network, dataNetworkType[0])
-                dataNetworkDetailsTextView.text = dataNetworkType[1]
-                additionalNetworkInfoTextView.text = getString(R.string.additional_network_info, additionalNetworkInfo[0])
-                additionalNetworkInfoDetailsTextView.text = additionalNetworkInfo[1]
+                // Get the voice network security status.
+                voiceNetworkSecurityStatus = protocolHelper.checkNetwork(voiceNetworkTypeInt, consider3gAntiquated)
 
 
-                // Set the stingray click listener.
-                stingrayLinearLayout.setOnClickListener {
-                    // Instantiate the stingray dialog fragment.
-                    val stingrayDialogFragment = WebViewDialog().type(summaryDialogTypeInteger)
+                // Get the voice network type.
+                val voiceNetworkStringArray = protocolHelper.getNetworkTypeStringArray(voiceNetworkTypeInt, applicationContext)
 
 
-                    // Show the alert dialog.
-                    stingrayDialogFragment.show(supportFragmentManager, getString(R.string.stingrays))
+                // Populate the voice network text views.
+                voiceNetworkTextView.text = getString(R.string.voice_network, voiceNetworkStringArray[0])
+                voiceNetworkDetailsTextView.text = voiceNetworkStringArray[1]
+
+                // Set the color of the voice network.
+                when (voiceNetworkSecurityStatus) {
+                    ProtocolHelper.SECURE -> voiceNetworkTextView.setTextColor(getColor(R.color.blue_text))
+                    ProtocolHelper.INSECURE -> voiceNetworkTextView.setTextColor(getColor(R.color.yellow_text))
+                    ProtocolHelper.ANTIQUATED -> voiceNetworkTextView.setTextColor(getColor(R.color.red_text))
                 }
 
                 }
 
-                // Set the data network click listener.
-                dataNetworkLinearLayout.setOnClickListener {
-                    // Instantiate the data network dialog fragment according to the network type.
-                    val dataNetworkDialogFragment = when (telephonyDisplayInfo.networkType) {
+                // Set the voice network click listener.
+                voiceNetworkLinearLayout.setOnClickListener {
+                    // Instantiate the voice network dialog fragment according to the network type.
+                    val voiceNetworkDialogFragment = when (voiceNetworkTypeInt) {
                         TelephonyManager.NETWORK_TYPE_UNKNOWN -> WebViewDialog().type(WebViewDialog.NETWORK_UNKNOWN)
                         TelephonyManager.NETWORK_TYPE_GPRS -> WebViewDialog().type(WebViewDialog.NETWORK_GPRS)
                         TelephonyManager.NETWORK_TYPE_EDGE -> WebViewDialog().type(WebViewDialog.NETWORK_EDGE)
                         TelephonyManager.NETWORK_TYPE_UNKNOWN -> WebViewDialog().type(WebViewDialog.NETWORK_UNKNOWN)
                         TelephonyManager.NETWORK_TYPE_GPRS -> WebViewDialog().type(WebViewDialog.NETWORK_GPRS)
                         TelephonyManager.NETWORK_TYPE_EDGE -> WebViewDialog().type(WebViewDialog.NETWORK_EDGE)
@@ -240,42 +212,51 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
                     }
 
                     // Show the alert dialog.
                     }
 
                     // Show the alert dialog.
-                    dataNetworkDialogFragment.show(supportFragmentManager, getString(R.string.voice_network))
+                    voiceNetworkDialogFragment.show(supportFragmentManager, getString(R.string.voice_network))
                 }
 
                 }
 
-                // Set the additional network info click listener.
-                additionalNetworkInfoLinearLayout.setOnClickListener {
-                    // Instantiate the initial network info dialog fragment according to the network type.
-                    val additionalNetworkInfoDialogFragment = when (telephonyDisplayInfo.overrideNetworkType) {
-                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NONE)
-                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_LTE_CA)
-                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_LTE_ADVANCED_PRO)
-                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_NSA)
-                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_NSA_MMWAVE)  // Can be removed once the minimum API >= 31.
-                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_ADVANCED)
-                        else -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NONE)
-                    }
-
-                    // Show the alert dialog.
-                    additionalNetworkInfoDialogFragment.show(supportFragmentManager, getString(R.string.voice_network))
-                }
+                // Populate the overall security status.
+                populateOverallSecurityStatus()
             }
 
             }
 
-            override fun onServiceStateChanged(serviceState: ServiceState) {
-                // Get the network registration info for the voice network, which is the second of the three entries (the first appears to be Wi-Fi and the third appears to be the cell data network).
-                val networkRegistrationInfo = serviceState.networkRegistrationInfoList[1]
+            @Deprecated("Deprecated in Java")
+            @SuppressLint("SwitchIntDef")
+            override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {  // Update the data network.
+                // Get the network type integers.  <https://source.android.com/devices/tech/connect/acts-5g-testing>
+                val dataNetworkTypeInt = telephonyDisplayInfo.networkType
+                val additionalNetworkInfoTypeInt = telephonyDisplayInfo.overrideNetworkType
 
 
-                // Get the voice network type.
-                val voiceNetworkType = getNetworkType(networkRegistrationInfo.accessNetworkTechnology)
+                // Get the data network security status.
+                dataNetworkSecurityStatus = protocolHelper.checkNetwork(dataNetworkTypeInt, consider3gAntiquated)
 
 
-                // Populate the voice network text views.
-                voiceNetworkTextView.text = getString(R.string.voice_network, voiceNetworkType[0])
-                voiceNetworkDetailsTextView.text = voiceNetworkType[1]
+                // Get the strings that correspond to the network information.
+                val dataNetworkStringArray = protocolHelper.getNetworkTypeStringArray(dataNetworkTypeInt, applicationContext)
+                val additionalNetworkInfoStringArray = protocolHelper.getAdditionalNetworkInfoStringArray(additionalNetworkInfoTypeInt, applicationContext)
 
 
-                // Set the voice network click listener.
-                voiceNetworkLinearLayout.setOnClickListener {
-                    // Instantiate the voice network dialog fragment according to the network type.
-                    val voiceNetworkDialogFragment = when (networkRegistrationInfo.accessNetworkTechnology) {
+                // Populate the data network text views.
+                dataNetworkTextView.text = getString(R.string.data_network, dataNetworkStringArray[0])
+                dataNetworkDetailsTextView.text = dataNetworkStringArray[1]
+                additionalNetworkInfoTextView.text = getString(R.string.additional_network_info, additionalNetworkInfoStringArray[0])
+                additionalNetworkInfoDetailsTextView.text = additionalNetworkInfoStringArray[1]
+
+                // Set the color of the data network.
+                when (dataNetworkSecurityStatus) {
+                    ProtocolHelper.SECURE -> dataNetworkTextView.setTextColor(getColor(R.color.blue_text))
+                    ProtocolHelper.INSECURE -> dataNetworkTextView.setTextColor(getColor(R.color.yellow_text))
+                    ProtocolHelper.ANTIQUATED -> dataNetworkTextView.setTextColor(getColor(R.color.red_text))
+                }
+
+                // Set the color of the additional network info.
+                when (protocolHelper.checkAdditionalNetworkInfo(additionalNetworkInfoTypeInt)) {
+                    ProtocolHelper.SECURE -> additionalNetworkInfoTextView.setTextColor(getColor(R.color.blue_text))
+                    ProtocolHelper.INSECURE -> additionalNetworkInfoTextView.setTextColor(getColor(R.color.yellow_text))
+                    ProtocolHelper.ANTIQUATED -> additionalNetworkInfoTextView.setTextColor(getColor(R.color.red_text))
+                }
+
+                // Set the data network click listener.
+                dataNetworkLinearLayout.setOnClickListener {
+                    // Instantiate the data network dialog fragment according to the network type.
+                    val dataNetworkDialogFragment = when (dataNetworkTypeInt) {
                         TelephonyManager.NETWORK_TYPE_UNKNOWN -> WebViewDialog().type(WebViewDialog.NETWORK_UNKNOWN)
                         TelephonyManager.NETWORK_TYPE_GPRS -> WebViewDialog().type(WebViewDialog.NETWORK_GPRS)
                         TelephonyManager.NETWORK_TYPE_EDGE -> WebViewDialog().type(WebViewDialog.NETWORK_EDGE)
                         TelephonyManager.NETWORK_TYPE_UNKNOWN -> WebViewDialog().type(WebViewDialog.NETWORK_UNKNOWN)
                         TelephonyManager.NETWORK_TYPE_GPRS -> WebViewDialog().type(WebViewDialog.NETWORK_GPRS)
                         TelephonyManager.NETWORK_TYPE_EDGE -> WebViewDialog().type(WebViewDialog.NETWORK_EDGE)
@@ -300,8 +281,28 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
                     }
 
                     // Show the alert dialog.
                     }
 
                     // Show the alert dialog.
-                    voiceNetworkDialogFragment.show(supportFragmentManager, getString(R.string.voice_network))
+                    dataNetworkDialogFragment.show(supportFragmentManager, getString(R.string.voice_network))
                 }
                 }
+
+                // Set the additional network info click listener.
+                additionalNetworkInfoLinearLayout.setOnClickListener {
+                    // Instantiate the initial network info dialog fragment according to the network type.
+                    val additionalNetworkInfoDialogFragment = when (telephonyDisplayInfo.overrideNetworkType) {
+                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NONE)
+                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_LTE_CA)
+                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_LTE_ADVANCED_PRO)
+                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_NSA)
+                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_NSA_MMWAVE)  // Can be removed once the minimum API >= 31.
+                        TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_ADVANCED)
+                        else -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NONE)
+                    }
+
+                    // Show the alert dialog.
+                    additionalNetworkInfoDialogFragment.show(supportFragmentManager, getString(R.string.voice_network))
+                }
+
+                // Populate the overall security status.
+                populateOverallSecurityStatus()
             }
         }
 
             }
         }
 
@@ -339,7 +340,7 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
         } else {  // The phone permission has not been granted.
             // Check if the user has previously denied the storage permission.
             if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {  // Show a dialog explaining the request first.
         } else {  // The phone permission has not been granted.
             // Check if the user has previously denied the storage permission.
             if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {  // Show a dialog explaining the request first.
-                // Check to see if a phone permission dialog is already displayed.  This happens if the app is restarted when the dialog is shown.
+                // Check to see if a phone permission dialog is already displayed.  This happens if the app is restarted while the dialog is shown.
                 if (supportFragmentManager.findFragmentByTag(getString(R.string.phone_permission)) == null) {  // No dialog is currently shown.
                     // Instantiate the phone permission dialog fragment.
                     val phonePermissionDialogFragment = PhonePermissionDialog()
                 if (supportFragmentManager.findFragmentByTag(getString(R.string.phone_permission)) == null) {  // No dialog is currently shown.
                     // Instantiate the phone permission dialog fragment.
                     val phonePermissionDialogFragment = PhonePermissionDialog()
@@ -348,8 +349,8 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
                     phonePermissionDialogFragment.show(supportFragmentManager, getString(R.string.phone_permission))
                 }
             } else {  // Show the permission request directly.
                     phonePermissionDialogFragment.show(supportFragmentManager, getString(R.string.phone_permission))
                 }
             } else {  // Show the permission request directly.
-                // Request the read phone state permission.  There is only one permission request in the app, so it has a request code of 0.
-                ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), 0)
+                // Request the read phone state permission.
+                ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), PHONE_PERMISSION_REQUEST_CODE)
             }
         }
     }
             }
         }
     }
@@ -496,23 +497,23 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
     }
 
     override fun onCloseStoragePermissionDialog() {
     }
 
     override fun onCloseStoragePermissionDialog() {
-        // Request the read phone state permission.  There is only one permission request in the app, so it has a request code of 0.
-        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), 0)
+        // Request the read phone state permission.
+        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), PHONE_PERMISSION_REQUEST_CODE)
     }
 
     override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
         // Run the default commands.
         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
 
     }
 
     override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
         // Run the default commands.
         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
 
-        //Only process the results if they exist (this method is triggered when a dialog is presented the first time for an app, but no grant results are included).
-        if (grantResults.isNotEmpty()) {
+        // Only process the results if they exist (this method is triggered when a dialog is presented the first time for an app, but no grant results are included) and the result is for the phone permission.
+        if (grantResults.isNotEmpty() && (requestCode == PHONE_PERMISSION_REQUEST_CODE)) {
             // Check to see if the read phone state permission was granted.  If the dialog was canceled the grant results will be empty.
             if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {  // The read phone state permission was granted.
                 // Populate Privacy Cell.
                 registerTelephonyManagerListener()
             } else {  // The read phone state permission was denied.
                 // Display the phone permission text on the main activity.
             // Check to see if the read phone state permission was granted.  If the dialog was canceled the grant results will be empty.
             if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {  // The read phone state permission was granted.
                 // Populate Privacy Cell.
                 registerTelephonyManagerListener()
             } else {  // The read phone state permission was denied.
                 // Display the phone permission text on the main activity.
-                summaryTextView.text = getString(R.string.phone_permission_text)
+               overallStatusTextView.text = getString(R.string.phone_permission_text)
             }
         }
     }
             }
         }
     }
@@ -522,46 +523,59 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
         val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
 
         // Listen to changes in the cell network state.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
         val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
 
         // Listen to changes in the cell network state.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
-        telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED or PhoneStateListener.LISTEN_SERVICE_STATE)
+        telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE or PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)
     }
 
     }
 
-    private fun getNetworkType(networkType: Int) : Array<String> {
-        // Return the string that corresponds to the network type.
-        return when(networkType) {
-            TelephonyManager.NETWORK_TYPE_UNKNOWN -> arrayOf(getString(R.string.unknown), "")
-            TelephonyManager.NETWORK_TYPE_GPRS -> arrayOf(getString(R.string.gprs), getString(R.string.gprs_detail))
-            TelephonyManager.NETWORK_TYPE_EDGE -> arrayOf(getString(R.string.edge), getString(R.string.edge_detail))
-            TelephonyManager.NETWORK_TYPE_UMTS -> arrayOf(getString(R.string.umts), getString(R.string.umts_detail))
-            TelephonyManager.NETWORK_TYPE_CDMA -> arrayOf(getString(R.string.cdma), getString(R.string.cdma_detail))
-            TelephonyManager.NETWORK_TYPE_EVDO_0 -> arrayOf(getString(R.string.evdo_0), getString(R.string.evdo_0_detail))
-            TelephonyManager.NETWORK_TYPE_EVDO_A -> arrayOf(getString(R.string.evdo_a), getString(R.string.evdo_a_detail))
-            TelephonyManager.NETWORK_TYPE_1xRTT -> arrayOf(getString(R.string.rtt), getString(R.string.rtt_detail))
-            TelephonyManager.NETWORK_TYPE_HSDPA -> arrayOf(getString(R.string.hsdpa), getString(R.string.hsdpa_detail))
-            TelephonyManager.NETWORK_TYPE_HSUPA -> arrayOf(getString(R.string.hsupa), getString(R.string.hsupa_detail))
-            TelephonyManager.NETWORK_TYPE_HSPA -> arrayOf(getString(R.string.hspa), getString(R.string.hspa_detail))
-            TelephonyManager.NETWORK_TYPE_IDEN -> arrayOf(getString(R.string.iden), getString(R.string.iden_detail))
-            TelephonyManager.NETWORK_TYPE_EVDO_B -> arrayOf(getString(R.string.evdo_b), getString(R.string.evdo_b_detail))
-            TelephonyManager.NETWORK_TYPE_LTE -> arrayOf(getString(R.string.lte), getString(R.string.lte_detail))
-            TelephonyManager.NETWORK_TYPE_EHRPD -> arrayOf(getString(R.string.ehrpd), getString(R.string.ehrpd_detail))
-            TelephonyManager.NETWORK_TYPE_HSPAP -> arrayOf(getString(R.string.hspap), getString(R.string.hspap_detail))
-            TelephonyManager.NETWORK_TYPE_GSM -> arrayOf(getString(R.string.gsm), getString(R.string.gsm_detail))
-            TelephonyManager.NETWORK_TYPE_TD_SCDMA -> arrayOf(getString(R.string.td_scdma), getString(R.string.td_scdma_detail))
-            TelephonyManager.NETWORK_TYPE_IWLAN -> arrayOf(getString(R.string.iwlan), getString(R.string.iwlan_detail))
-            TelephonyManager.NETWORK_TYPE_NR -> arrayOf(getString(R.string.nr), getString(R.string.nr_detail))
-            else -> arrayOf(getString(R.string.error), "")
+    private fun populateOverallSecurityStatus() {
+        // Create an overall status dialog type integer.
+        val overallStatusDialogTypeInt: Int
+
+        // Populate the over security status.
+        if ((voiceNetworkSecurityStatus == ProtocolHelper.ANTIQUATED) || (dataNetworkSecurityStatus == ProtocolHelper.ANTIQUATED)) {  // This is an antiquated network.
+            // Populate the image view.
+            overallStatusImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.antiquated))
+
+            // Set the text.
+            overallStatusTextView.text = getString(R.string.antiquated_protocols)
+
+            // Set the text color.
+            overallStatusTextView.setTextColor(getColor(R.color.red_text))
+
+            // Set the stingray dialog type integer.
+            overallStatusDialogTypeInt = WebViewDialog.ANTIQUATED_NETWORK
+        } else if ((voiceNetworkSecurityStatus == ProtocolHelper.INSECURE) || (dataNetworkSecurityStatus == ProtocolHelper.INSECURE)) {  // This is an insecure network.
+            // Populate the image view.
+            overallStatusImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.insecure))
+
+            // Set the text.
+            overallStatusTextView.text = getString(R.string.insecure_protocols)
+
+            // Set the text color.
+            overallStatusTextView.setTextColor(getColor(R.color.yellow_text))
+
+            // Set the stingray dialog type integer.
+            overallStatusDialogTypeInt = WebViewDialog.STINGRAY
+        } else {  // This is a secure network.
+            // Populate the image view.
+            overallStatusImageView.setImageDrawable(AppCompatResources.getDrawable(applicationContext, R.drawable.secure))
+
+            // Set the text.
+            overallStatusTextView.text = getString(R.string.secure_protocols)
+
+            // Set the text color.
+            overallStatusTextView.setTextColor(getColor(R.color.blue_text))
+
+            // Set the stingray dialog type integer.
+            overallStatusDialogTypeInt = WebViewDialog.STINGRAY
         }
         }
-    }
 
 
-    private fun getAdditionalNetworkInfo(overrideNetworkType: Int) : Array<String> {
-        // Return the string that corresponds to the override network type.
-        return when(overrideNetworkType) {
-            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE -> arrayOf(getString(R.string.none), "")
-            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA -> arrayOf(getString(R.string.lte_ca), getString(R.string.lte_ca_detail))
-            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> arrayOf(getString(R.string.lte_advanced_pro), getString(R.string.lte_advanced_pro_detail))
-            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> arrayOf(getString(R.string.nr_nsa), getString(R.string.nr_nsa_detail))
-            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> arrayOf(getString(R.string.nr_nsa_mmwave), getString(R.string.nr_nsa_mmwave_detail))  // Can be removed once the minimum API >= 31.
-            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED -> arrayOf(getString(R.string.nr_advanced), getString(R.string.nr_advanced_detail))
-            else -> arrayOf(getString(R.string.error), "")
+        // Set the overall status click listener.
+        overallStatusLinearLayout.setOnClickListener {
+            // Instantiate the stingray dialog fragment.
+            val stingrayDialogFragment = WebViewDialog().type(overallStatusDialogTypeInt)
+
+            // Show the alert dialog.
+            stingrayDialogFragment.show(supportFragmentManager, getString(R.string.stingrays))
         }
     }
         }
     }
-}
\ No newline at end of file
+}
index 8a5912ffa9c396c0a41ae39020d68f29ae4706c6..d27d57adad776980dbe00651df68f974fa2bec48 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -144,4 +144,4 @@ class ProtocolsActivity : AppCompatActivity() {
             }?.show(supportFragmentManager, getString(R.string.protocols))
         }
     }
             }?.show(supportFragmentManager, getString(R.string.protocols))
         }
     }
-}
\ No newline at end of file
+}
index 279d836cfd82d7c3fa5fa92b18e24fc643225f5d..c9fe9300f9cf50a89a7f8d69dce47b732a7f0502 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
 
 package com.stoutner.privacycell.activities
 
 
 package com.stoutner.privacycell.activities
 
+import android.Manifest
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.os.Build
 import android.os.Bundle
 import android.os.Bundle
-import android.view.MenuItem
 
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.widget.Toolbar
 
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.widget.Toolbar
+import androidx.core.app.ActivityCompat
 import androidx.preference.PreferenceManager
 
 import com.stoutner.privacycell.R
 import androidx.preference.PreferenceManager
 
 import com.stoutner.privacycell.R
+import com.stoutner.privacycell.dialogs.NotificationPermissionDialog.NotificationPermissionDialogListener
 import com.stoutner.privacycell.fragments.SettingsFragment
 import com.stoutner.privacycell.fragments.SettingsFragment
+import com.stoutner.privacycell.services.RealtimeMonitoringService
+
+class SettingsActivity : AppCompatActivity(), NotificationPermissionDialogListener {
+    // Declare the class variables.
+    private lateinit var settingsFragment: SettingsFragment
 
 
-class SettingsActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         // Run the default commands.
         super.onCreate(savedInstanceState)
     override fun onCreate(savedInstanceState: Bundle?) {
         // Run the default commands.
         super.onCreate(savedInstanceState)
@@ -59,15 +68,35 @@ class SettingsActivity : AppCompatActivity() {
         // Display the home arrow on the action bar.
         actionBar.setDisplayHomeAsUpEnabled(true)
 
         // Display the home arrow on the action bar.
         actionBar.setDisplayHomeAsUpEnabled(true)
 
-        // Load the preferences fragment.
-        supportFragmentManager.beginTransaction().replace(R.id.preferences_framelayout, SettingsFragment()).commit()
+        // Instantiate the settings fragment.
+        settingsFragment = SettingsFragment()
+
+        // Load the settings fragment.
+        supportFragmentManager.beginTransaction().replace(R.id.preferences_framelayout, settingsFragment).commitNow()
+    }
+
+    override fun onCloseNotificationPermissionDialog() {
+        // Request the post notifications permission if the API >= 33.
+        if (Build.VERSION.SDK_INT >= 33) {
+            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.POST_NOTIFICATIONS), PrivacyCellActivity.NOTIFICATION_PERMISSION_REQUEST_CODE)
+        }
     }
 
     }
 
-    override fun onOptionsItemSelected(item: MenuItem): Boolean {
-        // As there is only one option, go back.
-        onBackPressed()
+    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
+        // Run the default commands.
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+
+        // Only process the results if they exist (this method is triggered when a dialog is presented the first time for an app, but no grant results are included)
+        // and the result is for the notification permission.
+        if (grantResults.isNotEmpty() && (requestCode == PrivacyCellActivity.NOTIFICATION_PERMISSION_REQUEST_CODE)) {
+            // Check to see if the notification permission was granted.  If the dialog was canceled the grant result will be empty.
+            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {  // The notification permission was granted.
+                // Start the realtime monitoring service.
+                startService(Intent(this, RealtimeMonitoringService::class.java))
 
 
-        // Consume the event.
-        return true
+                // Update the realtime monitoring preference summary.
+                settingsFragment.updateRealtimeMonitoringSummary()
+            }
+        }
     }
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/stoutner/privacycell/dialogs/NotificationPermissionDialog.kt b/app/src/main/java/com/stoutner/privacycell/dialogs/NotificationPermissionDialog.kt
new file mode 100644 (file)
index 0000000..9989945
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
+ *
+ * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+ *
+ * Privacy Cell 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.
+ *
+ * Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.stoutner.privacycell.dialogs
+
+import android.app.Dialog
+import android.content.Context
+import android.content.DialogInterface
+import android.os.Bundle
+
+import androidx.appcompat.app.AlertDialog
+import androidx.fragment.app.DialogFragment
+
+import com.stoutner.privacycell.R
+
+class NotificationPermissionDialog : DialogFragment() {
+    // Declare the listener.
+    private lateinit var notificationPermissionDialogListener: NotificationPermissionDialogListener
+
+    // The public interface is used to send information back to the parent activity.
+    interface NotificationPermissionDialogListener {
+        fun onCloseNotificationPermissionDialog()
+    }
+
+    override fun onAttach(context: Context) {
+        // Run the default commands.
+        super.onAttach(context)
+
+        // Get a handle for the listener from the launching context.
+        notificationPermissionDialogListener = context as NotificationPermissionDialogListener
+    }
+
+    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+        // Use a builder to create the alert dialog.
+        val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.Theme_PrivacyCellAlertDialog)
+
+        // Set the icon.
+        dialogBuilder.setIcon(R.drawable.notification_permission)
+
+        // Set the title.
+        dialogBuilder.setTitle(R.string.notification_permission)
+
+        // Set the text.
+        dialogBuilder.setMessage(R.string.notification_permission_text)
+
+        // Set the close button listener.
+        dialogBuilder.setNegativeButton(R.string.ok) { _: DialogInterface, _: Int ->
+            // Call the notification permission dialog listener.
+            notificationPermissionDialogListener.onCloseNotificationPermissionDialog()
+        }
+
+        // Return the alert dialog.
+        return dialogBuilder.create()
+    }
+}
index a792114db6860d64ff3fcfdbdda9e3fb411c7be0..745c7a7bbbef81c74ed25cf1563473680fd3fad8 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -68,4 +68,4 @@ class PhonePermissionDialog : DialogFragment() {
         // Return the alert dialog.
         return dialogBuilder.create()
     }
         // Return the alert dialog.
         return dialogBuilder.create()
     }
-}
\ No newline at end of file
+}
index 0a40933c95174739c3bc5e95d139c4b7851c8032..aa7d296a141def98def55dd87cfd32b767038b85 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -21,7 +21,6 @@ package com.stoutner.privacycell.dialogs
 
 import android.app.Dialog
 import android.content.Intent
 
 import android.app.Dialog
 import android.content.Intent
-import android.content.res.Configuration
 import android.os.Bundle
 import android.webkit.WebResourceRequest
 import android.webkit.WebResourceResponse
 import android.os.Bundle
 import android.webkit.WebResourceRequest
 import android.webkit.WebResourceResponse
@@ -30,9 +29,7 @@ import android.webkit.WebViewClient
 
 import androidx.appcompat.app.AlertDialog
 import androidx.fragment.app.DialogFragment
 
 import androidx.appcompat.app.AlertDialog
 import androidx.fragment.app.DialogFragment
-import androidx.webkit.WebSettingsCompat
 import androidx.webkit.WebViewAssetLoader
 import androidx.webkit.WebViewAssetLoader
-import androidx.webkit.WebViewFeature
 
 import com.stoutner.privacycell.R
 
 
 import com.stoutner.privacycell.R
 
@@ -388,15 +385,6 @@ class WebViewDialog : DialogFragment() {
         // Get a handle for the WebView.
         webView = alertDialog.findViewById(R.id.webview)!!
 
         // Get a handle for the WebView.
         webView = alertDialog.findViewById(R.id.webview)!!
 
-        // Get the current theme status.
-        val currentThemeStatus = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
-
-        // Check to see if the app is in night mode.
-        if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES && WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {  // The app is in night mode.
-            // Apply the dark WebView theme.
-            WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON)
-        }
-
         // Create a WebView asset loader.
         val webViewAssetLoader = WebViewAssetLoader.Builder().addPathHandler("/assets/", WebViewAssetLoader.AssetsPathHandler(requireContext())).build()
 
         // Create a WebView asset loader.
         val webViewAssetLoader = WebViewAssetLoader.Builder().addPathHandler("/assets/", WebViewAssetLoader.AssetsPathHandler(requireContext())).build()
 
@@ -481,4 +469,4 @@ class WebViewDialog : DialogFragment() {
         // Save the scroll position.
         savedInstanceState.putInt(SCROLL_Y, webView.scrollY)
     }
         // Save the scroll position.
         savedInstanceState.putInt(SCROLL_Y, webView.scrollY)
     }
-}
\ No newline at end of file
+}
index 20dfb37be3cdbb74e847fabe05125ba0b4546569..911ab08e856c55040304edde0bdeb70a3ee515ee 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -22,7 +22,9 @@ package com.stoutner.privacycell.fragments
 import android.Manifest
 import android.content.Intent
 import android.content.SharedPreferences
 import android.Manifest
 import android.content.Intent
 import android.content.SharedPreferences
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener
 import android.content.pm.PackageManager
 import android.content.pm.PackageManager
+import android.os.Build
 import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
 import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
@@ -34,11 +36,16 @@ import androidx.preference.PreferenceFragmentCompat
 import androidx.work.WorkManager
 
 import com.stoutner.privacycell.R
 import androidx.work.WorkManager
 
 import com.stoutner.privacycell.R
+import com.stoutner.privacycell.activities.PrivacyCellActivity
+import com.stoutner.privacycell.dialogs.NotificationPermissionDialog
 import com.stoutner.privacycell.services.RealtimeMonitoringService
 
 import com.stoutner.privacycell.services.RealtimeMonitoringService
 
+// Define the class constants.
+private const val SCROLL_Y = "scroll_y"
+
 class SettingsFragment : PreferenceFragmentCompat() {
     // Declare the class variables.
 class SettingsFragment : PreferenceFragmentCompat() {
     // Declare the class variables.
-    private lateinit var sharedPreferenceChangeListener: SharedPreferences.OnSharedPreferenceChangeListener
+    private lateinit var sharedPreferenceChangeListener: OnSharedPreferenceChangeListener
 
     // Declare the class views.
     private lateinit var realtimeMonitoringPreference: Preference
 
     // Declare the class views.
     private lateinit var realtimeMonitoringPreference: Preference
@@ -48,6 +55,12 @@ class SettingsFragment : PreferenceFragmentCompat() {
     private lateinit var consider3gAntiquatedPreference: Preference
     private lateinit var bottomAppBarPreference: Preference
 
     private lateinit var consider3gAntiquatedPreference: Preference
     private lateinit var bottomAppBarPreference: Preference
 
+    companion object {
+        // Declare the private static class variables.  For some reason (I'm looking at you Android's Activity Lifecycle) this only works if these are static.
+        private var fragmentRestarted: Boolean = false
+        private var scrollY: Int = 0
+    }
+
     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
         // Load the preferences from the XML file.
         setPreferencesFromResource(R.xml.preferences, rootKey)
     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
         // Load the preferences from the XML file.
         setPreferencesFromResource(R.xml.preferences, rootKey)
@@ -124,38 +137,20 @@ class SettingsFragment : PreferenceFragmentCompat() {
         } else {
             bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled)
         }
         } else {
             bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled)
         }
-    }
-
-    // The listener should be unregistered when the app is paused.
-    override fun onPause() {
-        // Run the default commands.
-        super.onPause()
-
-        // Get a handle for the shared preferences.
-        val sharedPreferences = preferenceScreen.sharedPreferences!!
-
-        // Unregister the shared preference listener.
-        sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
-    }
-
-    // The listener should be re-registered when the app is resumed.
-    override fun onResume() {
-        // Run the default commands.
-        super.onResume()
 
 
-        // Get a new shared preference change listener.
-        sharedPreferenceChangeListener = getSharedPreferenceChangeListener()
-
-        // Get a handle for the shared preferences.
-        val sharedPreferences = preferenceScreen.sharedPreferences!!
+        // Check if the fragment has been restarted.
+        if (savedInstanceState != null) {
+            // Set the fragment restarted flag.
+            fragmentRestarted = true
 
 
-        // Re-register the shared preference listener.
-        sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
+            // Save the scroll Y.
+            scrollY = savedInstanceState.getInt(SCROLL_Y)
+        }
     }
 
     }
 
-    private fun getSharedPreferenceChangeListener(): SharedPreferences.OnSharedPreferenceChangeListener {
+    private fun getSharedPreferenceChangeListener(): OnSharedPreferenceChangeListener {
         // Return the shared preference change listener.
         // Return the shared preference change listener.
-        return SharedPreferences.OnSharedPreferenceChangeListener {sharedPreferences, key ->
+        return OnSharedPreferenceChangeListener { sharedPreferences: SharedPreferences, key: String? ->
             when (key) {
                 getString(R.string.realtime_monitoring_key) -> {
                     // Update the icon.
             when (key) {
                 getString(R.string.realtime_monitoring_key) -> {
                     // Update the icon.
@@ -175,8 +170,32 @@ class SettingsFragment : PreferenceFragmentCompat() {
 
                     // Start or stop the service.
                     if (sharedPreferences.getBoolean(getString(R.string.realtime_monitoring_key), false)) {  // Realtime monitoring has been enabled.
 
                     // Start or stop the service.
                     if (sharedPreferences.getBoolean(getString(R.string.realtime_monitoring_key), false)) {  // Realtime monitoring has been enabled.
-                        // Start the realtime monitoring service.
-                        requireActivity().startService(Intent(context, RealtimeMonitoringService::class.java))
+                        // Start the service according to the API.
+                        if (Build.VERSION.SDK_INT >= 33) {  // The device API is >= 33.
+                            // Check to see if the post notification has been granted.
+                            if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {  // The permission has been granted.
+                                // Start the realtime monitoring service.
+                                requireActivity().startService(Intent(context, RealtimeMonitoringService::class.java))
+                            } else {  // The post notification permission has not been granted.
+                                // Check if the user has previously denied the post notifications permission.
+                                if (ActivityCompat.shouldShowRequestPermissionRationale(requireActivity(), Manifest.permission.POST_NOTIFICATIONS)) {  // Show a dialog explaining the request first.
+                                    // Check to see if a notification permission dialog is already displayed.  This happens if the app is restarted while the dialog is shown.
+                                    if (requireActivity().supportFragmentManager.findFragmentByTag(getString(R.string.notification_permission)) == null) {  // No dialog is currently shown.
+                                        // Instantiate the notification permission dialog fragment.
+                                        val notificationPermissionDialogFragment = NotificationPermissionDialog()
+
+                                        // Show the notification permission alert dialog.  The permission will be requested when the dialog is closed.
+                                        notificationPermissionDialogFragment.show(requireActivity().supportFragmentManager, getString(R.string.notification_permission))
+                                    }
+                                } else {  // Show the permission request directly.
+                                    // Request the post notifications permission directly.
+                                    ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.POST_NOTIFICATIONS), PrivacyCellActivity.NOTIFICATION_PERMISSION_REQUEST_CODE)
+                                }
+                            }
+                        } else {   // The device API is < 33.
+                            // Start the realtime monitoring service.
+                            requireActivity().startService(Intent(context, RealtimeMonitoringService::class.java))
+                        }
                     } else {  // Realtime monitoring has been disabled.
                         // Stop the realtime monitoring service.
                         requireActivity().stopService(Intent(context, RealtimeMonitoringService::class.java))
                     } else {  // Realtime monitoring has been disabled.
                         // Stop the realtime monitoring service.
                         requireActivity().stopService(Intent(context, RealtimeMonitoringService::class.java))
@@ -213,6 +232,53 @@ class SettingsFragment : PreferenceFragmentCompat() {
         }
     }
 
         }
     }
 
+    // The listener should be unregistered when the app is paused.
+    override fun onPause() {
+        // Run the default commands.
+        super.onPause()
+
+        // Get a handle for the shared preferences.
+        val sharedPreferences = preferenceScreen.sharedPreferences!!
+
+        // Unregister the shared preference listener.
+        sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
+    }
+
+    // The listener should be re-registered when the app is resumed.
+    override fun onResume() {
+        // Run the default commands.
+        super.onResume()
+
+        // Get a new shared preference change listener.
+        sharedPreferenceChangeListener = getSharedPreferenceChangeListener()
+
+        // Get a handle for the shared preferences.
+        val sharedPreferences = preferenceScreen.sharedPreferences!!
+
+        // Re-register the shared preference listener.
+        sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
+
+        // Update the realtime monitoring preference summary.
+        updateRealtimeMonitoringSummary()
+
+        // Restore the scroll position if the fragment has been restarted.
+        if (fragmentRestarted) {
+            // Reset the fragment restarted flag.
+            fragmentRestarted = false
+
+            // Set the scroll position.
+            listView.smoothScrollBy(0, scrollY)
+        }
+    }
+
+    override fun onSaveInstanceState(savedInstanceState: Bundle) {
+        // Run the default commands.
+        super.onSaveInstanceState(savedInstanceState)
+
+        // Save the scroll position.
+        savedInstanceState.putInt(SCROLL_Y, listView.computeVerticalScrollOffset())
+    }
+
     private fun restartPrivacyCell() {
         // Create an intent to restart Privacy Cell.
         val restartIntent = requireActivity().parentActivityIntent!!
     private fun restartPrivacyCell() {
         // Create an intent to restart Privacy Cell.
         val restartIntent = requireActivity().parentActivityIntent!!
@@ -232,4 +298,18 @@ class SettingsFragment : PreferenceFragmentCompat() {
         // Restart the activity after 400 milliseconds, so that the app has enough time to save the change to the preference.
         restartHandler.postDelayed(restartRunnable, 400)
     }
         // Restart the activity after 400 milliseconds, so that the app has enough time to save the change to the preference.
         restartHandler.postDelayed(restartRunnable, 400)
     }
-}
\ No newline at end of file
+
+    fun updateRealtimeMonitoringSummary() {
+        // Update the summary according to the API.
+        if (Build.VERSION.SDK_INT >= 33) {  // The API >= 33.
+            // Set the summary according to the notification permission status.
+            if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED)
+                realtimeMonitoringPreference.summary = getString(R.string.realtime_monitoring_summary)
+            else
+                realtimeMonitoringPreference.summary = (getString(R.string.realtime_monitoring_summary) + " " + getString(R.string.notification_permission_denied))
+        } else {  // The API is < 33.
+            // Set the realtime monitoring summary.
+            realtimeMonitoringPreference.summary = getString(R.string.realtime_monitoring_summary)
+        }
+    }
+}
diff --git a/app/src/main/java/com/stoutner/privacycell/helpers/ProtocolHelper.kt b/app/src/main/java/com/stoutner/privacycell/helpers/ProtocolHelper.kt
new file mode 100644 (file)
index 0000000..cb6ca1d
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2022-2023 Soren Stoutner <soren@stoutner.com>.
+ *
+ * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+ *
+ * Privacy Cell 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.
+ *
+ * Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.stoutner.privacycell.helpers
+
+import android.content.Context
+import android.telephony.TelephonyDisplayInfo
+import android.telephony.TelephonyManager
+
+import com.stoutner.privacycell.R
+
+class ProtocolHelper {
+    companion object {
+        // Define the public static companion object constants.
+        const val UNPOPULATED = -1
+        const val SECURE = 0
+        const val INSECURE = 1
+        const val ANTIQUATED = 2
+    }
+
+    fun checkNetwork(networkType: Int, consider3gAntiquated: Boolean): Int {
+        if ((networkType == TelephonyManager.NETWORK_TYPE_NR) ||
+            (networkType == TelephonyManager.NETWORK_TYPE_IWLAN) ||
+            (networkType == TelephonyManager.NETWORK_TYPE_UNKNOWN)) {
+            // The network is secure.
+            return SECURE
+        } else if (networkType == TelephonyManager.NETWORK_TYPE_LTE) {
+            // The network is insecure.
+            return INSECURE
+        } else if (!consider3gAntiquated &&
+                  ((networkType == TelephonyManager.NETWORK_TYPE_1xRTT) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_EVDO_0) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_EVDO_A) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_EVDO_B) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_EHRPD) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_UMTS) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_TD_SCDMA) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_HSDPA) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_HSUPA) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_HSPA) ||
+                   (networkType == TelephonyManager.NETWORK_TYPE_HSPAP))) {
+            // The network is insecure.
+            return INSECURE
+        } else {
+            // Either 3G networks are considered antiquated, or this is a 2G network.
+            // TelephonyManager.NETWORK_TYPE_GPRS
+            // TelephonyManager.NETWORK_TYPE_EDGE
+            // TelephonyManager.NETWORK_TYPE_CDMA
+            // TelephonyManager.NETWORK_TYPE_IDEN
+            // TelephonyManager.NETWORK_TYPE_GSM
+            return ANTIQUATED
+        }
+    }
+
+    fun checkAdditionalNetworkInfo(additionalNetworkInfoType: Int): Int {
+        return if ((additionalNetworkInfoType == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) ||
+                   (additionalNetworkInfoType == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED)) {
+            // The additional network info is secure.
+            SECURE
+        } else {
+            // The additional network info is insecure.
+            // TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA
+            // TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO
+            // TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA
+            // TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -- Can be removed once the minimum API >= 31.
+            INSECURE
+        }
+    }
+
+    fun getNetworkTypeStringArray(networkType: Int, context: Context) : Array<String> {
+        // Return the string array that corresponds to the network type.  The deprecated `NETWORK_TYPE_IDEN` can be removed once the minimum API >= 34.
+        @Suppress("DEPRECATION")
+        return when(networkType) {
+            TelephonyManager.NETWORK_TYPE_UNKNOWN -> arrayOf(context.getString(R.string.unknown), "")
+            TelephonyManager.NETWORK_TYPE_GPRS -> arrayOf(context.getString(R.string.gprs), context.getString(R.string.gprs_detail))
+            TelephonyManager.NETWORK_TYPE_EDGE -> arrayOf(context.getString(R.string.edge), context.getString(R.string.edge_detail))
+            TelephonyManager.NETWORK_TYPE_UMTS -> arrayOf(context.getString(R.string.umts), context.getString(R.string.umts_detail))
+            TelephonyManager.NETWORK_TYPE_CDMA -> arrayOf(context.getString(R.string.cdma), context.getString(R.string.cdma_detail))
+            TelephonyManager.NETWORK_TYPE_EVDO_0 -> arrayOf(context.getString(R.string.evdo_0), context.getString(R.string.evdo_0_detail))
+            TelephonyManager.NETWORK_TYPE_EVDO_A -> arrayOf(context.getString(R.string.evdo_a), context.getString(R.string.evdo_a_detail))
+            TelephonyManager.NETWORK_TYPE_1xRTT -> arrayOf(context.getString(R.string.rtt), context.getString(R.string.rtt_detail))
+            TelephonyManager.NETWORK_TYPE_HSDPA -> arrayOf(context.getString(R.string.hsdpa), context.getString(R.string.hsdpa_detail))
+            TelephonyManager.NETWORK_TYPE_HSUPA -> arrayOf(context.getString(R.string.hsupa), context.getString(R.string.hsupa_detail))
+            TelephonyManager.NETWORK_TYPE_HSPA -> arrayOf(context.getString(R.string.hspa), context.getString(R.string.hspa_detail))
+            TelephonyManager.NETWORK_TYPE_IDEN -> arrayOf(context.getString(R.string.iden), context.getString(R.string.iden_detail))
+            TelephonyManager.NETWORK_TYPE_EVDO_B -> arrayOf(context.getString(R.string.evdo_b), context.getString(R.string.evdo_b_detail))
+            TelephonyManager.NETWORK_TYPE_LTE -> arrayOf(context.getString(R.string.lte), context.getString(R.string.lte_detail))
+            TelephonyManager.NETWORK_TYPE_EHRPD -> arrayOf(context.getString(R.string.ehrpd), context.getString(R.string.ehrpd_detail))
+            TelephonyManager.NETWORK_TYPE_HSPAP -> arrayOf(context.getString(R.string.hspap), context.getString(R.string.hspap_detail))
+            TelephonyManager.NETWORK_TYPE_GSM -> arrayOf(context.getString(R.string.gsm), context.getString(R.string.gsm_detail))
+            TelephonyManager.NETWORK_TYPE_TD_SCDMA -> arrayOf(context.getString(R.string.td_scdma), context.getString(R.string.td_scdma_detail))
+            TelephonyManager.NETWORK_TYPE_IWLAN -> arrayOf(context.getString(R.string.iwlan), context.getString(R.string.iwlan_detail))
+            TelephonyManager.NETWORK_TYPE_NR -> arrayOf(context.getString(R.string.nr), context.getString(R.string.nr_detail))
+            else -> arrayOf(context.getString(R.string.error), "")
+        }
+    }
+
+    fun getAdditionalNetworkInfoStringArray(overrideNetworkType: Int, context: Context) : Array<String> {
+        // Return the string array that corresponds to the override network type.
+        @Suppress("DEPRECATION")  // OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE can be removed once the minimum API >= 31.
+        return when(overrideNetworkType) {
+            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE -> arrayOf(context.getString(R.string.none), "")
+            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA -> arrayOf(context.getString(R.string.lte_ca), context.getString(R.string.lte_ca_detail))
+            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> arrayOf(context.getString(R.string.lte_advanced_pro), context.getString(R.string.lte_advanced_pro_detail))
+            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> arrayOf(context.getString(R.string.nr_nsa), context.getString(R.string.nr_nsa_detail))
+            // OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE can be removed once the minimum API >= 31.
+            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE -> arrayOf(context.getString(R.string.nr_nsa_mmwave), context.getString(R.string.nr_nsa_mmwave_detail))
+            TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED -> arrayOf(context.getString(R.string.nr_advanced), context.getString(R.string.nr_advanced_detail))
+            else -> arrayOf(context.getString(R.string.error), "")
+        }
+    }
+}
index 54e23e937281a57004921a4ccbd98fb4745e1162..72cc4532f52596b767f9d3eed6e912a9e00a157a 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021,2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -42,4 +42,4 @@ class OnBootCompletedReceiver : BroadcastReceiver() {
             }
         }
     }
             }
         }
     }
-}
\ No newline at end of file
+}
index a48757f987f6cc4fc45b28e3fae6604d91a17c55..72ace814d742aac8de7f08c6e4540ba2205b302e 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -35,6 +35,7 @@ import android.content.pm.PackageManager
 import android.os.Binder
 import android.os.IBinder
 import android.telephony.PhoneStateListener  // This can be replaced by `TelephonyCallback` once the minimum API >= 31.
 import android.os.Binder
 import android.os.IBinder
 import android.telephony.PhoneStateListener  // This can be replaced by `TelephonyCallback` once the minimum API >= 31.
+import android.telephony.ServiceState
 import android.telephony.TelephonyDisplayInfo
 import android.telephony.TelephonyManager
 
 import android.telephony.TelephonyDisplayInfo
 import android.telephony.TelephonyManager
 
@@ -46,6 +47,7 @@ import androidx.work.WorkManager
 
 import com.stoutner.privacycell.R
 import com.stoutner.privacycell.activities.PrivacyCellActivity
 
 import com.stoutner.privacycell.R
 import com.stoutner.privacycell.activities.PrivacyCellActivity
+import com.stoutner.privacycell.helpers.ProtocolHelper
 import com.stoutner.privacycell.workers.RegisterRealtimeListenerWorker
 
 import java.util.concurrent.TimeUnit
 import com.stoutner.privacycell.workers.RegisterRealtimeListenerWorker
 
 import java.util.concurrent.TimeUnit
@@ -65,7 +67,13 @@ class RealtimeMonitoringService : Service() {
 
     // Define the class variables.
     private var currentStatus = ""
 
     // Define the class variables.
     private var currentStatus = ""
+    private var voiceNetworkSecurityStatus = ProtocolHelper.UNPOPULATED
+    private var dataNetworkSecurityStatus = ProtocolHelper.UNPOPULATED
+
+    // Declare the class variables.
+    private lateinit var notificationManager: NotificationManager
     private lateinit var phoneStateListener: PhoneStateListener  // The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
     private lateinit var phoneStateListener: PhoneStateListener  // The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
+    private lateinit var privacyCellPendingIntent: PendingIntent
 
     inner class ServiceBinder : Binder() {
         // Get a copy of this service as a binder.
 
     inner class ServiceBinder : Binder() {
         // Get a copy of this service as a binder.
@@ -81,163 +89,131 @@ class RealtimeMonitoringService : Service() {
         // Get a handle for the shared preferences.
         val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
 
         // Get a handle for the shared preferences.
         val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
 
-        // Get a handle for the notification manager.
-        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
-
-        // Create a notification channel group.
-        notificationManager.createNotificationChannelGroup(NotificationChannelGroup(REALTIME_MONITORING, getString(R.string.realtime_monitoring)))
-
-        // Prepare the notification channels.
-        val secureNetworkChannel = NotificationChannel(SECURE_NETWORK, getString(R.string.secure_network_channel), NotificationManager.IMPORTANCE_HIGH)
-        val insecureNetworkChannel = NotificationChannel(INSECURE_NETWORK, getString(R.string.insecure_network_channel), NotificationManager.IMPORTANCE_HIGH)
-        val antiquatedNetworkChannel = NotificationChannel(ANTIQUATED_NETWORK, getString(R.string.antiquated_network_channel), NotificationManager.IMPORTANCE_HIGH)
-        val unknownNetworkChannel = NotificationChannel(UNKNOWN_NETWORK, getString(R.string.unknown_network_channel), NotificationManager.IMPORTANCE_LOW)
+        // Check to see if realtime monitoring is enabled.  Sometimes the shared preferences can't return a value in time, because Android sucks.
+        // So, the default value is set to true, which is the safest value if the shared preferences can't be queried.
+        if (sharedPreferences.getBoolean(applicationContext.getString(R.string.realtime_monitoring_key), true)) {  // Realtime monitoring is enabled.
+            // Get a handle for the notification manager.
+            notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
 
 
-        // Set the notification channel group.
-        secureNetworkChannel.group = REALTIME_MONITORING
-        insecureNetworkChannel.group = REALTIME_MONITORING
-        antiquatedNetworkChannel.group = REALTIME_MONITORING
-        unknownNetworkChannel.group = REALTIME_MONITORING
+            // Create a notification channel group.
+            notificationManager.createNotificationChannelGroup(NotificationChannelGroup(REALTIME_MONITORING, getString(R.string.realtime_monitoring)))
 
 
-        // Disable the notification dots.
-        secureNetworkChannel.setShowBadge(false)
-        insecureNetworkChannel.setShowBadge(false)
-        antiquatedNetworkChannel.setShowBadge(false)
-        unknownNetworkChannel.setShowBadge(false)
+            // Prepare the notification channels.
+            val secureNetworkChannel = NotificationChannel(SECURE_NETWORK, getString(R.string.secure_network_channel), NotificationManager.IMPORTANCE_HIGH)
+            val insecureNetworkChannel = NotificationChannel(INSECURE_NETWORK, getString(R.string.insecure_network_channel), NotificationManager.IMPORTANCE_HIGH)
+            val antiquatedNetworkChannel = NotificationChannel(ANTIQUATED_NETWORK, getString(R.string.antiquated_network_channel), NotificationManager.IMPORTANCE_HIGH)
+            val unknownNetworkChannel = NotificationChannel(UNKNOWN_NETWORK, getString(R.string.unknown_network_channel), NotificationManager.IMPORTANCE_LOW)
 
 
-        // Set the primary channel notifications to be public.
-        secureNetworkChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
-        insecureNetworkChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
-        antiquatedNetworkChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
+            // Set the notification channel group.
+            secureNetworkChannel.group = REALTIME_MONITORING
+            insecureNetworkChannel.group = REALTIME_MONITORING
+            antiquatedNetworkChannel.group = REALTIME_MONITORING
+            unknownNetworkChannel.group = REALTIME_MONITORING
 
 
-        // Create the notification channels.
-        notificationManager.createNotificationChannel(secureNetworkChannel)
-        notificationManager.createNotificationChannel(insecureNetworkChannel)
-        notificationManager.createNotificationChannel(antiquatedNetworkChannel)
-        notificationManager.createNotificationChannel(unknownNetworkChannel)
+            // Disable the notification dots.
+            secureNetworkChannel.setShowBadge(false)
+            insecureNetworkChannel.setShowBadge(false)
+            antiquatedNetworkChannel.setShowBadge(false)
+            unknownNetworkChannel.setShowBadge(false)
 
 
-        // Create a notification builder.
-        val notificationBuilder = Notification.Builder(this, UNKNOWN_NETWORK)
+            // Set the primary channel notifications to be public.
+            secureNetworkChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
+            insecureNetworkChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
+            antiquatedNetworkChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
 
 
-        // Create an intent to open Privacy Cell.
-        val privacyCellIntent = Intent(this, PrivacyCellActivity::class.java)
+            // Create the notification channels.
+            notificationManager.createNotificationChannel(secureNetworkChannel)
+            notificationManager.createNotificationChannel(insecureNetworkChannel)
+            notificationManager.createNotificationChannel(antiquatedNetworkChannel)
+            notificationManager.createNotificationChannel(unknownNetworkChannel)
 
 
-        // Create a pending intent from the Privacy Cell intent.
-        val privacyCellPendingIntent = PendingIntent.getActivity(this, 0, privacyCellIntent, PendingIntent.FLAG_IMMUTABLE)
+            // Create a notification builder.
+            val notificationBuilder = Notification.Builder(this, UNKNOWN_NETWORK)
 
 
-        // Set the notification to open Privacy Cell.
-        notificationBuilder.setContentIntent(privacyCellPendingIntent)
+            // Create an intent to open Privacy Cell.
+            val privacyCellIntent = Intent(this, PrivacyCellActivity::class.java)
 
 
-        // Set the notification text.
-        notificationBuilder.setContentText(getString(R.string.unknown_network))
+            // Create a pending intent from the Privacy Cell intent.
+            privacyCellPendingIntent = PendingIntent.getActivity(this, 0, privacyCellIntent, PendingIntent.FLAG_IMMUTABLE)
 
 
-        // Set the notification icon.
-        notificationBuilder.setSmallIcon(R.drawable.antiquated_notification_enabled)
+            // Set the notification to open Privacy Cell.
+            notificationBuilder.setContentIntent(privacyCellPendingIntent)
 
 
-        // Set the color.
-        notificationBuilder.setColor(getColor(R.color.red_notification_icon))
+            // Set the notification text.
+            notificationBuilder.setContentText(getString(R.string.unknown_network))
 
 
-        // Start the foreground notification.
-        startForeground(NOTIFICATION_ID, notificationBuilder.build())
+            // Set the notification icon.
+            notificationBuilder.setSmallIcon(R.drawable.antiquated_notification_enabled)
 
 
-        // Define the phone state listener.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
-        phoneStateListener = object : PhoneStateListener() {
-            override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
-                // Get the consider 3G antiquated preference.
-                val consider3gAntiquated = sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)
+            // Set the color.
+            notificationBuilder.setColor(getColor(R.color.red_notification_icon))
 
 
-                // Populate the notification according to the network type.
-                if ((telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_NR) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_IWLAN) ||
-                    (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_UNKNOWN)) {  // This is a secure network.
-                    // Only update the notification if the network status has changed.
-                    if (currentStatus != SECURE_NETWORK) {
-                        // Create a secure network notification builder.
-                        val secureNetworkNotificationBuilder = Notification.Builder(applicationContext, SECURE_NETWORK)
+            // Prevent swiping to dismiss the notification.  This no longer works (except on the lock screen) in API >= 34.
+            notificationBuilder.setOngoing(true)
 
 
-                        // Set the notification to open Privacy Cell.
-                        secureNetworkNotificationBuilder.setContentIntent(privacyCellPendingIntent)
+            // Start the foreground notification.
+            startForeground(NOTIFICATION_ID, notificationBuilder.build())
 
 
-                        // Set the notification text.
-                        secureNetworkNotificationBuilder.setContentText(getString(R.string.secure_network))
+            // Instantiate the protocol helper.
+            val protocolHelper = ProtocolHelper()
 
 
-                        // Set the notification icon.
-                        secureNetworkNotificationBuilder.setSmallIcon(R.drawable.secure_notification_enabled)
-
-                        // Set the color.
-                        secureNetworkNotificationBuilder.setColor(getColor(R.color.blue_icon))
-
-                        // Update the notification.
-                        notificationManager.notify(NOTIFICATION_ID, secureNetworkNotificationBuilder.build())
+            // Get a handle for the telephony manager.
+            val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
 
 
-                        // Store the new network status.
-                        currentStatus = SECURE_NETWORK
-                    }
-                } else if ((telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_LTE) || (!consider3gAntiquated && (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_1xRTT ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_0) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_A) ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EVDO_B) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_EHRPD) ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_UMTS) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_TD_SCDMA) ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSDPA) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSUPA) ||
-                            (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSPA) || (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_HSPAP)))) {
-                            // This is an insecure network.
-                    // Only update the notification if the network status has changed.
-                    if (currentStatus != INSECURE_NETWORK) {
-                        // Create an insecure network notification builder.
-                        val insecureNetworkNotificationBuilder = Notification.Builder(applicationContext, INSECURE_NETWORK)
-
-                        // Set the notification to open Privacy Cell.
-                        insecureNetworkNotificationBuilder.setContentIntent(privacyCellPendingIntent)
-
-                        // Set the notification text.
-                        insecureNetworkNotificationBuilder.setContentText(getString(R.string.insecure_network))
-
-                        // Set the notification icon.
-                        insecureNetworkNotificationBuilder.setSmallIcon(R.drawable.insecure_notification_enabled)
-
-                        // Set the color.
-                        insecureNetworkNotificationBuilder.setColor(getColor(R.color.yellow_notification_icon))
-
-                        // Update the notification.
-                        notificationManager.notify(NOTIFICATION_ID, insecureNetworkNotificationBuilder.build())
-
-                        // Store the new network status.
-                        currentStatus = INSECURE_NETWORK
+            // Define the phone state listener.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
+            phoneStateListener = object : PhoneStateListener() {
+                @Deprecated("Deprecated in Java")
+                override fun onServiceStateChanged(serviceState: ServiceState) {  // Update the voice network status.
+                    // Check to see if realtime monitoring is enabled.  Sometimes the system keeps running the service even when it is supposed to shut down.
+                    if (sharedPreferences.getBoolean(applicationContext.getString(R.string.realtime_monitoring_key), true)) {  // Realtime monitoring is enabled.
+                        // Get the network registration info for the voice network, which is the second of the three entries (the first appears to be Wi-Fi and the third appears to be the cell data network).
+                        val networkRegistrationInfo = serviceState.networkRegistrationInfoList[1]
+
+                        // Get the consider 3G antiquated preference.
+                        val consider3gAntiquated = sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)
+
+                        // Update the voice network security status.
+                        voiceNetworkSecurityStatus = protocolHelper.checkNetwork(networkRegistrationInfo.accessNetworkTechnology, consider3gAntiquated)
+
+                        // Populate the notification.
+                        populateNotification()
+                    } else {  // Realtime monitoring is disabled.
+                        // Cancel the current listener if it exists.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
+                        telephonyManager.listen(phoneStateListener, LISTEN_NONE)
                     }
                     }
-                } else {  // This is an antiquated network.
-                    // Only update the notification if the network status has changed.
-                    if (currentStatus != ANTIQUATED_NETWORK) {
-                        // Create an antiquated network notification builder.
-                        val antiquatedNetworkNotificationBuilder = Notification.Builder(applicationContext, ANTIQUATED_NETWORK)
-
-                        // Set the notification to open Privacy Cell.
-                        antiquatedNetworkNotificationBuilder.setContentIntent(privacyCellPendingIntent)
-
-                        // Set the notification text.
-                        antiquatedNetworkNotificationBuilder.setContentText(getString(R.string.antiquated_network))
-
-                        // Set the notification icon.
-                        antiquatedNetworkNotificationBuilder.setSmallIcon(R.drawable.antiquated_notification_enabled)
-
-                        // Set the color.
-                        antiquatedNetworkNotificationBuilder.setColor(getColor(R.color.red_notification_icon))
-
-                        // Update the notification.
-                        notificationManager.notify(NOTIFICATION_ID, antiquatedNetworkNotificationBuilder.build())
+                }
 
 
-                        // Store the new network status.
-                        currentStatus = ANTIQUATED_NETWORK
+                @Deprecated("Deprecated in Java")
+                override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {  // Update the data network status.
+                    // Check to see if realtime monitoring is enabled.  Sometimes the system keeps running the service even when it is supposed to shut down.
+                    if (sharedPreferences.getBoolean(applicationContext.getString(R.string.realtime_monitoring_key), true)) {  // Realtime monitoring is enabled.
+                        // Get the consider 3G antiquated preference.
+                        val consider3gAntiquated = sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)
+
+                        // Update the data network security status.
+                        dataNetworkSecurityStatus = protocolHelper.checkNetwork(telephonyDisplayInfo.networkType, consider3gAntiquated)
+
+                        // Populate the notification.
+                        populateNotification()
+                    } else {  // Realtime monitoring is disabled.
+                        // Cancel the current listener if it exists.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
+                        telephonyManager.listen(phoneStateListener, LISTEN_NONE)
                     }
                 }
             }
                     }
                 }
             }
-        }
 
 
-        // Check to see if the read phone state permission has been granted.
-        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
-            // Create a register realtime listener work request that fires every hour.
-            // This periodic request will fire shortly after being created (it fires about every hour near the beginning of the hour) and will reregister the listener if it gets garbage collected.
-            val registerRealtimeListenerWorkRequest = PeriodicWorkRequestBuilder<RegisterRealtimeListenerWorker>(1, TimeUnit.HOURS).build()
+            // Check to see if the read phone state permission has been granted.
+            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
+                // Create a register realtime listener work request that fires every fifteen minutes.
+                // This periodic request will fire shortly after being created and will reregister the listener if it gets garbage collected.
+                val registerRealtimeListenerWorkRequest = PeriodicWorkRequestBuilder<RegisterRealtimeListenerWorker>(15, TimeUnit.MINUTES).build()
 
 
-            // Register the realtime listener work request.
-            WorkManager.getInstance(this).enqueueUniquePeriodicWork(getString(R.string.register_listener_work_request), ExistingPeriodicWorkPolicy.REPLACE, registerRealtimeListenerWorkRequest)
+                // Register the realtime listener work request.
+                WorkManager.getInstance(this).enqueueUniquePeriodicWork(getString(R.string.register_listener_work_request), ExistingPeriodicWorkPolicy.REPLACE, registerRealtimeListenerWorkRequest)
+            }
+        } else {  // Realtime monitoring is disabled.  This can happen if the restart listener work request fires after realtime monitoring has been disabled.
+            // Cancel the realtime listener work request.
+            WorkManager.getInstance(applicationContext).cancelUniqueWork(applicationContext.getString(R.string.register_listener_work_request))
         }
 
         // Return a sticky service.
         }
 
         // Return a sticky service.
@@ -254,7 +230,99 @@ class RealtimeMonitoringService : Service() {
             telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE)
 
             // Listen for changes to the phone state.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
             telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE)
 
             // Listen for changes to the phone state.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
-            telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)
+            telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE or PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)
+        }
+    }
+
+    fun populateNotification() {
+        // Get the list of current notifications.
+        val activeNotificationsArray = notificationManager.activeNotifications
+
+        // Check to see if there is a current notification.
+        val noCurrentNotification = activeNotificationsArray.isEmpty()
+
+        // Populate the notification according to the security status.
+        if ((voiceNetworkSecurityStatus == ProtocolHelper.ANTIQUATED) || (dataNetworkSecurityStatus == ProtocolHelper.ANTIQUATED)) {  // This is an antiquated network.
+            // Only update the notification if the network status has changed.
+            if ((currentStatus != ANTIQUATED_NETWORK) || noCurrentNotification) {
+                // Create an antiquated network notification builder.
+                val antiquatedNetworkNotificationBuilder = Notification.Builder(applicationContext, ANTIQUATED_NETWORK)
+
+                // Set the notification to open Privacy Cell.
+                antiquatedNetworkNotificationBuilder.setContentIntent(privacyCellPendingIntent)
+
+                // Set the notification text.
+                antiquatedNetworkNotificationBuilder.setContentText(getString(R.string.antiquated_network))
+
+                // Set the notification icon.
+                antiquatedNetworkNotificationBuilder.setSmallIcon(R.drawable.antiquated_notification_enabled)
+
+                // Set the color.
+                antiquatedNetworkNotificationBuilder.setColor(getColor(R.color.red_notification_icon))
+
+                // Prevent swiping to dismiss the notification.  This no longer works (except on the lock screen) in API >= 34.
+                antiquatedNetworkNotificationBuilder.setOngoing(true)
+
+                // Update the notification.
+                notificationManager.notify(NOTIFICATION_ID, antiquatedNetworkNotificationBuilder.build())
+
+                // Store the new network status.
+                currentStatus = ANTIQUATED_NETWORK
+            }
+        } else if ((voiceNetworkSecurityStatus == ProtocolHelper.INSECURE) || (dataNetworkSecurityStatus == ProtocolHelper.INSECURE)) {  // This is an insecure network.
+            // Only update the notification if the network status has changed.
+            if ((currentStatus != INSECURE_NETWORK) || noCurrentNotification) {
+                // Create an insecure network notification builder.
+                val insecureNetworkNotificationBuilder = Notification.Builder(applicationContext, INSECURE_NETWORK)
+
+                // Set the notification to open Privacy Cell.
+                insecureNetworkNotificationBuilder.setContentIntent(privacyCellPendingIntent)
+
+                // Set the notification text.
+                insecureNetworkNotificationBuilder.setContentText(getString(R.string.insecure_network))
+
+                // Set the notification icon.
+                insecureNetworkNotificationBuilder.setSmallIcon(R.drawable.insecure_notification_enabled)
+
+                // Set the color.
+                insecureNetworkNotificationBuilder.setColor(getColor(R.color.yellow_notification_icon))
+
+                // Prevent swiping to dismiss the notification.  This no longer works (except on the lock screen) in API >= 34.
+                insecureNetworkNotificationBuilder.setOngoing(true)
+
+                // Update the notification.
+                notificationManager.notify(NOTIFICATION_ID, insecureNetworkNotificationBuilder.build())
+
+                // Store the new network status.
+                currentStatus = INSECURE_NETWORK
+            }
+        } else {  // This is a secure network.
+            // Only update the notification if the network status has changed.
+            if ((currentStatus != SECURE_NETWORK) || noCurrentNotification) {
+                // Create a secure network notification builder.
+                val secureNetworkNotificationBuilder = Notification.Builder(applicationContext, SECURE_NETWORK)
+
+                // Set the notification to open Privacy Cell.
+                secureNetworkNotificationBuilder.setContentIntent(privacyCellPendingIntent)
+
+                // Set the notification text.
+                secureNetworkNotificationBuilder.setContentText(getString(R.string.secure_network))
+
+                // Set the notification icon.
+                secureNetworkNotificationBuilder.setSmallIcon(R.drawable.secure_notification_enabled)
+
+                // Set the color.
+                secureNetworkNotificationBuilder.setColor(getColor(R.color.blue_icon))
+
+                // Prevent swiping to dismiss the notification.  This no longer works (except on the lock screen) in API >= 34.
+                secureNetworkNotificationBuilder.setOngoing(true)
+
+                // Update the notification.
+                notificationManager.notify(NOTIFICATION_ID, secureNetworkNotificationBuilder.build())
+
+                // Store the new network status.
+                currentStatus = SECURE_NETWORK
+            }
         }
     }
         }
     }
-}
\ No newline at end of file
+}
index 7fe86d028b06ede04598f9bff6f24642cb06b851..7eeea89b2dfb22e54844605e361477a65995e682 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -46,11 +46,12 @@ class RegisterRealtimeListenerWorker(appContext: Context, workerParameters: Work
         val realtimeMonitoring = sharedPreferences.getBoolean(applicationContext.getString(R.string.realtime_monitoring_key), true)
 
         // Perform the functions according to the realtime monitoring status.
         val realtimeMonitoring = sharedPreferences.getBoolean(applicationContext.getString(R.string.realtime_monitoring_key), true)
 
         // Perform the functions according to the realtime monitoring status.
+        @Suppress("DEPRECATION")  // The deprecated `getRunningServices()` now only returns services started by Privacy Cell, but that is all we want to know anyway.
         if (realtimeMonitoring) {  // Realtime monitoring is enabled.
             // Get a handle for the activity manager.
             val activityManager: ActivityManager = applicationContext.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
 
         if (realtimeMonitoring) {  // Realtime monitoring is enabled.
             // Get a handle for the activity manager.
             val activityManager: ActivityManager = applicationContext.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
 
-            // Get a list of the running service info.  The deprecated `getRunningServices()` now only returns services stared by Privacy Cell, but that is all we want to know anyway.
+            // Get a list of the running service info.  The deprecated `getRunningServices()` now only returns services started by Privacy Cell, but that is all we want to know anyway.
             val runningServiceInfoList: List<ActivityManager.RunningServiceInfo> = activityManager.getRunningServices(1)
 
             // Check to see if the service is currently running.
             val runningServiceInfoList: List<ActivityManager.RunningServiceInfo> = activityManager.getRunningServices(1)
 
             // Check to see if the service is currently running.
@@ -76,6 +77,9 @@ class RegisterRealtimeListenerWorker(appContext: Context, workerParameters: Work
                         // Register the telephony manager listener.
                         realtimeMonitoringService.registerTelephonyManagerListener()
 
                         // Register the telephony manager listener.
                         realtimeMonitoringService.registerTelephonyManagerListener()
 
+                        // Populate the notification, which might have been accidentally dismissed by the user beginning in Android 14.
+                        realtimeMonitoringService.populateNotification()
+
                         // Unbind the service.
                         applicationContext.unbindService(this)
                     }
                         // Unbind the service.
                         applicationContext.unbindService(this)
                     }
@@ -89,6 +93,9 @@ class RegisterRealtimeListenerWorker(appContext: Context, workerParameters: Work
                 applicationContext.bindService(Intent(applicationContext, RealtimeMonitoringService::class.java), serviceConnection, 0)
             }
         } else {  // Realtime monitoring is disabled.
                 applicationContext.bindService(Intent(applicationContext, RealtimeMonitoringService::class.java), serviceConnection, 0)
             }
         } else {  // Realtime monitoring is disabled.
+            // Stop the realtime monitoring service.
+            applicationContext.stopService(Intent(applicationContext, RealtimeMonitoringService::class.java))
+
             // Cancel the realtime listener work request.
             WorkManager.getInstance(applicationContext).cancelUniqueWork(applicationContext.getString(R.string.register_listener_work_request))
         }
             // Cancel the realtime listener work request.
             WorkManager.getInstance(applicationContext).cancelUniqueWork(applicationContext.getString(R.string.register_listener_work_request))
         }
@@ -96,4 +103,4 @@ class RegisterRealtimeListenerWorker(appContext: Context, workerParameters: Work
         // Return a success.
         return Result.success()
     }
         // Return a success.
         return Result.success()
     }
-}
\ No newline at end of file
+}
index 64b4eca93811a434e1e2d55349b18b1b2af16805..ed1fddebd66a3024184aa0cde21adafef044350c 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -22,16 +22,33 @@ package com.stoutner.privacycell.workers
 import android.content.Context
 import android.content.Intent
 
 import android.content.Context
 import android.content.Intent
 
+import androidx.preference.PreferenceManager
+import androidx.work.WorkManager
 import androidx.work.Worker
 import androidx.work.WorkerParameters
 import androidx.work.Worker
 import androidx.work.WorkerParameters
+
+import com.stoutner.privacycell.R
 import com.stoutner.privacycell.services.RealtimeMonitoringService
 
 class RestartServiceWorker(appContext: Context, workerParameters: WorkerParameters) : Worker(appContext, workerParameters) {
     override fun doWork(): Result {
 import com.stoutner.privacycell.services.RealtimeMonitoringService
 
 class RestartServiceWorker(appContext: Context, workerParameters: WorkerParameters) : Worker(appContext, workerParameters) {
     override fun doWork(): Result {
-        // Start the realtime monitoring service as a foreground service, which is required because the worker is running in the background.
-        applicationContext.startForegroundService(Intent(applicationContext, RealtimeMonitoringService::class.java))
+        // Get a handle for the shared preferences.
+        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext)
+
+        // Check to see if realtime monitoring is enabled.  Sometimes the shared preferences can't return a value in time, because Android sucks.
+        // So, the default value is set to true, which is the safest value if the shared preferences can't be queried.
+        if (sharedPreferences.getBoolean(applicationContext.getString(R.string.realtime_monitoring_key), true)) {  // Realtime monitoring is enabled.
+            // Start the realtime monitoring service as a foreground service, which is required because the worker is running in the background.
+            applicationContext.startForegroundService(Intent(applicationContext, RealtimeMonitoringService::class.java))
+        } else {  // Realtime monitoring is disabled.
+            // Stop the realtime monitoring service.
+            applicationContext.stopService(Intent(applicationContext, RealtimeMonitoringService::class.java))
+
+            // Cancel the realtime listener work request.
+            WorkManager.getInstance(applicationContext).cancelUniqueWork(applicationContext.getString(R.string.register_listener_work_request))
+        }
 
         // Return a success.
         return Result.success()
     }
 
         // Return a success.
         return Result.success()
     }
-}
\ No newline at end of file
+}
index 8750d1c14768591c5d4a44df31c4b199fa26bed8..58361dd7d4d859b63d6d8487ac7610750673f48f 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+  Copyright © 2016,2021-2023 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
   This file is derived from `security` and `3g_mobiledata_rounded`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
 
   This file is derived from `security` and `3g_mobiledata_rounded`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
     android:viewportWidth="256" >
 
     <path
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
     android:viewportWidth="256" >
 
     <path
-        android:fillColor="@color/icon_disabled"
-        android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM57.188,83.742l35.405,0c9.737,-0 17.703,7.967 17.703,17.703l0,13.277c0,7.347 -5.931,13.277 -13.277,13.277 7.347,0 13.277,5.931 13.277,13.277l0,13.277c0,9.737 -7.967,17.703 -17.703,17.703l-35.405,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852l35.405,0l0,-17.703l-26.554,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852l26.554,0l0,-17.703l-35.405,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852zM145.703,83.742l53.108,0c4.868,0 8.852,3.983 8.852,8.852 0,4.868 -3.983,8.852 -8.852,8.852l-53.108,0l0,53.109l44.257,0l0,-17.703l-13.277,0c-4.868,0 -8.851,-3.983 -8.851,-8.852 0,-4.868 3.982,-8.852 8.851,-8.852l22.129,0c4.868,0 8.852,3.983 8.852,8.852l0,26.555c0,9.737 -7.967,17.703 -17.703,17.703L145.703,172.258C135.967,172.258 128,164.291 128,154.555L128,101.445c0,-9.737 7.967,-17.703 17.703,-17.703z" />
+        android:fillColor="@color/disabled_icon"
+        android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM57.188,83.742l35.405,0c9.737,-0 17.703,7.967 17.703,17.703l0,13.277c0,7.347 -5.931,13.277 -13.277,13.277 7.347,0 13.277,5.931 13.277,13.277l0,13.277c0,9.737 -7.967,17.703 -17.703,17.703l-35.405,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852l35.405,0l0,-17.703l-26.554,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852l26.554,0l0,-17.703l-35.405,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852zM145.703,83.742l53.108,0c4.868,0 8.852,3.983 8.852,8.852 0,4.868 -3.983,8.852 -8.852,8.852l-53.108,0l0,53.109l44.257,0l0,-17.703l-13.277,0c-4.868,0 -8.851,-3.983 -8.851,-8.852 0,-4.868 3.982,-8.852 8.851,-8.852l22.129,0c4.868,0 8.852,3.983 8.852,8.852l0,26.555c0,9.737 -7.967,17.703 -17.703,17.703L145.703,172.258C135.967,172.258 128,164.291 128,154.555L128,101.445c0,-9.737 7.967,-17.703 17.703,-17.703z"
+        tools:ignore="VectorPath" />
 </vector>
\ No newline at end of file
 </vector>
\ No newline at end of file
index 1d1e63afcfef79450345a5de8ad1f9f74af63b7c..afa86017ebb00cd2e7373a06e4a45dbd8c10ffb4 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+  Copyright © 2016,2021-2023 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
   This file is derived from `security` and `3g_mobiledata_rounded`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
 
   This file is derived from `security` and `3g_mobiledata_rounded`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
@@ -20,6 +20,7 @@
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
@@ -27,5 +28,6 @@
 
     <path
         android:fillColor="@color/red_icon"
 
     <path
         android:fillColor="@color/red_icon"
-        android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM57.188,83.742l35.405,0c9.737,-0 17.703,7.967 17.703,17.703l0,13.277c0,7.347 -5.931,13.277 -13.277,13.277 7.347,0 13.277,5.931 13.277,13.277l0,13.277c0,9.737 -7.967,17.703 -17.703,17.703l-35.405,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852l35.405,0l0,-17.703l-26.554,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852l26.554,0l0,-17.703l-35.405,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852zM145.703,83.742l53.108,0c4.868,0 8.852,3.983 8.852,8.852 0,4.868 -3.983,8.852 -8.852,8.852l-53.108,0l0,53.109l44.257,0l0,-17.703l-13.277,0c-4.868,0 -8.851,-3.983 -8.851,-8.852 0,-4.868 3.982,-8.852 8.851,-8.852l22.129,0c4.868,0 8.852,3.983 8.852,8.852l0,26.555c0,9.737 -7.967,17.703 -17.703,17.703L145.703,172.258C135.967,172.258 128,164.291 128,154.555L128,101.445c0,-9.737 7.967,-17.703 17.703,-17.703z" />
+        android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM57.188,83.742l35.405,0c9.737,-0 17.703,7.967 17.703,17.703l0,13.277c0,7.347 -5.931,13.277 -13.277,13.277 7.347,0 13.277,5.931 13.277,13.277l0,13.277c0,9.737 -7.967,17.703 -17.703,17.703l-35.405,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852l35.405,0l0,-17.703l-26.554,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852l26.554,0l0,-17.703l-35.405,0c-4.868,0 -8.852,-3.983 -8.852,-8.852 0,-4.868 3.983,-8.852 8.852,-8.852zM145.703,83.742l53.108,0c4.868,0 8.852,3.983 8.852,8.852 0,4.868 -3.983,8.852 -8.852,8.852l-53.108,0l0,53.109l44.257,0l0,-17.703l-13.277,0c-4.868,0 -8.851,-3.983 -8.851,-8.852 0,-4.868 3.982,-8.852 8.851,-8.852l22.129,0c4.868,0 8.852,3.983 8.852,8.852l0,26.555c0,9.737 -7.967,17.703 -17.703,17.703L145.703,172.258C135.967,172.258 128,164.291 128,154.555L128,101.445c0,-9.737 7.967,-17.703 17.703,-17.703z"
+        tools:ignore="VectorPath" />
 </vector>
\ No newline at end of file
 </vector>
\ No newline at end of file
index 3d5813669070fe8cf7d8061be384345860b32eed..9413e813c4d587bb183471ce76a5885451e72a50 100644 (file)
@@ -26,6 +26,6 @@
     android:viewportWidth="256" >
 
     <path
     android:viewportWidth="256" >
 
     <path
-        android:fillColor="@color/icon_disabled"
+        android:fillColor="@color/disabled_icon"
         android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM128,46.928c44.752,0 81.072,36.321 81.072,81.072 0,44.752 -36.321,81.072 -81.072,81.072C83.248,209.072 46.928,172.752 46.928,128 46.928,83.248 83.248,46.928 128,46.928ZM128,63.143c-14.998,0 -28.781,5.108 -39.726,13.701L179.156,167.726C187.75,156.781 192.857,142.998 192.857,128 192.857,92.166 163.834,63.143 128,63.143ZM76.844,88.274C68.25,99.219 63.143,113.002 63.143,128c0,35.834 29.024,64.857 64.857,64.857 14.998,0 28.781,-5.108 39.726,-13.701z" />
 </vector>
\ No newline at end of file
         android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM128,46.928c44.752,0 81.072,36.321 81.072,81.072 0,44.752 -36.321,81.072 -81.072,81.072C83.248,209.072 46.928,172.752 46.928,128 46.928,83.248 83.248,46.928 128,46.928ZM128,63.143c-14.998,0 -28.781,5.108 -39.726,13.701L179.156,167.726C187.75,156.781 192.857,142.998 192.857,128 192.857,92.166 163.834,63.143 128,63.143ZM76.844,88.274C68.25,99.219 63.143,113.002 63.143,128c0,35.834 29.024,64.857 64.857,64.857 14.998,0 28.781,-5.108 39.726,-13.701z" />
 </vector>
\ No newline at end of file
index 5f7496ae9aff5d6d1c31f9edfafa49290a63c34f..321ab0ff0e50dad0654dd46648b4bb1c570965e6 100644 (file)
@@ -26,6 +26,6 @@
     android:viewportWidth="256" >
 
     <path
     android:viewportWidth="256" >
 
     <path
-        android:fillColor="@color/icon_ghosted"
+        android:fillColor="@color/ghosted_icon"
         android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM128,46.928c44.752,0 81.072,36.321 81.072,81.072 0,44.752 -36.321,81.072 -81.072,81.072C83.248,209.072 46.928,172.752 46.928,128 46.928,83.248 83.248,46.928 128,46.928ZM128,63.143c-14.998,0 -28.781,5.108 -39.726,13.701L179.156,167.726C187.75,156.781 192.857,142.998 192.857,128 192.857,92.166 163.834,63.143 128,63.143ZM76.844,88.274C68.25,99.219 63.143,113.002 63.143,128c0,35.834 29.024,64.857 64.857,64.857 14.998,0 28.781,-5.108 39.726,-13.701z" />
 </vector>
\ No newline at end of file
         android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM128,46.928c44.752,0 81.072,36.321 81.072,81.072 0,44.752 -36.321,81.072 -81.072,81.072C83.248,209.072 46.928,172.752 46.928,128 46.928,83.248 83.248,46.928 128,46.928ZM128,63.143c-14.998,0 -28.781,5.108 -39.726,13.701L179.156,167.726C187.75,156.781 192.857,142.998 192.857,128 192.857,92.166 163.834,63.143 128,63.143ZM76.844,88.274C68.25,99.219 63.143,113.002 63.143,128c0,35.834 29.024,64.857 64.857,64.857 14.998,0 28.781,-5.108 39.726,-13.701z" />
 </vector>
\ No newline at end of file
index 4aa3d7b4b593d629b169562ac55275b9c3e7ac9f..fe24790e27bd3600712d9e8d1e6912e437386b1a 100644 (file)
@@ -8,6 +8,6 @@
     android:viewportWidth="24" >
 
     <path
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/icon_disabled"
+        android:fillColor="@color/disabled_icon"
         android:pathData="M21,3L3,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,5c0,-1.1 -0.9,-2 -2,-2zM20,19L4,19c-0.55,0 -1,-0.45 -1,-1v-1c0,-0.55 0.45,-1 1,-1h16c0.55,0 1,0.45 1,1v1c0,0.55 -0.45,1 -1,1z" />
 </vector>
\ No newline at end of file
         android:pathData="M21,3L3,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,5c0,-1.1 -0.9,-2 -2,-2zM20,19L4,19c-0.55,0 -1,-0.45 -1,-1v-1c0,-0.55 0.45,-1 1,-1h16c0.55,0 1,0.45 1,1v1c0,0.55 -0.45,1 -1,1z" />
 </vector>
\ No newline at end of file
index 4ccb890087d099bca42d94de33b99226b1f3f868..81b33f1e19abe56f5c8fae2400dd18f30be81601 100644 (file)
@@ -8,6 +8,6 @@
     android:viewportWidth="24" >
 
     <path
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M21,3L3,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,5c0,-1.1 -0.9,-2 -2,-2zM20,19L4,19c-0.55,0 -1,-0.45 -1,-1v-1c0,-0.55 0.45,-1 1,-1h16c0.55,0 1,0.45 1,1v1c0,0.55 -0.45,1 -1,1z" />
 </vector>
\ No newline at end of file
         android:pathData="M21,3L3,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,5c0,-1.1 -0.9,-2 -2,-2zM20,19L4,19c-0.55,0 -1,-0.45 -1,-1v-1c0,-0.55 0.45,-1 1,-1h16c0.55,0 1,0.45 1,1v1c0,0.55 -0.45,1 -1,1z" />
 </vector>
\ No newline at end of file
index 9cb8f8737965b74c364d6e44fcfaff4323b7e157..018a0c6de96941cf3fa9a136419faa3ae74f969c 100644 (file)
@@ -2,12 +2,14 @@
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="24"
     android:viewportWidth="24">
 
     <path
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="24"
     android:viewportWidth="24">
 
     <path
-        android:fillColor="@color/icon_enabled"
-        android:pathData="M19,8h-1.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96l0.93,-0.93c0.39,-0.39 0.39,-1.02 0,-1.41 -0.39,-0.39 -1.02,-0.39 -1.41,0l-1.47,1.47C12.96,5.06 12.49,5 12,5s-0.96,0.06 -1.41,0.17L9.11,3.7c-0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41l0.92,0.93C7.88,6.55 7.26,7.22 6.81,8L5,8c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h1.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L5,12c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h1v1c0,0.34 0.04,0.67 0.09,1L5,16c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h1.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L19,18c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-1.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h1c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-1v-1c0,-0.34 -0.04,-0.67 -0.09,-1L19,10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM13,16h-2c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1h2c0.55,0 1,0.45 1,1s-0.45,1 -1,1zM13,12h-2c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1h2c0.55,0 1,0.45 1,1s-0.45,1 -1,1z" />
+        android:fillColor="@color/blue_icon"
+        android:pathData="M19,8h-1.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96l0.93,-0.93c0.39,-0.39 0.39,-1.02 0,-1.41 -0.39,-0.39 -1.02,-0.39 -1.41,0l-1.47,1.47C12.96,5.06 12.49,5 12,5s-0.96,0.06 -1.41,0.17L9.11,3.7c-0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41l0.92,0.93C7.88,6.55 7.26,7.22 6.81,8L5,8c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h1.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L5,12c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h1v1c0,0.34 0.04,0.67 0.09,1L5,16c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h1.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L19,18c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-1.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h1c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-1v-1c0,-0.34 -0.04,-0.67 -0.09,-1L19,10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM13,16h-2c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1h2c0.55,0 1,0.45 1,1s-0.45,1 -1,1zM13,12h-2c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1h2c0.55,0 1,0.45 1,1s-0.45,1 -1,1z"
+        tools:ignore="VectorPath" />
 </vector>
\ No newline at end of file
 </vector>
\ No newline at end of file
index 87666df7de4120430c91bd7f96358535a4636099..08ce8d30ab7ff272b4e12a1fed33e86afe33976a 100644 (file)
@@ -9,6 +9,6 @@
     android:autoMirrored="true" >
 
     <path
     android:autoMirrored="true" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M4,10.5c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM4,4.5c-0.83,0 -1.5,0.67 -1.5,1.5S3.17,7.5 4,7.5 5.5,6.83 5.5,6 4.83,4.5 4,4.5zM4,16.5c-0.83,0 -1.5,0.68 -1.5,1.5s0.68,1.5 1.5,1.5 1.5,-0.68 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM8,19h12c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L8,17c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM8,13h12c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L8,11c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM7,6c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L8,5c-0.55,0 -1,0.45 -1,1z" />
 </vector>
\ No newline at end of file
         android:pathData="M4,10.5c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM4,4.5c-0.83,0 -1.5,0.67 -1.5,1.5S3.17,7.5 4,7.5 5.5,6.83 5.5,6 4.83,4.5 4,4.5zM4,16.5c-0.83,0 -1.5,0.68 -1.5,1.5s0.68,1.5 1.5,1.5 1.5,-0.68 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM8,19h12c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L8,17c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM8,13h12c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L8,11c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM7,6c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L8,5c-0.55,0 -1,0.45 -1,1z" />
 </vector>
\ No newline at end of file
index 35870ea841bc76607d3518b3170c47dcd6b1eeed..f73c37efaa9a38e50863699592849e131199e164 100644 (file)
@@ -8,6 +8,6 @@
     android:viewportWidth="24" >
 
     <path
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/logcat_icons"
+        android:fillColor="@color/logcat_icon"
         android:pathData="M18.3,5.71c-0.39,-0.39 -1.02,-0.39 -1.41,0L12,10.59 7.11,5.7c-0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41L10.59,12 5.7,16.89c-0.39,0.39 -0.39,1.02 0,1.41 0.39,0.39 1.02,0.39 1.41,0L12,13.41l4.89,4.89c0.39,0.39 1.02,0.39 1.41,0 0.39,-0.39 0.39,-1.02 0,-1.41L13.41,12l4.89,-4.89c0.38,-0.38 0.38,-1.02 0,-1.4z" />
 </vector>
\ No newline at end of file
         android:pathData="M18.3,5.71c-0.39,-0.39 -1.02,-0.39 -1.41,0L12,10.59 7.11,5.7c-0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41L10.59,12 5.7,16.89c-0.39,0.39 -0.39,1.02 0,1.41 0.39,0.39 1.02,0.39 1.41,0L12,13.41l4.89,4.89c0.39,0.39 1.02,0.39 1.41,0 0.39,-0.39 0.39,-1.02 0,-1.41L13.41,12l4.89,-4.89c0.38,-0.38 0.38,-1.02 0,-1.4z" />
 </vector>
\ No newline at end of file
index f61e91eac6dfc9ad2c44ce7dcef3d1826dba2cd3..a19353721d299ec6e6651456079dcf2be3a04a03 100644 (file)
@@ -2,12 +2,12 @@
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="48dp"
-    android:width="48dp"
+    android:height="24dp"
+    android:width="24dp"
     android:viewportHeight="24"
     android:viewportWidth="24" >
 
     <path
     android:viewportHeight="24"
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M12,12.75c1.63,0 3.07,0.39 4.24,0.9c1.08,0.48 1.76,1.56 1.76,2.73L18,18H6l0,-1.61c0,-1.18 0.68,-2.26 1.76,-2.73C8.93,13.14 10.37,12.75 12,12.75zM4,13c1.1,0 2,-0.9 2,-2c0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2C2,12.1 2.9,13 4,13zM5.13,14.1C4.76,14.04 4.39,14 4,14c-0.99,0 -1.93,0.21 -2.78,0.58C0.48,14.9 0,15.62 0,16.43V18l4.5,0v-1.61C4.5,15.56 4.73,14.78 5.13,14.1zM20,13c1.1,0 2,-0.9 2,-2c0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2C18,12.1 18.9,13 20,13zM24,16.43c0,-0.81 -0.48,-1.53 -1.22,-1.85C21.93,14.21 20.99,14 20,14c-0.39,0 -0.76,0.04 -1.13,0.1c0.4,0.68 0.63,1.46 0.63,2.29V18l4.5,0V16.43zM12,6c1.66,0 3,1.34 3,3c0,1.66 -1.34,3 -3,3s-3,-1.34 -3,-3C9,7.34 10.34,6 12,6z" />
 </vector>
\ No newline at end of file
         android:pathData="M12,12.75c1.63,0 3.07,0.39 4.24,0.9c1.08,0.48 1.76,1.56 1.76,2.73L18,18H6l0,-1.61c0,-1.18 0.68,-2.26 1.76,-2.73C8.93,13.14 10.37,12.75 12,12.75zM4,13c1.1,0 2,-0.9 2,-2c0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2C2,12.1 2.9,13 4,13zM5.13,14.1C4.76,14.04 4.39,14 4,14c-0.99,0 -1.93,0.21 -2.78,0.58C0.48,14.9 0,15.62 0,16.43V18l4.5,0v-1.61C4.5,15.56 4.73,14.78 5.13,14.1zM20,13c1.1,0 2,-0.9 2,-2c0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2C18,12.1 18.9,13 20,13zM24,16.43c0,-0.81 -0.48,-1.53 -1.22,-1.85C21.93,14.21 20.99,14 20,14c-0.39,0 -0.76,0.04 -1.13,0.1c0.4,0.68 0.63,1.46 0.63,2.29V18l4.5,0V16.43zM12,6c1.66,0 3,1.34 3,3c0,1.66 -1.34,3 -3,3s-3,-1.34 -3,-3C9,7.34 10.34,6 12,6z" />
 </vector>
\ No newline at end of file
index f51eb871bfc2e3abaf10fcfa2ea1b9f94e4bda80..8488b34d6bf1fb58a5d635fa5b008664df64d654 100644 (file)
@@ -9,6 +9,6 @@
     android:autoMirrored="true" >
 
     <path
     android:autoMirrored="true" >
 
     <path
-        android:fillColor="@color/logcat_icons"
+        android:fillColor="@color/logcat_icon"
         android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z" />
 </vector>
\ No newline at end of file
         android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z" />
 </vector>
\ No newline at end of file
index 81b4ab7970ef55e39e3989efec104b9de72dcf56..61cbe43ad0e599813e392f018b4114b6e0b675e3 100644 (file)
@@ -9,6 +9,6 @@
     android:autoMirrored="true" >
 
     <path
     android:autoMirrored="true" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M23,8v10c0,1.1 -0.9,2 -2,2H5c-0.55,0 -1,-0.45 -1,-1c0,-0.55 0.45,-1 1,-1h16V8c0,-0.55 0.45,-1 1,-1S23,7.45 23,8zM4,16c-1.66,0 -3,-1.34 -3,-3V7c0,-1.66 1.34,-3 3,-3h12c1.66,0 3,1.34 3,3v7c0,1.1 -0.9,2 -2,2H4zM7,10c0,1.66 1.34,3 3,3s3,-1.34 3,-3s-1.34,-3 -3,-3S7,8.34 7,10z" />
 </vector>
\ No newline at end of file
         android:pathData="M23,8v10c0,1.1 -0.9,2 -2,2H5c-0.55,0 -1,-0.45 -1,-1c0,-0.55 0.45,-1 1,-1h16V8c0,-0.55 0.45,-1 1,-1S23,7.45 23,8zM4,16c-1.66,0 -3,-1.34 -3,-3V7c0,-1.66 1.34,-3 3,-3h12c1.66,0 3,1.34 3,3v7c0,1.1 -0.9,2 -2,2H4zM7,10c0,1.66 1.34,3 3,3s3,-1.34 3,-3s-1.34,-3 -3,-3S7,8.34 7,10z" />
 </vector>
\ No newline at end of file
index bc94ff3f32ff80419381fd28186295c4475620a8..4d1a0b6a471d763d6cc62c6c2ab66f4c8ab233b2 100644 (file)
@@ -9,6 +9,6 @@
     android:autoMirrored="true" >
 
     <path
     android:autoMirrored="true" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M20,6h-1v8c0,0.55 -0.45,1 -1,1L6,15v1c0,1.1 0.9,2 2,2h10l4,4L22,8c0,-1.1 -0.9,-2 -2,-2zM17,11L17,4c0,-1.1 -0.9,-2 -2,-2L4,2c-1.1,0 -2,0.9 -2,2v13l4,-4h9c1.1,0 2,-0.9 2,-2z" />
 </vector>
\ No newline at end of file
         android:pathData="M20,6h-1v8c0,0.55 -0.45,1 -1,1L6,15v1c0,1.1 0.9,2 2,2h10l4,4L22,8c0,-1.1 -0.9,-2 -2,-2zM17,11L17,4c0,-1.1 -0.9,-2 -2,-2L4,2c-1.1,0 -2,0.9 -2,2v13l4,-4h9c1.1,0 2,-0.9 2,-2z" />
 </vector>
\ No newline at end of file
index 0bd2267cb102bead171fbb809b6caf50e41c4387..2e90c583242e703afeade3725e292d2ba8aefd31 100644 (file)
@@ -26,6 +26,6 @@
     android:viewportWidth="256" >
 
     <path
     android:viewportWidth="256" >
 
     <path
-        android:fillColor="@color/icon_disabled"
+        android:fillColor="@color/disabled_icon"
         android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM128.017,31.444c5.849,0 11.699,2.977 15.048,8.931l65.493,116.475c6.697,11.907 -1.652,26.858 -15.047,26.858l-130.987,0c-13.394,0 -21.744,-14.951 -15.047,-26.858L112.97,40.375c3.349,-5.954 9.198,-8.931 15.047,-8.931zM128.017,49.327 L62.523,165.803l130.987,0zM128.017,85.228c4.784,0 8.698,4.029 8.698,8.953l0,17.905c0,4.924 -3.915,8.953 -8.698,8.953 -4.784,0 -8.697,-4.029 -8.697,-8.953l0,-17.905c0,-4.924 3.914,-8.953 8.697,-8.953zM119.319,138.944l17.396,0l0,17.905l-17.396,0z" />
 </vector>
\ No newline at end of file
         android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM128.017,31.444c5.849,0 11.699,2.977 15.048,8.931l65.493,116.475c6.697,11.907 -1.652,26.858 -15.047,26.858l-130.987,0c-13.394,0 -21.744,-14.951 -15.047,-26.858L112.97,40.375c3.349,-5.954 9.198,-8.931 15.047,-8.931zM128.017,49.327 L62.523,165.803l130.987,0zM128.017,85.228c4.784,0 8.698,4.029 8.698,8.953l0,17.905c0,4.924 -3.915,8.953 -8.698,8.953 -4.784,0 -8.697,-4.029 -8.697,-8.953l0,-17.905c0,-4.924 3.914,-8.953 8.697,-8.953zM119.319,138.944l17.396,0l0,17.905l-17.396,0z" />
 </vector>
\ No newline at end of file
index b2c70e3015c84f0039faef50956f11bdd4f77d18..261c954bf31bf7cf496ff2d191ff6659a4f78acb 100644 (file)
@@ -26,6 +26,6 @@
     android:viewportWidth="256" >
 
     <path
     android:viewportWidth="256" >
 
     <path
-        android:fillColor="@color/icon_ghosted"
+        android:fillColor="@color/ghosted_icon"
         android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM128.017,31.444c5.849,0 11.699,2.977 15.048,8.931l65.493,116.475c6.697,11.907 -1.652,26.858 -15.047,26.858l-130.987,0c-13.394,0 -21.744,-14.951 -15.047,-26.858L112.97,40.375c3.349,-5.954 9.198,-8.931 15.047,-8.931zM128.017,49.327 L62.523,165.803l130.987,0zM128.017,85.228c4.784,0 8.698,4.029 8.698,8.953l0,17.905c0,4.924 -3.915,8.953 -8.698,8.953 -4.784,0 -8.697,-4.029 -8.697,-8.953l0,-17.905c0,-4.924 3.914,-8.953 8.697,-8.953zM119.319,138.944l17.396,0l0,17.905l-17.396,0z" />
 </vector>
\ No newline at end of file
         android:pathData="M128,0 L23.272,46.546L23.272,116.363C23.272,180.945 67.956,241.338 128,256 188.044,241.338 232.728,180.945 232.728,116.363L232.728,46.546ZM128.017,31.444c5.849,0 11.699,2.977 15.048,8.931l65.493,116.475c6.697,11.907 -1.652,26.858 -15.047,26.858l-130.987,0c-13.394,0 -21.744,-14.951 -15.047,-26.858L112.97,40.375c3.349,-5.954 9.198,-8.931 15.047,-8.931zM128.017,49.327 L62.523,165.803l130.987,0zM128.017,85.228c4.784,0 8.698,4.029 8.698,8.953l0,17.905c0,4.924 -3.915,8.953 -8.698,8.953 -4.784,0 -8.697,-4.029 -8.697,-8.953l0,-17.905c0,-4.924 3.914,-8.953 8.697,-8.953zM119.319,138.944l17.396,0l0,17.905l-17.396,0z" />
 </vector>
\ No newline at end of file
index cd03a6143a253e0065579f27dcd42ba5cef29ff7..9b74891d39a51024de697de0af094ae57684553f 100644 (file)
@@ -9,6 +9,6 @@
     android:autoMirrored="true" >
 
     <path
     android:autoMirrored="true" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M14.17,5L19,9.83V19H5V5L14.17,5L14.17,5M14.17,3H5C3.9,3 3,3.9 3,5v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V9.83c0,-0.53 -0.21,-1.04 -0.59,-1.41l-4.83,-4.83C15.21,3.21 14.7,3 14.17,3L14.17,3zM7,15h10v2H7V15zM7,11h10v2H7V11zM7,7h7v2H7V7z" />
 </vector>
\ No newline at end of file
         android:pathData="M14.17,5L19,9.83V19H5V5L14.17,5L14.17,5M14.17,3H5C3.9,3 3,3.9 3,5v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V9.83c0,-0.53 -0.21,-1.04 -0.59,-1.41l-4.83,-4.83C15.21,3.21 14.7,3 14.17,3L14.17,3zM7,15h10v2H7V15zM7,11h10v2H7V11zM7,7h7v2H7V7z" />
 </vector>
\ No newline at end of file
index 1024d6abc8586f23254ebbb88275a850fd7368d7..a0e1338b21cd0e24c142a5b21e37fb269ca76598 100644 (file)
@@ -1,7 +1,8 @@
-<!-- This file comes from the Android Material icon set, where it is called `chrome_reader_mode_rounded`.  It is released under the Apache License 2.0. -->
+<!-- This file comes from the Android Material icon set, where it is called `list_alt_rounded_24`.  It is released under the Apache License 2.0. -->
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="24"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="24"
@@ -9,6 +10,7 @@
     android:autoMirrored="true" >
 
     <path
     android:autoMirrored="true" >
 
     <path
-        android:fillColor="@color/icon_enabled"
-        android:pathData="M12,9h4c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-4c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM12,13h4c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-4c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM12,17h4c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-4c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM7,7h2v2L7,9zM7,11h2v2L7,13zM7,15h2v2L7,17zM20,3L4,3c-0.55,0 -1,0.45 -1,1v16c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1L21,4c0,-0.55 -0.45,-1 -1,-1zM19,19L5,19L5,5h14v14z" />
-</vector>
\ No newline at end of file
+        android:fillColor="@color/blue_icon"
+        android:pathData="M5,21q-0.825,0 -1.413,-0.587Q3,19.825 3,19L3,5q0,-0.825 0.587,-1.413Q4.175,3 5,3h14q0.825,0 1.413,0.587Q21,4.175 21,5v14q0,0.825 -0.587,1.413Q19.825,21 19,21ZM5,19h14L19,5L5,5v14ZM8,17q0.425,0 0.713,-0.288Q9,16.425 9,16t-0.287,-0.713Q8.425,15 8,15t-0.713,0.287Q7,15.575 7,16t0.287,0.712Q7.575,17 8,17ZM8,13q0.425,0 0.713,-0.288Q9,12.425 9,12t-0.287,-0.713Q8.425,11 8,11t-0.713,0.287Q7,11.575 7,12t0.287,0.712Q7.575,13 8,13ZM8,9q0.425,0 0.713,-0.288Q9,8.425 9,8t-0.287,-0.713Q8.425,7 8,7t-0.713,0.287Q7,7.575 7,8t0.287,0.712Q7.575,9 8,9ZM12,17h4q0.425,0 0.712,-0.288Q17,16.425 17,16t-0.288,-0.713Q16.425,15 16,15h-4q-0.425,0 -0.712,0.287Q11,15.575 11,16t0.288,0.712Q11.575,17 12,17ZM12,13h4q0.425,0 0.712,-0.288Q17,12.425 17,12t-0.288,-0.713Q16.425,11 16,11h-4q-0.425,0 -0.712,0.287Q11,11.575 11,12t0.288,0.712Q11.575,13 12,13ZM12,9h4q0.425,0 0.712,-0.288Q17,8.425 17,8t-0.288,-0.713Q16.425,7 16,7h-4q-0.425,0 -0.712,0.287Q11,7.575 11,8t0.288,0.712Q11.575,9 12,9ZM5,19L5,5v14Z"
+        tools:ignore="VectorPath" />
+</vector>
index cefd2fda8fd7a2bb8c557c81bf9c3b8f4de5ae5c..5d70ee1fef5b8021ed05a1a5298dee0251c1abbd 100644 (file)
@@ -9,6 +9,6 @@
     android:autoMirrored="true" >
 
     <path
     android:autoMirrored="true" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M21,4L3,4c-1.1,0 -2,0.9 -2,2v13c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,6c0,-1.1 -0.9,-2 -2,-2zM21,18c0,0.55 -0.45,1 -1,1h-8L12,6h8c0.55,0 1,0.45 1,1v11zM19.25,9.5h-5.5c-0.41,0 -0.75,0.34 -0.75,0.75s0.34,0.75 0.75,0.75h5.5c0.41,0 0.75,-0.34 0.75,-0.75s-0.34,-0.75 -0.75,-0.75zM19.25,12h-5.5c-0.41,0 -0.75,0.34 -0.75,0.75s0.34,0.75 0.75,0.75h5.5c0.41,0 0.75,-0.34 0.75,-0.75s-0.34,-0.75 -0.75,-0.75zM19.25,14.5h-5.5c-0.41,0 -0.75,0.34 -0.75,0.75s0.34,0.75 0.75,0.75h5.5c0.41,0 0.75,-0.34 0.75,-0.75s-0.34,-0.75 -0.75,-0.75z" />
         android:pathData="M21,4L3,4c-1.1,0 -2,0.9 -2,2v13c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,6c0,-1.1 -0.9,-2 -2,-2zM21,18c0,0.55 -0.45,1 -1,1h-8L12,6h8c0.55,0 1,0.45 1,1v11zM19.25,9.5h-5.5c-0.41,0 -0.75,0.34 -0.75,0.75s0.34,0.75 0.75,0.75h5.5c0.41,0 0.75,-0.34 0.75,-0.75s-0.34,-0.75 -0.75,-0.75zM19.25,12h-5.5c-0.41,0 -0.75,0.34 -0.75,0.75s0.34,0.75 0.75,0.75h5.5c0.41,0 0.75,-0.34 0.75,-0.75s-0.34,-0.75 -0.75,-0.75zM19.25,14.5h-5.5c-0.41,0 -0.75,0.34 -0.75,0.75s0.34,0.75 0.75,0.75h5.5c0.41,0 0.75,-0.34 0.75,-0.75s-0.34,-0.75 -0.75,-0.75z" />
-</vector>
\ No newline at end of file
+</vector>
diff --git a/app/src/main/res/drawable/notification_permission.xml b/app/src/main/res/drawable/notification_permission.xml
new file mode 100644 (file)
index 0000000..24cb942
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- This file comes from the Android Material icon set, where it is called `notification_important_rounded_filled`.  It is released under the Apache License 2.0. -->
+
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="48dp"
+    android:width="48dp"
+    android:viewportHeight="48"
+    android:viewportWidth="48" >
+
+    <path
+        android:fillColor="@color/blue_icon"
+        android:pathData="M24,26.6q0.65,0 1.075,-0.425 0.425,-0.425 0.425,-1.075v-7.6q0,-0.65 -0.425,-1.075Q24.65,16 24,16q-0.65,0 -1.075,0.425 -0.425,0.425 -0.425,1.075v7.6q0,0.65 0.425,1.075 0.425,0.425 1.075,0.425ZM24,32q0.7,0 1.175,-0.475 0.475,-0.475 0.475,-1.175 0,-0.7 -0.475,-1.175Q24.7,28.7 24,28.7q-0.7,0 -1.175,0.475 -0.475,0.475 -0.475,1.175 0,0.7 0.475,1.175Q23.3,32 24,32ZM9.5,38q-0.65,0 -1.075,-0.425Q8,37.15 8,36.5q0,-0.65 0.425,-1.075Q8.85,35 9.5,35h2.7L12.2,19.7q0,-4.1 2.475,-7.425T21.2,8.1L21.2,6.65q0,-1.15 0.825,-1.9T24,4q1.15,0 1.975,0.75 0.825,0.75 0.825,1.9L26.8,8.1q4.05,0.85 6.55,4.175 2.5,3.325 2.5,7.425L35.85,35h2.65q0.65,0 1.075,0.425Q40,35.85 40,36.5q0,0.65 -0.425,1.075Q39.15,38 38.5,38ZM24,44q-1.6,0 -2.8,-1.175Q20,41.65 20,40h8q0,1.65 -1.175,2.825Q25.65,44 24,44Z" />
+</vector>
index 3578a4d3ec4acd702e397a63442b9b529d81ab68..bae4fa9f9ca07689bdb7555da9955b9f98288c85 100644 (file)
@@ -8,22 +8,22 @@
     android:viewportWidth="24" >
 
     <path
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M20,3H4C2.9,3 2,3.9 2,5v14c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V5C22,3.9 21.1,3 20,3zM20,19H4V5h16V19z" />
 
     <path
         android:pathData="M20,3H4C2.9,3 2,3.9 2,5v14c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V5C22,3.9 21.1,3 20,3zM20,19H4V5h16V19z" />
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M19.41,10.42l-1.42,-1.42l-3.17,3.17l-1.41,-1.42l-1.41,1.41l2.82,2.84z" />
 
     <path
         android:pathData="M19.41,10.42l-1.42,-1.42l-3.17,3.17l-1.41,-1.42l-1.41,1.41l2.82,2.84z" />
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M5,7h5v2h-5z" />
 
     <path
         android:pathData="M5,7h5v2h-5z" />
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M5,11h5v2h-5z" />
 
     <path
         android:pathData="M5,11h5v2h-5z" />
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M5,15h5v2h-5z" />
 </vector>
         android:pathData="M5,15h5v2h-5z" />
 </vector>
index 4a43a3093e7b369acefc4d08e06ca34723746504..12f65df70dd741fa5e4def62d9ec757b785acf8b 100644 (file)
@@ -7,6 +7,6 @@
     android:viewportWidth="24">
 
     <path
     android:viewportWidth="24">
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M16,1L8,1C6.34,1 5,2.34 5,4v16c0,1.66 1.34,3 3,3h8c1.66,0 3,-1.34 3,-3L19,4c0,-1.66 -1.34,-3 -3,-3zM14,21h-4v-1h4v1zM17.25,18L6.75,18L6.75,4h10.5v14z" />
 </vector>
         android:pathData="M16,1L8,1C6.34,1 5,2.34 5,4v16c0,1.66 1.34,3 3,3h8c1.66,0 3,-1.34 3,-3L19,4c0,-1.66 -1.34,-3 -3,-3zM14,21h-4v-1h4v1zM17.25,18L6.75,18L6.75,4h10.5v14z" />
 </vector>
diff --git a/app/src/main/res/drawable/privacy_cell_monochrome.xml b/app/src/main/res/drawable/privacy_cell_monochrome.xml
new file mode 100644 (file)
index 0000000..2760c7c
--- /dev/null
@@ -0,0 +1,40 @@
+<!--
+  Copyright © 2016,2021-2023 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+
+  This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
+
+  This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+
+  Privacy Cell 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.
+
+  Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:height="108dp"
+    android:width="108dp"
+    android:viewportHeight="256"
+    android:viewportWidth="256" >
+
+    <group
+        android:scaleX="0.4888889"
+        android:scaleY="0.4888889"
+        android:translateX="65.422226"
+        android:translateY="65.422226" >
+
+        <path
+            android:fillColor="@color/black"
+            android:pathData="M128,0 L23.27,46.55L23.27,116.36c-0,64.58 44.68,124.97 104.73,139.64 60.04,-14.66 104.73,-75.05 104.73,-139.64L232.73,46.55ZM54.85,76.63l48.66,0c4.54,0 8.11,3.57 8.11,8.11 0,4.54 -3.57,8.11 -8.11,8.11l-40.55,0l0,24.33l32.44,0c8.92,0 16.22,7.3 16.22,16.22l0,24.33c0,8.92 -7.3,16.22 -16.22,16.22l-40.55,0c-4.54,0 -8.11,-3.57 -8.11,-8.11 0,-4.54 3.57,-8.11 8.11,-8.11l40.55,0l0,-24.33l-40.55,0c-4.54,0 -8.11,-3.57 -8.11,-8.11l0,-40.55c0,-4.54 3.57,-8.11 8.11,-8.11zM144.05,76.63l56.76,0c4.54,0 8.11,3.57 8.11,8.11 0,4.54 -3.57,8.11 -8.11,8.11L144.05,92.85l0,64.87l48.66,0l0,-24.33l-24.33,0c-4.54,0 -8.11,-3.57 -8.11,-8.11 0,-4.54 3.57,-8.11 8.11,-8.11l32.44,0c4.54,0 8.11,3.57 8.11,8.11l0,32.44c0,8.92 -7.3,16.22 -16.22,16.22L144.05,173.94c-8.92,0 -16.22,-7.3 -16.22,-16.22L127.84,92.85c0,-8.92 7.3,-16.22 16.22,-16.22z"
+            tools:ignore="VectorPath" />
+    </group>
+</vector>
index 1e0b7ad2e8ec6d277fd1446e0666d09f0d6f59e3..b2ea3b57d9c17c967a15acf69a1222df3428d8b5 100644 (file)
@@ -8,10 +8,10 @@
     android:viewportWidth="24" >
 
     <path
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M21,5l-9,-4L3,5v6c0,5.55 3.84,10.74 9,12c2.3,-0.56 4.33,-1.9 5.88,-3.71l-3.12,-3.12c-1.94,1.29 -4.58,1.07 -6.29,-0.64c-1.95,-1.95 -1.95,-5.12 0,-7.07c1.95,-1.95 5.12,-1.95 7.07,0c1.71,1.71 1.92,4.35 0.64,6.29l2.9,2.9C20.29,15.69 21,13.38 21,11V5z" />
 
     <path
         android:pathData="M21,5l-9,-4L3,5v6c0,5.55 3.84,10.74 9,12c2.3,-0.56 4.33,-1.9 5.88,-3.71l-3.12,-3.12c-1.94,1.29 -4.58,1.07 -6.29,-0.64c-1.95,-1.95 -1.95,-5.12 0,-7.07c1.95,-1.95 5.12,-1.95 7.07,0c1.71,1.71 1.92,4.35 0.64,6.29l2.9,2.9C20.29,15.69 21,13.38 21,11V5z" />
 
     <path
-          android:fillColor="@color/icon_enabled"
+          android:fillColor="@color/blue_icon"
           android:pathData="M12,12m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0" />
 </vector>
\ No newline at end of file
           android:pathData="M12,12m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0" />
 </vector>
\ No newline at end of file
index ea5cd78bc990001d27a64d89939c4d21f8255378..6b4efb48a47d666d36d58991bfc4fb7616e8f81d 100644 (file)
@@ -8,6 +8,6 @@
     android:viewportWidth="24" >
 
     <path
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M12,5c-3.87,0 -7,3.13 -7,7h2c0,-2.76 2.24,-5 5,-5s5,2.24 5,5h2c0,-3.87 -3.13,-7 -7,-7zM13,14.29c0.88,-0.39 1.5,-1.26 1.5,-2.29 0,-1.38 -1.12,-2.5 -2.5,-2.5S9.5,10.62 9.5,12c0,1.02 0.62,1.9 1.5,2.29v3.3L7.59,21 9,22.41l3,-3 3,3L16.41,21 13,17.59v-3.3zM12,1C5.93,1 1,5.93 1,12h2c0,-4.97 4.03,-9 9,-9s9,4.03 9,9h2c0,-6.07 -4.93,-11 -11,-11z" />
 </vector>
\ No newline at end of file
         android:pathData="M12,5c-3.87,0 -7,3.13 -7,7h2c0,-2.76 2.24,-5 5,-5s5,2.24 5,5h2c0,-3.87 -3.13,-7 -7,-7zM13,14.29c0.88,-0.39 1.5,-1.26 1.5,-2.29 0,-1.38 -1.12,-2.5 -2.5,-2.5S9.5,10.62 9.5,12c0,1.02 0.62,1.9 1.5,2.29v3.3L7.59,21 9,22.41l3,-3 3,3L16.41,21 13,17.59v-3.3zM12,1C5.93,1 1,5.93 1,12h2c0,-4.97 4.03,-9 9,-9s9,4.03 9,9h2c0,-6.07 -4.93,-11 -11,-11z" />
 </vector>
\ No newline at end of file
index e0075d5f66b479bae2a5e1eb2a5dbb8ac41c8fc6..bebdbcbefa7b334cb2b1f43501272603ff374497 100644 (file)
@@ -8,6 +8,6 @@
     android:viewportWidth="24" >
 
     <path
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/icon_enabled"
+        android:fillColor="@color/blue_icon"
         android:pathData="M14.65,4.98l-5,-1.75c-0.42,-0.15 -0.88,-0.15 -1.3,-0.01L4.36,4.56C3.55,4.84 3,5.6 3,6.46v11.85c0,1.41 1.41,2.37 2.72,1.86l2.93,-1.14c0.22,-0.09 0.47,-0.09 0.69,-0.01l5,1.75c0.42,0.15 0.88,0.15 1.3,0.01l3.99,-1.34c0.81,-0.27 1.36,-1.04 1.36,-1.9V5.69c0,-1.41 -1.41,-2.37 -2.72,-1.86l-2.93,1.14c-0.22,0.08 -0.46,0.09 -0.69,0.01zM15,18.89l-6,-2.11V5.11l6,2.11v11.67z" />
 </vector>
\ No newline at end of file
         android:pathData="M14.65,4.98l-5,-1.75c-0.42,-0.15 -0.88,-0.15 -1.3,-0.01L4.36,4.56C3.55,4.84 3,5.6 3,6.46v11.85c0,1.41 1.41,2.37 2.72,1.86l2.93,-1.14c0.22,-0.09 0.47,-0.09 0.69,-0.01l5,1.75c0.42,0.15 0.88,0.15 1.3,0.01l3.99,-1.34c0.81,-0.27 1.36,-1.04 1.36,-1.9V5.69c0,-1.41 -1.41,-2.37 -2.72,-1.86l-2.93,1.14c-0.22,0.08 -0.46,0.09 -0.69,0.01zM15,18.89l-6,-2.11V5.11l6,2.11v11.67z" />
 </vector>
\ No newline at end of file
index 1705dc1b6bd2f148d14d11648d9c178798f03516..3d1e203927c31f2eec54c24a50c6208d85ef4947 100644 (file)
@@ -8,6 +8,6 @@
     android:viewportWidth="24" >
 
     <path
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/logcat_icons"
+        android:fillColor="@color/logcat_icon"
         android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM19,19L5,19L5,5h11.17L19,7.83L19,19zM12,12c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3zM6,6h9v4L6,10z" />
 </vector>
\ No newline at end of file
         android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM19,19L5,19L5,5h11.17L19,7.83L19,19zM12,12c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3zM6,6h9v4L6,10z" />
 </vector>
\ No newline at end of file
index fe4548415e93a7d26d71dd99aae71ba9c46ee4de..c28c7f2ab69830f81f57ba9aa55151b4a04533bf 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+  Copyright © 2016,2021-2023 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
   This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
 
   This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
     android:viewportWidth="256" >
 
     <path
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
     android:viewportWidth="256" >
 
     <path
-        android:fillColor="@color/icon_disabled"
-        android:pathData="M128,0 L23.273,46.545L23.273,116.364c-0,64.582 44.684,124.974 104.727,139.636 60.044,-14.662 104.727,-75.054 104.727,-139.636L232.727,46.545ZM54.852,76.633l48.656,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109l-40.547,0l0,24.327l32.437,0c8.92,0 16.219,7.298 16.219,16.219l0,24.328c0,8.92 -7.298,16.219 -16.219,16.219l-40.546,0c-4.541,0 -8.11,-3.569 -8.11,-8.11 0,-4.541 3.569,-8.109 8.11,-8.109l40.546,0l0,-24.328l-40.546,0c-4.541,0 -8.11,-3.568 -8.11,-8.109l0,-40.546c0,-4.541 3.569,-8.11 8.11,-8.11zM144.054,76.633l56.765,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109L144.054,92.852l0,64.874l48.656,0l0,-24.328l-24.328,0c-4.541,0 -8.109,-3.568 -8.109,-8.109 0,-4.541 3.568,-8.11 8.109,-8.11l32.437,0c4.541,0 8.109,3.569 8.109,8.11l0,32.437c0,8.92 -7.297,16.219 -16.218,16.219L144.054,173.945c-8.92,0 -16.219,-7.298 -16.219,-16.219L127.835,92.852c0,-8.92 7.298,-16.219 16.219,-16.219z" />
+        android:fillColor="@color/disabled_icon"
+        android:pathData="M128,0 L23.273,46.545L23.273,116.364c-0,64.582 44.684,124.974 104.727,139.636 60.044,-14.662 104.727,-75.054 104.727,-139.636L232.727,46.545ZM54.852,76.633l48.656,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109l-40.547,0l0,24.327l32.437,0c8.92,0 16.219,7.298 16.219,16.219l0,24.328c0,8.92 -7.298,16.219 -16.219,16.219l-40.546,0c-4.541,0 -8.11,-3.569 -8.11,-8.11 0,-4.541 3.569,-8.109 8.11,-8.109l40.546,0l0,-24.328l-40.546,0c-4.541,0 -8.11,-3.568 -8.11,-8.109l0,-40.546c0,-4.541 3.569,-8.11 8.11,-8.11zM144.054,76.633l56.765,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109L144.054,92.852l0,64.874l48.656,0l0,-24.328l-24.328,0c-4.541,0 -8.109,-3.568 -8.109,-8.109 0,-4.541 3.568,-8.11 8.109,-8.11l32.437,0c4.541,0 8.109,3.569 8.109,8.11l0,32.437c0,8.92 -7.297,16.219 -16.218,16.219L144.054,173.945c-8.92,0 -16.219,-7.298 -16.219,-16.219L127.835,92.852c0,-8.92 7.298,-16.219 16.219,-16.219z"
+        tools:ignore="VectorPath" />
 </vector>
\ No newline at end of file
 </vector>
\ No newline at end of file
index 83bd9c15827a42b6c57fdd4ed410860eab185be5..6520b5257bcca2a65f0007f24379607fad8d0efd 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+  Copyright © 2016,2021-2023 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
   This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
 
   This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
@@ -20,6 +20,7 @@
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
@@ -27,5 +28,6 @@
 
     <path
         android:fillColor="@color/blue_icon"
 
     <path
         android:fillColor="@color/blue_icon"
-        android:pathData="M128,0 L23.273,46.545L23.273,116.364c-0,64.582 44.684,124.974 104.727,139.636 60.044,-14.662 104.727,-75.054 104.727,-139.636L232.727,46.545ZM54.852,76.633l48.656,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109l-40.547,0l0,24.327l32.437,0c8.92,0 16.219,7.298 16.219,16.219l0,24.328c0,8.92 -7.298,16.219 -16.219,16.219l-40.546,0c-4.541,0 -8.11,-3.569 -8.11,-8.11 0,-4.541 3.569,-8.109 8.11,-8.109l40.546,0l0,-24.328l-40.546,0c-4.541,0 -8.11,-3.568 -8.11,-8.109l0,-40.546c0,-4.541 3.569,-8.11 8.11,-8.11zM144.054,76.633l56.765,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109L144.054,92.852l0,64.874l48.656,0l0,-24.328l-24.328,0c-4.541,0 -8.109,-3.568 -8.109,-8.109 0,-4.541 3.568,-8.11 8.109,-8.11l32.437,0c4.541,0 8.109,3.569 8.109,8.11l0,32.437c0,8.92 -7.297,16.219 -16.218,16.219L144.054,173.945c-8.92,0 -16.219,-7.298 -16.219,-16.219L127.835,92.852c0,-8.92 7.298,-16.219 16.219,-16.219z" />
+        android:pathData="M128,0 L23.273,46.545L23.273,116.364c-0,64.582 44.684,124.974 104.727,139.636 60.044,-14.662 104.727,-75.054 104.727,-139.636L232.727,46.545ZM54.852,76.633l48.656,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109l-40.547,0l0,24.327l32.437,0c8.92,0 16.219,7.298 16.219,16.219l0,24.328c0,8.92 -7.298,16.219 -16.219,16.219l-40.546,0c-4.541,0 -8.11,-3.569 -8.11,-8.11 0,-4.541 3.569,-8.109 8.11,-8.109l40.546,0l0,-24.328l-40.546,0c-4.541,0 -8.11,-3.568 -8.11,-8.109l0,-40.546c0,-4.541 3.569,-8.11 8.11,-8.11zM144.054,76.633l56.765,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109L144.054,92.852l0,64.874l48.656,0l0,-24.328l-24.328,0c-4.541,0 -8.109,-3.568 -8.109,-8.109 0,-4.541 3.568,-8.11 8.109,-8.11l32.437,0c4.541,0 8.109,3.569 8.109,8.11l0,32.437c0,8.92 -7.297,16.219 -16.218,16.219L144.054,173.945c-8.92,0 -16.219,-7.298 -16.219,-16.219L127.835,92.852c0,-8.92 7.298,-16.219 16.219,-16.219z"
+        tools:ignore="VectorPath" />
 </vector>
\ No newline at end of file
 </vector>
\ No newline at end of file
index cf7cde85fdbda1ee73b0b7c0bd039b4aecb586cc..4a27af1f13d16a07ce2b4463f5cec0e768c60c6c 100644 (file)
@@ -1,5 +1,5 @@
 <!--
 <!--
-  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+  Copyright © 2016,2021-2023 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
   This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
 
   This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
 
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
     android:viewportWidth="256" >
 
     <path
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="256"
     android:viewportWidth="256" >
 
     <path
-        android:fillColor="@color/icon_ghosted"
-        android:pathData="M128,0 L23.273,46.545L23.273,116.364c-0,64.582 44.684,124.974 104.727,139.636 60.044,-14.662 104.727,-75.054 104.727,-139.636L232.727,46.545ZM54.852,76.633l48.656,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109l-40.547,0l0,24.327l32.437,0c8.92,0 16.219,7.298 16.219,16.219l0,24.328c0,8.92 -7.298,16.219 -16.219,16.219l-40.546,0c-4.541,0 -8.11,-3.569 -8.11,-8.11 0,-4.541 3.569,-8.109 8.11,-8.109l40.546,0l0,-24.328l-40.546,0c-4.541,0 -8.11,-3.568 -8.11,-8.109l0,-40.546c0,-4.541 3.569,-8.11 8.11,-8.11zM144.054,76.633l56.765,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109L144.054,92.852l0,64.874l48.656,0l0,-24.328l-24.328,0c-4.541,0 -8.109,-3.568 -8.109,-8.109 0,-4.541 3.568,-8.11 8.109,-8.11l32.437,0c4.541,0 8.109,3.569 8.109,8.11l0,32.437c0,8.92 -7.297,16.219 -16.218,16.219L144.054,173.945c-8.92,0 -16.219,-7.298 -16.219,-16.219L127.835,92.852c0,-8.92 7.298,-16.219 16.219,-16.219z" />
+        android:fillColor="@color/ghosted_icon"
+        android:pathData="M128,0 L23.273,46.545L23.273,116.364c-0,64.582 44.684,124.974 104.727,139.636 60.044,-14.662 104.727,-75.054 104.727,-139.636L232.727,46.545ZM54.852,76.633l48.656,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109l-40.547,0l0,24.327l32.437,0c8.92,0 16.219,7.298 16.219,16.219l0,24.328c0,8.92 -7.298,16.219 -16.219,16.219l-40.546,0c-4.541,0 -8.11,-3.569 -8.11,-8.11 0,-4.541 3.569,-8.109 8.11,-8.109l40.546,0l0,-24.328l-40.546,0c-4.541,0 -8.11,-3.568 -8.11,-8.109l0,-40.546c0,-4.541 3.569,-8.11 8.11,-8.11zM144.054,76.633l56.765,0c4.541,0 8.109,3.569 8.109,8.11 0,4.541 -3.568,8.109 -8.109,8.109L144.054,92.852l0,64.874l48.656,0l0,-24.328l-24.328,0c-4.541,0 -8.109,-3.568 -8.109,-8.109 0,-4.541 3.568,-8.11 8.109,-8.11l32.437,0c4.541,0 8.109,3.569 8.109,8.11l0,32.437c0,8.92 -7.297,16.219 -16.218,16.219L144.054,173.945c-8.92,0 -16.219,-7.298 -16.219,-16.219L127.835,92.852c0,-8.92 7.298,-16.219 16.219,-16.219z"
+        tools:ignore="VectorPath" />
 </vector>
\ No newline at end of file
 </vector>
\ No newline at end of file
index bd841395a63d1bc20364697419449ffc4203c583..ed9151a11227a6806c78732a06d0302c61370528 100644 (file)
@@ -2,12 +2,14 @@
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="24"
     android:viewportWidth="24" >
 
     <path
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="24"
     android:viewportWidth="24" >
 
     <path
-        android:fillColor="@color/icon_enabled"
-        android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z" />
+        android:fillColor="@color/blue_icon"
+        android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"
+        tools:ignore="VectorPath" />
 </vector>
\ No newline at end of file
 </vector>
\ No newline at end of file
index cdc285018434f5bff387ff7049772437e529b117..abef8f82d1142c48fdc1fe1f0696758bc1ecb87b 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -48,9 +48,9 @@
                     android:orientation="vertical"
                     android:padding="15dp" >
 
                     android:orientation="vertical"
                     android:padding="15dp" >
 
-                    <!-- Stingray. -->
+                    <!-- Overall status. -->
                     <LinearLayout
                     <LinearLayout
-                        android:id="@+id/stingray_linearlayout"
+                        android:id="@+id/overall_status_linearlayout"
                         android:layout_height="wrap_content"
                         android:layout_width="wrap_content"
                         android:layout_gravity="center_horizontal"
                         android:layout_height="wrap_content"
                         android:layout_width="wrap_content"
                         android:layout_gravity="center_horizontal"
@@ -58,7 +58,7 @@
                         tools:ignore="UseCompoundDrawables" >
 
                         <ImageView
                         tools:ignore="UseCompoundDrawables" >
 
                         <ImageView
-                            android:id="@+id/stingray_imageview"
+                            android:id="@+id/overall_status_imageview"
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:layout_gravity="center_horizontal"
@@ -67,7 +67,7 @@
                         <!-- The text color primary is only displayed if the read phone state permission is not granted.
                             The default text is replaced if the permission is not granted or the device is connected to a cell phone network. -->
                         <TextView
                         <!-- The text color primary is only displayed if the read phone state permission is not granted.
                             The default text is replaced if the permission is not granted or the device is connected to a cell phone network. -->
                         <TextView
-                            android:id="@+id/summary_textview"
+                            android:id="@+id/overall_status_textview"
                             android:layout_height="wrap_content"
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:layout_height="wrap_content"
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
@@ -94,7 +94,6 @@
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
                             android:layout_marginTop="30dp"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
                             android:layout_marginTop="30dp"
-                            android:textColor="@color/blue_text"
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
-                            android:textColor="@color/blue_text"
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
-                            android:textColor="@color/blue_text"
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
         android:layout_width="wrap_content"
         android:layout_gravity="start"
         app:menu="@menu/navigation_menu_bottom_appbar"
         android:layout_width="wrap_content"
         android:layout_gravity="start"
         app:menu="@menu/navigation_menu_bottom_appbar"
-        app:itemIconTint="@color/icon_enabled" />
+        app:itemIconTint="@color/blue_icon" />
 </androidx.drawerlayout.widget.DrawerLayout>
\ No newline at end of file
 </androidx.drawerlayout.widget.DrawerLayout>
\ No newline at end of file
index 356f084f126c4c036f441a637ef5ffb5ff170b04..0fab973e7216019630f3e5c4cdcec77254c007c2 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -60,9 +60,9 @@
                     android:orientation="vertical"
                     android:padding="15dp" >
 
                     android:orientation="vertical"
                     android:padding="15dp" >
 
-                    <!-- Stingray. -->
+                    <!-- Overall status. -->
                     <LinearLayout
                     <LinearLayout
-                        android:id="@+id/stingray_linearlayout"
+                        android:id="@+id/overall_status_linearlayout"
                         android:layout_height="wrap_content"
                         android:layout_width="wrap_content"
                         android:layout_gravity="center_horizontal"
                         android:layout_height="wrap_content"
                         android:layout_width="wrap_content"
                         android:layout_gravity="center_horizontal"
@@ -70,7 +70,7 @@
                         tools:ignore="UseCompoundDrawables" >
 
                         <ImageView
                         tools:ignore="UseCompoundDrawables" >
 
                         <ImageView
-                            android:id="@+id/stingray_imageview"
+                            android:id="@+id/overall_status_imageview"
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:layout_gravity="center_horizontal"
@@ -79,7 +79,7 @@
                         <!-- The text color primary is only displayed if the read phone state permission is not granted.
                             The default text is replaced if the permission is not granted or the device is connected to a cell phone network. -->
                         <TextView
                         <!-- The text color primary is only displayed if the read phone state permission is not granted.
                             The default text is replaced if the permission is not granted or the device is connected to a cell phone network. -->
                         <TextView
-                            android:id="@+id/summary_textview"
+                            android:id="@+id/overall_status_textview"
                             android:layout_height="wrap_content"
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:layout_height="wrap_content"
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
                             android:layout_marginTop="30dp"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
                             android:layout_marginTop="30dp"
-                            android:textColor="@color/blue_text"
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
-                            android:textColor="@color/blue_text"
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
                             android:layout_width="wrap_content"
                             android:layout_gravity="center_horizontal"
                             android:textAlignment="center"
-                            android:textColor="@color/blue_text"
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
                             android:textSize="18sp"
                             android:textStyle="bold" />
 
         android:layout_width="wrap_content"
         android:layout_gravity="start"
         app:menu="@menu/navigation_menu_top_appbar"
         android:layout_width="wrap_content"
         android:layout_gravity="start"
         app:menu="@menu/navigation_menu_top_appbar"
-        app:itemIconTint="@color/icon_enabled" />
+        app:itemIconTint="@color/blue_icon" />
 </androidx.drawerlayout.widget.DrawerLayout>
\ No newline at end of file
 </androidx.drawerlayout.widget.DrawerLayout>
\ No newline at end of file
index 8b872ffa32abe98159d6aa0d1abe7b381e2e32db..0135d29a8406197edf401a4dd1c216bb62600f31 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -36,7 +36,6 @@
             android:layout_width="match_parent"
             android:layout_weight="1"/>
 
             android:layout_width="match_parent"
             android:layout_weight="1"/>
 
-
         <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
         <com.google.android.material.appbar.AppBarLayout
             android:layout_height="wrap_content"
         <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
         <com.google.android.material.appbar.AppBarLayout
             android:layout_height="wrap_content"
@@ -50,4 +49,4 @@
                 android:layout_width="match_parent" />
         </com.google.android.material.appbar.AppBarLayout>
     </LinearLayout>
                 android:layout_width="match_parent" />
         </com.google.android.material.appbar.AppBarLayout>
     </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
index 1ed0797696e827c83fd2a639dac4e804b4c122eb..380c124b56d3d0133f677e68c6ecbcde362e1ee9 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -48,4 +48,4 @@
             android:layout_height="match_parent"
             android:layout_width="match_parent" />
     </LinearLayout>
             android:layout_height="match_parent"
             android:layout_width="match_parent" />
     </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
index d585bb031261cb96077f84e7cd05ebe0dc37c20f..1730b445472af2d159bb10a33066880a7749e285 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -29,6 +29,6 @@
 
     <WebView
         android:id="@+id/webview"
 
     <WebView
         android:id="@+id/webview"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content" />
-</LinearLayout>
\ No newline at end of file
+        android:layout_height="match_parent"
+        android:layout_width="match_parent" />
+</LinearLayout>
diff --git a/app/src/main/res/mipmap-anydpi-v26/privacy_cell.xml b/app/src/main/res/mipmap-anydpi-v26/privacy_cell.xml
deleted file mode 100644 (file)
index 1a8afaf..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
-
-  This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
-
-  This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
-
-  Privacy Cell 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.
-
-  Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:drawable="@color/white"/>
-    <foreground android:drawable="@drawable/privacy_cell_foreground"/>
-</adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap/privacy_cell.xml b/app/src/main/res/mipmap/privacy_cell.xml
new file mode 100644 (file)
index 0000000..20a0f54
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016,2021-2023 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+
+  This file is derived from `security` and `5g`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
+
+  This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+
+  Privacy Cell 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.
+
+  Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/white" />
+    <foreground android:drawable="@drawable/privacy_cell_foreground" />
+    <monochrome android:drawable="@drawable/privacy_cell_monochrome" />
+</adaptive-icon>
index e0b8ce1dca07348856f2c33972bb604c9904a96b..9fb8c9a3c9b6988d771fdade409b0e398cb13b3d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021-2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -32,6 +32,9 @@
     <!-- Text views.  The `\n\n` code inserts a line break and should be preserved in translations.
         Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
         The `%1$s` code inserts variables into the displayed text and should be preserved in translation. -->
     <!-- Text views.  The `\n\n` code inserts a line break and should be preserved in translations.
         Android removes double spaces, but extra spaces can be manually specified with the Unicode `\u0020` formatting.
         The `%1$s` code inserts variables into the displayed text and should be preserved in translation. -->
+    <string name="secure_protocols">Ihr Gerät ist mit einem Netzwerk verbunden, das sichere Protokolle verwendet.\n\nEs ist vor Stingray-IMSI-Man-in-the-middle-Angriffen geschützt.</string>
+    <string name="insecure_protocols">Ihr Gerät ist mit einem Netzwerk verbunden, das unsichere Protokolle verwendet.\n\nEs ist nicht vor Stingray-IMSI-Man-in-the-middle-Angriffen geschützt.</string>
+    <string name="antiquated_protocols">Ihr Gerät ist mit einem Netzwerk verbunden, das veraltete Protokolle verwendet.\n\nEs ist dadurch für etliche Sicherheits-Schwachstellen anfällig.</string>
     <string name="voice_network">Sprach-Netzwerk: \u0020 %1$s</string>
     <string name="data_network">Daten-Netzwerk: \u0020 %1$s</string>
     <string name="additional_network_info">Zusätzliche Netzwerk-Information: \u0020 %1$s</string>
     <string name="voice_network">Sprach-Netzwerk: \u0020 %1$s</string>
     <string name="data_network">Daten-Netzwerk: \u0020 %1$s</string>
     <string name="additional_network_info">Zusätzliche Netzwerk-Information: \u0020 %1$s</string>
     <string name="nr_advanced">NR Advanced – 5G</string>
     <string name="nr_advanced_detail">New Radio Advanced</string>
 
     <string name="nr_advanced">NR Advanced – 5G</string>
     <string name="nr_advanced_detail">New Radio Advanced</string>
 
-    <!-- Phone permission dialog. -->
+    <!-- Permission dialogs. -->
     <string name="phone_permission">Telefon-Berechtigung</string>
     <string name="phone_permission_text">Privacy Cell benötigt lesenden Zugriff auf den Status Ihres Telefons, um das Sicherheits-Niveau Ihrer Mobilfunk-Verbindung zu ermitteln.</string>
     <string name="phone_permission">Telefon-Berechtigung</string>
     <string name="phone_permission_text">Privacy Cell benötigt lesenden Zugriff auf den Status Ihres Telefons, um das Sicherheits-Niveau Ihrer Mobilfunk-Verbindung zu ermitteln.</string>
+    <string name="notification_permission">Benachrichtigungs-Berechtigung</string>
+    <string name="notification_permission_text">Privacy Cell benötigt die Benachrichtigungs-Berechtigung, um Benachrichtigungen des Echtzeit-Monitorings anzeigen zu können.</string>
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="stingrays">Stingrays</string>
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="stingrays">Stingrays</string>
+    <string name="antiquated_network_title">Veraltetes Netzwerk</string>
     <string name="close">Schließen</string>
 
     <!-- Settings. -->
     <string name="monitoring">Überwachung</string>
     <string name="realtime_monitoring">Echtzeit-Überwachung</string>
     <string name="realtime_monitoring_summary">Plaziert ein Icon in der Statusleiste, das die Überwachung der Mobilfunk-Verbindung anzeigt.</string>
     <string name="close">Schließen</string>
 
     <!-- Settings. -->
     <string name="monitoring">Überwachung</string>
     <string name="realtime_monitoring">Echtzeit-Überwachung</string>
     <string name="realtime_monitoring_summary">Plaziert ein Icon in der Statusleiste, das die Überwachung der Mobilfunk-Verbindung anzeigt.</string>
+        <string name="notification_permission_denied">Die Benachrichtigungs-Berechtigung für Privacy Cell wurde abgelehnt. Daher werden derzeit keine Benachrichtigungen angezeigt.</string>
     <string name="secure_network_notification">Benachrichtigung über sicheres Netzwerk</string>
     <string name="insecure_network_notification">Benachrichtigung über unsicheres Netzwerk</string>
     <string name="secure_network_notification">Benachrichtigung über sicheres Netzwerk</string>
     <string name="insecure_network_notification">Benachrichtigung über unsicheres Netzwerk</string>
+    <string name="antiquated_network_notification">Benachrichtigung über veraltetes Netzwerk</string>
+    <string name="consider_3g_antiquated">3G als veraltet ansehen</string>
+    <string name="consider_3g_antiquated_summary">3G-Protokolle als veraltet ansehen. Zu einem späteren Zeitpunkt wird dies zur Standard-Einstellung werden.
+        Das Ändern dieser Einstellung startet Privacy Cell neu.</string>
     <string name="interface_title">Anschluss</string>
     <string name="bottom_app_bar">Anwendungs-Leiste unten</string>
     <string name="bottom_app_bar_summary">Zeigt die Anwendungs-Leiste am unteren Bildschirmrand an. Nach Ändern dieser Einstellung  wird Privacy Cell neu gestartet.</string>
     <string name="interface_title">Anschluss</string>
     <string name="bottom_app_bar">Anwendungs-Leiste unten</string>
     <string name="bottom_app_bar_summary">Zeigt die Anwendungs-Leiste am unteren Bildschirmrand an. Nach Ändern dieser Einstellung  wird Privacy Cell neu gestartet.</string>
     <!-- Notifications. -->
     <string name="secure">Sicher</string>
     <string name="insecure">Unsicher</string>
     <!-- Notifications. -->
     <string name="secure">Sicher</string>
     <string name="insecure">Unsicher</string>
+    <string name="antiquated">Veraltet</string>
     <string name="secure_network">Sie sind mit einem sicheren Netzwerk verbunden.</string>
     <string name="secure_network">Sie sind mit einem sicheren Netzwerk verbunden.</string>
+    <string name="insecure_network">Sie sind mit einem unsicheren Netzwerk verbunden.</string>
+    <string name="antiquated_network">Sie sind mit einem veralteten Netzwerk verbunden.</string>
     <string name="unknown_network">Der Sicherheits-Status des Netzwerks ist unbekannt.</string>
     <string name="secure_network_channel">Sicheres Netzwerk</string>
     <string name="insecure_network_channel">Unsicheres Netzwerk</string>
     <string name="unknown_network">Der Sicherheits-Status des Netzwerks ist unbekannt.</string>
     <string name="secure_network_channel">Sicheres Netzwerk</string>
     <string name="insecure_network_channel">Unsicheres Netzwerk</string>
+    <string name="antiquated_network_channel">Veraltetes Netzwerk</string>
     <string name="unknown_network_channel">Unbekanntes Netzwerk</string>
     <string name="unknown_network_channel">Unbekanntes Netzwerk</string>
-</resources>
\ No newline at end of file
+</resources>
index 6b9f847a3c6c37ca80b0671820ab548df9ee5941..a839c1c105bcb1c459bd3c609daaf70b2b97b34a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021-2022 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
     <string name="nr_advanced">NR Avanzado – 5G</string>
     <string name="nr_advanced_detail">Nueva Radio Avanzada</string>
 
     <string name="nr_advanced">NR Avanzado – 5G</string>
     <string name="nr_advanced_detail">Nueva Radio Avanzada</string>
 
-    <!-- Phone permission dialog. -->
+    <!-- Permission dialogs. -->
     <string name="phone_permission">Permiso telefónico</string>
     <string name="phone_permission_text">Privacy Cell necesita el permiso del teléfono "Leer estado del teléfono" para determinar el nivel de seguridad de su conexión celular.</string>
     <string name="phone_permission">Permiso telefónico</string>
     <string name="phone_permission_text">Privacy Cell necesita el permiso del teléfono "Leer estado del teléfono" para determinar el nivel de seguridad de su conexión celular.</string>
+    <string name="notification_permission">Permiso de notificación</string>
+    <string name="notification_permission_text">Privacy Cell necesita el permiso Post Notification para mostrar las notificaciones de monitoreo en tiempo real.</string>
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="monitoring">Monitorización</string>
     <string name="realtime_monitoring">Monitorización en tiempo real</string>
     <string name="realtime_monitoring_summary">Coloca un icono en la barra de estado que monitoriza la red celular.</string>
     <string name="monitoring">Monitorización</string>
     <string name="realtime_monitoring">Monitorización en tiempo real</string>
     <string name="realtime_monitoring_summary">Coloca un icono en la barra de estado que monitoriza la red celular.</string>
+        <string name="notification_permission_denied">El permiso de publicación de notificaciones está actualmente denegado, por lo que no se mostrarán las notificaciones.</string>
     <string name="secure_network_notification">Notificación de red segura</string>
     <string name="insecure_network_notification">Notificación de red insegura</string>
     <string name="antiquated_network_notification">Notificación de red obsoleta</string>
     <string name="secure_network_notification">Notificación de red segura</string>
     <string name="insecure_network_notification">Notificación de red insegura</string>
     <string name="antiquated_network_notification">Notificación de red obsoleta</string>
     <string name="insecure_network_channel">Red insegura</string>
     <string name="antiquated_network_channel">Red anticuada</string>
     <string name="unknown_network_channel">Red desconocida</string>
     <string name="insecure_network_channel">Red insegura</string>
     <string name="antiquated_network_channel">Red anticuada</string>
     <string name="unknown_network_channel">Red desconocida</string>
-</resources>
\ No newline at end of file
+</resources>
index 2e24f1a897fd8dde97ab84791c167c5153cee83a..1773a36aa0b0647c16e57204451e136f69318c8d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021-2022 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
     <string name="nr_advanced">NR Advanced – 5G</string>
     <string name="nr_advanced_detail">New Radio Advanced</string>
 
     <string name="nr_advanced">NR Advanced – 5G</string>
     <string name="nr_advanced_detail">New Radio Advanced</string>
 
-    <!-- Phone permission dialog. -->
+    <!-- Permission dialogs. -->
     <string name="phone_permission">Autorisations</string>
     <string name="phone_permission_text">Privacy Cell a besoin de l\'autorisation READ PHONE STATE pour déterminer le niveau de sécurité de votre connexion cellulaire.</string>
     <string name="phone_permission">Autorisations</string>
     <string name="phone_permission_text">Privacy Cell a besoin de l\'autorisation READ PHONE STATE pour déterminer le niveau de sécurité de votre connexion cellulaire.</string>
+    <string name="notification_permission">Autorisation de notification</string>
+    <string name="notification_permission_text">Privacy Cell a besoin de l\'autorisation Post Notification pour afficher les notifications de surveillance en temps réel.</string>
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="monitoring">Supervision</string>
     <string name="realtime_monitoring">Supervision en temps-réel</string>
     <string name="realtime_monitoring_summary">Placez une icône dans la barre d\'état qui surveille le réseau cellulaire.</string>
     <string name="monitoring">Supervision</string>
     <string name="realtime_monitoring">Supervision en temps-réel</string>
     <string name="realtime_monitoring_summary">Placez une icône dans la barre d\'état qui surveille le réseau cellulaire.</string>
+        <string name="notification_permission_denied">L\'autorisation d\'afficher les notifications est actuellement refusée, les notifications ne seront donc pas affichées.</string>
     <string name="secure_network_notification">Notification de réseau sécurisé</string>
     <string name="insecure_network_notification">Notification de réseau non sécurisé</string>
     <string name="antiquated_network_notification">Notification de réseau obsolète</string>
     <string name="secure_network_notification">Notification de réseau sécurisé</string>
     <string name="insecure_network_notification">Notification de réseau non sécurisé</string>
     <string name="antiquated_network_notification">Notification de réseau obsolète</string>
     <string name="insecure_network_channel">Réseau non-sécurisé</string>
     <string name="antiquated_network_channel">Réseau obsolète</string>
     <string name="unknown_network_channel">Réseau inconnu</string>
     <string name="insecure_network_channel">Réseau non-sécurisé</string>
     <string name="antiquated_network_channel">Réseau obsolète</string>
     <string name="unknown_network_channel">Réseau inconnu</string>
-</resources>
\ No newline at end of file
+</resources>
index 54689e885921e8b93311a82e7e912f01d735baa5..dc1dc296d4d439986014ee9d3fd5656df5f422e3 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
 
   Translation 2021-2022 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
     <string name="nr_advanced">NR Advanced – 5G</string>
     <string name="nr_advanced_detail">New Radio Advanced</string>
 
     <string name="nr_advanced">NR Advanced – 5G</string>
     <string name="nr_advanced_detail">New Radio Advanced</string>
 
-    <!-- Phone permission dialog. -->
+    <!-- Permission dialogs. -->
     <string name="phone_permission">Autorizzazioni sul dispositivo</string>
     <string name="phone_permission_text">Privacy Cell ha bisogno dell\'autorizzazione di lettura dello stato del telefono per poter determinare il livello si sicurezza della connessione.</string>
     <string name="phone_permission">Autorizzazioni sul dispositivo</string>
     <string name="phone_permission_text">Privacy Cell ha bisogno dell\'autorizzazione di lettura dello stato del telefono per poter determinare il livello si sicurezza della connessione.</string>
+    <string name="notification_permission">Autorizzazione per le notifiche</string>
+    <string name="notification_permission_text">Privacy Cell ha bisogno dell\'autorizzazione "Post Notification" per mostrare le notifiche del monitoraggio in tempo reale.</string>
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="monitoring">Monitoraggio</string>
     <string name="realtime_monitoring">Monitoraggio in tempo reale</string>
     <string name="realtime_monitoring_summary">Aggiunge un\'icona nella barra di stato che monitora la rete cellulare.</string>
     <string name="monitoring">Monitoraggio</string>
     <string name="realtime_monitoring">Monitoraggio in tempo reale</string>
     <string name="realtime_monitoring_summary">Aggiunge un\'icona nella barra di stato che monitora la rete cellulare.</string>
+        <string name="notification_permission_denied">L\'autorizzazione "Post Notification" non è stata al momento concessa per cui le notifiche non saranno visualizzate.</string>
     <string name="secure_network_notification">Notifica di rete sicura</string>
     <string name="insecure_network_notification">Notifica di rete insicura</string>
     <string name="antiquated_network_notification">Notifiche di Rete Antiquata</string>
     <string name="secure_network_notification">Notifica di rete sicura</string>
     <string name="insecure_network_notification">Notifica di rete insicura</string>
     <string name="antiquated_network_notification">Notifiche di Rete Antiquata</string>
     <string name="insecure_network_channel">Rete insicura</string>
     <string name="antiquated_network_channel">Rete Antiquata</string>
     <string name="unknown_network_channel">Rete sconosciuta</string>
     <string name="insecure_network_channel">Rete insicura</string>
     <string name="antiquated_network_channel">Rete Antiquata</string>
     <string name="unknown_network_channel">Rete sconosciuta</string>
-</resources>
\ No newline at end of file
+</resources>
index fe387b11358d68dd0ff26a9e59b24e735a4586c4..ea6c39badb58c22cb8faf52e9ba6091f4d2a38f4 100644 (file)
     <color name="additional_network_info">@color/gray_825</color>
     <color name="blue_icon">@color/violet_500</color>
     <color name="blue_text">@color/violet_500</color>
     <color name="additional_network_info">@color/gray_825</color>
     <color name="blue_icon">@color/violet_500</color>
     <color name="blue_text">@color/violet_500</color>
-    <color name="icon_disabled">@color/gray_500</color>
-    <color name="icon_enabled">@color/violet_500</color>
-    <color name="icon_ghosted">@color/gray_700</color>
-    <color name="logcat_icons">@color/white</color>
+    <color name="disabled_icon">@color/gray_500</color>
+    <color name="ghosted_icon">@color/gray_700</color>
+    <color name="logcat_icon">@color/white</color>
     <color name="red_icon">@color/salmon</color>
     <color name="red_notification_icon">@color/red_900</color>
     <color name="red_text">@color/salmon</color>
     <color name="yellow_notification_icon">@color/yellow_700</color>
     <color name="red_icon">@color/salmon</color>
     <color name="red_notification_icon">@color/red_900</color>
     <color name="red_text">@color/salmon</color>
     <color name="yellow_notification_icon">@color/yellow_700</color>
+    <color name="yellow_text">@color/yellow_900</color>
 </resources>
\ No newline at end of file
 </resources>
\ No newline at end of file
index 2b2ec2b427181687dc013bfe00c0a86370ab374e..fab1a378a59cd632694689579d881107f1f4c29c 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     <string name="nr_advanced">NR усовершенствованное – 5G</string>
     <string name="nr_advanced_detail">Новое радио усовершенствованное</string>
 
     <string name="nr_advanced">NR усовершенствованное – 5G</string>
     <string name="nr_advanced_detail">Новое радио усовершенствованное</string>
 
-    <!-- Phone permission dialog. -->
+    <!-- Permission dialogs. -->
     <string name="phone_permission">Разрешение телефона</string>
     <string name="phone_permission_text">Privacy Cell необходимо разрешение на чтение состояния телефона для определения степени безопасности вашего мобильного подключения.</string>
     <string name="phone_permission">Разрешение телефона</string>
     <string name="phone_permission_text">Privacy Cell необходимо разрешение на чтение состояния телефона для определения степени безопасности вашего мобильного подключения.</string>
+    <string name="notification_permission">Разрешение на уведомления</string>
+    <string name="notification_permission_text">Privacy Cell требуется разрешение на отправку уведомлений для отображения уведомлений мониторинга в реальном времени.</string>
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="monitoring">Мониторинг</string>
     <string name="realtime_monitoring">Мониторинг в реальном времени</string>
     <string name="realtime_monitoring_summary">Поместить в строку состояния значок для отслеживания сотовой сети.</string>
     <string name="monitoring">Мониторинг</string>
     <string name="realtime_monitoring">Мониторинг в реальном времени</string>
     <string name="realtime_monitoring_summary">Поместить в строку состояния значок для отслеживания сотовой сети.</string>
+        <string name="notification_permission_denied">Разрешение на отправку уведомлений в настоящее время запрещено, поэтому уведомления отображаться не будут.</string>
     <string name="secure_network_notification">Уведомление о безопасной сети</string>
     <string name="insecure_network_notification">Уведомление о небезопасной сети</string>
     <string name="antiquated_network_notification">Оповещение об устаревшей сети</string>
     <string name="secure_network_notification">Уведомление о безопасной сети</string>
     <string name="insecure_network_notification">Уведомление о небезопасной сети</string>
     <string name="antiquated_network_notification">Оповещение об устаревшей сети</string>
     <string name="insecure_network_channel">Небезопасная сеть</string>
     <string name="antiquated_network_channel">Устаревшая сеть</string>
     <string name="unknown_network_channel">Неизвестная сеть</string>
     <string name="insecure_network_channel">Небезопасная сеть</string>
     <string name="antiquated_network_channel">Устаревшая сеть</string>
     <string name="unknown_network_channel">Неизвестная сеть</string>
-</resources>
\ No newline at end of file
+</resources>
index a26fc5cd5036c6ea56f08212f38000d2173fb254..a45a3d7df1385807d5b8e678e957d90adf6890ed 100644 (file)
     <color name="additional_network_info">@color/gray_200</color>
     <color name="blue_icon">@color/blue_700</color>
     <color name="blue_text">@color/blue_700</color>
     <color name="additional_network_info">@color/gray_200</color>
     <color name="blue_icon">@color/blue_700</color>
     <color name="blue_text">@color/blue_700</color>
-    <color name="icon_disabled">@color/gray_600</color>
-    <color name="icon_enabled">@color/blue_700</color>
-    <color name="icon_ghosted">@color/gray_425</color>
-    <color name="logcat_icons">@color/gray_925</color>
+    <color name="disabled_icon">@color/gray_600</color>
+    <color name="ghosted_icon">@color/gray_425</color>
+    <color name="logcat_icon">@color/gray_925</color>
     <color name="red_icon">@color/red_700</color>
     <color name="red_notification_icon">@color/red_700</color>
     <color name="red_text">@color/red_700</color>
     <color name="yellow_notification_icon">@color/yellow_700</color>
     <color name="red_icon">@color/red_700</color>
     <color name="red_notification_icon">@color/red_700</color>
     <color name="red_text">@color/red_700</color>
     <color name="yellow_notification_icon">@color/yellow_700</color>
+    <color name="yellow_text">@color/yellow_900</color>
 
     <!-- Raw colors. -->
     <color name="amber_300">#FFFFD54F</color>
 
     <!-- Raw colors. -->
     <color name="amber_300">#FFFFD54F</color>
index 648a078fa683251c37e619c7206fc9be2ff4f69d..609cde0760e3189b1a1f5853362ea576bf02ea71 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
     <string name="nr_advanced">NR Advanced – 5G</string>
     <string name="nr_advanced_detail">New Radio Advanced</string>
 
     <string name="nr_advanced">NR Advanced – 5G</string>
     <string name="nr_advanced_detail">New Radio Advanced</string>
 
-    <!-- Phone permission dialog. -->
+    <!-- Permission dialogs. -->
     <string name="phone_permission">Phone Permission</string>
     <string name="phone_permission_text">Privacy Cell needs the Read Phone State permission to determine the safety level of your cell connection.</string>
     <string name="phone_permission">Phone Permission</string>
     <string name="phone_permission_text">Privacy Cell needs the Read Phone State permission to determine the safety level of your cell connection.</string>
+    <string name="notification_permission">Notification Permission</string>
+    <string name="notification_permission_text">Privacy Cell needs the Post Notification permission to display realtime monitoring notifications.</string>
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="ok">OK</string>
 
     <!-- Dialogs. -->
     <string name="monitoring">Monitoring</string>
     <string name="realtime_monitoring">Realtime monitoring</string>
     <string name="realtime_monitoring_summary">Place an icon in the status bar that monitors the cell network.</string>
     <string name="monitoring">Monitoring</string>
     <string name="realtime_monitoring">Realtime monitoring</string>
     <string name="realtime_monitoring_summary">Place an icon in the status bar that monitors the cell network.</string>
+        <string name="notification_permission_denied">The Post Notification permission is currently denied, so notifications will not be displayed.</string>
     <string name="secure_network_notification">Secure network notification</string>
     <string name="insecure_network_notification">Insecure network notification</string>
     <string name="antiquated_network_notification">Antiquated network notification</string>
     <string name="secure_network_notification">Secure network notification</string>
     <string name="insecure_network_notification">Insecure network notification</string>
     <string name="antiquated_network_notification">Antiquated network notification</string>
     <string name="consider_3g_antiquated_key" translatable="false">consider_3g_antiquated</string>
     <string name="interface_key" translatable="false">interface</string>
     <string name="bottom_app_bar_key" translatable="false">bottom_app_bar</string>
     <string name="consider_3g_antiquated_key" translatable="false">consider_3g_antiquated</string>
     <string name="interface_key" translatable="false">interface</string>
     <string name="bottom_app_bar_key" translatable="false">bottom_app_bar</string>
-</resources>
\ No newline at end of file
+</resources>
diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml
new file mode 100644 (file)
index 0000000..8635f4b
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright 2022 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+
+  Privacy Cell 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.
+
+  Privacy Cell 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 Privacy Cell.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<!-- https://developer.android.com/guide/topics/resources/app-languages#app-language-settings -->
+<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
+    <locale android:name="en"/>  <!-- English. -->
+    <locale android:name="de"/>  <!-- German. -->
+    <locale android:name="es"/>  <!-- Spanish. -->
+    <locale android:name="fr"/>  <!-- French. -->
+    <locale android:name="it"/>  <!-- Italian. -->
+    <locale android:name="ru"/>  <!-- Russian. -->
+</locale-config>
index 20dc85363ecff6d810e4054a8e2a64ecb5456a5a..d49d9b65b22de88d7305100fbff73b75b1a0ea8f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
 
   This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
@@ -28,7 +28,6 @@
         <SwitchPreferenceCompat
             app:key="@string/realtime_monitoring_key"
             app:title="@string/realtime_monitoring"
         <SwitchPreferenceCompat
             app:key="@string/realtime_monitoring_key"
             app:title="@string/realtime_monitoring"
-            app:summary="@string/realtime_monitoring_summary"
             app:defaultValue="false" />
 
         <Preference
             app:defaultValue="false" />
 
         <Preference
@@ -60,4 +59,4 @@
             app:summary="@string/bottom_app_bar_summary"
             app:defaultValue="false" />
     </PreferenceCategory>
             app:summary="@string/bottom_app_bar_summary"
             app:defaultValue="false" />
     </PreferenceCategory>
-</PreferenceScreen>
\ No newline at end of file
+</PreferenceScreen>
index 9c60970b2b7001c29967ea71e685f3c44609e353..428e4af4b2c89a4c77ec504471e12ed54c3dc768 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2021-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -25,14 +25,14 @@ buildscript {
     }
 
     dependencies {
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:7.1.2'
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
+        classpath 'com.android.tools.build:gradle:8.1.2'
+        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22"
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
     }
 }
 
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
     }
 }
 
-task clean(type: Delete) {
+tasks.register('clean', Delete) {
     delete rootProject.buildDir
     delete rootProject.buildDir
-}
\ No newline at end of file
+}
diff --git a/fastlane/metadata/android/de-DE/changelogs/10.txt b/fastlane/metadata/android/de-DE/changelogs/10.txt
new file mode 100644 (file)
index 0000000..b92521e
--- /dev/null
@@ -0,0 +1,3 @@
+• Fehler behoben, durch den nach Änderung der Netzwerk-Verbindung Benachrichtigungen wieder aktiviert wurden.
+• Zweifarbig violetten Text zum Nachtmodus (Theme) hinzugefügt.
+• Erste komplette deutsche Übersetzung von Bernhard G. Keller.
\ No newline at end of file
diff --git a/fastlane/metadata/android/de-DE/changelogs/11.txt b/fastlane/metadata/android/de-DE/changelogs/11.txt
new file mode 100644 (file)
index 0000000..765e279
--- /dev/null
@@ -0,0 +1,5 @@
+• Ziel-API auf 33 (Android 13) angehoben.
+• Wischgeste zum zum Ablehnen der Benachrichtigungen des Echtzeit-Monitorings unter Android 13 deaktiviert.
+• App-Sprachauswahl zur Auswahl der Sprache von Privacy Cell unter Android 13 hinzugefügt.
+• Scroll-Position im Einstellungs-Dialog wird nun bei Neustarts beibehalten.
+• Erste komplette deutsche Übersetzung von Bernhard G. Keller.
\ No newline at end of file
diff --git a/fastlane/metadata/android/de-DE/changelogs/9.txt b/fastlane/metadata/android/de-DE/changelogs/9.txt
new file mode 100644 (file)
index 0000000..e142756
--- /dev/null
@@ -0,0 +1,4 @@
+• Der Sprach-Netzwerk-Status wird nun bei der Einschätzung der Gesamt-Sicherheit des Funknetzwerks berücksichtigt.
+• Fehler behoben, durch den gelegentlich Benachrichtigungen nicht abgeschaltet werden konnten.
+• Ziel-API auf 32 (Android 12L) angehoben.
+• Erste komplette deutsche Übersetzung von Bernhard G. Keller.
\ No newline at end of file
diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt
new file mode 100644 (file)
index 0000000..131f7e7
--- /dev/null
@@ -0,0 +1,5 @@
+Privacy Cell ist eine kleine App, die Informationen zu den genutzten Mobilfunk-Protokollen anzeigt.
+
+Zur Zeit wechseln viele Mobilfunk-Netzwerke von 4G (4. Generation) zu 5G-Protokollen. Die 5G-Netzwerk-Protokolle wurden mit besonderem Fokus auf bekannte Sicherheitslücken in älteren Protokollen entwickelt, zu denen Man-In-The-Middle-Attacken in Mobilfunknetzen mittels Stingrays (IMSI-Catchern) zählen. Um die Entwicklung und Rückwärtskompatibilität zu erleichtern, können 4G- und 5G-Netzwerke kombiniert verwendet werden. Dies wird als 5G NR (New Radio) NSA (Non-Standalone) -Modus bezeichnet. Dabei wird 4G für den Kontrollkanal und 5G für die Datenkommunikation genutzt. Allerdings schützt 5G NR NSA nicht gegen Stingray-Angriffe. Android hat grundsätzlich Zugriff auf alle notwendigen Informationen, wenn es mit einem 5G NR NSA oder 5G NR SA (Standalone) Netzwerk verbunden ist, zeigt diese Informationen jedoch dem Benutzer nicht an. Der Zweck von Privacy Cell ist, diese Informationen einfach verfügbar zu machen.
+
+Privacy Cell kann auch warnen, wenn Sie mit veralteten 2G- and 3G-Netzwerken verbunden sind.
\ No newline at end of file
diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/01-SecureNetwork-de.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/01-SecureNetwork-de.png
new file mode 100644 (file)
index 0000000..6f37f88
Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/01-SecureNetwork-de.png differ
diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/02-InsecureNetwork-de.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/02-InsecureNetwork-de.png
new file mode 100644 (file)
index 0000000..4dbadf1
Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/02-InsecureNetwork-de.png differ
diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/03-AntiquatedNetwork-de.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/03-AntiquatedNetwork-de.png
new file mode 100644 (file)
index 0000000..479dec6
Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/03-AntiquatedNetwork-de.png differ
diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/04-NavigationMenu-de.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/04-NavigationMenu-de.png
new file mode 100644 (file)
index 0000000..051ab20
Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/04-NavigationMenu-de.png differ
diff --git a/fastlane/metadata/android/de-DE/images/phoneScreenshots/05-DarkTheme-de.png b/fastlane/metadata/android/de-DE/images/phoneScreenshots/05-DarkTheme-de.png
new file mode 100644 (file)
index 0000000..d1794d9
Binary files /dev/null and b/fastlane/metadata/android/de-DE/images/phoneScreenshots/05-DarkTheme-de.png differ
diff --git a/fastlane/metadata/android/de-DE/short_description.txt b/fastlane/metadata/android/de-DE/short_description.txt
new file mode 100644 (file)
index 0000000..152dbd2
--- /dev/null
@@ -0,0 +1 @@
+Überprüfen Sie, ob Ihr Mobiltelefon die sichersten Mobilfunk-Protokolle nutzt.
\ No newline at end of file
diff --git a/fastlane/metadata/android/de-DE/title.txt b/fastlane/metadata/android/de-DE/title.txt
new file mode 100644 (file)
index 0000000..627c302
--- /dev/null
@@ -0,0 +1 @@
+Privacy Cell
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/10.txt b/fastlane/metadata/android/en-US/changelogs/10.txt
new file mode 100644 (file)
index 0000000..f9915bf
--- /dev/null
@@ -0,0 +1,2 @@
+• Fix a bug that re-enabled notifications when the network changed.
+• Add dual-toned violet text to the Night Theme.
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/11.txt b/fastlane/metadata/android/en-US/changelogs/11.txt
new file mode 100644 (file)
index 0000000..b4c7df8
--- /dev/null
@@ -0,0 +1,4 @@
+• Bump the target API to 33 (Android 13).
+• Disable swiping to dismiss the realtime monitoring notification on Android 13.
+• Enable per-app language support on Android 13.
+• Preserve the Settings scroll location on restart.
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/12.txt b/fastlane/metadata/android/en-US/changelogs/12.txt
new file mode 100644 (file)
index 0000000..17eee61
--- /dev/null
@@ -0,0 +1,5 @@
+• Create an optional monochrome icon (can be used in Android >= 13).
+• Allow Privacy Cell to be included in system backups.
+• Bump the target API to 34 (Android 14).
+• Document permissions needed for newer versions of Android.
+• Repopulate the realtime monitoring notification every 15 minutes.
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/9.txt b/fastlane/metadata/android/en-US/changelogs/9.txt
new file mode 100644 (file)
index 0000000..cd01dae
--- /dev/null
@@ -0,0 +1,4 @@
+• Include the voice network status in determining the overall security of the cell network.
+• Fix a bug that sometimes prevented notifications from being disabled.
+• Bump the target API to 32 (Android 12L).
+• First full German translation contributed by Bernhard G. Keller.
\ No newline at end of file
index be0e9844267b04a4e6d3bde8e9af44450e0c5506..c0a77a5e30b0f2f4538252a5ef646a041a13cfe4 100644 (file)
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/02-InsecureNetwork-en.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/02-InsecureNetwork-en.png differ
index baedf03513bdde4898e5bc827738dd28008333ae..1c16b808cb835c42889de1645f0f6b8e8fa61eff 100644 (file)
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/03-AntiquatedNetwork-en.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/03-AntiquatedNetwork-en.png differ
index 6a506b64aa8e24012b2599c619fe4bfdb7fc9192..315d6f1499ebc433c3a04af7e537e419464d9466 100644 (file)
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/04-NavigationMenu-en.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/04-NavigationMenu-en.png differ
index 01c1511963377196e14514171bf64c86f3adcf52..52399c6a3f4553f9f5f5eca44fb9581c1bf26061 100644 (file)
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/05-DarkTheme-en.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/05-DarkTheme-en.png differ
diff --git a/fastlane/metadata/android/es-ES/changelogs/10.txt b/fastlane/metadata/android/es-ES/changelogs/10.txt
new file mode 100644 (file)
index 0000000..8b00c44
--- /dev/null
@@ -0,0 +1,3 @@
+• Corregir un error que volvía a activar las notificaciones cuando cambiaba la red.
+• Añadir un texto violeta de doble tonoal Tema Nocturno.
+• Traducción actualizada al español aportada por Jose A. León.
\ No newline at end of file
diff --git a/fastlane/metadata/android/es-ES/changelogs/11.txt b/fastlane/metadata/android/es-ES/changelogs/11.txt
new file mode 100644 (file)
index 0000000..17ebc3a
--- /dev/null
@@ -0,0 +1,5 @@
+• Subir la API de destino a 33 (Android 13).
+• Desactivar el deslizamiento para descartar la notificación de seguimiento en tiempo real en Android 13.
+• Habilitar el soporte de idiomas por aplicación en Android 13.
+• Preservar la localización de desplazamiento de los Ajustes al reiniciar.
+• Traducción actualizada al español aportada por Jose A. León.
\ No newline at end of file
diff --git a/fastlane/metadata/android/es-ES/changelogs/12.txt b/fastlane/metadata/android/es-ES/changelogs/12.txt
new file mode 100644 (file)
index 0000000..0782007
--- /dev/null
@@ -0,0 +1,6 @@
+• Crear un icono monocromo opcional (puede usarse en Android >= 13).
+• Permitir que Privacy Cell se incluya en las copias de seguridad del sistema.
+• Subir la API objetivo a 34 (Android 14).
+• Documentar los permisos necesarios para las nuevas versiones de Android.
+• Repoblar la notificación de seguimiento en tiempo real cada 15 minutos.
+• Traducción actualizada al español aportada por Jose A. León.
\ No newline at end of file
diff --git a/fastlane/metadata/android/es-ES/changelogs/9.txt b/fastlane/metadata/android/es-ES/changelogs/9.txt
new file mode 100644 (file)
index 0000000..112330c
--- /dev/null
@@ -0,0 +1,5 @@
+• Incluir el estado de la red de voz para determinar la seguridad general de la red celular.
+• Corregir un error que a veces impedía desactivar las notificaciones.
+• Aumentar la API de destino a 32 (Android 12L).
+• Primera traducción completa al alemán aportada por Bernhard G. Keller.
+• Traducción actualizada al español aportada por Jose A. León.
\ No newline at end of file
index ed87224606827eb011083de5ebe140bf9ced3a9b..873768e4005d33947a55f067a3a09bfd0cc672d1 100644 (file)
Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/02-InsecureNetwork-es.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/02-InsecureNetwork-es.png differ
diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/03-AntiquatedNetework-es.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/03-AntiquatedNetework-es.png
deleted file mode 100644 (file)
index 3e8872d..0000000
Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/03-AntiquatedNetework-es.png and /dev/null differ
diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/03-AntiquatedNetwork-es.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/03-AntiquatedNetwork-es.png
new file mode 100644 (file)
index 0000000..b625d03
Binary files /dev/null and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/03-AntiquatedNetwork-es.png differ
index ca3306a831953e6dbba5bde7f6e48be5f4f372c6..08a2709cc94c3d80a8aaa5a3d576543f05964e88 100644 (file)
Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/04-NavigationMenu-es.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/04-NavigationMenu-es.png differ
index cb1d81d455427c538a108270a6f5c201a7ace7e8..b6caebf772b2ffe82fea7feac758d31e0172f1c3 100644 (file)
Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/05-DarkTheme-es.png and b/fastlane/metadata/android/es-ES/images/phoneScreenshots/05-DarkTheme-es.png differ
diff --git a/fastlane/metadata/android/fr-FR/changelogs/10.txt b/fastlane/metadata/android/fr-FR/changelogs/10.txt
new file mode 100644 (file)
index 0000000..c3bd1ab
--- /dev/null
@@ -0,0 +1,3 @@
+• Correction d'un bug qui réactivait les notifications lorsque le réseau changeait.
+• Ajout d'un texte violet à deux tons sur le thème de Nuit.
+• Mise à jour de la traduction française par Kévin L.
\ No newline at end of file
diff --git a/fastlane/metadata/android/fr-FR/changelogs/11.txt b/fastlane/metadata/android/fr-FR/changelogs/11.txt
new file mode 100644 (file)
index 0000000..9bed719
--- /dev/null
@@ -0,0 +1,5 @@
+• Passage de l'API cible à 33 (Android 13).
+• Désactivation du glissement pour rejeter la notification de surveillance en temps réel sur Android 13.
+• Activation du support de la langue par application sur Android 13.
+• Conservation de l'emplacement du défilement des paramètres au redémarrage.
+• Mise à jour de la traduction française par Kévin L.
\ No newline at end of file
diff --git a/fastlane/metadata/android/fr-FR/changelogs/8.txt b/fastlane/metadata/android/fr-FR/changelogs/8.txt
new file mode 100644 (file)
index 0000000..6291d53
--- /dev/null
@@ -0,0 +1,3 @@
+• Ajout d'un ajout d'un avertissement lors de la connexion à des réseaux anciens et peu sûrs.
+• Ajout d'une entrée listant l'ensemble des protocoles.
+• Mise à jour de la traduction française par Kévin L.
\ No newline at end of file
diff --git a/fastlane/metadata/android/fr-FR/changelogs/9.txt b/fastlane/metadata/android/fr-FR/changelogs/9.txt
new file mode 100644 (file)
index 0000000..10e2d05
--- /dev/null
@@ -0,0 +1,5 @@
+• Inclure l'état du réseau voix dans la détermination de la sécurité globale du réseau cellulaire.
+• Correction d'un bogue qui empêchait parfois la désactivation des notifications.
+• Passage de l'API cible à 32 (Android 12L).
+• Première traduction allemande complète réalisée par Bernhard G. Keller.
+• Mise à jour de la traduction française par Kévin L.
\ No newline at end of file
index 932b37479f1418a418549ce6071c2047303735e4..88de5fd97d15b1babe380a0f0aae8028c0df1914 100644 (file)
Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02-InsecureNetwork-fr.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/02-InsecureNetwork-fr.png differ
index 9b89098ba96cb8fe2c93b0814f9755b01ef4e971..d689f0b785f3a6b426aa1bb146a66cfa1100ec68 100644 (file)
Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03-AntiquatedNetwork-fr.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/03-AntiquatedNetwork-fr.png differ
index dd4708534bf797ba3274212f8d825642ee0b8a8c..ccddd0949cf7501d0ff8eac35467d1f61a31e948 100644 (file)
Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04-NavigationMenu-fr.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/04-NavigationMenu-fr.png differ
index 07d8f655a1ca1f8bc62e8a261674652bb8ecefa8..1fba4a09c763e0eba2e3454b6499ec6f970a496f 100644 (file)
Binary files a/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05-DarkTheme-fr.png and b/fastlane/metadata/android/fr-FR/images/phoneScreenshots/05-DarkTheme-fr.png differ
diff --git a/fastlane/metadata/android/it-IT/changelogs/10.txt b/fastlane/metadata/android/it-IT/changelogs/10.txt
new file mode 100644 (file)
index 0000000..55f2efc
--- /dev/null
@@ -0,0 +1,3 @@
+• Correzione di un baco che riabilitava le notifiche quando la rete cambiava.
+• Aggiunta di un testo con doppio tono di viola al tema scuro.
+• Aggiornamento della traduzione in lingua Italiana fornito da Francesco Buratti.
\ No newline at end of file
diff --git a/fastlane/metadata/android/it-IT/changelogs/11.txt b/fastlane/metadata/android/it-IT/changelogs/11.txt
new file mode 100644 (file)
index 0000000..436490c
--- /dev/null
@@ -0,0 +1,5 @@
+• Modifica della target API a 33 (Android 13).
+• Disabilitata la possibilità di effettuare lo swipe per eliminare la notifica di monitoraggio in tempo reale su Android 13.
+• Abilitato il supporto della lingua per-app su Android 13.
+• Mantenimento della posizione dello scorrimento delle impostazioni al riavvio.
+• Aggiornamento della traduzione in lingua Italiana fornito da Francesco Buratti.
\ No newline at end of file
diff --git a/fastlane/metadata/android/it-IT/changelogs/9.txt b/fastlane/metadata/android/it-IT/changelogs/9.txt
new file mode 100644 (file)
index 0000000..310c25a
--- /dev/null
@@ -0,0 +1,5 @@
+• Incluso lo stato della rete voce nella determinazione della sicurezza complessiva della rete.
+• Correzione di un baco che talvolta impediva di disabilitare le notifiche.
+• Spostamento della target API a 32 (Android 12L).
+• Prima traduzione completa in lingua tedesca fornita da Bernhard G. Keller.
+• Aggiornamento della traduzione in lingua Italiana fornito da Francesco Buratti.
\ No newline at end of file
index 94c9ec96c519aea8224309a0a58692d338bbec25..3369fb40e23518ef25b205118e133838af548884 100644 (file)
Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/02-InsecureNetwork-it.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/02-InsecureNetwork-it.png differ
index b1944ba4a4bf04385b81a45b7bd8389ae4254ed3..eb20508e04c5f3d07b6fbf1ae595681ef291d5fb 100644 (file)
Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/03-AntiquatedNetwork-it.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/03-AntiquatedNetwork-it.png differ
index e1b36346810a0e5bdd5e7213d5dfba1d7d5e582e..223d1e4cb33c30789ea47db0ed924eb1e294c20e 100644 (file)
Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/04-NavigationMenu-it.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/04-NavigationMenu-it.png differ
index a59245e1c35bc393d44f4dcda1106c12e749cf39..3687ee37857dee10725bbd209e185b3254de870e 100644 (file)
Binary files a/fastlane/metadata/android/it-IT/images/phoneScreenshots/05-DarkTheme-it.png and b/fastlane/metadata/android/it-IT/images/phoneScreenshots/05-DarkTheme-it.png differ
diff --git a/fastlane/metadata/android/ru-RU/changelogs/10.txt b/fastlane/metadata/android/ru-RU/changelogs/10.txt
new file mode 100644 (file)
index 0000000..5e14941
--- /dev/null
@@ -0,0 +1,3 @@
+• Исправлена ошибка, из-за которой при изменении сети повторно включались уведомления.
+• Для ночной темы добавлен двухтоновый фиолетовый текст.
+• Первый полный перевод на русский язык.
\ No newline at end of file
diff --git a/fastlane/metadata/android/ru-RU/changelogs/11.txt b/fastlane/metadata/android/ru-RU/changelogs/11.txt
new file mode 100644 (file)
index 0000000..e47c297
--- /dev/null
@@ -0,0 +1,5 @@
+• Целевой API повышен до 33 (Android 13).
+• Отключен свайп уведомления о мониторинге в реальном времени на Android 13.
+• Включена поддержка языков для каждого приложения на Android 13.
+• При перезапуске сохраняется положение прокрутки настроек.
+• Первый полный перевод на русский язык.
\ No newline at end of file
diff --git a/fastlane/metadata/android/ru-RU/changelogs/12.txt b/fastlane/metadata/android/ru-RU/changelogs/12.txt
new file mode 100644 (file)
index 0000000..eb9865b
--- /dev/null
@@ -0,0 +1,5 @@
+• Создан дополнительный монохромный значок (может использоваться в Android >= 13).
+• Разрешено включать Privacy Cell в системные резервные копии.
+• Целевой API повышен до 34 (Android 14).
+• Документированы необходимые разрешения для новых версий Android.
+• Повторное формирование уведомления о мониторинге в реальном времени каждые 15 минут.
\ No newline at end of file
diff --git a/fastlane/metadata/android/ru-RU/changelogs/9.txt b/fastlane/metadata/android/ru-RU/changelogs/9.txt
new file mode 100644 (file)
index 0000000..771add0
--- /dev/null
@@ -0,0 +1,5 @@
+• Теперь при определении общей безопасности сотовой сети будет учитываться статус голосовой сети.
+• Исправлена ошибка, из-за которой иногда не удавалось отключить уведомления.
+• Повышен целевой API до 32 (Android 12L).
+• Первый полный перевод на немецкий язык, выполненный Бернхардом Г. Келлером (Bernhard G. Keller).
+• Первый полный перевод на русский язык.
\ No newline at end of file
index a18bfe279b3febe51315b605880ac49fdd5ec436..492f7f184272a9e79dbe815b27d53ded2ba5c84b 100644 (file)
Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02-InsecureNetwork-ru.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/02-InsecureNetwork-ru.png differ
index 300c6fea55a6dccd05ec7078adde9bbe835e6147..02739c29491a6abccd937d49bcc96c97c22571d3 100644 (file)
Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03-AntiquatedNetwork-ru.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/03-AntiquatedNetwork-ru.png differ
index 28e4f9d8d937a69481210230dbefeaf457cd87ae..1582fb639d98f1c4c3e0d83acc2260b40967af6e 100644 (file)
Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04-NavigationMenu-ru.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/04-NavigationMenu-ru.png differ
index 78733418fcfd1dacb08c8719b2e5d0cd5503beb0..7eaa38d2f617ed40db120f8c48788d05970b5f7e 100644 (file)
Binary files a/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05-DarkTheme-ru.png and b/fastlane/metadata/android/ru-RU/images/phoneScreenshots/05-DarkTheme-ru.png differ
index 98bed167dc90ffee72b7affb37a659966b1bd114..06cfed7280dbbae234ce4ff14333d98a54c128d3 100644 (file)
@@ -1,3 +1,20 @@
+# Copyright 2023 Soren Stoutner <soren@stoutner.com>.
+#
+# This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+#
+# Privacy Cell 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.
+#
+# Privacy Cell 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 Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
+
 # Project-wide Gradle settings.
 # IDE (e.g. Android Studio) users:
 # Gradle settings configured through the IDE *will override*
 # Project-wide Gradle settings.
 # IDE (e.g. Android Studio) users:
 # Gradle settings configured through the IDE *will override*
 # Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings.
 org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
 # Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings.
 org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 # org.gradle.parallel=true
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
 # org.gradle.parallel=true
+
 # AndroidX package structure to make it clearer which packages are bundled with the
 # Android operating system, and which are packaged with your app"s APK
 # https://developer.android.com/topic/libraries/support-library/androidx-rn
 android.useAndroidX=true
 # AndroidX package structure to make it clearer which packages are bundled with the
 # Android operating system, and which are packaged with your app"s APK
 # https://developer.android.com/topic/libraries/support-library/androidx-rn
 android.useAndroidX=true
+
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 # Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
+
 # Kotlin code style for this project: "official" or "obsolete":
 # Kotlin code style for this project: "official" or "obsolete":
-kotlin.code.style=official
\ No newline at end of file
+kotlin.code.style=official
+
+# Enable the configuration cache, which improves build speed.
+org.gradle.unsafe.configuration-cache=true
+
+# Use non-transitive R classes, which speed up the build process when the configuration has not changed.
+android.nonTransitiveRClass=true
+
+# Use non-final resource IDs for faster incremental compilation.
+android.nonFinalResIds=true
+
+android.defaults.buildfeatures.buildconfig=true
\ No newline at end of file
index 7d897f9222026aa4b3bdb80c397c341d1c2d2242..2f3069e14d472d61382a89927f95336793e61f3b 100644 (file)
@@ -1,6 +1,23 @@
+# Copyright 2023 Soren Stoutner <soren@stoutner.com>.
+#
+# This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
+#
+# Privacy Cell 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.
+#
+# Privacy Cell 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 Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
+
 #Thu Aug 12 09:15:13 MST 2021
 distributionBase=GRADLE_USER_HOME
 #Thu Aug 12 09:15:13 MST 2021
 distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
 distributionPath=wrapper/dists
 zipStorePath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStorePath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME