Create a protocols activity. https://redmine.stoutner.com/issues/774
authorSoren Stoutner <soren@stoutner.com>
Wed, 23 Feb 2022 21:35:47 +0000 (14:35 -0700)
committerSoren Stoutner <soren@stoutner.com>
Wed, 23 Feb 2022 21:35:47 +0000 (14:35 -0700)
51 files changed:
COPYING
app/build.gradle
app/src/main/AndroidManifest.xml
app/src/main/assets/de/changelog.html
app/src/main/assets/de/licenses.html
app/src/main/assets/en/changelog.html
app/src/main/assets/en/licenses.html
app/src/main/assets/es/changelog.html
app/src/main/assets/es/licenses.html
app/src/main/assets/fr/changelog.html
app/src/main/assets/fr/licenses.html
app/src/main/assets/it/changelog.html
app/src/main/assets/it/licenses.html
app/src/main/assets/ru/changelog.html
app/src/main/assets/ru/licenses.html
app/src/main/java/com/stoutner/privacycell/activities/PrivacyCellActivity.kt
app/src/main/java/com/stoutner/privacycell/activities/ProtocolsActivity.kt [new file with mode: 0644]
app/src/main/java/com/stoutner/privacycell/adapters/ProtocolArrayAdapter.kt [new file with mode: 0644]
app/src/main/java/com/stoutner/privacycell/dialogs/WebViewDialog.kt
app/src/main/java/com/stoutner/privacycell/fragments/SettingsFragment.kt
app/src/main/res/drawable/donations.xml
app/src/main/res/drawable/insecure_notification.xml
app/src/main/res/drawable/not_secure.xml
app/src/main/res/drawable/privacy_cell_foreground.xml
app/src/main/res/drawable/protocols.xml [new file with mode: 0644]
app/src/main/res/drawable/realtime_monitoring_disabled.xml
app/src/main/res/drawable/realtime_monitoring_enabled.xml
app/src/main/res/drawable/realtime_monitoring_ghosted.xml
app/src/main/res/drawable/secure_5g_nr_sa.xml
app/src/main/res/drawable/secure_notification.xml
app/src/main/res/layout/protocol_header_textview.xml [new file with mode: 0644]
app/src/main/res/layout/protocol_item_textview.xml [new file with mode: 0644]
app/src/main/res/layout/protocols_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/protocols_top_appbar.xml [new file with mode: 0644]
app/src/main/res/menu/logcat_options_menu.xml
app/src/main/res/menu/navigation_menu_bottom_appbar.xml
app/src/main/res/menu/navigation_menu_top_appbar.xml
app/src/main/res/mipmap-anydpi-v26/privacy_cell.xml
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-night/themes.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/values/themes.xml
build.gradle
fastlane/metadata/android/fr-FR/changelogs/7.txt [new file with mode: 0644]
gradle/wrapper/gradle-wrapper.properties

diff --git a/COPYING b/COPYING
index 545ca2acc19347c750e83c70434cd082e3b4799e..aa4972b9c554a871dbea8d73512e1ecda907c41d 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,4 @@
-Privacy Cell copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+Privacy Cell copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
 
 This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
 
index a53b5511a880da17504117767913bfea1ce99fae..a015f11c7b93292dd23fa6346212177f48e0e4a8 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>.
  *
@@ -49,9 +49,9 @@ android {
 
 dependencies {
     // Include the following AndroidX libraries.
-    implementation 'androidx.appcompat:appcompat:1.4.0'
+    implementation 'androidx.appcompat:appcompat:1.4.1'
     implementation 'androidx.core:core-ktx:1.7.0'
-    implementation 'androidx.preference:preference-ktx:1.1.1'
+    implementation 'androidx.preference:preference-ktx:1.2.0'
     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
     implementation 'androidx.webkit:webkit:1.4.0'
     implementation 'androidx.work:work-runtime-ktx:2.7.1'
@@ -60,5 +60,5 @@ dependencies {
     implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10'
 
     // Include the Google material library.
-    implementation 'com.google.android.material:material:1.4.0'
+    implementation 'com.google.android.material:material:1.5.0'
 }
\ No newline at end of file
index be16e6e968a14e6dd91a21fa6fcbad0d39439e9e..4deb14c892c6e639af9f0ba45986889b08945674 100644 (file)
@@ -1,7 +1,7 @@
 <?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>.
 
     <!-- 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. -->
+    <!-- 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. -->
     <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:theme="@style/Theme.PrivacyCell"
+        tools:ignore="DataExtractionRules" >
 
         <!-- 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.
             android:screenOrientation="fullUser"
             android:parentActivityName=".activities.PrivacyCellActivity" />
 
+        <!-- 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" />
+
         <!-- Logcat Activity. The `parentActivityName` is used when navigating back. -->
         <activity
             android:name=".activities.LogcatActivity"
index 089d52108d425bc110b1b2fbc5fae97d9c1b6ca8..c6bc87cf4f82bd2cb488a999949603f766fca6d1 100644 (file)
@@ -29,8 +29,8 @@
     </head>
 
     <body>
-        <h3>1.6 (version code 7)</h3>
-        <p>21. Dezember 2021 - Mindest-API 30, Ziel-API 31</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-6/">1.6</a> (version code 7)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=2be052aa618f414a18d73f5075b3b3776180bee5">21. Dezember 2021</a> - Mindest-API 30, Ziel-API 31</p>
         <ul>
             <li>Von <a href="https://redmine.stoutner.com/issues/775">androidx.work</a> hinzugefügte, nicht benötigte Berechtigungen entfernt.</li>
             <li>Fehler behoben, durch den unter Android 12 der <a href="https://redmine.stoutner.com/issues/777">Benachrichtigungs-Dienst im Hintergrund nicht neu gestartet</a> werden konnte.</li>
index ab529be3767fe6ac3f5b2ecf78676b728ea37a04..fff3db315ad71761c47a6e587740e52f34715cea 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  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>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Cell ist Copyright © 2021 von <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Cell ist Copyright © 2021-2022 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.
index a6c4d6a886a64d0b343e80553ae1bc71eecd8b60..38dadbcfeea1b990c33399bd4fb77bd2ca532480 100644 (file)
@@ -27,8 +27,8 @@
     </head>
 
     <body>
-        <h3>1.6 (version code 7)</h3>
-        <p>21 December 2021 - minimum API 30, target API 31</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-6/">1.6</a> (version code 7)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=2be052aa618f414a18d73f5075b3b3776180bee5">21 December 2021</a> - minimum API 30, target API 31</p>
         <ul>
             <li>Remove unneeded permissions added by <a href="https://redmine.stoutner.com/issues/775">androidx.work</a>.</li>
             <li>Fix the notification service not being able to <a href="https://redmine.stoutner.com/issues/777">restart itself in the background</a> on Android 12.</li>
index c6914ce0fe0a99c78fce0e7d2efb21d90c15f76f..9ab6459179a61cc622bc65c6fcb76da9b5fd39ae 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>.
 
@@ -28,7 +28,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Cell copyright © 2021 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Cell copyright © 2021-2022 <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.
index 701ac1f3cf1d14a22d1fc5ce809b9f1296561a5b..963141ae276d750e9c1da5a6c05023f5bf7179b7 100644 (file)
@@ -29,8 +29,8 @@
     </head>
 
     <body>
-        <h3>1.6 (versión del código 7)</h3>
-        <p>21 de diciembre de 2021 - API mínimo 30, API objetivo 31</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-6/">1.6</a> (versión del código 7)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=2be052aa618f414a18d73f5075b3b3776180bee5">21 de diciembre de 2021</a> - API mínimo 30, API objetivo 31</p>
         <ul>
             <li>Eliminar los permisos innecesarios añadidos por <a href="https://redmine.stoutner.com/issues/775">androidx.work</a>.</li>
             <li>Arreglar el problema del servicio de notificaciones que no podía <a href="https://redmine.stoutner.com/issues/777">reiniciarse en segundo plano</a> en Android 12.</li>
index cae1254ad6421323b8e93d0c5d5db598145c54be..fbf47ee91cd7cc2089f0e1b4181b2b9a678da7f3 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>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Copyright de Privacy Cell © 2021 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Copyright de Privacy Cell © 2021-2022 <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.
index 100b5f46d39d7b08123d668c16881920d40d41fb..c151d9a00e2391735a325422ad3bbbfd0dfb0dd8 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  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-2022 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>.
 
     </head>
 
     <body>
-        <h3>1.6 (version de code 7)</h3>
-        <p>21 December 2021 - API minimum 30, API cible 31</p>
+        <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>
         <ul>
-            <li>Remove unneeded permissions added by <a href="https://redmine.stoutner.com/issues/775">androidx.work</a>.</li>
-            <li>Fix the notification service not being able to <a href="https://redmine.stoutner.com/issues/777">restart itself in the background</a> on Android 12.</li>
-            <li>Updated French translation contributed by <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
-            <li>First full Russian translation.</li>
+            <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>Mise à jour de la traduction française par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
+            <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>
index 7855e7830973db10404b3fe49602884cf2c1fde9..38800aecdcb67a79c181441299b66139dfc0e2b2 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>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Cell copyright © 2021 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Cell copyright © 2021-2022 <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.
index a34567e1a2321104cc3389b1c84fd15bb1170894..4e711d5cddf7524b2af6460d61ddfd0e4eda8103 100644 (file)
@@ -29,8 +29,8 @@
     </head>
 
     <body>
-        <h3>1.6 (versione codice 7)</h3>
-        <p>21 Dicembre 2021 - minima API 30, target API 31</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-6/">1.6</a> (versione codice 7)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=2be052aa618f414a18d73f5075b3b3776180bee5">21 Dicembre 2021</a> - minima API 30, target API 31</p>
         <ul>
             <li>Rimozione delle autorizzazioni non necessarie aggiunte da <a href="https://redmine.stoutner.com/issues/775">androidx.work</a>.</li>
             <li>Sistemazione del servizio di notifica che non riusciva a <a href="https://redmine.stoutner.com/issues/777">riavviarsi da solo in background</a> su Android 12.</li>
index a16c917a9fd294ad035d59947c8c59b60c7e7f2b..2792a83fc1d03d7e87d142f0b30174a3675a8e79 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>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Cell copyright © 2021 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Cell copyright © 2021-2022 <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.
index 78285dc00b5cd12c1db4aafdff8e7e63457e81c6..314d4ba03f58ff129538dbb68e65ceb60fbfcc0a 100644 (file)
@@ -27,8 +27,8 @@
     </head>
 
     <body>
-        <h3>1.6 (код версии 7)</h3>
-        <p>21 декабря 2021 года - минимальный API 30, целевой API 31</p>
+        <h3><a href="https://www.stoutner.com/privacy-cell-1-6/">1.6</a> (код версии 7)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyCell.git;a=commitdiff;h=2be052aa618f414a18d73f5075b3b3776180bee5">21 декабря 2021 года</a> - минимальный API 30, целевой API 31</p>
         <ul>
             <li>Удалены неиспользуемые разрешения, добавленные <a href="https://redmine.stoutner.com/issues/775">androidx.work</a>.</li>
             <li>Исправлена невозможность перезапуска <a href="https://redmine.stoutner.com/issues/777">в фоновом режиме службы уведомлений</a> на Android 12.</li>
index 4e41f1dfb194249b4ab5fa1ddd10bf240de3ba19..13ab3edf7ab60577798d24b22a8e23b295eada7c 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>.
 
@@ -28,7 +28,7 @@
 
     <body>
         <h3>Авторские права</h3>
-        <p>Авторские права Privacy Cell © 2021 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Авторские права Privacy Cell © 2021-2022 <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>. Полный текст лицензии приведен ниже.
index 55d7c92e4111d2cc3a58af10497b715093ba3955..7d6fd776b7d36726bb069521309de934bcbf1df5 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>.
  *
  * along with Privacy Cell.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+// The suppression of deprecation lint can be removed once the minimum API >= 31.
+@file:Suppress("DEPRECATION")
+
 package com.stoutner.privacycell.activities
 
 import android.Manifest
+import android.annotation.SuppressLint
 import android.app.ActivityManager
 import android.content.Context
 import android.content.Intent
@@ -137,6 +141,7 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
 
         // 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) {
                 // Populate the stingray security information.  <https://source.android.com/devices/tech/connect/acts-5g-testing>
                 if (telephonyDisplayInfo.networkType == TelephonyManager.NETWORK_TYPE_NR) {  // This is a secure 5G NR SA network.
@@ -342,6 +347,14 @@ class PrivacyCellActivity : AppCompatActivity(), NavigationView.OnNavigationItem
                 startActivity(settingsIntent)
             }
 
+            R.id.protocols -> {
+                // Create an intent to load the Protocols activity.
+                val protocolsIntent = Intent(this, ProtocolsActivity::class.java)
+
+                // Make it so.
+                startActivity(protocolsIntent)
+            }
+
             R.id.logcat -> {  // Logcat.
                 // Create an intent to load the Logcat activity.
                 val logcatIntent = Intent(this, LogcatActivity::class.java)
diff --git a/app/src/main/java/com/stoutner/privacycell/activities/ProtocolsActivity.kt b/app/src/main/java/com/stoutner/privacycell/activities/ProtocolsActivity.kt
new file mode 100644 (file)
index 0000000..1a926fe
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * 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/>.
+ */
+
+package com.stoutner.privacycell.activities
+
+import android.os.Bundle
+import android.view.View
+import android.widget.AdapterView
+import android.widget.ListView
+import android.widget.TextView
+
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.widget.Toolbar
+import androidx.preference.PreferenceManager
+
+import com.stoutner.privacycell.R
+import com.stoutner.privacycell.adapters.ProtocolArrayAdapter
+import com.stoutner.privacycell.dialogs.WebViewDialog
+
+class ProtocolsActivity : AppCompatActivity() {
+    public override fun onCreate(savedInstanceState: Bundle?) {
+        // Run the default commands.
+        super.onCreate(savedInstanceState)
+
+        // Get a handle for the shared preferences.
+        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
+
+        // Get the bottom app bar preference.
+        val bottomAppBar = sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false)
+
+        // Set the content view.
+        if (bottomAppBar) {
+            setContentView(R.layout.protocols_bottom_appbar)
+        } else {
+            setContentView(R.layout.protocols_top_appbar)
+        }
+
+        // Get handles for the views.
+        val toolbar = findViewById<Toolbar>(R.id.toolbar)
+        val listView = findViewById<ListView>(R.id.listview)
+
+        // Set the toolbar as the action bar.
+        setSupportActionBar(toolbar)
+
+        // Get a handle for the action bar.
+        val actionBar = supportActionBar!!
+
+        // Display the back arrow in the action bar.
+        actionBar.setDisplayHomeAsUpEnabled(true)
+
+        // Create a protocol array list.
+        val protocolArrayList = ArrayList<Pair<String, Boolean>>()
+
+        // Populate the protocol array list.  Headers are followed by `true`.
+        protocolArrayList.add(Pair(getString(R.string.protocol_2g), true))
+        protocolArrayList.add(Pair(getString(R.string.cdma_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.gsm_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.iden_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.gprs_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.edge_detail), false))
+
+        protocolArrayList.add(Pair(getString(R.string.protocol_3g), true))
+        protocolArrayList.add(Pair(getString(R.string.rtt_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.evdo_0_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.evdo_a_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.evdo_b_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.ehrpd_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.umts_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.td_scdma_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.hsdpa_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.hsupa_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.hspa_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.hspap_detail), false))
+
+        protocolArrayList.add(Pair(getString(R.string.protocol_4g), true))
+        protocolArrayList.add(Pair(getString(R.string.lte_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.lte_ca_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.lte_advanced_pro_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.nr_nsa_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.nr_nsa_mmwave_detail), false))
+
+        protocolArrayList.add(Pair(getString(R.string.protocol_5g), true))
+        protocolArrayList.add(Pair(getString(R.string.nr_detail), false))
+        protocolArrayList.add(Pair(getString(R.string.nr_advanced_detail), false))
+
+        protocolArrayList.add(Pair(getString(R.string.protocol_other), true))
+        protocolArrayList.add(Pair(getString(R.string.iwlan_detail), false))
+
+        // Instantiate the protocol array adapter.
+        val protocolArrayAdapter = ProtocolArrayAdapter(this, protocolArrayList)
+
+        // Set the list view adapter.
+        listView.adapter = protocolArrayAdapter
+
+        // Listen for clicks on items in the list view.
+        listView.onItemClickListener = AdapterView.OnItemClickListener { _: AdapterView<*>?, view: View, _: Int, _: Long ->
+            // Get a handle for the text view.
+            val textview = view.findViewById<TextView>(R.id.textview)
+
+            // Show an alert dialog if a protocol item was selected.
+            when (textview.text) {
+                getString(R.string.gprs_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_GPRS)
+                getString(R.string.edge_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_EDGE)
+                getString(R.string.umts_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_UMTS)
+                getString(R.string.cdma_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_CDMA)
+                getString(R.string.evdo_0_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_EVDO_0)
+                getString(R.string.evdo_a_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_EVDO_A)
+                getString(R.string.rtt_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_1xRTT)
+                getString(R.string.hsdpa_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_HSDPA)
+                getString(R.string.hsupa_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_HSUPA)
+                getString(R.string.hspa_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_HSPA)
+                getString(R.string.iden_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_IDEN)
+                getString(R.string.evdo_b_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_EVDO_B)
+                getString(R.string.lte_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_LTE)
+                getString(R.string.ehrpd_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_EHRPD)
+                getString(R.string.hspap_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_HSPAP)
+                getString(R.string.gsm_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_GSM)
+                getString(R.string.td_scdma_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_TD_SCDMA)
+                getString(R.string.iwlan_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_IWLAN)
+                getString(R.string.nr_detail) -> WebViewDialog().type(WebViewDialog.NETWORK_NR)
+                getString(R.string.lte_ca_detail) -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_LTE_CA)
+                getString(R.string.lte_advanced_pro_detail) -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_LTE_ADVANCED_PRO)
+                getString(R.string.nr_nsa_detail) -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_NSA)
+                getString(R.string.nr_nsa_mmwave_detail) -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_NSA_MMWAVE)
+                getString(R.string.nr_advanced_detail) -> WebViewDialog().type(WebViewDialog.OVERRIDE_NETWORK_NR_ADVANCED)
+                else -> null
+            }?.show(supportFragmentManager, getString(R.string.protocols))
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/stoutner/privacycell/adapters/ProtocolArrayAdapter.kt b/app/src/main/java/com/stoutner/privacycell/adapters/ProtocolArrayAdapter.kt
new file mode 100644 (file)
index 0000000..77576ac
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * 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.adapters
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ArrayAdapter
+import android.widget.TextView
+
+import com.stoutner.privacycell.R
+
+class ProtocolArrayAdapter(context: Context, protocolArrayList: ArrayList<Pair<String, Boolean>>) : ArrayAdapter<Pair<String, Boolean>>(context, 0, protocolArrayList) {
+    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
+        // Create a populated view and inflate the layout.
+        val populatedView = if (getItem(position)!!.second) {  // The protocol is a header entry.
+            LayoutInflater.from(context).inflate(R.layout.protocol_header_textview, parent, false)
+        } else {  // The protocol is not a header entry.
+            LayoutInflater.from(context).inflate(R.layout.protocol_item_textview, parent, false)
+        }
+
+        // Get a handle for the text view.
+        val textView = populatedView.findViewById<TextView>(R.id.textview)
+
+        // Populate the text view with the corresponding item from the protocol array list.
+        textView.text = getItem(position)!!.first
+
+        // Return the populated view.
+        return populatedView
+    }
+}
\ No newline at end of file
index 010342457aff73fa6e8a4521912636ff3e9c5d45..ab99a11b5950187f75338d403905932ed8ae4762 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>.
  *
@@ -336,7 +336,7 @@ class WebViewDialog : DialogFragment() {
                 dialogBuilder.setIcon(R.drawable.privacy_policy)
 
                 // Set the title.
-                dialogBuilder.setTitle(R.string.lte_ca)
+                dialogBuilder.setTitle(R.string.lte_advanced_pro)
             }
 
             OVERRIDE_NETWORK_NR_NSA -> {
index dd8c9c728fd08ffa4864c4c76701615a8e507bb3..3708bc225716db77487878f5a1be766cdea89218 100644 (file)
@@ -49,7 +49,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
         setPreferencesFromResource(R.xml.preferences, rootKey)
 
         // Get a handle for the shared preferences.
-        val sharedPreferences = preferenceScreen.sharedPreferences
+        val sharedPreferences = preferenceScreen.sharedPreferences!!
 
         // Get handles for the preferences.
         realtimeMonitoringPreference = findPreference(getString(R.string.realtime_monitoring_key))!!
@@ -107,7 +107,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
         super.onPause()
 
         // Get a handle for the shared preferences.
-        val sharedPreferences = preferenceScreen.sharedPreferences
+        val sharedPreferences = preferenceScreen.sharedPreferences!!
 
         // Unregister the shared preference listener.
         sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
@@ -122,7 +122,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
         sharedPreferenceChangeListener = getSharedPreferenceChangeListener()
 
         // Get a handle for the shared preferences.
-        val sharedPreferences = preferenceScreen.sharedPreferences
+        val sharedPreferences = preferenceScreen.sharedPreferences!!
 
         // Re-register the shared preference listener.
         sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
index c568e2449bbee5ff7d8dd44b10d043c993b96b05..81b4ab7970ef55e39e3989efec104b9de72dcf56 100644 (file)
@@ -2,11 +2,11 @@
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:autoMirrored="true"
     android:height="24dp"
     android:width="24dp"
     android:viewportHeight="24"
-    android:viewportWidth="24" >
+    android:viewportWidth="24"
+    android:autoMirrored="true" >
 
     <path
         android:fillColor="@color/icon_enabled"
index 127b0f15dbd9d0f912b900e8d7caafecd25dc9ee..4253f2f85c29267a47f30238d8fc9fb256da3489 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  This file is derived from `security` and `do_not_disturb`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
+  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
-  Changes copyright © 2016,2021 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+  This file is derived from `security` and `do_not_disturb`, 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>.
 
index d049d205f31b4bfd2a19f21d18bc58065a04f520..aafcbcf186500472120fd9d3bea509d2c53f872c 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  This file is derived from `security` and `do_not_disturb`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
+  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
-  Changes copyright © 2016,2021 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
+  This file is derived from `security` and `do_not_disturb`, 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>.
 
index 172dfce33a3ccdbea3ea4cb2a602368b9b2e1ce2..9f877bb2e76206ef57d96c2ba24c1de819b5701c 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  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.
+  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
-  Changes copyright © 2016,2021 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>.
 
diff --git a/app/src/main/res/drawable/protocols.xml b/app/src/main/res/drawable/protocols.xml
new file mode 100644 (file)
index 0000000..ea5cd78
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- This file comes from the Android Material icon set, where it is called `settings_input_antenna_rounded`.  It is released under the Apache License 2.0. -->
+
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportHeight="24"
+    android:viewportWidth="24" >
+
+    <path
+        android:fillColor="@color/icon_enabled"
+        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 83b6e26e61c8052f061d2621b25008d34db36118..fe4548415e93a7d26d71dd99aae71ba9c46ee4de 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  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.
+  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
-  Changes copyright © 2016,2021 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>.
 
index d255c8cc5175a67d16019798902cf2bb7facec51..367ef0da1786ab875c55f06044c2ee18e1106a2d 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  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.
+  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
-  Changes copyright © 2016,2021 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>.
 
index 9850b292c862cbaf65a6e4340d41c600bd54dba6..cf7cde85fdbda1ee73b0b7c0bd039b4aecb586cc 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  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.
+  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
-  Changes copyright © 2016,2021 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>.
 
index fc8ea0b25ad9241bf47495da1fc9939d625d4539..9775270623fcaaac45889eddbe65a8c4e3cdf17e 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  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.
+  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
-  Changes copyright © 2016,2021 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>.
 
index ce61836fa9e671750f36678cb7f6868d48769c02..a1f3727c1502930ca6a846275a7cd581e6e1b47b 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  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.
+  Copyright © 2016,2021-2022 Soren Stoutner <soren@stoutner.com>.  The resulting image is released under the GPLv3+ license.
 
-  Changes copyright © 2016,2021 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>.
 
diff --git a/app/src/main/res/layout/protocol_header_textview.xml b/app/src/main/res/layout/protocol_header_textview.xml
new file mode 100644 (file)
index 0000000..c86d07a
--- /dev/null
@@ -0,0 +1,33 @@
+<?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/>. -->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/textview"
+    android:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    android:paddingStart="16dp"
+    android:paddingEnd="16dp"
+    android:paddingTop="16dp"
+    android:paddingBottom="4dp"
+    android:textAlignment="center"
+    android:textSize="28sp"
+    android:textStyle="bold"
+    android:textColor="@color/blue_text" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/protocol_item_textview.xml b/app/src/main/res/layout/protocol_item_textview.xml
new file mode 100644 (file)
index 0000000..897b8f5
--- /dev/null
@@ -0,0 +1,31 @@
+<?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/>. -->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/textview"
+    android:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    android:paddingStart="16dp"
+    android:paddingEnd="16dp"
+    android:paddingTop="10dp"
+    android:paddingBottom="10dp"
+    android:textSize="20sp"
+    android:textColor="?android:attr/textColorPrimary" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/protocols_bottom_appbar.xml b/app/src/main/res/layout/protocols_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..e273674
--- /dev/null
@@ -0,0 +1,55 @@
+<?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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent" >
+
+    <!-- The linear layout with `orientation="vertical"` keeps the content above the app bar layout.  `app:layout_dodgeInsetEdges="bottom"` as a child of a coordinator layout moves the view above snackbars. -->
+    <LinearLayout
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:orientation="vertical"
+        app:layout_dodgeInsetEdges="bottom" >
+
+        <ListView
+            android:id="@+id/listview"
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:layout_width="match_parent"
+            android:divider="@color/transparent"
+            android:dividerHeight="0dp" />
+
+        <!-- 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"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/ThemeOverlay.AppCompat.DayNight.ActionBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/protocols_top_appbar.xml b/app/src/main/res/layout/protocols_top_appbar.xml
new file mode 100644 (file)
index 0000000..c374a89
--- /dev/null
@@ -0,0 +1,52 @@
+<?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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent" >
+
+    <!-- The linear layout with `orientation="vertical"` moves the content below the app bar layout. -->
+    <LinearLayout
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:orientation="vertical" >
+
+        <!-- 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"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/ThemeOverlay.AppCompat.DayNight.ActionBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <ListView
+            android:id="@+id/listview"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:divider="@color/transparent"
+            android:dividerHeight="0dp" />
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
index f81aa281f8173deef274b4ef45c2414e25ff7323..150ced2420bd18717d9955bc31c808d5c693a71c 100644 (file)
@@ -1,7 +1,7 @@
 <?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>.
 
@@ -24,7 +24,7 @@
 
     <item
         android:id="@+id/copy"
-        android:title="@string/copy"
+        android:title="@string/copy_string"
         android:orderInCategory="10"
         android:icon="@drawable/copy"
         app:showAsAction="always" />
index 7173dd62d379f534241434fd3ecbf2c157f3a51b..a319bf1f2b3cd48a6a95eb62c6bd640d77072e00 100644 (file)
@@ -1,7 +1,7 @@
 <?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>.
 
             android:icon="@drawable/logcat"
             android:orderInCategory="110" />
 
+        <item
+            android:id="@+id/protocols"
+            android:title="@string/protocols"
+            android:icon="@drawable/protocols"
+            android:orderInCategory="120" />
+
         <item
             android:id="@+id/settings"
             android:title="@string/settings"
             android:icon="@drawable/settings"
-            android:orderInCategory="120" />
+            android:orderInCategory="130" />
     </group>
 </menu>
\ No newline at end of file
index 2504912f99237e0848edee08c23a71c604f06a17..8900ab2bd7791eb985da70984aa3a70a78c97494 100644 (file)
@@ -1,7 +1,7 @@
 <?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>.
 
         android:icon="@drawable/settings"
         android:orderInCategory="10" />
 
+    <item
+        android:id="@+id/protocols"
+        android:title="@string/protocols"
+        android:icon="@drawable/protocols"
+        android:orderInCategory="20" />
+
     <item
         android:id="@+id/logcat"
         android:title="@string/logcat"
         android:icon="@drawable/logcat"
-        android:orderInCategory="20" />
+        android:orderInCategory="30" />
 
     <!-- If a group has an id, a line is drawn above it in the navigation view. -->
     <group android:id="@+id/dialogs" >
             android:id="@+id/permissions"
             android:title="@string/permissions"
             android:icon="@drawable/permissions"
-            android:orderInCategory="30" />
+            android:orderInCategory="40" />
 
         <item
             android:id="@+id/privacy_policy"
             android:title="@string/privacy_policy"
             android:icon="@drawable/privacy_policy"
-            android:orderInCategory="40" />
+            android:orderInCategory="50" />
 
         <item
             android:id="@+id/changelog"
             android:title="@string/changelog"
             android:icon="@drawable/changelog"
-            android:orderInCategory="50" />
+            android:orderInCategory="60" />
 
         <item
             android:id="@+id/licenses"
             android:title="@string/licenses"
             android:icon="@drawable/licenses"
-            android:orderInCategory="60" />
+            android:orderInCategory="70" />
 
         <item
             android:id="@+id/contributors"
             android:title="@string/contributors"
             android:icon="@drawable/contributors"
-            android:orderInCategory="70" />
+            android:orderInCategory="80" />
     </group>
 
     <!-- If a group has an id, a line is drawn above it in the navigation view. -->
             android:id="@+id/news"
             android:title="@string/news"
             android:icon="@drawable/news"
-            android:orderInCategory="80" />
+            android:orderInCategory="90" />
 
         <item
             android:id="@+id/roadmap"
             android:title="@string/roadmap"
             android:icon="@drawable/roadmap"
-            android:orderInCategory="90" />
+            android:orderInCategory="100" />
 
         <item
             android:id="@+id/bug_tracker"
             android:title="@string/bug_tracker"
             android:icon="@drawable/bug_tracker"
-            android:orderInCategory="100" />
+            android:orderInCategory="110" />
 
         <item
             android:id="@+id/forum"
             android:title="@string/forum"
             android:icon="@drawable/forum"
-            android:orderInCategory="110" />
+            android:orderInCategory="120" />
     </group>
 
     <!-- If a group has an id, a line is drawn above it in the navigation view. -->
             android:id="@+id/donations"
             android:title="@string/donations"
             android:icon="@drawable/donations"
-            android:orderInCategory="120" />
+            android:orderInCategory="130" />
     </group>
 </menu>
\ No newline at end of file
index b920bec88e1d7708c122ee4e66aa361c587c3655..1a8afafc0df46687af374a3bd1287eba3221f9aa 100644 (file)
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+  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>.
 
index 57a0eedc772968bc3a826f760819ddce92c09178..aa6aae4c145542259c38c09b5ceadaf027abb8dc 100644 (file)
@@ -1,5 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+
 <!--
-  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>.
 
@@ -18,7 +20,7 @@
   You should have received a copy of the GNU General Public License
   along with Privacy Cell.  If not, see <http://www.gnu.org/licenses/>. -->
 
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
     <!-- General. -->
     <string name="privacy_cell">Privacy Cell</string>
     <string name="cell">Zelle</string>
@@ -55,7 +57,7 @@
     <!-- Network types. -->
     <string name="unknown">Unbekannt</string>
     <string name="gprs">GPRS – 2.5G/3G</string>
-    <string name="gprs_detail">General Packet Radio Service</string>
+    <string name="gprs_detail" tools:ignore="Typos">General Packet Radio Service</string>
     <string name="edge">EDGE – 2.5G/3G</string>
     <string name="edge_detail">Enhanced Data rates for GSM Evolution</string>
     <string name="umts">UMTS – 3G</string>
     <string name="rtt">1xRTT – 3G</string>
     <string name="rtt_detail">Single-Carrier Radio Transmission Technology</string>
     <string name="hsdpa">HSDPA – 3.5G</string>
-    <string name="hsdpa_detail">High Speed Downlink Packet Access</string>
+    <string name="hsdpa_detail" tools:ignore="Typos">High Speed Downlink Packet Access</string>
     <string name="hsupa">HSUPA – 3.5G</string>
-    <string name="hsupa_detail">High-Speed Uplink Packet Access</string>
+    <string name="hsupa_detail" tools:ignore="Typos">High-Speed Uplink Packet Access</string>
     <string name="hspa">HSPA – 3.5G</string>
-    <string name="hspa_detail">High Speed Packet Access</string>
+    <string name="hspa_detail" tools:ignore="Typos">High Speed Packet Access</string>
     <string name="iden">IDEN – 2G</string>
     <string name="iden_detail">Integrated Digital Enhanced Network</string>
     <string name="evdo_b">EVDO B – 3.5G</string>
@@ -81,9 +83,9 @@
     <string name="lte">LTE – 4G</string>
     <string name="lte_detail">Long-Term Evolution</string>
     <string name="ehrpd">EHRPD – 3.5G/4G</string>
-    <string name="ehrpd_detail">Enhanced High-Rate Packet Data</string>
+    <string name="ehrpd_detail" tools:ignore="Typos">Enhanced High-Rate Packet Data</string>
     <string name="hspap">HSPAP – 3.5G</string>
-    <string name="hspap_detail">High Speed Packet Access Plus</string>
+    <string name="hspap_detail" tools:ignore="Typos">High Speed Packet Access Plus</string>
     <string name="gsm">GSM – 2G</string>
     <string name="gsm_detail">Global System for Mobile Communications</string>
     <string name="td_scdma">TD-SCDMA – 3G</string>
 
     <!-- Logcat.  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="copy">Kopieren</string>
+    <string name="copy_string">Kopieren</string>
     <string name="save">Speichern</string>
     <string name="clear">Löschen</string>
     <string name="logcat_copied">Logcat wurde kopiert.</string>
index ce7e3d841dec1c47771db4c46ac51c71e9fc6134..4651b8ea33b213e66110405f44463696649d2b70 100644 (file)
@@ -1,5 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+
 <!--
-  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>.
 
 
     <!-- Logcat.  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="copy">Copiar</string>
+    <string name="copy_string">Copiar</string>
     <string name="save">Guardar</string>
     <string name="clear">Limpiar</string>
     <string name="logcat_copied">Logcat copiado.</string>
index 029e29a6640303f6c0cffe6b203cf3c2e6b20fd6..ffea456986bfd8052754503d7584e768871f3017 100644 (file)
@@ -1,5 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+
 <!--
-  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>.
 
 
     <!-- Logcat.  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="copy">Copier</string>
+    <string name="copy_string">Copier</string>
     <string name="save">Sauvegarder</string>
     <string name="clear">Nettoyer</string>
     <string name="logcat_copied">Logcat copié.</string>
index 7314af42fbd4c8e026d3fdf3ddf105fa7069dca7..235dabd345c88e76030a21c2beaa75ff092a1aba 100644 (file)
@@ -1,5 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+
 <!--
-  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>.
 
 
     <!-- Logcat.  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="copy">Copia</string>
+    <string name="copy_string">Copia</string>
     <string name="save">Salva</string>
     <string name="clear">Cancella</string>
     <string name="logcat_copied">Logcat copiato.</string>
index 3a15eb29cf12e6d35d5ce668355f87d6c8f4b320..194ddaf3d07713178de89b0df7d92d4b0b7655cd 100644 (file)
@@ -1,7 +1,7 @@
 <?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>.
 
@@ -50,4 +50,6 @@
     <color name="violet_500">#FF8AB4F8</color>
 
     <color name="white">#FFFFFFFF</color>
+
+    <color name="transparent">#00000000</color>
 </resources>
\ No newline at end of file
index cd52106b55e522550970deaf8c66caf0fbd12b28..963b5547ef3016f986be0a30f270df8eecc4c326 100644 (file)
@@ -1,3 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
index f6c3042af3eb5c8a33e142593ac104c38d684fbf..ddad0966eabaf1de5b14746a8b961e914d65d18a 100644 (file)
@@ -1,5 +1,7 @@
+<?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>.
 
 
     <!-- Logcat.  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="copy">Скопировать</string>
+    <string name="copy_string">Скопировать</string>
     <string name="save">Сохранить</string>
     <string name="clear">Очистить</string>
     <string name="logcat_copied">Logcat скопирован.</string>
index 95f9c46f6236d9f7d31d089784755776941f61c3..2b2a8fc62748728da2e774589db5b40b4aaad987 100644 (file)
@@ -1,7 +1,7 @@
 <?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>.
 
@@ -50,4 +50,6 @@
     <color name="violet_500">#FF8AB4F8</color>
 
     <color name="white">#FFFFFFFF</color>
+
+    <color name="transparent">#00000000</color>
 </resources>
\ No newline at end of file
index 4e3be6e197d24ee5768b9ef2a7fe8b54b17b5856..9fa5e3e79482f387c0cb87f5878a59d032c21fc7 100644 (file)
@@ -1,5 +1,7 @@
+<?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>.
 
@@ -40,6 +42,7 @@
 
     <!-- Navigation menu. -->
     <string name="settings">Settings</string>
+    <string name="protocols">Protocols</string>
     <string name="logcat">Logcat</string>
     <string name="permissions">Permissions</string>
     <string name="privacy_policy">Privacy Policy</string>
     <string name="forum">Forum</string>
     <string name="donations">Donations</string>
 
+    <!-- Protocol families. -->
+    <string name="protocol_2g">2G</string>
+    <string name="protocol_3g">3G</string>
+    <string name="protocol_4g">4G</string>
+    <string name="protocol_5g">5G</string>
+    <string name="protocol_other">Other</string>
+
     <!-- Network types. -->
     <string name="unknown">Unknown</string>
     <string name="gprs">GPRS – 2.5G/3G</string>
 
     <!-- Logcat.  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="copy">Copy</string>
+    <string name="copy_string">Copy</string>
     <string name="save">Save</string>
     <string name="clear">Clear</string>
     <string name="logcat_copied">Logcat copied.</string>
index cb42f2510e656fcf90bef2f3727a58282bf3da08..300ca075ef5e82ed7f3ea0324bdf006a78c185d7 100644 (file)
@@ -1,3 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+
 <!--
   Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
 
index 492462b4b44a7d421fc5a1658ee14157dbda1e12..46c499fe9e4f2eeabcca9c818cff53dc861173f7 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>.
  *
@@ -25,7 +25,7 @@ buildscript {
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:7.0.4'
+        classpath 'com.android.tools.build:gradle:7.1.1'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
 
         // NOTE: Do not place your application dependencies here; they belong
diff --git a/fastlane/metadata/android/fr-FR/changelogs/7.txt b/fastlane/metadata/android/fr-FR/changelogs/7.txt
new file mode 100644 (file)
index 0000000..a26ad0e
--- /dev/null
@@ -0,0 +1,4 @@
+• Suppression des permissions inutiles ajoutées androidx.work.
+• Correction du service de notification ne pouvant pas se redémarrer en arrière-plan sur Android 12.
+• Mise à jour de la traduction française par Kévin L.
+• Première traduction complète en russe.
\ No newline at end of file
index 6064573a6adb88aa749b5d1ae2637deaf808a726..7d897f9222026aa4b3bdb80c397c341d1c2d2242 100644 (file)
@@ -1,6 +1,6 @@
 #Thu Aug 12 09:15:13 MST 2021
 distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
 distributionPath=wrapper/dists
 zipStorePath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME