]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Fix a crash when opening a drawer while restarting. https://redmine.stoutner.com...
authorSoren Stoutner <soren@stoutner.com>
Wed, 29 Sep 2021 23:14:44 +0000 (16:14 -0700)
committerSoren Stoutner <soren@stoutner.com>
Wed, 29 Sep 2021 23:14:44 +0000 (16:14 -0700)
120 files changed:
app/build.gradle
app/src/free/assets/de/about_privacy_policy.html
app/src/free/assets/en/about_privacy_policy.html
app/src/free/assets/es/about_permissions.html
app/src/free/assets/es/about_privacy_policy.html
app/src/free/assets/fr/about_permissions.html
app/src/free/assets/fr/about_privacy_policy.html
app/src/free/assets/it/about_privacy_policy.html
app/src/free/assets/pt-rBR/about_privacy_policy.html
app/src/free/assets/ru/about_privacy_policy.html
app/src/free/assets/tr/about_privacy_policy.html
app/src/free/java/com/stoutner/privacybrowser/helpers/AdHelper.kt
app/src/free/res/values-es/strings.xml
app/src/free/res/values-fr/strings.xml
app/src/main/AndroidManifest.xml
app/src/main/assets/de/about_licenses.html
app/src/main/assets/de/about_links.html
app/src/main/assets/en/about_licenses.html
app/src/main/assets/en/about_links.html
app/src/main/assets/en/about_privacy_policy.html
app/src/main/assets/es/about_changelog.html
app/src/main/assets/es/about_licenses.html
app/src/main/assets/es/about_links.html
app/src/main/assets/es/about_privacy_policy.html
app/src/main/assets/fr/about_licenses.html
app/src/main/assets/fr/about_links.html
app/src/main/assets/fr/about_privacy_policy.html
app/src/main/assets/it/about_licenses.html
app/src/main/assets/it/about_links.html
app/src/main/assets/it/about_privacy_policy.html
app/src/main/assets/pt-rBR/about_licenses.html
app/src/main/assets/pt-rBR/about_links.html
app/src/main/assets/pt-rBR/about_privacy_policy.html
app/src/main/assets/ru/about_licenses.html
app/src/main/assets/ru/about_links.html
app/src/main/assets/ru/about_privacy_policy.html
app/src/main/assets/tr/about_licenses.html
app/src/main/assets/tr/about_links.html
app/src/main/assets/tr/about_privacy_policy.html
app/src/main/java/com/stoutner/privacybrowser/activities/AboutActivity.kt
app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/BookmarksDatabaseViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/GuideActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/ImportExportActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/LogcatActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/RequestsActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/AddDomainDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateBookmarkDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateBookmarkFolderDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/EditBookmarkDatabaseViewDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/EditBookmarkDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/EditBookmarkFolderDatabaseViewDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/EditBookmarkFolderDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/FontSizeDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/HttpAuthenticationDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/MoveToFolderDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/OpenDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/PinnedMismatchDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/SaveDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/SaveWebpageDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/SslCertificateErrorDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/UntrustedSslCertificateDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/UrlHistoryDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewRequestDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/WaitingForProxyDialog.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/AboutWebViewFragment.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java
app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.kt
app/src/main/res/drawable/.idea/codeStyles/Project.xml [deleted file]
app/src/main/res/drawable/.idea/misc.xml [deleted file]
app/src/main/res/drawable/.idea/modules.xml [deleted file]
app/src/main/res/drawable/.idea/vcs.xml [deleted file]
app/src/main/res/drawable/.idea/workspace.xml [deleted file]
app/src/main/res/layout/about_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/about_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/about_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/about_top_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/bookmarks_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/bookmarks_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/bookmarks_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/bookmarks_databaseview_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/bookmarks_databaseview_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/bookmarks_databaseview_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/bookmarks_databaseview_top_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/bookmarks_top_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/domains_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/domains_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/domains_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/domains_top_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/guide_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/guide_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/guide_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/guide_top_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/import_export_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/import_export_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/import_export_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/import_export_top_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/logcat_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/logcat_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/logcat_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/logcat_top_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/requests_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/requests_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/requests_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/requests_top_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/view_source_bottom_appbar.xml [new file with mode: 0644]
app/src/main/res/layout/view_source_coordinatorlayout_bottom_appbar.xml [deleted file]
app/src/main/res/layout/view_source_coordinatorlayout_top_appbar.xml [deleted file]
app/src/main/res/layout/view_source_top_appbar.xml [new file with mode: 0644]
app/src/main/res/values-es/strings.xml
app/src/main/res/values-fr/strings.xml
build.gradle
fastlane/metadata/android/en-US/images/promoGraphic.png [deleted file]
fastlane/metadata/android/en-US/images/tvBanner.png [deleted file]

index b75f2115b828769bc300d23b24dfcc79e96d4d64..3cc3256bfcc63af443247e4bf208c6b63cfa4732 100644 (file)
@@ -83,11 +83,11 @@ dependencies {
     implementation 'androidx.webkit:webkit:1.4.0'
 
     // Include the Kotlin standard libraries.  This should be the same version number listed in project build.gradle.
-    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.21'
+    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31'
 
     // Include the Google material library.
     implementation 'com.google.android.material:material:1.4.0'
 
     // Only compile AdMob ads for the free flavor.
-    freeImplementation 'com.google.android.gms:play-services-ads:20.2.0'
+    freeImplementation 'com.google.android.gms:play-services-ads:20.4.0'
 }
\ No newline at end of file
index 5060287c468eca3b9dcdb656144814fb27d66509..0f7e60650bfa1cb5570bb14d9f505007930b120a 100644 (file)
@@ -83,8 +83,8 @@
 
         <h3>Werbeeinblendungen</h3>
         <p>Privacy Browser Free blendet einen Werbebanner unten am Bildschirm ein und verwendet hierfür Googles Netzwerk AdMob,
-            dessen eigene Datenschutzbestimmungen <a href="https://www.google.com/intl/en/policies/privacy/">hier zu finden sind</a>.
-            Die Ausspielung dieser Werbebanner erfolgt dabei <a href="https://developers.google.com/admob/android/eu-consent#update_consent_status">nicht-personalisiert</a>.
+            dessen eigene Datenschutzbestimmungen <a href="https://policies.google.com/privacy">hier zu finden sind</a>.
+            Die Ausspielung dieser Werbebanner erfolgt dabei <a href="https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent">nicht-personalisiert</a>.
             AdMob überträgt zudem <em>anonymisierte Zusammenfassungen</em> folgender Informationen an die Entwickler:</p>
         <ul>
             <li><item>Totale Besuche</item></li>
index 0ec033a67493b14f45370f2109e10fcac202b38a..6b7a5a16b490a8acccb6fd231e471dc5cb925d93 100644 (file)
@@ -32,7 +32,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             Google provides <em>anonymized summary installation information</em> to developers, including the number of installs organized by the following categories.</p>
         <ul>
             <li><item>Android version</item> (eg. Android 7.1)</li>
@@ -46,7 +46,7 @@
 
 
         <h3>Google Play Ratings</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             Google provides developers with <em>anonymized summaries</em> of the following information related to user ratings.</p>
         <ul>
             <li><item>Country</item> (eg. United States)</li>
@@ -59,7 +59,7 @@
 
 
         <h3>Google Play Reviews</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             In addition to the name of the reviewer, the rating, and the text of the review (which are all available publicly), Google provides some or all of the following information to the developer.</p>
         <ul>
             <li><item>Version code</item> (eg. 7)</li>
@@ -81,8 +81,8 @@
 
         <h3>Advertisements</h3>
         <p>Privacy Browser Free displays a banner ad across the bottom of the screen using Google's AdMob network,
-            which has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
-            These ads are set to be <a href="https://developers.google.com/admob/android/eu-consent#update_consent_status">non-personalized</a>.
+            which has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
+            These ads are set to be <a href="https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent">non-personalized</a>.
             AdMob reports <em>anonymized summaries</em> of the following information to developers.</p>
         <ul>
             <li><item>Total impressions</item></li>
index cabb53b1ed265fdfd7bd28cf5cee4fb0c9d8bb2c..9713959d6ab1f7d4145c0f8dbe68eed33c9927fc 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2019,2021 Jose A. León Becerra.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2019,2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
index 7788e1dcf7a1743f43392a7de0b62ad2094617ff..91844d247c49bb056af6bfccfca5552c673a3238 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2017-2018,2020 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2018 Jose A. León Becerra.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2018 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
@@ -34,7 +34,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play tiene su <a href="https://www.google.com/intl/en/policies/privacy/">propia política de privacidad</a>.
+        <p>Google Play tiene su <a href="https://policies.google.com/privacy">propia política de privacidad</a>.
             Google proporciona <em>información resumida y anónima de instalación</em> a los desarrolladores, incluyendo el número de instalaciones, organizadas por las siguientes categorías.</p>
         <ul>
             <li><item>Versión de Android</item> (p.ej. Android 7.1)</li>
@@ -48,7 +48,7 @@
 
 
         <h3>Calificaciones de Google Play</h3>
-        <p>Google Play tiene su <a href="https://www.google.com/intl/en/policies/privacy/">propia política de privacidad</a>.
+        <p>Google Play tiene su <a href="https://policies.google.com/privacy">propia política de privacidad</a>.
             Google proporciona a los desarrolladores <em>resúmenes anónimos</em> de la siguiente información relativa a las valoraciones de los usuarios.</p>
         <ul>
             <li><item>País</item> (p.ej. Estados Unidos)</li>
@@ -61,7 +61,7 @@
 
 
         <h3>Comentarios de Google Play</h3>
-        <p>Google Play tiene su <a href="https://www.google.com/intl/en/policies/privacy/">propia política de privacidad</a>.
+        <p>Google Play tiene su <a href="https://policies.google.com/privacy">propia política de privacidad</a>.
             Además del nombre del comentador, la calificación y el texto del comentario (las cuales están disponibles públicamente),
             Google proporciona alguna o toda la siguiente información al desarrollador.</p>
         <ul>
@@ -84,8 +84,8 @@
 
         <h3>Anuncios</h3>
         <p>Navegador Privado Gratuito muestra un banner publicitario en la parte inferior de la pantalla mediante la red AdMob de Google,
-            que tiene su <a href="https://www.google.com/intl/en/policies/privacy/">propia política de privacidad</a>.
-            Estos anuncios están configurados para ser <a href="https://developers.google.com/admob/android/eu-consent#update_consent_status">no personalizados</a>.
+            que tiene su <a href="https://policies.google.com/privacy">propia política de privacidad</a>.
+            Estos anuncios están configurados para ser <a href="https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent">no personalizados</a>.
             AdMob reporta <em>resúmenes anónimos</em> de la siguiente información a los desarrolladores.</p>
         <ul>
             <li><item>Impresiones totales</item></li>
index eee98e059f5ba3def2f9075086bcc38846253b66..fb5caaaf8a1397117caeae1847068ed4cc67b8be 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019,2021 Kévin LE FLOHIC <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019,2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
index 6129ee0b2b86297237ff4ee758fc06a077bd6a20..18322cd92c91bc1606c83019218fee1d700f7890 100644 (file)
@@ -1,7 +1,7 @@
 <!--
   Copyright © 2016-2018,2020 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019 Kévin LE FLOHIC <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
@@ -34,7 +34,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play a sa <a href="https://www.google.com/intl/en/policies/privacy/"> propre règle de confidentialité </a>.
+        <p>Google Play a sa <a href="https://policies.google.com/privacy"> propre règle de confidentialité </a>.
             Google fournit aux développeurs des <em>informations d'installation récapitulatives et anonymisées</em>, notamment le nombre d'installations organisées selon les catégories suivantes.</p>
         <ul>
             <li><item>Version d'Android</item> (ex. Android 7.1)</li>
@@ -48,7 +48,7 @@
 
 
         <h3>Notes Google Play</h3>
-        <p>Google Play a sa <a href="https://www.google.com/intl/en/policies/privacy/">propre règle de confidentialité </a>.
+        <p>Google Play a sa <a href="https://policies.google.com/privacy">propre règle de confidentialité </a>.
             Google fournit aux développeurs des <em>résumés anonymisés</em> des informations suivantes relatives aux évaluations des utilisateurs.</p>
         <ul>
             <li><item>Pays</item> (ex. France)</li>
@@ -61,7 +61,7 @@
 
 
         <h3>Avis Google Play</h3>
-        <p>Google Play a sa <a href="https://www.google.com/intl/en/policies/privacy/">propre règle de confidentialité</a>.
+        <p>Google Play a sa <a href="https://policies.google.com/privacy">propre règle de confidentialité</a>.
             Outre le nom du réviseur, l'évaluation et le texte de la révision (tous disponibles publiquement), Google fournit au développeur tout ou partie des informations suivantes.</p>
         <ul>
             <li><item>Code de Version</item> (ex. 7)</li>
@@ -83,8 +83,8 @@
 
         <h3>Annonces</h3>
         <p>Privacy Browser Free affiche une bannière publicitaire en bas de l'écran à l'aide du réseau AdMob de Google,
-            qui a sa <a href="https://www.google.com/intl/en/policies/privacy/">propre politique de confidentialité</a>.
-            Ces annonces sont définies pour être <a href="https://developers.google.com/admob/android/eu-consent#update_consent_status">non-personalisées</a>.
+            qui a sa <a href="https://policies.google.com/privacy">propre politique de confidentialité</a>.
+            Ces annonces sont définies pour être <a href="https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent">non-personalisées</a>.
             AdMob transmet aux développeurs des <em>résumés anonymisés</em> des informations suivantes.</p>
         <ul>
             <li><item>Total d'affichages</item></li>
index f6feef0ded0f197c6c71bb5f5a16d109086eb41a..53aaa81f377e050e3164410c716560f1066270c4 100644 (file)
@@ -34,7 +34,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play ha una <a href="https://www.google.com/intl/en/policies/privacy/">propria privacy policy</a>.
+        <p>Google Play ha una <a href="https://policies.google.com/privacy">propria privacy policy</a>.
             Google fornisce agli sviluppatori <em>informazioni anonime sulle installazioni</em>, incluso il numero di installazioni, secondo le seguenti categorie.</p>
         <ul>
             <li><item>Versione Android</item> (es. Android 7.1)</li>
@@ -48,7 +48,7 @@
 
 
         <h3>Ratings di Google Play</h3>
-        <p>Google Play ha una <a href="https://www.google.com/intl/en/policies/privacy/">propria privacy policy</a>.
+        <p>Google Play ha una <a href="https://policies.google.com/privacy">propria privacy policy</a>.
             Google fornisce agli sviluppatori <em>sintesi anonime</em> delle seguenti informazioni collegate ai ratings degli utenti.</p>
         <ul>
             <li><item>Nazione</item> (es. United States)</li>
@@ -61,7 +61,7 @@
 
 
         <h3>Recensioni di Google Play</h3>
-        <p>Google Play ha una <a href="https://www.google.com/intl/en/policies/privacy/">propria privacy policy</a>.
+        <p>Google Play ha una <a href="https://policies.google.com/privacy">propria privacy policy</a>.
             Oltre al nome del recensore, al rating, e al testo della recensione (i quali sono tutti pubblicamente disponibili), Google fornisce alcune o tutte le seguenti informazioni allo sviluppatore.</p>
         <ul>
             <li><item>Codice Versione</item> (es. 7)</li>
@@ -83,8 +83,8 @@
 
         <h3>Annunci</h3>
         <p>Privacy Browser Free mostra un banner pubblicitario nella parte inferiore dello schermo utilizzando la Google's AdMob network,
-            che ha una propria <a href="https://www.google.com/intl/en/policies/privacy/">privacy policy</a>.
-            Questi annunci sono impostati in modo da essere <a href="https://developers.google.com/admob/android/eu-consent#update_consent_status">non-personalizzati</a>.
+            che ha una propria <a href="https://policies.google.com/privacy">privacy policy</a>.
+            Questi annunci sono impostati in modo da essere <a href="https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent">non-personalizzati</a>.
             AdMob fornisce agli sviluppatori <em>sintesi anonime</em> delle seguenti informazioni.</p>
         <ul>
             <li><item>Numero totale di visualizzazioni</item></li>
index 0ec033a67493b14f45370f2109e10fcac202b38a..6b7a5a16b490a8acccb6fd231e471dc5cb925d93 100644 (file)
@@ -32,7 +32,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             Google provides <em>anonymized summary installation information</em> to developers, including the number of installs organized by the following categories.</p>
         <ul>
             <li><item>Android version</item> (eg. Android 7.1)</li>
@@ -46,7 +46,7 @@
 
 
         <h3>Google Play Ratings</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             Google provides developers with <em>anonymized summaries</em> of the following information related to user ratings.</p>
         <ul>
             <li><item>Country</item> (eg. United States)</li>
@@ -59,7 +59,7 @@
 
 
         <h3>Google Play Reviews</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             In addition to the name of the reviewer, the rating, and the text of the review (which are all available publicly), Google provides some or all of the following information to the developer.</p>
         <ul>
             <li><item>Version code</item> (eg. 7)</li>
@@ -81,8 +81,8 @@
 
         <h3>Advertisements</h3>
         <p>Privacy Browser Free displays a banner ad across the bottom of the screen using Google's AdMob network,
-            which has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
-            These ads are set to be <a href="https://developers.google.com/admob/android/eu-consent#update_consent_status">non-personalized</a>.
+            which has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
+            These ads are set to be <a href="https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent">non-personalized</a>.
             AdMob reports <em>anonymized summaries</em> of the following information to developers.</p>
         <ul>
             <li><item>Total impressions</item></li>
index 3854e29eb2392079fc03571e1039d7bce2f64b61..ed07eed1f8bc9c97aed945a7d8d962264b6212c0 100644 (file)
@@ -32,7 +32,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play имеет <a href="https://www.google.com/intl/en/policies/privacy/">собственную политику конфиденциальности</a>.
+        <p>Google Play имеет <a href="https://policies.google.com/privacy">собственную политику конфиденциальности</a>.
             Google предоставляет разработчикам <em>сводную анонимизированную информацию об установке</em>, включающую их количество, организованную по следующим категориям.</p>
         <ul>
             <li><item>Версия Android</item> (напр. Android 7.1)</li>
@@ -46,7 +46,7 @@
 
 
         <h3>Рейтинги Google Play</h3>
-        <p>Google Play имеет <a href="https://www.google.com/intl/en/policies/privacy/">собственную политику конфиденциальности</a>.
+        <p>Google Play имеет <a href="https://policies.google.com/privacy">собственную политику конфиденциальности</a>.
             Google предоставляет разработчикам <em>анонимизированные сводки</em> следующей информации, связанной с пользовательскими рейтингами.</p>
         <ul>
             <li><item>Страна</item> (напр. Russian Federation)</li>
@@ -59,7 +59,7 @@
 
 
         <h3>Отзывы Google Play</h3>
-        <p>Google Play имеет <a href="https://www.google.com/intl/en/policies/privacy/">собственную политику конфиденциальности</a>.
+        <p>Google Play имеет <a href="https://policies.google.com/privacy">собственную политику конфиденциальности</a>.
             Помимо имени автора отзыва, оценки и текста отзыва (все они доступны публично), Google предоставляет разработчику некоторую или всю следующую информацию.</p>
         <ul>
             <li><item>Код версии</item> (напр. 7)</li>
@@ -81,8 +81,8 @@
 
         <h3>Реклама</h3>
         <p>Privacy Browser Free отображает рекламный баннер в нижней части экрана с помощью сети Google AdMob,
-            которая имеет <a href="https://www.google.com/intl/en/policies/privacy/">собственную политику конфиденциальности</a>.
-            Эта реклама <a href="https://developers.google.com/admob/android/eu-consent#update_consent_status">не персонализируется</a>.
+            которая имеет <a href="https://policies.google.com/privacy">собственную политику конфиденциальности</a>.
+            Эта реклама <a href="https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent">не персонализируется</a>.
             AdMob отправляет <em>анонимные отчеты</em> разработчикам, содержащие следующую информацию.</p>
         <ul>
             <li><item>Всего показов</item></li>
index 90aaff9ba5fadadcb0a46fbca71b701ae0e71aae..210267b69eb2d0caca112af94e6c6d12a32860fb 100644 (file)
@@ -32,7 +32,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play <a href="https://www.google.com/intl/en/policies/privacy/">kendisine özgü gizlilik politikasına sahiptir</a>.
+        <p>Google Play <a href="https://policies.google.com/privacy">kendisine özgü gizlilik politikasına sahiptir</a>.
             Google, aşağıdaki kategorilerce düzenlenen, indirme sayıları da dahil, <em>anonimleştirilmiş özet kurulum bilgilerini</em> geliştiricilere verir.</p>
         <ul>
             <li><item>Android versiyonu</item> (örn. Android 7.1)</li>
@@ -46,7 +46,7 @@
 
 
         <h3>Google Play Derecelendirmeleri</h3>
-        <p>Google Play <a href="https://www.google.com/intl/en/policies/privacy/">kendisine özgü gizlilik politikasına sahiptir</a>.
+        <p>Google Play <a href="https://policies.google.com/privacy">kendisine özgü gizlilik politikasına sahiptir</a>.
             Google, kullanıcı değerlendirmeleriyle ilişkili aşağıdaki bilgilerin <em>anonimleştirilmiş özetlerini</em> geliştiricilere verir.</p>
         <ul>
             <li><item>Ülke</item> (örn. Amerika Birleşik Devletleri)</li>
@@ -59,7 +59,7 @@
 
 
         <h3>Google Play Kritikleri</h3>
-        <p>Google Play <a href="https://www.google.com/intl/en/policies/privacy/">kendisine özgü gizlilik politikasına sahiptir</a>.
+        <p>Google Play <a href="https://policies.google.com/privacy">kendisine özgü gizlilik politikasına sahiptir</a>.
             Google, inceleme yapan kişinin ismine, değerlendirmeye ve inceleme metninine (tümü halka açıktır) ek olarak, aşağıdaki bilgilerin bir kısmını ya da tamamını geliştiricilere verir.</p>
         <ul>
             <li><item>Versiyon kodu</item> (örn. 7)</li>
@@ -80,9 +80,9 @@
 
 
         <h3>Reklamlar</h3>
-        <p>Privacy Browser Ücretsiz, Google'ın, <a href="https://www.google.com/intl/en/policies/privacy/">kendisine özgü gizlilik politikası olan</a> 
+        <p>Privacy Browser Ücretsiz, Google'ın, <a href="https://policies.google.com/privacy">kendisine özgü gizlilik politikası olan</a>
             AdMob ağını kullanarak ekranın alt kısmında bir banner reklam gösterir.
-            Bu reklamlar <a href="https://developers.google.com/admob/android/eu-consent#update_consent_status">kişiselleştirilmemiş</a> olarak ayarlanmıştır.
+            Bu reklamlar <a href="https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent">kişiselleştirilmemiş</a> olarak ayarlanmıştır.
             AdMob, geliştiricilere aşağıdaki bilgilerin <em>anonimleştirilmiş özetlerini</em> rapor eder.</p>
         <ul>
             <li><item>Toplam gösterimler</item></li>
index a572e938471f245bedab892dcc132341e5b3127e..84c1b4927a646e6a75ecd44fbded1508719c32f3 100644 (file)
@@ -131,7 +131,7 @@ object AdHelper {
         // Create an ad settings bundle.
         val adSettingsBundle = Bundle()
 
-        // Only request non-personalized ads.  <https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward_consent_to_the_google_mobile_ads_sdk>
+        // Only request non-personalized ads.  <https://developers.google.com/ad-manager/mobile-ads-sdk/android/eu-consent#forward-consent>
         adSettingsBundle.putString("npa", "1")
 
         // Build the ad request.
index 0fb3d5b83beccd94a2982ed7c55d78014c31f226..c8d3b31998df523e8d1f8bf09ab54bb1b5128e24 100644 (file)
@@ -3,7 +3,7 @@
 <!--
   Copyright © 2015-2019 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2019 Jose A. León Becerra <emails@joseleon.me>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2019 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
index ac06131933b4b599c43a9b37a7a35fdaee390eec..d1175ff4469499e9db305b7ba98ac5c64d418220 100644 (file)
@@ -3,7 +3,7 @@
 <!--
   Copyright © 2015-2019 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019 Kévin LE FLOHIC <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
index e23f8b7f792ea57bb09fbc6af1af6758ca98adcf..a773e56f40386a715a8c0b43cbd249d9b4544e8f 100644 (file)
@@ -18,7 +18,7 @@
   You should have received a copy of the GNU General Public License
   along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
 
-<!-- Install location auto allows users to move Privacy Browser to an SD card if desired. -->
+<!-- Install location `auto` allows users to move Privacy Browser to an SD card if desired. -->
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
@@ -90,7 +90,7 @@
                 android:resource="@xml/file_provider_paths" />
         </provider>
         
-        <!-- The label uses the short name so that it isn't truncated under the icon in the launcher on most phones.
+        <!-- MainWebViewActivity.  The label uses the short name so that it isn't truncated under the icon in the launcher on most phones.
             The theme has to be defined here or an ugly title bar is displayed when the app launches.
             `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             android:launchMode="singleTask"
             android:screenOrientation="fullUser"
             android:persistableMode="persistNever"
+            android:exported="true"
             tools:ignore="UnusedAttribute" >
 
             <intent-filter>
         </activity>
 
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- BookmarksActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- BookmarksDatabaseViewActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- RequestsActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+        <!-- DomainsActivity.  `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not reload when a bluetooth keyboard is activated/goes to sleep.
             `android:windowSoftInputMode="stateAlwaysHidden"` keeps the keyboard from displaying when the screen is rotated and after the `AddDomainDialog` is dismissed.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- SettingsActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- ImportExportActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- LogcatActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- GuideActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- AboutActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
 
-        <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+        <!-- ViewSourceActivity.  `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
             `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
             `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
             `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
             android:persistableMode="persistNever"
             tools:ignore="UnusedAttribute" />
     </application>
-</manifest>
\ No newline at end of file
+</manifest>
index 2b6a46b39765f34d04eaf6571fef72e74c5221fe..cee060636eb9be71467beb82032ba244c632c006 100644 (file)
@@ -35,7 +35,7 @@
 
         <h3>Lizenz:</h3>
         <p>Privacy Browser ist veröffentlicht unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ Lizenz</a>. The full text of the license is below.
-            The source code is available from <a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=summary">git.stoutner.com</a>.</p>
+            The source code is available from <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=summary">gitweb.stoutner.com</a>.</p>
 
         <h3>Blocklists:</h3>
         <p><a href="https://easylist.to/easylist/easylist.txt">EasyList</a> and <a href="https://easylist.to/easylist/easyprivacy.txt">EasyPrivacy</a>
index 8dae6fa8850cf68ce44333499d30f0ff9c3f2404..1f9bc33cc34cab493fc43c93275e6dd99224dd0c 100644 (file)
@@ -36,8 +36,8 @@
         <h4><a href="https://www.stoutner.com/category/privacy-browser/"><svg class="links"><use href="../shared_images/chrome_reader_mode.svg#icon"/></svg></a>
             <a href="https://www.stoutner.com/category/privacy-browser/">Neuigkeiten</a></h4>
 
-        <h4><a href="https://www.stoutner.com/category/roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
-            <a href="https://www.stoutner.com/category/roadmap/">Roadmap</a></h4>
+        <h4><a href="https://www.stoutner.com/category/privacy-browser-roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
+            <a href="https://www.stoutner.com/category/privacy-browser-roadmap/">Roadmap</a></h4>
 
         <h4><a href="https://fosstodon.org/@privacybrowser"><svg class="links"><use href="../shared_images/mastodon.svg#icon"/></svg></a>
             <a href="https://fosstodon.org/@privacybrowser">Fosstodon</a></h4>
index 8b3368b76f7b0fb92a4fa9fcd6ca143611fbed9b..7b604061910413800fef93eeed7592854a4a5c05 100644 (file)
@@ -32,7 +32,7 @@
 
         <h3>License</h3>
         <p>Privacy Browser 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.
-            The source code is available from <a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=summary">git.stoutner.com</a>.</p>
+            The source code is available from <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=summary">gitweb.stoutner.com</a>.</p>
 
         <h3>Blocklists</h3>
         <p><a href="https://easylist.to/easylist/easylist.txt">EasyList</a> and <a href="https://easylist.to/easylist/easyprivacy.txt">EasyPrivacy</a>
index 2ae0b10ce601919f91c843b1cd2ef8f6956b9166..860bdaa4c6596fa87f34117b8755176e176f2c7d 100644 (file)
@@ -32,8 +32,8 @@
         <h4><a href="https://www.stoutner.com/category/privacy-browser/"><svg class="links"><use href="../shared_images/chrome_reader_mode.svg#icon"/></svg></a>
             <a href="https://www.stoutner.com/category/privacy-browser/">News</a></h4>
 
-        <h4><a href="https://www.stoutner.com/category/roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
-            <a href="https://www.stoutner.com/category/roadmap/">Roadmap</a></h4>
+        <h4><a href="https://www.stoutner.com/category/privacy-browser-roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
+            <a href="https://www.stoutner.com/category/privacy-browser-roadmap/">Roadmap</a></h4>
 
         <h4><a href="https://fosstodon.org/@privacybrowser"><svg class="links"><use href="../shared_images/mastodon.svg#icon"/></svg></a>
             <a href="https://fosstodon.org/@privacybrowser">Fosstodon</a></h4>
index f9828196dce99ba03744ca202096f68a83f41386..4e5eef5673942efa6e3eaeeaa56d23a5c3e7cefe 100644 (file)
@@ -32,7 +32,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             Google provides <em>anonymized summary installation information</em> to developers, including the number of installs organized by the following categories.</p>
         <ul>
             <li><item>Android version</item> (eg. Android 7.1)</li>
@@ -46,7 +46,7 @@
 
 
         <h3>Google Play Ratings</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             Google provides developers with <em>anonymized summaries</em> of the following information related to user ratings.</p>
         <ul>
             <li><item>Country</item> (eg. United States)</li>
@@ -59,7 +59,7 @@
 
 
         <h3>Google Play Reviews</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             In addition to the name of the reviewer, the rating, and the text of the review (which are all available publicly), Google provides some or all of the following information to the developer.</p>
         <ul>
             <li><item>Version code</item> (eg. 7)</li>
index ce41d6b473720d65eb8a1c2d20d42dc10aa46297..0ef1096949b54b220fb3eff5bff8839ffbf74e4f 100644 (file)
@@ -30,7 +30,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-3-8-1/">3.8.1</a> (código de versión 56)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=bda37dc9784e900cb64b87af3e221e11320d9d01">29 de junio de 2021</a> - API mínimo 19, API dirigido 30</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=bda37dc9784e900cb64b87af3e221e11320d9d01">29 de junio de 2021</a> - API mínimo 19, API objetivo 30</p>
         <ul>
             <li>Eliminar <a href="https://redmine.stoutner.com/issues/722">Startpage</a> y hacer de <a href="https://redmine.stoutner.com/issues/577">Mojeek</a>
                 el motor de búsqueda y la página de inicio por defecto.</li>
@@ -42,7 +42,7 @@
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-8/">3.8</a> (código de versión 55)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=1650cd6eff9ef807a84263328cb73e755250e3af">24 de mayo de 2021</a> - API mínimo 19, API dirigido 30</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=1650cd6eff9ef807a84263328cb73e755250e3af">24 de mayo de 2021</a> - API mínimo 19, API objetivo 30</p>
         <ul>
             <li>Añadir una opción para <a href="https://redmine.stoutner.com/issues/143">mover la barra de aplicaciones a la parte inferior</a>.</li>
             <li>Reimplementar el <a href="https://redmine.stoutner.com/issues/677">guardar archivos web</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-7/">3.7</a> (código de versión 54)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=f3b9172adedd74f705ddc0beac80798ae84f2920">29 de marzo de 2021</a> - API mínimo 19, API dirigido 30</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=f3b9172adedd74f705ddc0beac80798ae84f2920">29 de marzo de 2021</a> - API mínimo 19, API objetivo 30</p>
         <ul>
             <li>Rediseñar el acceso a los archivos para que funcione con <a href="https://redmine.stoutner.com/issues/546">el almacenamiento de alcance y el marco de acceso al almacenamiento</a>.
-                Esto permite que la API de destino se eleve a 30 y elimina la necesidad de los peligrosos permisos READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE.
+                Esto permite que la API de objetivo se eleve a 30 y elimina la necesidad de los peligrosos permisos READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE.
                 Desafortunadamente, debido a un error en el WebView de Android,
                 esto también elimina temporalmente la capacidad de <a href="https://redmine.stoutner.com/issues/677">guardar un archivo web</a>.</li>
             <li>Actualizar <a href="https://redmine.stoutner.com/issues/678">Acerca de > Permisos</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-6-1/">3.6.1</a> (código de versión 53)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=78e6b0e9a553e3bf800e4c69535c46fb63bef017">26 de noviembre de 2020</a> - API mínimo 19, API dirigido 29</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=78e6b0e9a553e3bf800e4c69535c46fb63bef017">26 de noviembre de 2020</a> - API mínimo 19, API objetivo 29</p>
         <ul>
             <li>Arreglar un error que provocaba la <a href="https://redmine.stoutner.com/issues/642">caída de Ver la Fuente</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-6/">3.6</a> (código de versión 52)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=8a06558b0071fa94e2a7d1093b3118417ac5cc8f">16 de noviembre de 2020</a> - API mínimo 19, API dirigido 29</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=8a06558b0071fa94e2a7d1093b3118417ac5cc8f">16 de noviembre de 2020</a> - API mínimo 19, API objetivo 29</p>
         <ul>
             <li>Arreglar la reproducción de audio con buffer <a href="https://redmine.stoutner.com/issues/595">después de cerrar una pestaña</a>.</li>
             <li>Confiar en <a href="https://redmine.stoutner.com/issues/636">las autoridades de certificación de usuarios</a> de Android 7 (API 24) o más reciente.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-5-1/">3.5.1</a> (código de versión 51)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=1907b1ff1fd02d6f8809aeb6710af42e033c064f">28 de agosto de 2020</a> - API mínimo 19, API dirigido 29</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=1907b1ff1fd02d6f8809aeb6710af42e033c064f">28 de agosto de 2020</a> - API mínimo 19, API objetivo 29</p>
         <ul>
             <li>Corregir un error que provocaba que los nuevos intentos (enlaces de otras aplicaciones) <a href="https://redmine.stoutner.com/issues/599">no se cargaran</a>
                 si Navegador Privado había sido "matado" por el SO en segundo plano.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-5/">3.5</a> (código de versión 50)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 de agosto de 2020</a> - API mínimo 19, API dirigido 29</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379ae3eabfd9ee949151b7b218b875ffcc627c5a">18 de agosto de 2020</a> - API mínimo 19, API objetivo 29</p>
         <ul>
             <li>Implementar el relativamente <a href="https://redmine.stoutner.com/issues/572">nuevo</a> <a href="https://redmine.stoutner.com/issues/523">tema</a>
                 <a href="https://redmine.stoutner.com/issues/522">Día/Noche</a> <a href="https://redmine.stoutner.com/issues/506">de Android</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-4-1/">3.4.1</a> (código de versión 49)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=47361652ebde9a4bd7d8d3520c8dd988953b8614">1 de abril de 2020</a> - API mínimo 19, API dirigido 29</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=47361652ebde9a4bd7d8d3520c8dd988953b8614">1 de abril de 2020</a> - API mínimo 19, API objetivo 29</p>
         <ul>
             <li>Arreglar un <a href="https://redmine.stoutner.com/issues/545">problema de permiso de almacenamiento</a> en algunos dispositivos con Android 10.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-4/">3.4</a> (código de versión 48)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=7de44ca8dbf4330ee6fa3d9146940c1016edd608">28 de marzo de 2020</a> - API mínimo 19, API dirigido 29</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=7de44ca8dbf4330ee6fa3d9146940c1016edd608">28 de marzo de 2020</a> - API mínimo 19, API objetivo 29</p>
         <ul>
             <li>Reemplazar el administrador de descargas de Android por una <a href="https://redmine.stoutner.com/issues/528">implementación personalizada</a>.</li>
             <li>Añadir una opción para especificar el <a href="https://redmine.stoutner.com/issues/32">lugar de descarga por defecto</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-3/">3.3</a> (código de versión 47)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=54153efaffb2447307fbd8be569529d0118b823d">3 de enero de 2020</a> - API mínimo 19, API dirigido 29</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=54153efaffb2447307fbd8be569529d0118b823d">3 de enero de 2020</a> - API mínimo 19, API objetivo 29</p>
         <ul>
             <li>Añadir soporte para proxis personalizados, incluyendo <a href="https://redmine.stoutner.com/issues/486">proxis SOCKS</a>,
                 e incluir una entrada para <a href="https://redmine.stoutner.com/issues/355">I2P</a>.</li>
             <li>Deshabilitar manualmente <a href="https://redmine.stoutner.com/issues/404">el tiempo de espera de la pantalla</a> al reproducir vídeos en el modo de pantalla completa.</li>
             <li>Deshabilitar <a href="https://redmine.stoutner.com/issues/480">HSTS</a>.</li>
             <li>Actualizar la Fuente de Vista para utilizar los <a href="https://redmine.stoutner.com/issues/503">encabezados</a> Sec-Fetch.</li>
-            <li>Subir la API de destino a 29 (Android 10).</li>
+            <li>Incrementar la API objetivo hacia la 29 (Android 10).</li>
             <li>Traducción al francés por <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
             <li>Actualizada la traducción al español proporcionada por Jose A. León.</li>
             <li>Actualizada la traducción al alemán proporcionada por Bernhard G. Keller.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-2/">3.2</a> (código de versión 46)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=424ab40e495fed0fd1fe4109be466206d64ae6be">20 de julio de 2019</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=424ab40e495fed0fd1fe4109be466206d64ae6be">20 de julio de 2019</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Cambiar el motor de búsqueda y la página de inicio predeterminados a <a href="https://www.stoutner.com/switching-to-startpage-as-the-default-homepage-and-search-engine/">Startpage</a>.</li>
             <li>Corregir el proxy a través de Orbot en <a href="https://redmine.stoutner.com/issues/473">recientes</a> <a href="https://redmine.stoutner.com/issues/474">versiones</a> de WebView.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-1/">3.1</a> (código de versión 45)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=2a28c6401f60afa40ca93b18fc0b9a0ab196ff88">27 de mayo de 2019</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=2a28c6401f60afa40ca93b18fc0b9a0ab196ff88">27 de mayo de 2019</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Añadir un <a href="https://redmine.stoutner.com/issues/416">botón de cerrar pestaña</a> a la barra de aplicaciones.</li>
             <li>Arreglar el <a href="https://redmine.stoutner.com/issues/415">desplazamiento a la izquierda y a la derecha </a> de los elementos de la página web,
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-0-1/">3.0.1</a> (código de versión 44)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=fd8eedc7aab1062da69d65514cf5d0a6fd28abad">2 de mayo de 2019</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=fd8eedc7aab1062da69d65514cf5d0a6fd28abad">2 de mayo de 2019</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Corregir un error que permitía que la barra de aplicaciones se desplazara fuera de la pantalla cuando el desplazamiento de la barra de aplicaciones estaba desactivado,
                 sin <a href="https://redmine.stoutner.com/issues/418">posibilidad de hacerla retroceder</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-0/">3.0</a> (código de versión 43)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=aedc35976f8eda7c00bdd822c172e19cad0fc485">26 de abril de 2019</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=aedc35976f8eda7c00bdd822c172e19cad0fc485">26 de abril de 2019</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/22">navegación por pestañas</a>.</li>
             <li>Se corrigió un error que provocaba que <a href="https://redmine.stoutner.com/issues/398">se cortara la parte inferior de la vista web</a>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-17-1/">2.17.1</a> (código de versión 42)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=fbb7aef30a9417c42661a0f76b5836dcf6a40242">5 de marzo de 2019</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=fbb7aef30a9417c42661a0f76b5836dcf6a40242">5 de marzo de 2019</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Corregir un bloqueo causado por favoritos con <a href="https://redmine.stoutner.com/issues/395">iconos preferidos muy grandes</a>.</li>
             <li>Permitir mover Navegador Privado a una <a href="https://redmine.stoutner.com/issues/394">tarjeta SD</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-17/">2.17</a> (código de versión 41)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=ee0fa80bcf12d87d13c5ae9feb44ceb2b5aed2dd">27 de febrero de 2019</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=ee0fa80bcf12d87d13c5ae9feb44ceb2b5aed2dd">27 de febrero de 2019</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Añadir la posibilidad de <a href="https://redmine.stoutner.com/issues/8">desplazarse por la barra de aplicaciones</a>.</li>
             <li>Crear una <a href="https://redmine.stoutner.com/issues/264">actividad Logcat</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-16/">2.16</a> (código de versión 40)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=6fa1563622642855d342cd7bcb523a8c1b6bbc44">31 de enero de 2019</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=6fa1563622642855d342cd7bcb523a8c1b6bbc44">31 de enero de 2019</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Arreglar un fallo, introducido en 2.15, que provocaba que <a href="https://redmine.stoutner.com/issues/370">se ignorara el fijado del certificado SSL</a> en la mayoría de los casos.</li>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/212">fijación</a> de <a href="https://redmine.stoutner.com/issues/211">dirección</a>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-15-1/">2.15.1</a> (código de versión 39)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=df8b520d10c3fa31b603ff7c50670ab1f0728d2f">27 de diciembre de 2018</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=df8b520d10c3fa31b603ff7c50670ab1f0728d2f">27 de diciembre de 2018</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Corregir un error que provocaba que <a href="https://redmine.stoutner.com/issues/364">algunos dispositivos se bloquearan</a> al abrir una actividad secundaria.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-15/">2.15</a> (código de versión 38)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=2250acd83180a9dcf1fbee80025a9d6aadbee510">24 de diciembre de 2018</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=2250acd83180a9dcf1fbee80025a9d6aadbee510">24 de diciembre de 2018</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Corregir un error al <a href="https://redmine.stoutner.com/issues/160">cambiar el agente de usuario</a> con la configuración de dominio.</li>
             <li>Arreglar los <a href="https://redmine.stoutner.com/issues/250">diseños de cajones en teléfonos que vienen con notch</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-14/">2.14</a> (código de versión 37)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=57020e5c7cad1eec43c3627f136be1640d07d4aa">8 de diciembre de 2018</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=57020e5c7cad1eec43c3627f136be1640d07d4aa">8 de diciembre de 2018</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/338">opciones de importación y exportación cifradas</a>.</li>
             <li>Corregir un error al <a href="https://redmine.stoutner.com/issues/350">importar bases de datos bajo ciertas circunstancias</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-13/">2.13</a> (código de versión 36)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=c44cc1c5af504b415b86654d7d03a3e78a5adf1b">29 de octubre de 2018</a> - API mínimo 19, API dirigido 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=c44cc1c5af504b415b86654d7d03a3e78a5adf1b">29 de octubre de 2018</a> - API mínimo 19, API objetivo 28</p>
         <ul>
             <li>Añadir la <a href="https://redmine.stoutner.com/issues/23">importación y exportación</a> de favoritos y ajustes (incluye el <a href="https://redmine.stoutner.com/issues/280">permiso de almacenamiento de lectura</a>).</li>
             <li>Cambiar la <a href="https://redmine.stoutner.com/issues/165">carga predeterminada de URLs</a> de HTTP a HTTPS.</li>
             <li>Arreglar un problema con <a href="https://redmine.stoutner.com/issues/325">la desaparición de las barras del sistema</a> tras ver un vídeo a pantalla completa.</li>
             <li>Arreglar el <a href="https://redmine.stoutner.com/issues/317">estado del elemento del menú Borrar Datos</a> en Oreo (Android 8.0) y posteriores.</li>
             <li>Arreglar el tamaño del mensaje <a href="https://redmine.stoutner.com/issues/319">Esperando a Orbot</a>.</li>
-            <li>Incrementar la API dirigido hacia la 28 (Android 9 Pie).</li>
+            <li>Incrementar la API objetivo hacia la 28 (Android 9 Pie).</li>
             <li>Actualizada la traducción al español proporcionada por Jose A. León.</li>
             <li>Actualizada la traducción al italiano proporcionada por Francesco Buratti.</li>
             <li>Actualizada la traducción al ruso.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-12/">2.12</a> (código de versión 35)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=eeb6f383b74980bc29ff1ecab8f6c3eb6ac17d54">31 de julio de 2018</a> - API mínimo 19, API dirigido 27</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=eeb6f383b74980bc29ff1ecab8f6c3eb6ac17d54">31 de julio de 2018</a> - API mínimo 19, API objetivo 27</p>
         <ul>
             <li>Cambiar la página de inicio y motor de búsqueda predeterminados a <a href="https://redmine.stoutner.com/issues/308">Searx.me</a>.</li>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/310">Ultra Privacidad</a> a las listas de bloqueo.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-11/">2.11</a> (código de versión 34)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=bc45b14cfda10249800a6ccfdb8247d2ce9b32a9">10 de julio de 2018</a> - API mínimo 19, API dirigido 27</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=bc45b14cfda10249800a6ccfdb8247d2ce9b32a9">10 de julio de 2018</a> - API mínimo 19, API objetivo 27</p>
         <ul>
             <li>Añadir una <a href="https://redmine.stoutner.com/issues/170">Actividad de peticiones</a> que muestre cuantas peticiones de recursos se han bloqueado.</li>
             <li>Solucionar un problema con <a href="https://redmine.stoutner.com/issues/297">el proxy a través de Orbot</a> en versiones recientes de WebView.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-10/">2.10</a> (código de versión 33)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 de mayo de 2018</a> - API mínimo 19, API dirigido 27</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 de mayo de 2018</a> - API mínimo 19, API objetivo 27</p>
         <ul>
             <li>Habilitar <a href="https://redmine.stoutner.com/issues/1">la subida de archivos</a> a páginas web en Lollipop y más recientes.</li>
             <li>Permitir <a href="https://redmine.stoutner.com/issues/216">que los agentes de usuario aplicados puedan actualizarse automáticamente</a> con nuevas versiones.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-9/">2.9</a> (código de versión 32)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=39cde1235af331de5e5ff454ac2daf667d7d894f">9 de mayo de 2018</a> - API mínimo 19, API dirigido 27</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=39cde1235af331de5e5ff454ac2daf667d7d894f">9 de mayo de 2018</a> - API mínimo 19, API objetivo 27</p>
         <ul>
             <li>Usar el <a href="https://redmine.stoutner.com/issues/224">directorio público de descargas</a>
                 (requiere <a href="https://redmine.stoutner.com/issues/79">el permiso de almacenamiento de escritura</a>).</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-8-1/">2.8.1</a> (código de versión 31)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=8d1060fb1148d2d2fd7af8261dc9956c3a5687a1">1 de marzo de 2018</a> - API mínimo 19, API dirigido 27</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=8d1060fb1148d2d2fd7af8261dc9956c3a5687a1">1 de marzo de 2018</a> - API mínimo 19, API objetivo 27</p>
         <ul>
             <li>Solución a un error en versiones recientes del WebView de Android que <a href="https://redmine.stoutner.com/issues/253">impedía a los usuarios guardar cookies</a> cuando lo deseaban.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-8/">2.8</a> (código de versión 30)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=0718e0dc7330462352c7cf71b0ef486ee6b90df7">22 de febrero de 2018</a> - API mínimo 19, API dirigido 27</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=0718e0dc7330462352c7cf71b0ef486ee6b90df7">22 de febrero de 2018</a> - API mínimo 19, API objetivo 27</p>
         <ul>
             <li><a href="https://redmine.stoutner.com/issues/136">Cambiar a “EasyList”</a> para el bloqueo de publicidad y rastreo.</li>
             <li>Añadir una actividad: <a href="https://redmine.stoutner.com/issues/64">“Ver Fuente”</a>.</li>
             <li>Corregir la opción <a href="https://redmine.stoutner.com/issues/231">“Añadir a pantalla de inicio”</a> para ser compatible con Android Oreo.</li>
             <li>Corregir <a href="https://redmine.stoutner.com/issues/248">el formato de color</a> en el cuadro de texto URL.</li>
             <li>Clarificar el lenguaje en la <a href="https://redmine.stoutner.com/issues/244">política de privacidad</a>.</li>
-            <li>Incrementar la API dirigido hacia la 27 (Android Oreo, 8.1.0).</li>
+            <li>Incrementar la API objetivo hacia la 27 (Android Oreo, 8.1.0).</li>
             <li>Actualizada la traducción al español proporcionada por Jose A. León.</li>
             <li>Actualizada la traducción al italiano proporcionada por Francesco Buratti.</li>
             <li>Traducción parcial al ruso.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-7-2/">2.7.2</a> (código de versión 29)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=298ddb5aeffe0e18e84c7551c55ff8164b238080">22 de noviembre de 2017</a> - API mínimo 19, API dirigido 26</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=298ddb5aeffe0e18e84c7551c55ff8164b238080">22 de noviembre de 2017</a> - API mínimo 19, API objetivo 26</p>
         <ul>
             <li>Añadir un elemento de menú de opciones para <a href="https://redmine.stoutner.com/issues/104">crear/editar la configuración del dominio</a> para el dominio actual.</li>
             <li>Abrir <a href="https://redmine.stoutner.com/issues/226">hipervínculos de números telefónicos</a> en el marcador telefónico.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-7-1/">2.7.1</a> (código de versión 28)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=24f2d6529540bc8ea47f45bc07dd058f402a9140">9 de noviembre de 2017</a> - API mínimo 19, API dirigido 26</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=24f2d6529540bc8ea47f45bc07dd058f402a9140">9 de noviembre de 2017</a> - API mínimo 19, API objetivo 26</p>
         <ul>
             <li>Corrregir un fallo al <a href="https://redmine.stoutner.com/issues/225">editar un favorito</a> en el nuevo cajón de favoritos.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-7/">2.7</a> (código de versión 27)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=eb9bc527c37223964f7c00592df982b47ff2f81c">7 de noviembre de 2017</a> - API mínimo 19, API dirigido 26</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=eb9bc527c37223964f7c00592df982b47ff2f81c">7 de noviembre de 2017</a> - API mínimo 19, API objetivo 26</p>
         <ul>
             <li>Añadir un <a href="https://redmine.stoutner.com/issues/132">cajón de favoritos</a> al que se accede deslizando desde la derecha.</li>
             <li>Evitar que el Modo Noche <a href="https://redmine.stoutner.com/issues/213">parpadee sobre un fondo blanco</a> al cargar páginas nuevas.</li>
             <li>Actualizar los <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=379d977e9db12b28952cbce0b127548576c87b95">agentes de usuario</a>.</li>
-            <li>Incrementar la API dirigido hacia la 26 (Android Oreo, 8.0.0).</li>
+            <li>Incrementar la API objetivo hacia la 26 (Android Oreo, 8.0.0).</li>
             <li>Actualizada la traducción al español proporcionada por Jose A. León.</li>
             <li>Actualizada la traducción al italiano proporcionada por Francesco Buratti.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-6/">2.6</a> (código de versión 26)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=ecd1f67963852c0523c42ce1326b78cb7a71f053">18 de septiembre de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=ecd1f67963852c0523c42ce1326b78cb7a71f053">18 de septiembre de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/145">renderizado en modo nocturno</a>.</li>
             <li>Actualizar el renderizado del tema oscuro de las <a href="https://redmine.stoutner.com/issues/150">secciones Acerca de y Guía</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-5/">2.5</a> (código de versión 25)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=80ddcb075d03a4c78263d1ff80466f3df0967f6d">26 de agosto de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=80ddcb075d03a4c78263d1ff80466f3df0967f6d">26 de agosto de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/54">fijación de certificado SSL</a> a la configuración de dominios.</li>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/163">searx.me</a> a la lista de motores de búsqueda.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-4/">2.4</a> (código de versión 24)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=0063aac3b25ee5ea558669d42269d16158eca40b">23 de junio de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=0063aac3b25ee5ea558669d42269d16158eca40b">23 de junio de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Añadir una opción de <a href="https://redmine.stoutner.com/issues/124">tema oscuro</a>.</li>
             <li><a href="https://redmine.stoutner.com/issues/137">Destacar http:// en rojo</a> si el dominio no está cifrado.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-3/">2.3</a> (código de versión 23)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=edbeafeb712ae0c2a217a130d940f6c8326ca2d0">26 de mayo de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=edbeafeb712ae0c2a217a130d940f6c8326ca2d0">26 de mayo de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li><a href="https://redmine.stoutner.com/issues/127">No incluir redirecciones URL</a> en el historial de WebView.</li>
             <li>Añadir la opción de <a href="https://redmine.stoutner.com/issues/123">deshabilitar la carga de imágenes</a> para conservar ancho de banda.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-2/">2.2</a> (código de versión 22)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=1d8a8322dace658f69b80ad4d24f941074aa2200">27 de abril de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=1d8a8322dace658f69b80ad4d24f941074aa2200">27 de abril de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Crear un <a href="https://redmine.stoutner.com/issues/116">Modo Incógnito</a>, que borre la caché y el historial después de cargar cada página web.</li>
             <li>Combinar las <a href="https://redmine.stoutner.com/issues/122">opciones de búsqueda JavaScript-habilitado y JavaScript-deshabilitado</a> en una entrada.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-1/">2.1</a> (código de versión 21)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=f01cad697eb5ab015888e88e20f26ac5911b1d85">25 de marzo de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=f01cad697eb5ab015888e88e20f26ac5911b1d85">25 de marzo de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Arreglar un <a href="https://redmine.stoutner.com/issues/110">problema al cargar</a> introducido en la versión 2.0.1 si la página de inicio está en blanco.</li>
             <li>Arreglar un error que <a href="https://redmine.stoutner.com/issues/112">impedía la carga de páginas web con un dominio localhost</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-0-1/">2.0.1</a> (código de versión 20)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=1aec01e7c168c3fcc272530607e16f5ffa6d6c74">21 de marzo de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=1aec01e7c168c3fcc272530607e16f5ffa6d6c74">21 de marzo de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li><a href="https://redmine.stoutner.com/issues/101">Sólo cargar la configuración del dominio cuando el dominio cambie</a>.</li>
             <li>Sólo aplicar la configuración de dominio a subdominios si <a href="https://redmine.stoutner.com/issues/99">*. se especifica al principio del nombre de dominio</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-0/">2.0</a> (código de versión 19)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=8f1c15606ef8cd277f51cc837c2c39667c48d0d4">16 de marzo de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=8f1c15606ef8cd277f51cc837c2c39667c48d0d4">16 de marzo de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Implementar <a href="https://redmine.stoutner.com/issues/7">configuración de dominio personalizado</a>.</li>
             <li>Cuando se usa proxy a través de Tor, <a href="https://redmine.stoutner.com/issues/90">esperar hasta que Orbot esté listo</a> antes de intentar cargar una página.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-15/">1.15</a> (código de versión 18)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=8f4d6373a35a43a36050ed383f58c4074143b264">11 de febrero de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=8f4d6373a35a43a36050ed383f58c4074143b264">11 de febrero de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Eliminar <a href="https://redmine.stoutner.com/issues/84">la caché secreta y no documentada de WebView</a> en Eliminar y salir.</li>
             <li><a href="https://redmine.stoutner.com/issues/83">Iniciar automáticamente Orbot</a> cuando se habilita el proxy a través de Orbot.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-14-1/">1.14.1</a> (código de versión 17)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=5bd318993ebf675433f514dd04fc3e29545c9312">4 de enero de 2017</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=5bd318993ebf675433f514dd04fc3e29545c9312">4 de enero de 2017</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Arreglar un error que hacía que Navegador Privado <a href="https://redmine.stoutner.com/issues/80">se colgase en algunas páginas web</a> cuando el bloqueador de anuncios estaba habilitado.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-14/">1.14</a> (código de versión 16)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=6d3d23ab62cfdd6ef142dbdb764a6bac8fc38ce1">26 de diciembre de 2016</a> - API mínimo 19, API dirigido 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=6d3d23ab62cfdd6ef142dbdb764a6bac8fc38ce1">26 de diciembre de 2016</a> - API mínimo 19, API objetivo 25</p>
         <ul>
             <li>Incluir un <a href="https://redmine.stoutner.com/issues/31">bloqueador de anuncios</a>.</li>
             <li>Cambiar el agente de usuario por defecto a PrivacyBrowser/1.0 <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=7f0fda47dbd040262a8149e1e6d27f7abe9043ea">definitivamente</a>.</li>
             <li>Cambiar el modo de “No rastrear” <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=c3ec2515bf9a49d4561efc47f5d21106f15cb286">poniédolo por defecto como falso</a>.</li>
             <li>Añadir la opción de <a href="https://redmine.stoutner.com/issues/75">habilitar el modo de navegación a pantalla completa</a> y ponerlo <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=blobdiff;f=app/src/main/res/xml/preferences.xml;h=cdda87e7c2eaa0cabdb6a1a77ffca1124e9423e1;hp=8ed81b84aab687621a0f08921c4f6165392d59d2;hb=743982f883eab347e4029f8a3be760f780b14da1;hpb=7f0fda47dbd040262a8149e1e6d27f7abe9043ea">por defecto como falso</a>.</li>
             <li>Arreglar un error que a veces hací que <a href="https://redmine.stoutner.com/issues/74">la barra de navegación se pusiera de color gris en modo de pantalla completa</a> al cambiar entre aplicaciones.</li>
-            <li>Incrementar la <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=5c6db7b33577612ff7f120b30fb98cab8afa591f">API dirigido hacia la 25</a>.</li>
+            <li>Incrementar la <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=5c6db7b33577612ff7f120b30fb98cab8afa591f">API objetivo hacia la 25</a>.</li>
             <li>Actualizar la <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=blobdiff;f=app/src/main/res/values-es/strings.xml;h=83c162b389a075effb68c7ce41cd03482c7c8bce;hp=ff79b6a9f30dbe71a0a076cfcfdc0df834ebb792;hb=2c8e83a7d1a044a5186020ac17d3cefb22b7f330;hpb=e9ed376cc7890f1d1f2e370e2e63f19dcfd1859d">traducción</a> <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=blob;f=app/src/main/assets/es/about_permissions.html;h=eab82ba8ee104e6a71776a557366f70660d28711;hb=2c8e83a7d1a044a5186020ac17d3cefb22b7f330">parcial</a> <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=blobdiff;f=app/src/main/assets/es/about_changelog.html;h=ffb0e4895c0323ae4ee6ca11aab775b318a1b9ef;hp=f810cccc58ee840eb2704bcf81c9e3387d29ff2c;hb=c3ec2515bf9a49d4561efc47f5d21106f15cb286;hpb=2c8e83a7d1a044a5186020ac17d3cefb22b7f330">de español</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-13/">1.13</a> (código de versión 15)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=5a9cabddff240061fe521f01df3025b037e9da9e">28 de noviembre de 2016</a> - API mínimo 19, API dirigido 24</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=5a9cabddff240061fe521f01df3025b037e9da9e">28 de noviembre de 2016</a> - API mínimo 19, API objetivo 24</p>
         <ul>
             <li>Doble toque para el <a href="https://redmine.stoutner.com/issues/46">modo de navegación a pantalla completa</a>.</li>
             <li>Cambiar el agente de usuario por defecto a <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=b0ddee839c666ba339e374749588f910070658ee">PrivacyBrowser/1.0</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-12/">1.12</a> (código de versión 14)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=3f2c7129a56e84d34cb07c151baf87bdea94dd12">9 de noviembre de 2016</a> - API mínimo 19, API dirigido 24</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=3f2c7129a56e84d34cb07c151baf87bdea94dd12">9 de noviembre de 2016</a> - API mínimo 19, API objetivo 24</p>
         <ul>
             <li>Añadir una <a href="https://redmine.stoutner.com/issues/24">lista de historial hacia adelante y atrás</a>.</li>
             <li>Toque prolongado <a href="https://redmine.stoutner.com/issues/63">muestra los URL</a> y la opción de <a href="https://redmine.stoutner.com/issues/10">ver o descargar imágenes</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-11/">1.11</a> (código de versión 13)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=d9974f13e3a4dad62f760e02e94d8782d6e4bb3d">22 de octubre de 2016</a> - API mínimo 19, API dirigido 24</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=d9974f13e3a4dad62f760e02e94d8782d6e4bb3d">22 de octubre de 2016</a> - API mínimo 19, API objetivo 24</p>
         <ul>
-            <li>Incrementar la API dirigido hacia la 24, que habilita el soporte multiventana en Android Nougat.</li>
+            <li>Incrementar la API objetivo hacia la 24, que habilita el soporte multiventana en Android Nougat.</li>
             <li>Arreglar un error introducido en versión 1.10 que consumió <a href="https://redmine.stoutner.com/issues/66">bastante CPU</a> sin ninguna razón.</li>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/18">la opción para imprimir</a>.</li>
             <li>Arreglar <a href="https://redmine.stoutner.com/issues/67">la descarga de archivos</a> en KitKat y Lollipop.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-10/">01.10</a> (código de versión 12)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=c9365866ad37cc2b0b0fa53ee04aaaa4740f70b7">15 de septiembre de 2016</a> - API mínimo 19, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=c9365866ad37cc2b0b0fa53ee04aaaa4740f70b7">15 de septiembre de 2016</a> - API mínimo 19, API objetivo 23</p>
         <ul>
             <li>Añadir compatibilidad con <a href="https://redmine.stoutner.com/issues/26">Tor Orbot</a>.</li>
             <li>Añadir compatibilidad con <a href="https://redmine.stoutner.com/issues/30">No rastrear</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-9-and-1-9-1/">1.9.1</a> (código de versión 11)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=6de831ce03c8b9114212870715c6c722e26f5b28">27 de agosto de 2016</a> - API mínimo 19, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=6de831ce03c8b9114212870715c6c722e26f5b28">27 de agosto de 2016</a> - API mínimo 19, API objetivo 23</p>
         <ul>
             <li>Cambiar las rutas de los imágenes activas para ser relativas para que Navegador Privado sea compatible con F-Droid.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-9-and-1-9-1/">1.9</a> (código de versión 10)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=7c6dae59026beeb9e32fcc4d6706129f8bee029c">26 de agosto de 2016</a> - API mínimo 19, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=7c6dae59026beeb9e32fcc4d6706129f8bee029c">26 de agosto de 2016</a> - API mínimo 19, API objetivo 23</p>
         <ul>
             <li>Traducción al alemán proveída por <a href="mailto:aaron@gerlach.com">Aaron Gerlach</a>.</li>
             <li>Añadir la opción para <a href="https://redmine.stoutner.com/issues/2">ver los detalles de certificados SSL y los errores de SSL</a>.
         </ul>
 
         <h3><a href=https://www.stoutner.com/privacy-browser-1-8/">1.8</a> (código de versión 9)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=f386169ee9c68325562068394cb6b21b0b89be1c">16 de julio de 2016</a> - API mínimo 19, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=f386169ee9c68325562068394cb6b21b0b89be1c">16 de julio de 2016</a> - API mínimo 19, API objetivo 23</p>
         <ul>
             <li>Añadir un <a href="https://redmine.stoutner.com/issues/16">sistema de marcadores</a>.</li>
             <li>Añadir <a href="https://redmine.stoutner.com/issues/29">controles básicos para datos de formularios</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-7/">1.7</a> (código de versión 8)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=347e702f50a02782add9400afa552fbee1cf7ab6;ds=inline">16 de junio de 2016</a> - API mínimo 19, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=347e702f50a02782add9400afa552fbee1cf7ab6;ds=inline">16 de junio de 2016</a> - API mínimo 19, API objetivo 23</p>
         <ul>
             <li>Crear la <a href="https://redmine.stoutner.com/issues/15">actividad “Acerca de” con una vista de pestañas</a>.</li>
             <li>Crear la actividad “Guía” con una vista de pestañas.</li>
         </ul>
 
         <h3>1.6 (código de versión 7)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=151e4550065da8e740e8e3bd414ec30ae2a18c33">11 de mayo de 2016</a> - API mínimo 15, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=151e4550065da8e740e8e3bd414ec30ae2a18c33">11 de mayo de 2016</a> - API mínimo 15, API objetivo 23</p>
         <ul>
             <li>Añadir la opción para <a href="https://redmine.stoutner.com/issues/4">personalizar los URL de búsquedas</a>.</li>
             <li>Añadir la opción para <a href="https://redmine.stoutner.com/issues/3">personalizar el agente de usuario</a>.</li>
         </ul>
 
         <h3>1.5 (código de versión 6)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=b0a048867d5582bc693ba8699a75aa93b4fa1b69">5 de mayo de 2016</a> - API mínimo 15, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=b0a048867d5582bc693ba8699a75aa93b4fa1b69">5 de mayo de 2016</a> - API mínimo 15, API objetivo 23</p>
         <ul>
             <li>Añadir la opción para deshabilitar “Deslizar para actualizar” para que ciertas páginas web, como Mapas de Google, funcionen correctamente.</li>
         </ul>
 
         <h3>1.4 (código de versión 5)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=58e6c22da860871eadd1cbf214a30e88ced4f19e">28 de abril de 2016</a> - API mínimo 15, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=58e6c22da860871eadd1cbf214a30e88ced4f19e">28 de abril de 2016</a> - API mínimo 15, API objetivo 23</p>
         <ul>
             <li>Añadir controles para <a href="https://redmine.stoutner.com/issues/21">cookies de terceras partes</a>.</li>
             <li>Corregir el ejecutar videos en pantalla completa.</li>
         </ul>
 
         <h3>1.3 (código de versión 4)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=4f704be746c00c0a29a52c28646e6d7cf2f9c53c">7 de abril de 2016</a> - API mínimo 15, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=4f704be746c00c0a29a52c28646e6d7cf2f9c53c">7 de abril de 2016</a> - API mínimo 15, API objetivo 23</p>
         <ul>
             <li>Crear un <a href="https://redmine.stoutner.com/issues/17">cajón de navegación</a>.</li>
         </ul>
 
         <h3>1.2 (código de versión 3)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=bde6908fee004715f0125ab2d51016dd63a956f4">23 de marzo de 2016</a> - API mínimo 15, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=bde6908fee004715f0125ab2d51016dd63a956f4">23 de marzo de 2016</a> - API mínimo 15, API objetivo 23</p>
         <ul>
             <li>Actualizar el icono principal para que sea más grande.</li>
             <li>Reemplazar todos los mensajes de tipo “toast” con <a href="https://redmine.stoutner.com/issues/12">“snackbars”</a>.</li>
         </ul>
 
         <h3>1.1 (código de versión 2)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=f56d4111a627bebdb7f181da062253b3e6145381">9 de marzo de 2016</a> - API mínimo 10, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=f56d4111a627bebdb7f181da062253b3e6145381">9 de marzo de 2016</a> - API mínimo 10, API objetivo 23</p>
         <ul>
             <li>Separar los sabores estándar y gratuito para que Navegador Privado sea compatible con F-Droid.</li>
         </ul>
 
         <h3>1.0 (código de versión 1)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=6f7130bc4218755bea242a2108e4c4ad6f63dcf9">24 de febrero de 2016</a> - API mínimo 10, API dirigido 23</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=6f7130bc4218755bea242a2108e4c4ad6f63dcf9">24 de febrero de 2016</a> - API mínimo 10, API objetivo 23</p>
         <ul>
             <li>Controlar JavaScript, almacenamiento DOM, y cookies.</li>
             <li>Establecer el estado por defecto de JavaScript, almacenamiento DOM, y cookies.</li>
index 6f09b29477b725b99e6cd2666e33d815386543aa..b0d9e30c4fe1454d249716fc649281da41432f16 100644 (file)
@@ -35,7 +35,7 @@
         <h3>Licencia</h3>
         <p>Navegador Privado está liberado bajo la licencia <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a>.
             El texto completo de la licencia se encuentra en la parte inferior de este documento (se deja en el idioma original).
-            El código fuente está disponible en <a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=summary">git.stoutner.com</a>.</p>
+            El código fuente está disponible en <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=summary">gitweb.stoutner.com</a>.</p>
 
         <h3>Listas de bloqueo</h3>
         <p><a href="https://easylist.to/easylist/easylist.txt">EasyList</a> y <a href="https://easylist.to/easylist/easyprivacy.txt">EasyPrivacy</a>
index 43aca782bfdad628474b48f2142703f68886739d..a1e95f124dbaed7325120331645edfc61a958b40 100644 (file)
@@ -34,8 +34,8 @@
         <h4><a href="https://www.stoutner.com/category/privacy-browser/"><svg class="links"><use href="../shared_images/chrome_reader_mode.svg#icon"/></svg></a>
             <a href="https://www.stoutner.com/category/privacy-browser/">Noticias</a></h4>
 
-        <h4><a href="https://www.stoutner.com/category/roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
-            <a href="https://www.stoutner.com/category/roadmap/">Hoja de ruta</a></h4>
+        <h4><a href="https://www.stoutner.com/category/privacy-browser-roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
+            <a href="https://www.stoutner.com/category/privacy-browser-roadmap/">Hoja de ruta</a></h4>
 
         <h4><a href="https://fosstodon.org/@privacybrowser"><svg class="links"><use href="../shared_images/mastodon.svg#icon"/></svg></a>
             <a href="https://fosstodon.org/@privacybrowser">Fosstodon</a></h4>
index 4a1469a6915c03cad66312f105718690d3716aa7..93a52f230dbbd0fa2b2376915025bac881560d45 100644 (file)
@@ -34,7 +34,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play tiene su <a href="https://www.google.com/intl/en/policies/privacy/">propia política de privacidad</a>.
+        <p>Google Play tiene su <a href="https://policies.google.com/privacy">propia política de privacidad</a>.
             Google proporciona <em>información resumida y anónima de instalación</em> a los desarrolladores, incluyendo el número de instalaciones, organizadas por las siguientes categorías.</p>
         <ul>
             <li><item>Versión de Android</item> (p.ej. Android 7.1)</li>
@@ -48,7 +48,7 @@
 
 
         <h3>Calificaciones de Google Play</h3>
-        <p>Google Play tiene su <a href="https://www.google.com/intl/en/policies/privacy/">propia política de privacidad</a>.
+        <p>Google Play tiene su <a href="https://policies.google.com/privacy">propia política de privacidad</a>.
             Google proporciona a los desarrolladores <em>resúmenes anónimos</em> de la siguiente información relativa a las valoraciones de los usuarios.</p>
         <ul>
             <li><item>País</item> (p.ej. Estados Unidos)</li>
@@ -61,7 +61,7 @@
 
 
         <h3>Comentarios de Google Play</h3>
-        <p>Google Play tiene su <a href="https://www.google.com/intl/en/policies/privacy/">propia política de privacidad</a>.
+        <p>Google Play tiene su <a href="https://policies.google.com/privacy">propia política de privacidad</a>.
             Además del nombre del comentador, la calificación y el texto del comentario (las cuales están disponibles públicamente), Google proporciona alguna o toda la siguiente información al desarrollador.</p>
         <ul>
             <li><item>Código de versión</item> (p.ej. 7)</li>
index 6454007b9f065a8e7a3565fdd10cfd15b875ae5e..15ec5a082395a1e748c96fb094827141fb40e8a3 100644 (file)
@@ -34,7 +34,7 @@
 
         <h3>Licence</h3>
         <p>rivacy Browser est publié sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>. Le texte complet de la licence est ci-dessous.
-            Le code source est disponible à partir de <a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=summary">git.stoutner.com</a>.</p>
+            Le code source est disponible à partir de <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=summary">gitweb.stoutner.com</a>.</p>
 
         <h3>Listes de blocage</h3>
         <p><a href="https://easylist.to/easylist/easylist.txt">EasyList</a> et <a href="https://easylist.to/easylist/easyprivacy.txt">EasyPrivacy</a>
index db53af0060a643ac43a573ef8a66af440805b924..811b65dbcf778f060cea4be5e6847b608a5e95cd 100644 (file)
@@ -34,8 +34,8 @@
         <h4><a href="https://www.stoutner.com/category/privacy-browser/"><svg class="links"><use href="../shared_images/chrome_reader_mode.svg#icon"/></svg></a>
             <a href="https://www.stoutner.com/category/privacy-browser/">Actualités</a></h4>
 
-        <h4><a href="https://www.stoutner.com/category/roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
-            <a href="https://www.stoutner.com/category/roadmap/">Roadmap</a></h4>
+        <h4><a href="https://www.stoutner.com/category/privacy-browser-roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
+            <a href="https://www.stoutner.com/category/privacy-browser-roadmap/">Roadmap</a></h4>
 
         <h4><a href="https://fosstodon.org/@privacybrowser"><svg class="links"><use href="../shared_images/mastodon.svg#icon"/></svg></a>
             <a href="https://fosstodon.org/@privacybrowser">Fosstodon</a></h4>
index 387282832d20433ed61e41be55c6101691441ce4..349559c6794a9553db258e68b6236e1def680708 100644 (file)
@@ -34,7 +34,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play a sa <a href="https://www.google.com/intl/en/policies/privacy/"> propre règle de confidentialité </a>.
+        <p>Google Play a sa <a href="https://policies.google.com/privacy"> propre règle de confidentialité </a>.
              Google fournit aux développeurs des <em>informations d'installation récapitulatives et anonymisées</em>, notamment le nombre d'installations organisées selon les catégories suivantes.</p>
         <ul>
             <li><item>Version d'Android</item> (ex. Android 7.1)</li>
@@ -48,7 +48,7 @@
 
 
         <h3>Notes Google Play</h3>
-        <p>Google Play a sa <a href="https://www.google.com/intl/en/policies/privacy/">propre règle de confidentialité </a>.
+        <p>Google Play a sa <a href="https://policies.google.com/privacy">propre règle de confidentialité </a>.
              Google fournit aux développeurs des <em>résumés anonymisés</em> des informations suivantes relatives aux évaluations des utilisateurs.</p>
         <ul>
             <li><item>Pays</item> (ex. France)</li>
@@ -61,7 +61,7 @@
 
 
         <h3>Avis Google Play</h3>
-        <p>Google Play a sa <a href="https://www.google.com/intl/en/policies/privacy/">propre règle de confidentialité</a>.
+        <p>Google Play a sa <a href="https://policies.google.com/privacy">propre règle de confidentialité</a>.
              Outre le nom du réviseur, l'évaluation et le texte de la révision (tous disponibles publiquement), Google fournit au développeur tout ou partie des informations suivantes.</p>
         <ul>
             <li><item>Code de Version</item> (ex. 7)</li>
index 4f5457845994700c08e22c6450dc4e0599e8d64c..bcf2d1438eb64e2eca2e27025acb70c9fbeb99ab 100644 (file)
@@ -38,7 +38,7 @@
             Lo scopo di questa traduzione è unicamente quello di aiutare gli utenti di lingua italiana a comprendere la GNU GPL, e pertanto in caso di eventuali discrepanze tra
             traduzione e versione originale in inglese, prevarrà e sarà unicamente la versione originale ad avere valore legale.
             E' inoltre ammessa la modifica e la pubblicazione di questa traduzione, ma solamente in accordo ai termini <a href="https://www.gnu.org/licenses/translations.html">qui</a> riportati.
-            Il codice sorgente è disponibile su <a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=summary">git.stoutner.com</a>.</p>
+            Il codice sorgente è disponibile su <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=summary">gitweb.stoutner.com</a>.</p>
 
         <h3>Blocklist</h3>
         <p><a href="https://easylist.to/easylist/easylist.txt">EasyList</a> e <a href="https://easylist.to/easylist/easyprivacy.txt">EasyPrivacy</a>
index efbb64bb378217848ffbe35580021e3d8841145b..0b74dc5fa977b28a59c1a27d99b31e7379d062f3 100644 (file)
@@ -34,8 +34,8 @@
         <h4><a href="https://www.stoutner.com/category/privacy-browser/"><svg class="links"><use href="../shared_images/chrome_reader_mode.svg#icon"/></svg></a>
             <a href="https://www.stoutner.com/category/privacy-browser/">Novità</a></h4>
 
-        <h4><a href="https://www.stoutner.com/category/roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
-            <a href="https://www.stoutner.com/category/roadmap/">Roadmap</a></h4>
+        <h4><a href="https://www.stoutner.com/category/privacy-browser-roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
+            <a href="https://www.stoutner.com/category/privacy-browser-roadmap/">Roadmap</a></h4>
 
         <h4><a href="https://fosstodon.org/@privacybrowser"><svg class="links"><use href="../shared_images/mastodon.svg#icon"/></svg></a>
             <a href="https://fosstodon.org/@privacybrowser">Fosstodon</a></h4>
index e99d797b11f94d1a7b9b55a4d814d572db143185..59c9b8f2a5088e829d960e7ac86da84138e4fd04 100644 (file)
@@ -34,7 +34,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play ha una <a href="https://www.google.com/intl/en/policies/privacy/">propria privacy policy</a>.
+        <p>Google Play ha una <a href="https://policies.google.com/privacy">propria privacy policy</a>.
             Google fornisce agli sviluppatori <em>informazioni anonime sulle installazioni</em>, incluso il numero di installazioni, secondo le seguenti categorie.</p>
         <ul>
             <li><item>Versione Android</item> (es. Android 7.1)</li>
@@ -48,7 +48,7 @@
 
 
         <h3>Ratings di Google Play</h3>
-        <p>Google Play ha una <a href="https://www.google.com/intl/en/policies/privacy/">propria privacy policy</a>.
+        <p>Google Play ha una <a href="https://policies.google.com/privacy">propria privacy policy</a>.
             Google fornisce agli sviluppatori <em>sintesi anonime</em> delle seguenti informazioni collegate ai ratings degli utenti.</p>
         <ul>
             <li><item>Nazione</item> (es. United States)</li>
@@ -61,7 +61,7 @@
 
 
         <h3>Recensioni di Google Play</h3>
-        <p>Google Play ha una <a href="https://www.google.com/intl/en/policies/privacy/">propria privacy policy</a>.
+        <p>Google Play ha una <a href="https://policies.google.com/privacy">propria privacy policy</a>.
             Oltre al nome del recensore, al rating, e al testo della recensione (i quali sono tutti pubblicamente disponibili), Google fornisce alcune o tutte le seguenti informazioni allo sviluppatore.</p>
         <ul>
             <li><item>Codice Versione</item> (es. 7)</li>
index d0cad695e2dce1801862e6f5d8783ab3a03f0344..49e15957b3365e9b582c502a116bb1557fac1608 100644 (file)
@@ -34,7 +34,7 @@
 
         <h3>License</h3>
         <p>Privacy Browser 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.
-            The source code is available from <a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=summary">git.stoutner.com</a>.</p>
+            The source code is available from <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=summary">gitweb.stoutner.com</a>.</p>
 
         <h3>Blocklists</h3>
         <p><a href="https://easylist.to/easylist/easylist.txt">EasyList</a> and <a href="https://easylist.to/easylist/easyprivacy.txt">EasyPrivacy</a>
index 4e6f9bdc29184588686a68a2dc810c46bba54e08..52791e752aa8c643d12dd143bdb612936df3db70 100644 (file)
@@ -34,8 +34,8 @@
         <h4><a href="https://www.stoutner.com/category/privacy-browser/"><svg class="links"><use href="../shared_images/chrome_reader_mode.svg#icon"/></svg></a>
             <a href="https://www.stoutner.com/category/privacy-browser/">News</a></h4>
 
-        <h4><a href="https://www.stoutner.com/category/roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
-            <a href="https://www.stoutner.com/category/roadmap/">Roadmap</a></h4>
+        <h4><a href="https://www.stoutner.com/category/privacy-browser-roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
+            <a href="https://www.stoutner.com/category/privacy-browser-roadmap/">Roadmap</a></h4>
 
         <h4><a href="https://fosstodon.org/@privacybrowser"><svg class="links"><use href="../shared_images/mastodon.svg#icon"/></svg></a>
             <a href="https://fosstodon.org/@privacybrowser">Fosstodon</a></h4>
index 1227ff57cf3fe3d95195b23982090d4ba89ca882..a2f7f15bd31ed8017f6d105f5b57d5026d77daed 100644 (file)
@@ -34,7 +34,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             Google provides <em>anonymized summary installation information</em> to developers, including the number of installs organized by the following categories.</p>
         <ul>
             <li><item>Android version</item> (eg. Android 7.1)</li>
@@ -48,7 +48,7 @@
 
 
         <h3>Google Play Ratings</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             Google provides developers with <em>anonymized summaries</em> of the following information related to user ratings.</p>
         <ul>
             <li><item>Country</item> (eg. United States)</li>
@@ -61,7 +61,7 @@
 
 
         <h3>Google Play Reviews</h3>
-        <p>Google Play has its <a href="https://www.google.com/intl/en/policies/privacy/">own privacy policy</a>.
+        <p>Google Play has its <a href="https://policies.google.com/privacy">own privacy policy</a>.
             In addition to the name of the reviewer, the rating, and the text of the review (which are all available publicly), Google provides some or all of the following information to the developer.</p>
         <ul>
             <li><item>Version code</item> (eg. 7)</li>
index 81caa7d6b9a1a57c5cab8732f9f28da6c8baec98..8d1acbf4086874f8af3d078857b90adcc8732f49 100644 (file)
@@ -32,7 +32,7 @@
 
         <h3>Лицензия</h3>
         <p>Privacy Browser выпущен под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>. Полный текст лицензии приведен ниже.
-            Исходный код доступен на <a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=summary">git.stoutner.com</a>.</p>
+            Исходный код доступен на <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=summary">gitweb.stoutner.com</a>.</p>
 
         <h3>Списки блокировки</h3>
         <p><a href="https://easylist.to/easylist/easylist.txt">EasyList</a> и <a href="https://easylist.to/easylist/easyprivacy.txt">EasyPrivacy</a>
index aa4ebde4c0b9799edd115a58ff8cfb16c5d96d92..b15c3c9a191ef806a74811f42d302b25da8f452a 100644 (file)
@@ -32,8 +32,8 @@
         <h4><a href="https://www.stoutner.com/category/privacy-browser/"><svg class="links"><use href="../shared_images/chrome_reader_mode.svg#icon"/></svg></a>
             <a href="https://www.stoutner.com/category/privacy-browser/">Новости</a></h4>
 
-        <h4><a href="https://www.stoutner.com/category/roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
-            <a href="https://www.stoutner.com/category/roadmap/">Дорожная карта</a></h4>
+        <h4><a href="https://www.stoutner.com/category/privacy-browser-roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
+            <a href="https://www.stoutner.com/category/privacy-browser-roadmap/">Дорожная карта</a></h4>
 
         <h4><a href="https://fosstodon.org/@privacybrowser"><svg class="links"><use href="../shared_images/mastodon.svg#icon"/></svg></a>
             <a href="https://fosstodon.org/@privacybrowser">Fosstodon</a></h4>
index 4f5e698def60ca31c5eb9fbc3e00fdb18b8d77cc..8cf8f63aacd6c8034f689ae6b6075e28b34b447f 100644 (file)
@@ -32,7 +32,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play имеет <a href="https://www.google.com/intl/en/policies/privacy/">собственную политику конфиденциальности</a>.
+        <p>Google Play имеет <a href="https://policies.google.com/privacy">собственную политику конфиденциальности</a>.
             Google предоставляет разработчикам <em>сводную анонимизированную информацию об установке</em>, включающую их количество, организованную по следующим категориям.</p>
         <ul>
             <li><item>Версия Android</item> (напр. Android 7.1)</li>
@@ -46,7 +46,7 @@
 
 
         <h3>Рейтинги Google Play</h3>
-        <p>Google Play имеет <a href="https://www.google.com/intl/en/policies/privacy/">собственную политику конфиденциальности</a>.
+        <p>Google Play имеет <a href="https://policies.google.com/privacy">собственную политику конфиденциальности</a>.
             Google предоставляет разработчикам <em>анонимизированные сводки</em> следующей информации, связанной с пользовательскими рейтингами.</p>
         <ul>
             <li><item>Страна</item> (напр. Russian Federation)</li>
@@ -59,7 +59,7 @@
 
 
         <h3>Отзывы Google Play</h3>
-        <p>Google Play имеет <a href="https://www.google.com/intl/en/policies/privacy/">собственную политику конфиденциальности</a>.
+        <p>Google Play имеет <a href="https://policies.google.com/privacy">собственную политику конфиденциальности</a>.
             Помимо имени автора отзыва, оценки и текста отзыва (все они доступны публично), Google предоставляет разработчику некоторую или всю следующую информацию.</p>
         <ul>
             <li><item>Код версии</item> (напр. 7)</li>
index bddc6750f20512f1348d77dbfc2f3004b8341d5f..fde177f09e9554a88cf49f6e2da85192c1b5f396 100644 (file)
@@ -32,7 +32,7 @@
 
         <h3>Lisans</h3>
         <p>Privacy Browser <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı. Lisansın tam metni aşağıdadır.
-            Kaynak kodu <a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=summary">git.stoutner.com</a> adresinden temin edilebilir.</p>
+            Kaynak kodu <a href="https://gitweb.stoutner.com/?p=PrivacyBrowser.git;a=summary">gitweb.stoutner.com</a> adresinden temin edilebilir.</p>
 
         <h3>Engel Listeleri</h3>
         <p><a href="https://easylist.to/easylist/easylist.txt">EasyList</a> ve <a href="https://easylist.to/easylist/easyprivacy.txt">EasyPrivacy</a> listeleri
index 625b26a959a2aa7f617eafb2f53fc7acbe021380..910b153fe48463c2fed8cf31be8fdcd477337d77 100644 (file)
@@ -32,8 +32,8 @@
         <h4><a href="https://www.stoutner.com/category/privacy-browser/"><svg class="links"><use href="../shared_images/chrome_reader_mode.svg#icon"/></svg></a>
             <a href="https://www.stoutner.com/category/privacy-browser/">Haber</a></h4>
 
-        <h4><a href="https://www.stoutner.com/category/roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
-            <a href="https://www.stoutner.com/category/roadmap/">Yol Haritası</a></h4>
+        <h4><a href="https://www.stoutner.com/category/privacy-browser-roadmap/"><svg class="links"><use href="../shared_images/map.svg#icon"/></svg></a>
+            <a href="https://www.stoutner.com/category/privacy-browser-roadmap/">Yol Haritası</a></h4>
 
         <h4><a href="https://fosstodon.org/@privacybrowser"><svg class="links"><use href="../shared_images/mastodon.svg#icon"/></svg></a>
             <a href="https://fosstodon.org/@privacybrowser">Fosstodon</a></h4>
index 7b992353cfae347f4daf846e38ba67ab010836bc..1bc89e2c3b3a6eec7373b9e720cd0a3079d8cbd9 100644 (file)
@@ -32,7 +32,7 @@
 
 
         <h3>Google Play</h3>
-        <p>Google Play <a href="https://www.google.com/intl/en/policies/privacy/">kendisine özgü gizlilik politikasına sahiptir</a>.
+        <p>Google Play <a href="https://policies.google.com/privacy">kendisine özgü gizlilik politikasına sahiptir</a>.
             Google, aşağıdaki kategorilerce düzenlenen, indirme sayıları da dahil, <em>anonimleştirilmiş özet kurulum bilgilerini</em> geliştiricilere verir.</p>
         <ul>
             <li><item>Android versiyonu</item> (örn. Android 7.1)</li>
@@ -46,7 +46,7 @@
 
 
         <h3>Google Play Derecelendirmeleri</h3>
-        <p>Google Play <a href="https://www.google.com/intl/en/policies/privacy/">kendisine özgü gizlilik politikasına sahiptir</a>.
+        <p>Google Play <a href="https://policies.google.com/privacy">kendisine özgü gizlilik politikasına sahiptir</a>.
             Google, kullanıcı değerlendirmeleriyle ilişkili aşağıdaki bilgilerin <em>anonimleştirilmiş özetlerini</em> geliştiricilere verir.</p>
         <ul>
             <li><item>Ülke</item> (örn. Amerika Birleşik Devletleri)</li>
@@ -59,7 +59,7 @@
 
 
         <h3>Google Play Kritikleri</h3>
-        <p>Google Play <a href="https://www.google.com/intl/en/policies/privacy/">kendisine özgü gizlilik politikasına sahiptir</a>.
+        <p>Google Play <a href="https://policies.google.com/privacy">kendisine özgü gizlilik politikasına sahiptir</a>.
             Google, inceleme yapan kişinin ismine, değerlendirmeye ve inceleme metninine (tümü halka açıktır) ek olarak, aşağıdaki bilgilerin bir kısmını ya da tamamını geliştiricilere verir.</p>
         <ul>
             <li><item>Versiyon kodu</item> (örn. 7)</li>
index bd5b3b68199096f14181ebb969c4eb9cf094ff9e..b275e6e078698de8e271774a17ce3e95c26fa794 100644 (file)
@@ -83,9 +83,9 @@ class AboutActivity : AppCompatActivity(), SaveListener {
 
         // Set the content view.
         if (bottomAppBar) {
-            setContentView(R.layout.about_coordinatorlayout_bottom_appbar)
+            setContentView(R.layout.about_bottom_appbar)
         } else {
-            setContentView(R.layout.about_coordinatorlayout_top_appbar)
+            setContentView(R.layout.about_top_appbar)
         }
 
         // Get handles for the views.
@@ -93,13 +93,13 @@ class AboutActivity : AppCompatActivity(), SaveListener {
         val aboutTabLayout = findViewById<TabLayout>(R.id.about_tablayout)
         val aboutViewPager = findViewById<ViewPager>(R.id.about_viewpager)
 
-        // Set the action bar.  `SupportActionBar` must be used until the minimum API is >= 21.
+        // Set the support action bar.
         setSupportActionBar(toolbar)
 
         // Get a handle for the action bar.
         val actionBar = supportActionBar!!
 
-        // Display the home arrow on action bar.
+        // Display the home arrow on the action bar.
         actionBar.setDisplayHomeAsUpEnabled(true)
 
         // Initialize the about pager adapter.
@@ -195,4 +195,4 @@ class AboutActivity : AppCompatActivity(), SaveListener {
                 SaveAboutVersionImage(this, fileNameString, aboutVersionLinearLayout).execute()
         }
     }
-}
\ No newline at end of file
+}
index 81f175f8333c5f3590e0ce64137aad0c331f2aef..9e33c0d22caecc15b2fc7e092c27a9591953551b 100644 (file)
@@ -165,13 +165,13 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
         // Set the content according to the app bar position.
         if (bottomAppBar) {
             // Set the content view.
-            setContentView(R.layout.bookmarks_coordinatorlayout_bottom_appbar);
+            setContentView(R.layout.bookmarks_bottom_appbar);
         } else {
             // `Window.FEATURE_ACTION_MODE_OVERLAY` makes the contextual action mode cover the support action bar.  It must be requested before the content is set.
             supportRequestWindowFeature(Window.FEATURE_ACTION_MODE_OVERLAY);
 
             // Set the content view.
-            setContentView(R.layout.bookmarks_coordinatorlayout_top_appbar);
+            setContentView(R.layout.bookmarks_top_appbar);
         }
 
         // Get a handle for the toolbar.
index d084d5c68ffc7e977b00850396e74899c3f4d5ae..13fedf04d450dfbd1274426b189de562fe59edfc 100644 (file)
@@ -128,13 +128,13 @@ public class BookmarksDatabaseViewActivity extends AppCompatActivity implements
         // Set the view according to the theme.
         if (bottomAppBar) {
             // Set the content view.
-            setContentView(R.layout.bookmarks_databaseview_coordinatorlayout_bottom_appbar);
+            setContentView(R.layout.bookmarks_databaseview_bottom_appbar);
         } else {
             // `Window.FEATURE_ACTION_MODE_OVERLAY` makes the contextual action mode cover the support action bar.  It must be requested before the content is set.
             supportRequestWindowFeature(Window.FEATURE_ACTION_MODE_OVERLAY);
 
             // Set the content view.
-            setContentView(R.layout.bookmarks_databaseview_coordinatorlayout_top_appbar);
+            setContentView(R.layout.bookmarks_databaseview_top_appbar);
         }
 
         // Get a handle for the toolbar.
index 188875b4e8530c5789061abd77ead89ec6296e2f..c8e8e07c78ccb55af0b3f73b7961a226cfeaea29 100644 (file)
@@ -181,9 +181,9 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
 
         // Set the view.
         if (bottomAppBar) {
-            setContentView(R.layout.domains_coordinatorlayout_bottom_appbar);
+            setContentView(R.layout.domains_bottom_appbar);
         } else {
-            setContentView(R.layout.domains_coordinatorlayout_top_appbar);
+            setContentView(R.layout.domains_top_appbar);
         }
 
         // Populate the class variables.
index 91ef0fd385b0e9874c46c08528d6d885c24e5423..d9174c406488f8800f070819968ae3f4eea538ab 100644 (file)
@@ -57,9 +57,9 @@ public class GuideActivity extends AppCompatActivity {
 
         // Set the content view.
         if (bottomAppBar) {
-            setContentView(R.layout.guide_coordinatorlayout_bottom_appbar);
+            setContentView(R.layout.guide_bottom_appbar);
         } else {
-            setContentView(R.layout.guide_coordinatorlayout_top_appbar);
+            setContentView(R.layout.guide_top_appbar);
         }
 
         // Get a handle for the toolbar.
index e3324295d6e8bae171f07e26fb0f46f57be70e76..7fe893275d8397d8a1a36d354cf8518a7d42d119 100644 (file)
@@ -134,9 +134,9 @@ public class ImportExportActivity extends AppCompatActivity {
 
         // Set the content view.
         if (bottomAppBar) {
-            setContentView(R.layout.import_export_coordinatorlayout_bottom_appbar);
+            setContentView(R.layout.import_export_bottom_appbar);
         } else {
-            setContentView(R.layout.import_export_coordinatorlayout_top_appbar);
+            setContentView(R.layout.import_export_top_appbar);
         }
 
         // Get a handle for the toolbar.
index 78d203dac4f8b28ec6370294f0f585122db90c6a..87bb0a3b554034168c97d16c1a7aa24b08ece43e 100644 (file)
@@ -89,9 +89,9 @@ public class LogcatActivity extends AppCompatActivity implements SaveDialog.Save
 
         // Set the content view.
         if (bottomAppBar) {
-            setContentView(R.layout.logcat_coordinatorlayout_bottom_appbar);
+            setContentView(R.layout.logcat_bottom_appbar);
         } else {
-            setContentView(R.layout.logcat_coordinatorlayout_top_appbar);
+            setContentView(R.layout.logcat_top_appbar);
         }
 
         // Get handles for the views.
index 16dfcaaf3e20164e325af872dfa4864d99d24772..38fae2ed2702872414432600b6e744418a2c6e9d 100644 (file)
@@ -454,10 +454,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         tabLayout = findViewById(R.id.tablayout);
         swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
         webViewPager = findViewById(R.id.webviewpager);
-        fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
-
-        // Get a handle for the navigation view.
         NavigationView navigationView = findViewById(R.id.navigationview);
+        fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
 
         // Get a handle for the navigation menu.
         Menu navigationMenu = navigationView.getMenu();
@@ -3561,9 +3559,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                         inputMethodManager.hideSoftInputFromWindow(currentWebView.getWindowToken(), 0);
                     }
 
-                    // Clear the focus from from the URL text box and the WebView.  This removes any text selection markers and context menus, which otherwise draw above the open drawers.
+                    // Clear the focus from from the URL text box.  This removes any text selection markers and context menus, which otherwise draw above the open drawers.
                     urlEditText.clearFocus();
-                    currentWebView.clearFocus();
+
+                    // Clear the focus from from the WebView if it is not null, which can happen if a user opens a drawer while the browser is being resumed.
+                    if (currentWebView != null) {
+                        // Clearing the focus from the WebView removes any text selection markers and context menus, which otherwise draw above the open drawers.
+                        currentWebView.clearFocus();
+                    }
                 }
             }
         });
index bcbb9c1af1fd6507be7cf59384fc250368931094..e592ffffe85820abb25abeb5e9ec7feb9b6c1bb8 100644 (file)
@@ -87,9 +87,9 @@ public class RequestsActivity extends AppCompatActivity implements ViewRequestDi
 
         // Set the content view.
         if (bottomAppBar) {
-            setContentView(R.layout.requests_coordinatorlayout_bottom_appbar);
+            setContentView(R.layout.requests_bottom_appbar);
         } else {
-            setContentView(R.layout.requests_coordinatorlayout_top_appbar);
+            setContentView(R.layout.requests_top_appbar);
         }
 
         // Use the AndroidX toolbar until the minimum API is >= 21.
index b2d50e7c79e96f56fc15c82a51588d73aadd95ff..532eda553eb258e2c0809f8a14f762214b5a41b1 100644 (file)
@@ -106,9 +106,9 @@ class ViewSourceActivity: AppCompatActivity(), UntrustedSslCertificateListener {
 
         // Set the content view.
         if (bottomAppBar) {
-            setContentView(R.layout.view_source_coordinatorlayout_bottom_appbar)
+            setContentView(R.layout.view_source_bottom_appbar)
         } else {
-            setContentView(R.layout.view_source_coordinatorlayout_top_appbar)
+            setContentView(R.layout.view_source_top_appbar)
         }
 
         // Get a handle for the toolbar.
index c219e4c37e72735f6602a7bffd7a4c70fb230b67..a862fb44ffcaaae8170b4563de1a854ca735b553 100644 (file)
@@ -32,7 +32,7 @@ import com.stoutner.privacybrowser.R
 class AboutViewSourceDialog : DialogFragment() {
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Use a builder to create the alert dialog.
-        val dialogBuilder: AlertDialog.Builder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
+        val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
 
         // Set the icon according to the theme.
         dialogBuilder.setIconAttribute(R.attr.aboutBlueIcon)
index 8a602ef5359b02b280dc15d3442a4e4732d826b4..f2b69d5e848fe98830dae4ac2087c0e8c1f7cd38 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -81,8 +80,6 @@ class AddDomainDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments.
         val arguments = requireArguments()
@@ -91,7 +88,7 @@ class AddDomainDialog : DialogFragment() {
         val urlString = arguments.getString(URL_STRING)
 
         // Use an alert dialog builder to create the alert dialog.
-        val dialogBuilder: AlertDialog.Builder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
+        val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
 
         // Set the icon according to the theme.
         dialogBuilder.setIconAttribute(R.attr.domainsBlueIcon)
@@ -99,8 +96,8 @@ class AddDomainDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.add_domain)
 
-        // Set the view.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.add_domain_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.add_domain_dialog)
 
         // Set the cancel button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index e787e1e315451b5b68aaa65132043ddc732e5173..cacb0eb7c87cccc2764eb7c501fc7a00045224b1 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -95,8 +94,6 @@ class CreateBookmarkDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments.
         val arguments = requireArguments()
@@ -121,8 +118,8 @@ class CreateBookmarkDialog : DialogFragment() {
         // Set the icon.
         dialogBuilder.setIcon(favoriteIconDrawable)
 
-        // Set the view.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.create_bookmark_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.create_bookmark_dialog)
 
         // Set a listener on the cancel button.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index 42f9a16779a59891760ee2de72a9f2293b84701e..e05dea35b719c72cfa4daa41a8bd97b9c8dbbfa7 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -95,8 +94,6 @@ class CreateBookmarkFolderDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments.
         val arguments = requireArguments()
@@ -113,8 +110,8 @@ class CreateBookmarkFolderDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.create_folder)
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.create_bookmark_folder_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.create_bookmark_folder_dialog)
 
         // Set a listener on the cancel button.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index 3e405c8d7af9162dc218883e2954da8815343352..0a0932fbab31a35fdb17eb3ca1a99003aab4a9b6 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.DialogInterface
 import android.content.Intent
@@ -93,8 +92,6 @@ class CreateHomeScreenShortcutDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments.
         val arguments = requireArguments()
@@ -119,8 +116,8 @@ class CreateHomeScreenShortcutDialog : DialogFragment() {
         // Set the icon.
         dialogBuilder.setIcon(favoriteIconDrawable)
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.create_home_screen_shortcut_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.create_home_screen_shortcut_dialog)
 
         // Set a listener on the close button.  Using null closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index 577e1a39e38e6cd87dcc3e6e05e5fc68f6d88cd3..377e0e8a8e384a82858d27a8918b464e5617aee9 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -116,8 +115,6 @@ class EditBookmarkDatabaseViewDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments.
         val arguments = requireArguments()
@@ -144,8 +141,8 @@ class EditBookmarkDatabaseViewDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.edit_bookmark)
 
-        // Set the view.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.edit_bookmark_databaseview_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.edit_bookmark_databaseview_dialog)
 
         // Set the cancel button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index 752f5b1c9eefa3ce538c9bf2918864f417be5473..baa53cc3abeadb4ad972b15b3fb5f511a4f82da6 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -104,8 +103,6 @@ class EditBookmarkDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments.
         val arguments = requireArguments()
@@ -132,8 +129,8 @@ class EditBookmarkDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.edit_bookmark)
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.edit_bookmark_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.edit_bookmark_dialog)
 
         // Set the cancel button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index ba538f59db319072c2837bcc952f08dd5a51bbd4..5d6fe9227b8490cbe2b21f7854164840df171cdf 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -109,8 +108,6 @@ class EditBookmarkFolderDatabaseViewDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get a handle for the arguments.
         val arguments = requireArguments()
@@ -137,8 +134,8 @@ class EditBookmarkFolderDatabaseViewDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.edit_folder)
 
-        // Set the view.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.edit_bookmark_folder_databaseview_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.edit_bookmark_folder_databaseview_dialog)
 
         // Set the cancel button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index 1c70b82d0d96b4a6e8478749168d1f656639ac23..2a4bc9f347e01f7d6fc92b2a0e9157b0cfe74662 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -105,8 +104,6 @@ class EditBookmarkFolderDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get a handle for the arguments.
         val arguments = requireArguments()
@@ -133,8 +130,8 @@ class EditBookmarkFolderDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.edit_folder)
 
-        // Set the view.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.edit_bookmark_folder_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.edit_bookmark_folder_dialog)
 
         // Set the cancel button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index b1c456738af3d0122a5681bb44762867c13005c1..953f938de3c32702a45e22e3dd2f6cb12897a833 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -77,8 +76,6 @@ class FontSizeDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using null as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the current font size from the arguments.
         val currentFontSize = requireArguments().getInt(FONT_SIZE)
@@ -92,8 +89,8 @@ class FontSizeDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.font_size)
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.font_size_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.font_size_dialog)
 
         // Set the close button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.close, null)
index fc506f42fdaf9b71323dd319cc960e64cfc8ceb3..c53c92fab5bc3d3fbb8056a51cb0c494d90402dd 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.DialogInterface
 import android.content.res.Configuration
@@ -78,8 +77,6 @@ class HttpAuthenticationDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get a handle for the arguments.
         val arguments = requireArguments()
@@ -115,8 +112,8 @@ class HttpAuthenticationDialog : DialogFragment() {
             // Set the title.
             dialogBuilder.setTitle(R.string.http_authentication)
 
-            // Set the view.  The parent view is `null` because it will be assigned by the alert dialog.
-            dialogBuilder.setView(layoutInflater.inflate(R.layout.http_authentication_dialog, null))
+            // Set the view.
+            dialogBuilder.setView(R.layout.http_authentication_dialog)
 
             // Set the close button listener.
             dialogBuilder.setNegativeButton(R.string.close) { _: DialogInterface?, _: Int ->
index b35d31967f7fa488bfdc9b61b2b1158245be1336..f07f346ac687f67531c98c8b64731bd2bb1daed8 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -97,8 +96,6 @@ class MoveToFolderDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the data from the arguments.
         val currentFolder = requireArguments().getString(CURRENT_FOLDER)!!
@@ -116,8 +113,8 @@ class MoveToFolderDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.move_to_folder)
 
-        // Set the view.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.move_to_folder_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.move_to_folder_dialog)
 
         // Set the listener for the cancel button.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index c4cd66e1e741c52e6ca51c82e9c01164398cdef2..0bd12f2ba61c855105bde2a344a71947eae8e183 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -64,8 +63,6 @@ class OpenDialog : DialogFragment() {
         openListener = context as OpenListener
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using null as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Use an alert dialog builder to create the alert dialog.
         val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
@@ -76,8 +73,8 @@ class OpenDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.open)
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.open_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.open_dialog)
 
         // Set the cancel button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index d4ba4a74d9a8fe1a54378ee891c39f8df180fca2..e80cdc47b31e00b77bf7cc16819f2523f3fb6dff 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -83,8 +82,6 @@ class PinnedMismatchDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the WebView fragment ID.
         val webViewFragmentId = requireArguments().getLong(WEBVIEW_FRAGMENT_ID)
@@ -131,8 +128,8 @@ class PinnedMismatchDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.pinned_mismatch)
 
-        // Set the layout.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.pinned_mismatch_linearlayout, null))
+        // Set the layout.
+        dialogBuilder.setView(R.layout.pinned_mismatch_linearlayout)
 
         // Set the update button listener.
         dialogBuilder.setNeutralButton(R.string.update) { _: DialogInterface?, _: Int ->
@@ -163,7 +160,7 @@ class PinnedMismatchDialog : DialogFragment() {
             }
 
             // Update the IP addresses if they are pinned.
-            if (!nestedScrollWebView.pinnedIpAddresses.equals("")) {
+            if (nestedScrollWebView.pinnedIpAddresses != "") {
                 // Update the pinned IP addresses in the domain database.
                 domainsDatabaseHelper.updatePinnedIpAddresses(nestedScrollWebView.domainSettingsDatabaseId, nestedScrollWebView. currentIpAddresses)
 
index 78eacc1593f6690bdb2b5efcdfea4df051f9ffe6..4c8b75a3e62dbf9a934dcdf1d6954596ae891f2c 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -84,8 +83,6 @@ class SaveDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using null as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments from the bundle.
         val saveType = requireArguments().getInt(SAVE_TYPE)
@@ -120,8 +117,8 @@ class SaveDialog : DialogFragment() {
             }
         }
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.save_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.save_dialog)
 
         // Set the cancel button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index 3906078402abaaf078ffdd5261ecf15e38b33c87..3402d4f7861c01231c95b8bb8818dd42d0429164 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -105,8 +104,6 @@ class SaveWebpageDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using null as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments from the bundle.
         val saveType = requireArguments().getInt(SAVE_TYPE)
@@ -158,8 +155,8 @@ class SaveWebpageDialog : DialogFragment() {
             }
         }
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.save_webpage_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.save_webpage_dialog)
 
         // Set the cancel button listener.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNegativeButton(R.string.cancel, null)
index e44e8026bf29e325985d5f55047f8f63eda8ccfa..1a71f5de4da2f4b09591269a4a52be07eeb2f8e4 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Activity
 import android.app.Dialog
 import android.content.DialogInterface
@@ -105,8 +104,6 @@ class SslCertificateErrorDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the variables from the bundle.
         val primaryErrorInt = requireArguments().getInt(PRIMARY_ERROR_INT)
@@ -148,8 +145,8 @@ class SslCertificateErrorDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.ssl_certificate_error)
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.ssl_certificate_error, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.ssl_certificate_error)
 
         // Set the cancel button listener.
         dialogBuilder.setNegativeButton(R.string.cancel) { _: DialogInterface?, _: Int ->
index aa22fd7c4d0923ffd0ea1e3434cf8afc4d367e3a..beaa2eeaacc87cf01a095b085046da524a15be84 100644 (file)
@@ -53,7 +53,7 @@ class UntrustedSslCertificateDialog : DialogFragment() {
         // Check to see if the app has been restarted.
         if (savedInstanceState == null) {  // The app has not been restarted.
             // Use a builder to create the alert dialog.
-            val dialogBuilder: AlertDialog.Builder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
+            val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
 
             // Set the icon according to the theme.
             dialogBuilder.setIconAttribute(R.attr.sslCertificateBlueIcon)
index fb2bcc5b8744fed60fee49cde95d18dc01592405..b189ce58c1324f2ca688fc79289de601f0cee8dc 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -84,8 +83,6 @@ class UrlHistoryDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using null as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the WebView fragment ID from the arguments.
         val webViewFragmentId = requireArguments().getLong(WEBVIEW_FRAGMENT_ID)
@@ -146,8 +143,8 @@ class UrlHistoryDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(R.string.history)
 
-        // Set the view.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.url_history_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.url_history_dialog)
 
         // Setup the clear history button listener.
         dialogBuilder.setNegativeButton(R.string.clear_history) { _: DialogInterface, _: Int ->
index 0d63f54444086243b7860f9497079052880d0ede..d9cb6fc7dda873f7b8aa8f5cfe4e2c9d176f4e66 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.Context
 import android.content.DialogInterface
@@ -85,8 +84,6 @@ class ViewRequestDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using null as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments from the bundle.
         val id = requireArguments().getInt(ID)
@@ -105,8 +102,8 @@ class ViewRequestDialog : DialogFragment() {
         // Set the title.
         dialogBuilder.setTitle(resources.getString(R.string.request_details) + " - " + id)
 
-        // Set the view.  The parent view is null because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.view_request_dialog, null))
+        // Set the view.
+        dialogBuilder.setView(R.layout.view_request_dialog)
 
         // Set the close button.  Using `null` as the listener closes the dialog without doing anything else.
         dialogBuilder.setNeutralButton(R.string.close, null)
index fbbfdabd20bd32e39670109c866896cdea310a31..48c2e52c2fa0529a2df8ed6e7122a6f6360853ee 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.content.res.Configuration
 import android.graphics.Bitmap
@@ -112,8 +111,6 @@ class ViewSslCertificateDialog : DialogFragment() {
         }
     }
 
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Use a builder to create the alert dialog.
         val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
@@ -205,8 +202,8 @@ class ViewSslCertificateDialog : DialogFragment() {
             // Set the title.
             dialogBuilder.setTitle(R.string.ssl_certificate)
 
-            // Set the layout.  The parent view is `null` because it will be assigned by the alert dialog.
-            dialogBuilder.setView(layoutInflater.inflate(R.layout.view_ssl_certificate_dialog, null))
+            // Set the layout.
+            dialogBuilder.setView(R.layout.view_ssl_certificate_dialog)
 
             // Create an alert dialog from the builder.
             val alertDialog = dialogBuilder.create()
@@ -358,8 +355,8 @@ class ViewSslCertificateDialog : DialogFragment() {
             // Set the title.
             dialogBuilder.setTitle(R.string.unencrypted_website)
 
-            // Set the Layout.  The parent view is `null` because it will be assigned by the alert dialog.
-            dialogBuilder.setView(layoutInflater.inflate(R.layout.unencrypted_website_dialog, null))
+            // Set the Layout.
+            dialogBuilder.setView(R.layout.unencrypted_website_dialog)
 
             // Create an alert dialog from the builder.
             val alertDialog = dialogBuilder.create()
index 145580be5a0b918fb77c4a880ed6dfc5411a3463..f773a1100ab2124edf8f8587f3908fcf7cbb0392 100644 (file)
@@ -19,7 +19,6 @@
 
 package com.stoutner.privacybrowser.dialogs
 
-import android.annotation.SuppressLint
 import android.app.Dialog
 import android.os.Bundle
 import android.view.WindowManager
@@ -31,14 +30,12 @@ import androidx.preference.PreferenceManager
 import com.stoutner.privacybrowser.R
 
 class WaitingForProxyDialog : DialogFragment() {
-    // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
-    @SuppressLint("InflateParams")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Use a builder to create the alert dialog.
         val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog)
 
-        // Set the layout.  The parent view is `null` because it will be assigned by the alert dialog.
-        dialogBuilder.setView(layoutInflater.inflate(R.layout.waiting_for_proxy_dialog, null))
+        // Set the layout.
+        dialogBuilder.setView(R.layout.waiting_for_proxy_dialog)
 
         // Create an alert dialog from the builder.
         val alertDialog = dialogBuilder.create()
index 3d36c05737e53598cdf48dac99c1415282b90974..44bae91dd7591c39c038f792843bae75ada7cce0 100644 (file)
@@ -89,7 +89,7 @@ class AboutWebViewFragment : Fragment() {
 
         // Set a WebView client.
         tabWebView.webViewClient = object : WebViewClient() {
-            // `shouldOverrideUrlLoading` allows the sending of external links back to the main Privacy Browser WebView.  The deprecated `shouldOverrideUrlLoading` must be used until API >= 24.
+            // // Send external links back to the main Privacy Browser WebView.  The deprecated `shouldOverrideUrlLoading` must be used until API >= 24.
             override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                 // Create an intent to view the URL.
                 val urlIntent = Intent(Intent.ACTION_VIEW)
@@ -99,11 +99,13 @@ class AboutWebViewFragment : Fragment() {
 
                 // Make it so.
                 startActivity(urlIntent)
+                
+                // Consume the click.
                 return true
             }
-
+            
+            // Process asset requests with the asset loader.
             override fun shouldInterceptRequest(webView: WebView, url: String): WebResourceResponse? {
-                // Have the WebView asset loader process the request.
                 // This allows using the `appassets.androidplatform.net` URL, which handles the loading of SVG files, which otherwise is prevented by the CORS policy.
                 return webViewAssetLoader.shouldInterceptRequest(Uri.parse(url))
             }
@@ -153,4 +155,4 @@ class AboutWebViewFragment : Fragment() {
             savedInstanceState.putInt(SCROLL_Y, tabWebView.scrollY)
         }
     }
-}
\ No newline at end of file
+}
index 04a0bcc33ea82d6b4d0c988086a5e09d058476b1..306f1e2c57a0c3465e718f21f62a5432e152a48f 100644 (file)
@@ -118,7 +118,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         // Get the current theme status.
         currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
 
-        // // Get a handle for the shared preferences.
+        // Get a handle for the shared preferences.
         SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
 
         // Get handles for the preferences.
@@ -979,12 +979,6 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                 displayWebpageImagesPreference.setIcon(R.drawable.images_disabled_day);
             }
         }
-
-        // Get the shared preferences change listener.
-        sharedPreferenceChangeListener = getSharedPreferencesChangeListener(requireContext());
-
-        // Register the listener.
-        sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
     }
 
     // The listener should be unregistered when the app is paused.
@@ -996,7 +990,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         // Get a handle for the shared preferences.
         SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
 
-        // Unregister the shared preferences listener.
+        // Unregister the shared preference listener.
         sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
     }
 
@@ -1006,18 +1000,19 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         // Run the default commands.
         super.onResume();
 
-        // Get a new shared preferences change listener.
-        sharedPreferenceChangeListener = getSharedPreferencesChangeListener(requireContext());
+        // Get a new shared preference change listener.
+        sharedPreferenceChangeListener = getSharedPreferenceChangeListener(requireContext());
 
         // Get a handle for the shared preferences.
         SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
 
-        // Re-register the shared preferences listener.
+        // Re-register the shared preference listener.
         sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
     }
 
     // The context must be passed to the shared preference change listener or else any calls to the system `getString()` will crash if the app has been restarted.
-    private SharedPreferences.OnSharedPreferenceChangeListener getSharedPreferencesChangeListener(Context context) {
+    // This can be removed at some future point, perhaps after the switch to PreferenceScreenCompat.  It isn't an issue in Privacy Cell.
+    private SharedPreferences.OnSharedPreferenceChangeListener getSharedPreferenceChangeListener(Context context) {
         // Return the shared preference change listener.
         return (SharedPreferences sharedPreferences, String key) -> {
             switch (key) {
@@ -1975,4 +1970,4 @@ public class SettingsFragment extends 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);
     }
-}
\ No newline at end of file
+}
index 2900e0ab8c2d63e0b7129fc9fd877bcdeedb9234..cd00f067cd6a68273afc113eeac2234d9033042d 100644 (file)
@@ -80,7 +80,7 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS
     NestedScrollingChild2 {
 
     companion object {
-        // Define the companion object blocklists constants.  These can be moved to class constants once all of the code has transitioned to Kotlin.
+        // Define the public companion object blocklists constants.
         const val BLOCKED_REQUESTS = 0
         const val EASYLIST = 1
         const val EASYPRIVACY = 2
diff --git a/app/src/main/res/drawable/.idea/codeStyles/Project.xml b/app/src/main/res/drawable/.idea/codeStyles/Project.xml
deleted file mode 100644 (file)
index ae78c11..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<component name="ProjectCodeStyleConfiguration">
-  <code_scheme name="Project" version="173">
-    <codeStyleSettings language="XML">
-      <arrangement>
-        <rules>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>xmlns:android</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>xmlns:.*</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-              <order>BY_NAME</order>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*:id</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*:name</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>name</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>style</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>^$</XML_NAMESPACE>
-                </AND>
-              </match>
-              <order>BY_NAME</order>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
-                </AND>
-              </match>
-              <order>ANDROID_ATTRIBUTE_ORDER</order>
-            </rule>
-          </section>
-          <section>
-            <rule>
-              <match>
-                <AND>
-                  <NAME>.*</NAME>
-                  <XML_ATTRIBUTE />
-                  <XML_NAMESPACE>.*</XML_NAMESPACE>
-                </AND>
-              </match>
-              <order>BY_NAME</order>
-            </rule>
-          </section>
-        </rules>
-      </arrangement>
-    </codeStyleSettings>
-  </code_scheme>
-</component>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/.idea/misc.xml b/app/src/main/res/drawable/.idea/misc.xml
deleted file mode 100644 (file)
index fcfc828..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CMakeSettings">
-    <configurations>
-      <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
-    </configurations>
-  </component>
-</project>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/.idea/modules.xml b/app/src/main/res/drawable/.idea/modules.xml
deleted file mode 100644 (file)
index 1b04628..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/drawable.iml" filepath="$PROJECT_DIR$/.idea/drawable.iml" />
-    </modules>
-  </component>
-</project>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/.idea/vcs.xml b/app/src/main/res/drawable/.idea/vcs.xml
deleted file mode 100644 (file)
index bc59970..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$/../../../../.." vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/.idea/workspace.xml b/app/src/main/res/drawable/.idea/workspace.xml
deleted file mode 100644 (file)
index 7fe933f..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ChangeListManager">
-    <list default="true" id="300aa3b2-5467-4b77-b970-a3e70210d389" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/../../assets/shared_images/open_in_browser_dark.png" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../assets/shared_images/open_in_browser_light.png" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/ProxyNotInstalledDialog.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/WaitingForProxyDialog.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/proxy_disabled_dark.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/proxy_disabled_light.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/proxy_enabled_dark.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/proxy_enabled_light.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/proxy_ghosted_dark.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/proxy_ghosted_light.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../layout/waiting_for_proxy_dialog.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../../../../.idea/assetWizardSettings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../../../../.idea/assetWizardSettings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../../../../.idea/dictionaries/soren.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../../../../.idea/dictionaries/soren.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../../../build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/../../../../build.gradle" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/de/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/de/about_licenses_dark.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/de/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/de/about_licenses_light.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/en/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/en/about_licenses_dark.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/en/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/en/about_licenses_light.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/es/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/es/about_licenses_dark.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/es/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/es/about_licenses_light.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/fr/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/fr/about_licenses_dark.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/fr/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/fr/about_licenses_light.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/it/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/it/about_licenses_dark.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/it/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/it/about_licenses_light.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/ru/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/ru/about_licenses_dark.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/ru/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/ru/about_licenses_light.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/tr/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/tr/about_licenses_dark.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../assets/tr/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/tr/about_licenses_light.html" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/GuideActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/GuideActivity.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/fragments/SettingsFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/fragments/SettingsFragment.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/helpers/ProxyHelper.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app_bar_disabled_dark.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_disabled_dark.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app_bar_disabled_light.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_disabled_light.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app_bar_enabled_dark.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_enabled_dark.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app_bar_enabled_light.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_enabled_light.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app_bar_ghosted_dark.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_ghosted_dark.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/app_bar_ghosted_light.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_ghosted_light.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../layout/about_tab_version.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../layout/about_tab_version.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../layout/unencrypted_website.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../layout/unencrypted_website_dialog.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../layout/view_ssl_certificate.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../layout/view_ssl_certificate_dialog.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../menu/webview_options_menu.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../menu/webview_options_menu.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../values-de/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-de/strings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../values-es/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-es/strings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../values-fr/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-fr/strings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../values-it/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-it/strings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../values-ru/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-ru/strings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../values-tr/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-tr/strings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../values/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values/strings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../xml/preferences.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../xml/preferences.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/../../../../../build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/../../../../../build.gradle" afterDir="false" />
-    </list>
-    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
-    <option name="SHOW_DIALOG" value="false" />
-    <option name="HIGHLIGHT_CONFLICTS" value="true" />
-    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
-    <option name="LAST_RESOLUTION" value="IGNORE" />
-  </component>
-  <component name="Git.Settings">
-    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../../../.." />
-  </component>
-  <component name="ProjectFrameBounds" extendedState="6">
-    <option name="x" value="1213" />
-    <option name="y" value="595" />
-    <option name="width" value="2289" />
-    <option name="height" value="1457" />
-  </component>
-  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
-  <component name="ProjectView">
-    <navigator currentView="ProjectPane" proportions="" version="1">
-      <foldersAlwaysOnTop value="true" />
-    </navigator>
-    <panes>
-      <pane id="ProjectPane" />
-      <pane id="Scope" />
-      <pane id="PackagesPane" />
-    </panes>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="android.sdk.path" value="$USER_HOME$/Android/Sdk" />
-    <property name="last_opened_file_path" value="$USER_HOME$/Lightning-Browser" />
-    <property name="settings.editor.selected.configurable" value="AndroidSdkUpdater" />
-  </component>
-  <component name="RunDashboard">
-    <option name="ruleStates">
-      <list>
-        <RuleState>
-          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
-        </RuleState>
-        <RuleState>
-          <option name="name" value="StatusDashboardGroupingRule" />
-        </RuleState>
-      </list>
-    </option>
-  </component>
-  <component name="RunManager">
-    <configuration default="true" type="JUnit" factoryName="JUnit">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" value="-ea" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
-      </option>
-      <envs />
-      <patterns />
-      <method />
-    </configuration>
-    <configuration name="&lt;template&gt;" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" default="true" selected="false">
-      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
-    </configuration>
-    <configuration default="true" type="Applet">
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
-      <method v="2">
-        <option name="Make" enabled="true" />
-      </method>
-    </configuration>
-    <configuration default="true" type="Application" factoryName="Application">
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <method v="2">
-        <option name="Make" enabled="true" />
-      </method>
-    </configuration>
-    <configuration default="true" type="TestNG">
-      <option name="TEST_OBJECT" value="CLASS" />
-      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
-      <properties />
-      <listeners />
-      <method v="2">
-        <option name="Make" enabled="true" />
-      </method>
-    </configuration>
-  </component>
-  <component name="SvnConfiguration">
-    <configuration />
-  </component>
-  <component name="TaskManager">
-    <task active="true" id="Default" summary="Default task">
-      <changelist id="300aa3b2-5467-4b77-b970-a3e70210d389" name="Default Changelist" comment="" />
-      <created>1576705464689</created>
-      <option name="number" value="Default" />
-      <option name="presentableId" value="Default" />
-      <updated>1576705464689</updated>
-    </task>
-    <servers />
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="-8" y="0" width="3668" height="2068" extended-state="6" />
-    <layout>
-      <window_info active="true" content_ui="combo" id="Project" visible="true" weight="0.3297402" />
-      <window_info id="Structure" side_tool="true" />
-      <window_info id="Image Layers" />
-      <window_info id="Designer" />
-      <window_info id="Resources Explorer" />
-      <window_info id="Capture Tool" />
-      <window_info id="Favorites" side_tool="true" />
-      <window_info id="Captures" order="0" weight="0.25" />
-      <window_info anchor="bottom" id="Version Control" />
-      <window_info anchor="bottom" id="TODO" />
-      <window_info anchor="bottom" id="Terminal" />
-      <window_info anchor="bottom" id="Event Log" side_tool="true" />
-      <window_info anchor="right" id="Capture Analysis" />
-      <window_info anchor="right" id="Theme Preview" />
-      <window_info anchor="right" id="Palette&#9;" />
-    </layout>
-  </component>
-</project>
\ No newline at end of file
diff --git a/app/src/main/res/layout/about_bottom_appbar.xml b/app/src/main/res/layout/about_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..9d7b1d5
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2017,2019-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/about_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 view pager 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" >
+
+        <!-- `android:layout_weight="1"` makes the view pager fill the rest of the screen. -->
+        <androidx.viewpager.widget.ViewPager
+            android:id="@+id/about_viewpager"
+            android:layout_height="0dp"
+            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:id="@+id/about_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <com.google.android.material.tabs.TabLayout
+                android:id="@+id/about_tablayout"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                app:tabMode="scrollable" />
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/about_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/about_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/about_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index 9d7b1d5..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2017,2019-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/about_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 view pager 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" >
-
-        <!-- `android:layout_weight="1"` makes the view pager fill the rest of the screen. -->
-        <androidx.viewpager.widget.ViewPager
-            android:id="@+id/about_viewpager"
-            android:layout_height="0dp"
-            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:id="@+id/about_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <com.google.android.material.tabs.TabLayout
-                android:id="@+id/about_tablayout"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                app:tabMode="scrollable" />
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/about_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/about_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/about_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index c4dce55..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2017,2019-2020 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/about_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"` moves the view pager 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:id="@+id/about_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/about_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-
-            <com.google.android.material.tabs.TabLayout
-                android:id="@+id/about_tablayout"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                app:tabMode="scrollable" />
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <!-- `android:layout_weight="1"` makes the view pager fill the rest of the screen. -->
-        <androidx.viewpager.widget.ViewPager
-            android:id="@+id/about_viewpager"
-            android:layout_height="0dp"
-            android:layout_width="match_parent"
-            android:layout_weight="1" />
-    </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/about_top_appbar.xml b/app/src/main/res/layout/about_top_appbar.xml
new file mode 100644 (file)
index 0000000..c4dce55
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2017,2019-2020 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/about_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"` moves the view pager 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:id="@+id/about_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/about_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+
+            <com.google.android.material.tabs.TabLayout
+                android:id="@+id/about_tablayout"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                app:tabMode="scrollable" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <!-- `android:layout_weight="1"` makes the view pager fill the rest of the screen. -->
+        <androidx.viewpager.widget.ViewPager
+            android:id="@+id/about_viewpager"
+            android:layout_height="0dp"
+            android:layout_width="match_parent"
+            android:layout_weight="1" />
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/bookmarks_bottom_appbar.xml b/app/src/main/res/layout/bookmarks_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..4863376
--- /dev/null
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/bookmarks_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" >
+
+        <!-- `android:choiceMode="multipleChoiceModal"` allows the contextual action menu to select more than one item at a time.
+            `android:dividerHeight` must be at least `1dp` or the list view is inconsistent in calculating how many bookmarks are displayed. -->
+        <ListView
+            android:id="@+id/bookmarks_listview"
+            android:layout_height="0dp"
+            android:layout_width="match_parent"
+            android:layout_weight="1"
+            android:choiceMode="multipleChoiceModal"
+            android:divider="@color/transparent"
+            android:dividerHeight="1dp" />
+
+        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
+        <com.google.android.material.appbar.AppBarLayout
+            android:id="@+id/bookmarks_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/bookmarks_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+    </LinearLayout>
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/create_bookmark_folder_fab"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_gravity="bottom|end"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="140dp"
+        android:src="@drawable/create_folder"
+        android:tint="?attr/fabIconTintColor"
+        android:contentDescription="@string/create_folder" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/create_bookmark_fab"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_gravity="bottom|end"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="70dp"
+        android:src="@drawable/create_bookmark"
+        android:tint="?attr/fabIconTintColor"
+        android:contentDescription="@string/create_bookmark" />
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/bookmarks_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/bookmarks_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index 4863376..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/bookmarks_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" >
-
-        <!-- `android:choiceMode="multipleChoiceModal"` allows the contextual action menu to select more than one item at a time.
-            `android:dividerHeight` must be at least `1dp` or the list view is inconsistent in calculating how many bookmarks are displayed. -->
-        <ListView
-            android:id="@+id/bookmarks_listview"
-            android:layout_height="0dp"
-            android:layout_width="match_parent"
-            android:layout_weight="1"
-            android:choiceMode="multipleChoiceModal"
-            android:divider="@color/transparent"
-            android:dividerHeight="1dp" />
-
-        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
-        <com.google.android.material.appbar.AppBarLayout
-            android:id="@+id/bookmarks_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/bookmarks_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-    </LinearLayout>
-
-    <com.google.android.material.floatingactionbutton.FloatingActionButton
-        android:id="@+id/create_bookmark_folder_fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_marginEnd="16dp"
-        android:layout_marginBottom="140dp"
-        android:src="@drawable/create_folder"
-        android:tint="?attr/fabIconTintColor"
-        android:contentDescription="@string/create_folder" />
-
-    <com.google.android.material.floatingactionbutton.FloatingActionButton
-        android:id="@+id/create_bookmark_fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_marginEnd="16dp"
-        android:layout_marginBottom="70dp"
-        android:src="@drawable/create_bookmark"
-        android:tint="?attr/fabIconTintColor"
-        android:contentDescription="@string/create_bookmark" />
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/bookmarks_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/bookmarks_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index e5ac971..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/bookmarks_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:id="@+id/bookmarks_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/bookmarks_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <!-- `android:choiceMode="multipleChoiceModal"` allows the contextual action menu to select more than one item at a time.
-            `android:dividerHeight` must be at least `1dp` or the list view is inconsistent in calculating how many bookmarks are displayed. -->
-        <ListView
-            android:id="@+id/bookmarks_listview"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent"
-            android:choiceMode="multipleChoiceModal"
-            android:divider="@color/transparent"
-            android:dividerHeight="1dp" />
-    </LinearLayout>
-
-    <com.google.android.material.floatingactionbutton.FloatingActionButton
-        android:id="@+id/create_bookmark_folder_fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_marginEnd="16dp"
-        android:layout_marginBottom="85dp"
-        android:src="@drawable/create_folder"
-        android:tint="?attr/fabIconTintColor"
-        android:contentDescription="@string/create_folder" />
-
-    <com.google.android.material.floatingactionbutton.FloatingActionButton
-        android:id="@+id/create_bookmark_fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_margin="16dp"
-        android:src="@drawable/create_bookmark"
-        android:tint="?attr/fabIconTintColor"
-        android:contentDescription="@string/create_bookmark" />
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/bookmarks_databaseview_bottom_appbar.xml b/app/src/main/res/layout/bookmarks_databaseview_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..42b4c50
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/bookmarks_databaseview_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 list view 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" >
+
+        <!-- `android:choiceMode="multipleChoiceModal"` allows the contextual action menu to select more than one item at a time. -->
+        <ListView
+            android:id="@+id/bookmarks_databaseview_listview"
+            android:layout_height="0dp"
+            android:layout_width="match_parent"
+            android:layout_weight="1"
+            android:choiceMode="multipleChoiceModal" />
+
+        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
+        <com.google.android.material.appbar.AppBarLayout
+            android:id="@+id/bookmarks_databaseview_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/bookmarks_databaseview_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/bookmarks_databaseview_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/bookmarks_databaseview_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index 42b4c50..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/bookmarks_databaseview_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 list view 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" >
-
-        <!-- `android:choiceMode="multipleChoiceModal"` allows the contextual action menu to select more than one item at a time. -->
-        <ListView
-            android:id="@+id/bookmarks_databaseview_listview"
-            android:layout_height="0dp"
-            android:layout_width="match_parent"
-            android:layout_weight="1"
-            android:choiceMode="multipleChoiceModal" />
-
-        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
-        <com.google.android.material.appbar.AppBarLayout
-            android:id="@+id/bookmarks_databaseview_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/bookmarks_databaseview_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/bookmarks_databaseview_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/bookmarks_databaseview_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index f6474bb..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2020 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/bookmarks_databaseview_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 list view 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:id="@+id/bookmarks_databaseview_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/bookmarks_databaseview_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <!-- `android:choiceMode="multipleChoiceModal"` allows the contextual action menu to select more than one item at a time. -->
-        <ListView
-            android:id="@+id/bookmarks_databaseview_listview"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent"
-            android:choiceMode="multipleChoiceModal" />
-    </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/bookmarks_databaseview_top_appbar.xml b/app/src/main/res/layout/bookmarks_databaseview_top_appbar.xml
new file mode 100644 (file)
index 0000000..f6474bb
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2020 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/bookmarks_databaseview_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 list view 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:id="@+id/bookmarks_databaseview_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/bookmarks_databaseview_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <!-- `android:choiceMode="multipleChoiceModal"` allows the contextual action menu to select more than one item at a time. -->
+        <ListView
+            android:id="@+id/bookmarks_databaseview_listview"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:choiceMode="multipleChoiceModal" />
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/bookmarks_top_appbar.xml b/app/src/main/res/layout/bookmarks_top_appbar.xml
new file mode 100644 (file)
index 0000000..e5ac971
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/bookmarks_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:id="@+id/bookmarks_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/bookmarks_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <!-- `android:choiceMode="multipleChoiceModal"` allows the contextual action menu to select more than one item at a time.
+            `android:dividerHeight` must be at least `1dp` or the list view is inconsistent in calculating how many bookmarks are displayed. -->
+        <ListView
+            android:id="@+id/bookmarks_listview"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:choiceMode="multipleChoiceModal"
+            android:divider="@color/transparent"
+            android:dividerHeight="1dp" />
+    </LinearLayout>
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/create_bookmark_folder_fab"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_gravity="bottom|end"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="85dp"
+        android:src="@drawable/create_folder"
+        android:tint="?attr/fabIconTintColor"
+        android:contentDescription="@string/create_folder" />
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/create_bookmark_fab"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_gravity="bottom|end"
+        android:layout_margin="16dp"
+        android:src="@drawable/create_bookmark"
+        android:tint="?attr/fabIconTintColor"
+        android:contentDescription="@string/create_bookmark" />
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/domains_bottom_appbar.xml b/app/src/main/res/layout/domains_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..4af8490
--- /dev/null
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2017,2019-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/domains_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"
+    android:fitsSystemWindows="true" >
+
+    <!-- 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" >
+
+        <include layout="@layout/domains_fragments" />
+
+        <!-- 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/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/domains_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+    </LinearLayout>
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/add_domain_fab"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_gravity="bottom|end"
+        android:layout_marginEnd="16dp"
+        android:layout_marginBottom="70dp"
+        android:src="@drawable/add"
+        android:tint="?attr/fabIconTintColor"
+        android:contentDescription="@string/add_domain" />
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/domains_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/domains_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index 4af8490..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2017,2019-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/domains_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"
-    android:fitsSystemWindows="true" >
-
-    <!-- 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" >
-
-        <include layout="@layout/domains_fragments" />
-
-        <!-- 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/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/domains_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-    </LinearLayout>
-
-    <com.google.android.material.floatingactionbutton.FloatingActionButton
-        android:id="@+id/add_domain_fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_marginEnd="16dp"
-        android:layout_marginBottom="70dp"
-        android:src="@drawable/add"
-        android:tint="?attr/fabIconTintColor"
-        android:contentDescription="@string/add_domain" />
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/domains_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/domains_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index 6efd1d7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2017,2019-2020 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/domains_coordinatorlayout"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="match_parent"
-    android:layout_width="match_parent"
-    android:fitsSystemWindows="true" >
-
-    <!-- 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/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/domains_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <include layout="@layout/domains_fragments" />
-    </LinearLayout>
-
-    <com.google.android.material.floatingactionbutton.FloatingActionButton
-        android:id="@+id/add_domain_fab"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_margin="16dp"
-        android:src="@drawable/add"
-        android:tint="?attr/fabIconTintColor"
-        android:contentDescription="@string/add_domain" />
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/domains_top_appbar.xml b/app/src/main/res/layout/domains_top_appbar.xml
new file mode 100644 (file)
index 0000000..6efd1d7
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2017,2019-2020 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/domains_coordinatorlayout"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent"
+    android:fitsSystemWindows="true" >
+
+    <!-- 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/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/domains_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <include layout="@layout/domains_fragments" />
+    </LinearLayout>
+
+    <com.google.android.material.floatingactionbutton.FloatingActionButton
+        android:id="@+id/add_domain_fab"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_gravity="bottom|end"
+        android:layout_margin="16dp"
+        android:src="@drawable/add"
+        android:tint="?attr/fabIconTintColor"
+        android:contentDescription="@string/add_domain" />
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/guide_bottom_appbar.xml b/app/src/main/res/layout/guide_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..645d587
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2017,2019-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/guide_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 view pager 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" >
+
+        <!-- `android:layout_weight="1"` makes the view pager fill the rest of the screen. -->
+        <androidx.viewpager.widget.ViewPager
+            android:id="@+id/guide_viewpager"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            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:id="@+id/guide_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <com.google.android.material.tabs.TabLayout
+                android:id="@+id/guide_tablayout"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                app:tabMode="scrollable" />
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/guide_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/guide_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/guide_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index 645d587..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2017,2019-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/guide_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 view pager 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" >
-
-        <!-- `android:layout_weight="1"` makes the view pager fill the rest of the screen. -->
-        <androidx.viewpager.widget.ViewPager
-            android:id="@+id/guide_viewpager"
-            android:layout_width="match_parent"
-            android:layout_height="0dp"
-            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:id="@+id/guide_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <com.google.android.material.tabs.TabLayout
-                android:id="@+id/guide_tablayout"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                app:tabMode="scrollable" />
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/guide_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/guide_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/guide_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index 9724e44..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2017,2019-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/guide_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"` moves the view pager 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:id="@+id/guide_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <com.google.android.material.tabs.TabLayout
-                android:id="@+id/guide_tablayout"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                app:tabMode="scrollable" />
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/guide_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <!-- `android:layout_weight="1"` makes the view pager fill the rest of the screen. -->
-        <androidx.viewpager.widget.ViewPager
-            android:id="@+id/guide_viewpager"
-            android:layout_width="match_parent"
-            android:layout_height="0dp"
-            android:layout_weight="1" />
-    </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/guide_top_appbar.xml b/app/src/main/res/layout/guide_top_appbar.xml
new file mode 100644 (file)
index 0000000..e7331ec
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2017,2019-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/guide_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"` moves the view pager 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:id="@+id/guide_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/guide_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+
+            <com.google.android.material.tabs.TabLayout
+                android:id="@+id/guide_tablayout"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                app:tabMode="scrollable" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <!-- `android:layout_weight="1"` makes the view pager fill the rest of the screen. -->
+        <androidx.viewpager.widget.ViewPager
+            android:id="@+id/guide_viewpager"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/import_export_bottom_appbar.xml b/app/src/main/res/layout/import_export_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..4f45eb1
--- /dev/null
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/import_export_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" >
+
+        <ScrollView
+            android:layout_height="0dp"
+            android:layout_width="match_parent"
+            android:layout_weight="1" >
+
+            <!-- Align the cards vertically. -->
+            <LinearLayout
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                android:orientation="vertical" >
+
+                <!-- The encryption card. -->
+                <androidx.cardview.widget.CardView
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginBottom="5dp"
+                    android:layout_marginStart="10dp"
+                    android:layout_marginEnd="10dp" >
+
+                    <!-- Align the contents of the card vertically. -->
+                    <LinearLayout
+                        android:layout_height="match_parent"
+                        android:layout_width="match_parent"
+                        android:orientation="vertical"
+                        android:layout_marginTop="10dp"
+                        android:layout_marginBottom="20dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginEnd="10dp" >
+
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginBottom="6dp"
+                            android:text="@string/encryption"
+                            android:textSize="25sp"
+                            android:textStyle="bold"
+                            android:textColor="?colorAccent" />
+
+                        <Spinner
+                            android:id="@+id/encryption_spinner"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal" />
+
+                        <!-- The encryption password. -->
+                        <com.google.android.material.textfield.TextInputLayout
+                            android:id="@+id/encryption_password_textinputlayout"
+                            android:layout_height="wrap_content"
+                            android:layout_width="match_parent"
+                            app:passwordToggleEnabled="true" >
+
+                            <com.google.android.material.textfield.TextInputEditText
+                                android:id="@+id/encryption_password_edittext"
+                                android:layout_height="wrap_content"
+                                android:layout_width="match_parent"
+                                android:hint="@string/password"
+                                android:inputType="textPassword"/>
+                        </com.google.android.material.textfield.TextInputLayout>
+
+                        <!-- KitKat password encryption message. -->
+                        <TextView
+                            android:id="@+id/kitkat_password_encryption_textview"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginTop="10dp"
+                            android:text="@string/kitkat_password_encryption_message"
+                            android:textAlignment="center" />
+
+                        <!-- OpenKeychain required message. -->
+                        <TextView
+                            android:id="@+id/openkeychain_required_textview"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginTop="10dp"
+                            android:text="@string/openkeychain_required"
+                            android:textAlignment="center" />
+                    </LinearLayout>
+                </androidx.cardview.widget.CardView>
+
+                <!-- The file location card. -->
+                <androidx.cardview.widget.CardView
+                    android:id="@+id/file_location_cardview"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:layout_marginTop="5dp"
+                    android:layout_marginBottom="5dp"
+                    android:layout_marginStart="10dp"
+                    android:layout_marginEnd="10dp" >
+
+                    <!-- Align the contents of the card vertically. -->
+                    <LinearLayout
+                        android:layout_height="match_parent"
+                        android:layout_width="match_parent"
+                        android:orientation="vertical"
+                        android:layout_marginTop="10dp"
+                        android:layout_marginBottom="20dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginEnd="10dp" >
+
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginBottom="6dp"
+                            android:text="@string/file_location"
+                            android:textSize="25sp"
+                            android:textStyle="bold"
+                            android:textColor="?colorAccent" />
+
+                        <RadioGroup
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:orientation="horizontal" >
+
+                            <RadioButton
+                                android:id="@+id/import_radiobutton"
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:text="@string/import_button"
+                                android:layout_marginEnd="10dp"
+                                android:onClick="onClickRadioButton" />
+
+                            <RadioButton
+                                android:id="@+id/export_radiobutton"
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:text="@string/export"
+                                android:onClick="onClickRadioButton" />
+                        </RadioGroup>
+
+                        <!-- Align the edit text and the select file button horizontally. -->
+                        <LinearLayout
+                            android:id="@+id/file_name_linearlayout"
+                            android:layout_height="wrap_content"
+                            android:layout_width="match_parent"
+                            android:orientation="horizontal"
+                            android:layout_marginTop="10dp">
+
+                            <!-- The text input layout makes the hint float above the edit text. -->
+                            <com.google.android.material.textfield.TextInputLayout
+                                android:layout_height="wrap_content"
+                                android:layout_width="0dp"
+                                android:layout_weight="1" >
+
+                                <!-- `android:inputType="textUri" disables spell check and places an `/` on the main keyboard. -->
+                                <com.google.android.material.textfield.TextInputEditText
+                                    android:id="@+id/file_name_edittext"
+                                    android:layout_height="wrap_content"
+                                    android:layout_width="match_parent"
+                                    android:hint="@string/file_name"
+                                    android:inputType="textMultiLine|textUri" />
+                            </com.google.android.material.textfield.TextInputLayout>
+
+                            <Button
+                                android:id="@+id/browse_button"
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:layout_gravity="center_vertical"
+                                android:text="@string/browse"
+                                android:onClick="browse" />
+                        </LinearLayout>
+
+                        <!-- OpenKeychain import instructions -->
+                        <TextView
+                            android:id="@+id/openkeychain_import_instructions_textview"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_margin="5dp"
+                            android:text="@string/openkeychain_import_instructions"
+                            android:textAlignment="center" />
+
+                        <Button
+                            android:id="@+id/import_export_button"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginTop="10dp"
+                            android:text="@string/import_button"
+                            android:textSize="18sp"
+                            android:onClick="importExport"
+                            app:backgroundTint="?attr/buttonBackgroundColorSelector"
+                            android:textColor="?attr/buttonTextColorSelector" />
+                    </LinearLayout>
+                </androidx.cardview.widget.CardView>
+            </LinearLayout>
+        </ScrollView>
+
+        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
+        <com.google.android.material.appbar.AppBarLayout
+            android:id="@+id/import_export_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/import_export_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/import_export_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/import_export_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index 4f45eb1..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/import_export_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" >
-
-        <ScrollView
-            android:layout_height="0dp"
-            android:layout_width="match_parent"
-            android:layout_weight="1" >
-
-            <!-- Align the cards vertically. -->
-            <LinearLayout
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                android:orientation="vertical" >
-
-                <!-- The encryption card. -->
-                <androidx.cardview.widget.CardView
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:layout_marginTop="10dp"
-                    android:layout_marginBottom="5dp"
-                    android:layout_marginStart="10dp"
-                    android:layout_marginEnd="10dp" >
-
-                    <!-- Align the contents of the card vertically. -->
-                    <LinearLayout
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="vertical"
-                        android:layout_marginTop="10dp"
-                        android:layout_marginBottom="20dp"
-                        android:layout_marginStart="10dp"
-                        android:layout_marginEnd="10dp" >
-
-                        <TextView
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginBottom="6dp"
-                            android:text="@string/encryption"
-                            android:textSize="25sp"
-                            android:textStyle="bold"
-                            android:textColor="?colorAccent" />
-
-                        <Spinner
-                            android:id="@+id/encryption_spinner"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal" />
-
-                        <!-- The encryption password. -->
-                        <com.google.android.material.textfield.TextInputLayout
-                            android:id="@+id/encryption_password_textinputlayout"
-                            android:layout_height="wrap_content"
-                            android:layout_width="match_parent"
-                            app:passwordToggleEnabled="true" >
-
-                            <com.google.android.material.textfield.TextInputEditText
-                                android:id="@+id/encryption_password_edittext"
-                                android:layout_height="wrap_content"
-                                android:layout_width="match_parent"
-                                android:hint="@string/password"
-                                android:inputType="textPassword"/>
-                        </com.google.android.material.textfield.TextInputLayout>
-
-                        <!-- KitKat password encryption message. -->
-                        <TextView
-                            android:id="@+id/kitkat_password_encryption_textview"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginTop="10dp"
-                            android:text="@string/kitkat_password_encryption_message"
-                            android:textAlignment="center" />
-
-                        <!-- OpenKeychain required message. -->
-                        <TextView
-                            android:id="@+id/openkeychain_required_textview"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginTop="10dp"
-                            android:text="@string/openkeychain_required"
-                            android:textAlignment="center" />
-                    </LinearLayout>
-                </androidx.cardview.widget.CardView>
-
-                <!-- The file location card. -->
-                <androidx.cardview.widget.CardView
-                    android:id="@+id/file_location_cardview"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:layout_marginTop="5dp"
-                    android:layout_marginBottom="5dp"
-                    android:layout_marginStart="10dp"
-                    android:layout_marginEnd="10dp" >
-
-                    <!-- Align the contents of the card vertically. -->
-                    <LinearLayout
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="vertical"
-                        android:layout_marginTop="10dp"
-                        android:layout_marginBottom="20dp"
-                        android:layout_marginStart="10dp"
-                        android:layout_marginEnd="10dp" >
-
-                        <TextView
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginBottom="6dp"
-                            android:text="@string/file_location"
-                            android:textSize="25sp"
-                            android:textStyle="bold"
-                            android:textColor="?colorAccent" />
-
-                        <RadioGroup
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:orientation="horizontal" >
-
-                            <RadioButton
-                                android:id="@+id/import_radiobutton"
-                                android:layout_height="wrap_content"
-                                android:layout_width="wrap_content"
-                                android:text="@string/import_button"
-                                android:layout_marginEnd="10dp"
-                                android:onClick="onClickRadioButton" />
-
-                            <RadioButton
-                                android:id="@+id/export_radiobutton"
-                                android:layout_height="wrap_content"
-                                android:layout_width="wrap_content"
-                                android:text="@string/export"
-                                android:onClick="onClickRadioButton" />
-                        </RadioGroup>
-
-                        <!-- Align the edit text and the select file button horizontally. -->
-                        <LinearLayout
-                            android:id="@+id/file_name_linearlayout"
-                            android:layout_height="wrap_content"
-                            android:layout_width="match_parent"
-                            android:orientation="horizontal"
-                            android:layout_marginTop="10dp">
-
-                            <!-- The text input layout makes the hint float above the edit text. -->
-                            <com.google.android.material.textfield.TextInputLayout
-                                android:layout_height="wrap_content"
-                                android:layout_width="0dp"
-                                android:layout_weight="1" >
-
-                                <!-- `android:inputType="textUri" disables spell check and places an `/` on the main keyboard. -->
-                                <com.google.android.material.textfield.TextInputEditText
-                                    android:id="@+id/file_name_edittext"
-                                    android:layout_height="wrap_content"
-                                    android:layout_width="match_parent"
-                                    android:hint="@string/file_name"
-                                    android:inputType="textMultiLine|textUri" />
-                            </com.google.android.material.textfield.TextInputLayout>
-
-                            <Button
-                                android:id="@+id/browse_button"
-                                android:layout_height="wrap_content"
-                                android:layout_width="wrap_content"
-                                android:layout_gravity="center_vertical"
-                                android:text="@string/browse"
-                                android:onClick="browse" />
-                        </LinearLayout>
-
-                        <!-- OpenKeychain import instructions -->
-                        <TextView
-                            android:id="@+id/openkeychain_import_instructions_textview"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_margin="5dp"
-                            android:text="@string/openkeychain_import_instructions"
-                            android:textAlignment="center" />
-
-                        <Button
-                            android:id="@+id/import_export_button"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginTop="10dp"
-                            android:text="@string/import_button"
-                            android:textSize="18sp"
-                            android:onClick="importExport"
-                            app:backgroundTint="?attr/buttonBackgroundColorSelector"
-                            android:textColor="?attr/buttonTextColorSelector" />
-                    </LinearLayout>
-                </androidx.cardview.widget.CardView>
-            </LinearLayout>
-        </ScrollView>
-
-        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
-        <com.google.android.material.appbar.AppBarLayout
-            android:id="@+id/import_export_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/import_export_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/import_export_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/import_export_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index 14ed655..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/import_export_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"` 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:id="@+id/import_export_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/import_export_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <ScrollView
-            android:layout_height="match_parent"
-            android:layout_width="match_parent" >
-
-            <!-- Align the cards vertically. -->
-            <LinearLayout
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                android:orientation="vertical" >
-
-                <!-- The encryption card. -->
-                <androidx.cardview.widget.CardView
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:layout_marginTop="10dp"
-                    android:layout_marginBottom="5dp"
-                    android:layout_marginStart="10dp"
-                    android:layout_marginEnd="10dp" >
-
-                    <!-- Align the contents of the card vertically. -->
-                    <LinearLayout
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="vertical"
-                        android:layout_marginTop="10dp"
-                        android:layout_marginBottom="20dp"
-                        android:layout_marginStart="10dp"
-                        android:layout_marginEnd="10dp" >
-
-                        <TextView
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginBottom="6dp"
-                            android:text="@string/encryption"
-                            android:textSize="25sp"
-                            android:textStyle="bold"
-                            android:textColor="?colorAccent" />
-
-                        <Spinner
-                            android:id="@+id/encryption_spinner"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal" />
-
-                        <!-- The encryption password. -->
-                        <com.google.android.material.textfield.TextInputLayout
-                            android:id="@+id/encryption_password_textinputlayout"
-                            android:layout_height="wrap_content"
-                            android:layout_width="match_parent"
-                            app:passwordToggleEnabled="true" >
-
-                            <com.google.android.material.textfield.TextInputEditText
-                                android:id="@+id/encryption_password_edittext"
-                                android:layout_height="wrap_content"
-                                android:layout_width="match_parent"
-                                android:hint="@string/password"
-                                android:inputType="textPassword"/>
-                        </com.google.android.material.textfield.TextInputLayout>
-
-                        <!-- KitKat password encryption message. -->
-                        <TextView
-                            android:id="@+id/kitkat_password_encryption_textview"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginTop="10dp"
-                            android:text="@string/kitkat_password_encryption_message"
-                            android:textAlignment="center" />
-
-                        <!-- OpenKeychain required message. -->
-                        <TextView
-                            android:id="@+id/openkeychain_required_textview"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginTop="10dp"
-                            android:text="@string/openkeychain_required"
-                            android:textAlignment="center" />
-                    </LinearLayout>
-                </androidx.cardview.widget.CardView>
-
-                <!-- The file location card. -->
-                <androidx.cardview.widget.CardView
-                    android:id="@+id/file_location_cardview"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:layout_marginTop="5dp"
-                    android:layout_marginBottom="5dp"
-                    android:layout_marginStart="10dp"
-                    android:layout_marginEnd="10dp" >
-
-                    <!-- Align the contents of the card vertically. -->
-                    <LinearLayout
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="vertical"
-                        android:layout_marginTop="10dp"
-                        android:layout_marginBottom="20dp"
-                        android:layout_marginStart="10dp"
-                        android:layout_marginEnd="10dp" >
-
-                        <TextView
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginBottom="6dp"
-                            android:text="@string/file_location"
-                            android:textSize="25sp"
-                            android:textStyle="bold"
-                            android:textColor="?colorAccent" />
-
-                        <RadioGroup
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:orientation="horizontal" >
-
-                            <RadioButton
-                                android:id="@+id/import_radiobutton"
-                                android:layout_height="wrap_content"
-                                android:layout_width="wrap_content"
-                                android:text="@string/import_button"
-                                android:layout_marginEnd="10dp"
-                                android:onClick="onClickRadioButton" />
-
-                            <RadioButton
-                                android:id="@+id/export_radiobutton"
-                                android:layout_height="wrap_content"
-                                android:layout_width="wrap_content"
-                                android:text="@string/export"
-                                android:onClick="onClickRadioButton" />
-                        </RadioGroup>
-
-                        <!-- Align the edit text and the select file button horizontally. -->
-                        <LinearLayout
-                            android:id="@+id/file_name_linearlayout"
-                            android:layout_height="wrap_content"
-                            android:layout_width="match_parent"
-                            android:orientation="horizontal"
-                            android:layout_marginTop="10dp">
-
-                            <!-- The text input layout makes the hint float above the edit text. -->
-                            <com.google.android.material.textfield.TextInputLayout
-                                android:layout_height="wrap_content"
-                                android:layout_width="0dp"
-                                android:layout_weight="1" >
-
-                                <!-- `android:inputType="textUri" disables spell check and places an `/` on the main keyboard. -->
-                                <com.google.android.material.textfield.TextInputEditText
-                                    android:id="@+id/file_name_edittext"
-                                    android:layout_height="wrap_content"
-                                    android:layout_width="match_parent"
-                                    android:hint="@string/file_name"
-                                    android:inputType="textMultiLine|textUri" />
-                            </com.google.android.material.textfield.TextInputLayout>
-
-                            <Button
-                                android:id="@+id/browse_button"
-                                android:layout_height="wrap_content"
-                                android:layout_width="wrap_content"
-                                android:layout_gravity="center_vertical"
-                                android:text="@string/browse"
-                                android:onClick="browse" />
-                        </LinearLayout>
-
-                        <!-- OpenKeychain import instructions -->
-                        <TextView
-                            android:id="@+id/openkeychain_import_instructions_textview"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_margin="5dp"
-                            android:text="@string/openkeychain_import_instructions"
-                            android:textAlignment="center" />
-
-                        <Button
-                            android:id="@+id/import_export_button"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:layout_gravity="center_horizontal"
-                            android:layout_marginTop="10dp"
-                            android:text="@string/import_button"
-                            android:textSize="18sp"
-                            android:onClick="importExport"
-                            app:backgroundTint="?attr/buttonBackgroundColorSelector"
-                            android:textColor="?attr/buttonTextColorSelector" />
-                    </LinearLayout>
-                </androidx.cardview.widget.CardView>
-            </LinearLayout>
-        </ScrollView>
-    </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/import_export_top_appbar.xml b/app/src/main/res/layout/import_export_top_appbar.xml
new file mode 100644 (file)
index 0000000..14ed655
--- /dev/null
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/import_export_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"` 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:id="@+id/import_export_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/import_export_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <ScrollView
+            android:layout_height="match_parent"
+            android:layout_width="match_parent" >
+
+            <!-- Align the cards vertically. -->
+            <LinearLayout
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                android:orientation="vertical" >
+
+                <!-- The encryption card. -->
+                <androidx.cardview.widget.CardView
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginBottom="5dp"
+                    android:layout_marginStart="10dp"
+                    android:layout_marginEnd="10dp" >
+
+                    <!-- Align the contents of the card vertically. -->
+                    <LinearLayout
+                        android:layout_height="match_parent"
+                        android:layout_width="match_parent"
+                        android:orientation="vertical"
+                        android:layout_marginTop="10dp"
+                        android:layout_marginBottom="20dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginEnd="10dp" >
+
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginBottom="6dp"
+                            android:text="@string/encryption"
+                            android:textSize="25sp"
+                            android:textStyle="bold"
+                            android:textColor="?colorAccent" />
+
+                        <Spinner
+                            android:id="@+id/encryption_spinner"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal" />
+
+                        <!-- The encryption password. -->
+                        <com.google.android.material.textfield.TextInputLayout
+                            android:id="@+id/encryption_password_textinputlayout"
+                            android:layout_height="wrap_content"
+                            android:layout_width="match_parent"
+                            app:passwordToggleEnabled="true" >
+
+                            <com.google.android.material.textfield.TextInputEditText
+                                android:id="@+id/encryption_password_edittext"
+                                android:layout_height="wrap_content"
+                                android:layout_width="match_parent"
+                                android:hint="@string/password"
+                                android:inputType="textPassword"/>
+                        </com.google.android.material.textfield.TextInputLayout>
+
+                        <!-- KitKat password encryption message. -->
+                        <TextView
+                            android:id="@+id/kitkat_password_encryption_textview"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginTop="10dp"
+                            android:text="@string/kitkat_password_encryption_message"
+                            android:textAlignment="center" />
+
+                        <!-- OpenKeychain required message. -->
+                        <TextView
+                            android:id="@+id/openkeychain_required_textview"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginTop="10dp"
+                            android:text="@string/openkeychain_required"
+                            android:textAlignment="center" />
+                    </LinearLayout>
+                </androidx.cardview.widget.CardView>
+
+                <!-- The file location card. -->
+                <androidx.cardview.widget.CardView
+                    android:id="@+id/file_location_cardview"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:layout_marginTop="5dp"
+                    android:layout_marginBottom="5dp"
+                    android:layout_marginStart="10dp"
+                    android:layout_marginEnd="10dp" >
+
+                    <!-- Align the contents of the card vertically. -->
+                    <LinearLayout
+                        android:layout_height="match_parent"
+                        android:layout_width="match_parent"
+                        android:orientation="vertical"
+                        android:layout_marginTop="10dp"
+                        android:layout_marginBottom="20dp"
+                        android:layout_marginStart="10dp"
+                        android:layout_marginEnd="10dp" >
+
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginBottom="6dp"
+                            android:text="@string/file_location"
+                            android:textSize="25sp"
+                            android:textStyle="bold"
+                            android:textColor="?colorAccent" />
+
+                        <RadioGroup
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:orientation="horizontal" >
+
+                            <RadioButton
+                                android:id="@+id/import_radiobutton"
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:text="@string/import_button"
+                                android:layout_marginEnd="10dp"
+                                android:onClick="onClickRadioButton" />
+
+                            <RadioButton
+                                android:id="@+id/export_radiobutton"
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:text="@string/export"
+                                android:onClick="onClickRadioButton" />
+                        </RadioGroup>
+
+                        <!-- Align the edit text and the select file button horizontally. -->
+                        <LinearLayout
+                            android:id="@+id/file_name_linearlayout"
+                            android:layout_height="wrap_content"
+                            android:layout_width="match_parent"
+                            android:orientation="horizontal"
+                            android:layout_marginTop="10dp">
+
+                            <!-- The text input layout makes the hint float above the edit text. -->
+                            <com.google.android.material.textfield.TextInputLayout
+                                android:layout_height="wrap_content"
+                                android:layout_width="0dp"
+                                android:layout_weight="1" >
+
+                                <!-- `android:inputType="textUri" disables spell check and places an `/` on the main keyboard. -->
+                                <com.google.android.material.textfield.TextInputEditText
+                                    android:id="@+id/file_name_edittext"
+                                    android:layout_height="wrap_content"
+                                    android:layout_width="match_parent"
+                                    android:hint="@string/file_name"
+                                    android:inputType="textMultiLine|textUri" />
+                            </com.google.android.material.textfield.TextInputLayout>
+
+                            <Button
+                                android:id="@+id/browse_button"
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:layout_gravity="center_vertical"
+                                android:text="@string/browse"
+                                android:onClick="browse" />
+                        </LinearLayout>
+
+                        <!-- OpenKeychain import instructions -->
+                        <TextView
+                            android:id="@+id/openkeychain_import_instructions_textview"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_margin="5dp"
+                            android:text="@string/openkeychain_import_instructions"
+                            android:textAlignment="center" />
+
+                        <Button
+                            android:id="@+id/import_export_button"
+                            android:layout_height="wrap_content"
+                            android:layout_width="wrap_content"
+                            android:layout_gravity="center_horizontal"
+                            android:layout_marginTop="10dp"
+                            android:text="@string/import_button"
+                            android:textSize="18sp"
+                            android:onClick="importExport"
+                            app:backgroundTint="?attr/buttonBackgroundColorSelector"
+                            android:textColor="?attr/buttonTextColorSelector" />
+                    </LinearLayout>
+                </androidx.cardview.widget.CardView>
+            </LinearLayout>
+        </ScrollView>
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/logcat_bottom_appbar.xml b/app/src/main/res/layout/logcat_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..e7e4051
--- /dev/null
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/logcat_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" >
+
+        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+            android:id="@+id/logcat_swiperefreshlayout"
+            android:layout_height="0dp"
+            android:layout_width="match_parent"
+            android:layout_weight="1" >
+
+            <ScrollView
+                android:id="@+id/logcat_scrollview"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" >
+
+                <TextView
+                    android:id="@+id/logcat_textview"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:layout_margin="10dp"
+                    android:textIsSelectable="true" />
+            </ScrollView>
+        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+
+        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
+        <com.google.android.material.appbar.AppBarLayout
+            android:id="@+id/logcat_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/logcat_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/logcat_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/logcat_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index e7e4051..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/logcat_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" >
-
-        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
-            android:id="@+id/logcat_swiperefreshlayout"
-            android:layout_height="0dp"
-            android:layout_width="match_parent"
-            android:layout_weight="1" >
-
-            <ScrollView
-                android:id="@+id/logcat_scrollview"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" >
-
-                <TextView
-                    android:id="@+id/logcat_textview"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:layout_margin="10dp"
-                    android:textIsSelectable="true" />
-            </ScrollView>
-        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
-
-        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
-        <com.google.android.material.appbar.AppBarLayout
-            android:id="@+id/logcat_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/logcat_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/logcat_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/logcat_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index 8179fa8..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/logcat_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:id="@+id/logcat_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/logcat_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
-            android:id="@+id/logcat_swiperefreshlayout"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent" >
-
-            <ScrollView
-                android:id="@+id/logcat_scrollview"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" >
-
-                <TextView
-                    android:id="@+id/logcat_textview"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:layout_margin="10dp"
-                    android:textIsSelectable="true" />
-            </ScrollView>
-        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
-    </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/logcat_top_appbar.xml b/app/src/main/res/layout/logcat_top_appbar.xml
new file mode 100644 (file)
index 0000000..8179fa8
--- /dev/null
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/logcat_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:id="@+id/logcat_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/logcat_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+            android:id="@+id/logcat_swiperefreshlayout"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent" >
+
+            <ScrollView
+                android:id="@+id/logcat_scrollview"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" >
+
+                <TextView
+                    android:id="@+id/logcat_textview"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:layout_margin="10dp"
+                    android:textIsSelectable="true" />
+            </ScrollView>
+        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/requests_bottom_appbar.xml b/app/src/main/res/layout/requests_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..79de233
--- /dev/null
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/requests_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"` keeps the content above the app bar layout. -->
+    <LinearLayout
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:orientation="vertical"  >
+
+        <!-- `android:dividerHeight` must be at least `1dp` or the list view is inconsistent in calculating how many bookmarks are displayed. -->
+        <ListView
+            android:id="@+id/requests_listview"
+            android:layout_height="0dp"
+            android:layout_width="match_parent"
+            android:layout_weight="1"
+            android:divider="@color/transparent"
+            android:dividerHeight="1dp" />
+
+        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
+        <com.google.android.material.appbar.AppBarLayout
+            android:id="@+id/requests_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/requests_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/requests_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/requests_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index 79de233..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/requests_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"` keeps the content above the app bar layout. -->
-    <LinearLayout
-        android:layout_height="match_parent"
-        android:layout_width="match_parent"
-        android:orientation="vertical"  >
-
-        <!-- `android:dividerHeight` must be at least `1dp` or the list view is inconsistent in calculating how many bookmarks are displayed. -->
-        <ListView
-            android:id="@+id/requests_listview"
-            android:layout_height="0dp"
-            android:layout_width="match_parent"
-            android:layout_weight="1"
-            android:divider="@color/transparent"
-            android:dividerHeight="1dp" />
-
-        <!-- The app bar theme must be specified here because the activity uses a `NoActionBar` theme. -->
-        <com.google.android.material.appbar.AppBarLayout
-            android:id="@+id/requests_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/requests_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/requests_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/requests_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index 6a7cf46..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/requests_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:id="@+id/requests_appbarlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:background="?android:attr/colorBackground"
-            android:theme="@style/PrivacyBrowserAppBar" >
-
-            <androidx.appcompat.widget.Toolbar
-                android:id="@+id/requests_toolbar"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" />
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <!-- `android:dividerHeight` must be at least `1dp` or the list view is inconsistent in calculating how many bookmarks are displayed. -->
-        <ListView
-            android:id="@+id/requests_listview"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent"
-            android:divider="@color/transparent"
-            android:dividerHeight="1dp" />
-    </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/requests_top_appbar.xml b/app/src/main/res/layout/requests_top_appbar.xml
new file mode 100644 (file)
index 0000000..6a7cf46
--- /dev/null
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2018-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/requests_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:id="@+id/requests_appbarlayout"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            android:background="?android:attr/colorBackground"
+            android:theme="@style/PrivacyBrowserAppBar" >
+
+            <androidx.appcompat.widget.Toolbar
+                android:id="@+id/requests_toolbar"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" />
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <!-- `android:dividerHeight` must be at least `1dp` or the list view is inconsistent in calculating how many bookmarks are displayed. -->
+        <ListView
+            android:id="@+id/requests_listview"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            android:divider="@color/transparent"
+            android:dividerHeight="1dp" />
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_source_bottom_appbar.xml b/app/src/main/res/layout/view_source_bottom_appbar.xml
new file mode 100644 (file)
index 0000000..bb11593
--- /dev/null
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<!-- Setting the layout root to be `focusableInTouchMode` prevents the URL toolbar from stealing focus on launch and opening the keyboard. -->
+<androidx.coordinatorlayout.widget.CoordinatorLayout android:id="@+id/view_source_coordinatorlayout"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent"
+    android:focusable="true"
+    android:focusableInTouchMode="true"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <!-- 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" >
+
+        <!-- `android:layout_weight="1"` causes the swipe refresh layout to fill all the remaining space. -->
+        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+            android:id="@+id/view_source_swiperefreshlayout"
+            android:layout_height="0dp"
+            android:layout_width="match_parent"
+            android:layout_weight="1">
+
+            <ScrollView
+                android:id="@+id/view_source_scrollview"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" >
+
+                <LinearLayout
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:orientation="vertical"
+                    android:layout_margin="10dp" >
+
+                    <!-- Request headers. -->
+                    <TextView
+                        android:id="@+id/request_headers_title_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:text="@string/request_headers"
+                        android:textAlignment="center"
+                        android:textSize="18sp"
+                        android:textColor="?attr/blueTextColor"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:id="@+id/request_headers_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textIsSelectable="true"
+                        android:layout_marginBottom="8dp" />
+
+                    <!-- Response message. -->
+                    <TextView
+                        android:id="@+id/response_message_title_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:text="@string/response_message"
+                        android:textAlignment="center"
+                        android:textSize="18sp"
+                        android:textColor="?attr/blueTextColor"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:id="@+id/response_message_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textIsSelectable="true"
+                        android:layout_marginBottom="8dp" />
+
+                    <!-- Response headers. -->
+                    <!-- The title text is set programatically. -->
+                    <TextView
+                        android:id="@+id/response_headers_title_textivew"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textAlignment="center"
+                        android:textSize="18sp"
+                        android:textColor="?attr/blueTextColor"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:id="@+id/response_headers_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textIsSelectable="true"
+                        android:layout_marginBottom="8dp" />
+
+                    <!-- Response body. -->
+                    <!-- The title text is set programatically. -->
+                    <TextView
+                        android:id="@+id/response_body_title_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textAlignment="center"
+                        android:textSize="18sp"
+                        android:textColor="?attr/blueTextColor"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:id="@+id/response_body_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textIsSelectable="true" />
+                </LinearLayout>
+            </ScrollView>
+        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+
+        <!-- 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/PrivacyBrowserAppBar" >
+
+            <!-- The frame layout allows the toolbar and the progress bar to occupy the same space. -->
+            <FrameLayout
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" >
+
+                <androidx.appcompat.widget.Toolbar
+                    android:id="@+id/view_source_toolbar"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent" />
+
+                <!-- Android automatically uses a different, skinnier drawable with padding for indeterminate horizontal progress bars in API >= 21.
+                    They make this very difficult to override.  https://redmine.stoutner.com/issues/241
+                    `tools:ignore="UnusedAttribute"` removes the lint warning about `progressTint` and `progressBackgroundTint` not applying to API < 21. -->
+                <ProgressBar
+                    android:id="@+id/progress_bar"
+                    style="?android:attr/progressBarStyleHorizontal"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:minHeight="3dp"
+                    android:layout_gravity="bottom"
+                    android:visibility="gone"
+                    tools:ignore="UnusedAttribute" />
+            </FrameLayout>
+        </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/view_source_coordinatorlayout_bottom_appbar.xml b/app/src/main/res/layout/view_source_coordinatorlayout_bottom_appbar.xml
deleted file mode 100644 (file)
index bb11593..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<!-- Setting the layout root to be `focusableInTouchMode` prevents the URL toolbar from stealing focus on launch and opening the keyboard. -->
-<androidx.coordinatorlayout.widget.CoordinatorLayout android:id="@+id/view_source_coordinatorlayout"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_height="match_parent"
-    android:layout_width="match_parent"
-    android:focusable="true"
-    android:focusableInTouchMode="true"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
-
-    <!-- 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" >
-
-        <!-- `android:layout_weight="1"` causes the swipe refresh layout to fill all the remaining space. -->
-        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
-            android:id="@+id/view_source_swiperefreshlayout"
-            android:layout_height="0dp"
-            android:layout_width="match_parent"
-            android:layout_weight="1">
-
-            <ScrollView
-                android:id="@+id/view_source_scrollview"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" >
-
-                <LinearLayout
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:orientation="vertical"
-                    android:layout_margin="10dp" >
-
-                    <!-- Request headers. -->
-                    <TextView
-                        android:id="@+id/request_headers_title_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:text="@string/request_headers"
-                        android:textAlignment="center"
-                        android:textSize="18sp"
-                        android:textColor="?attr/blueTextColor"
-                        android:textStyle="bold" />
-
-                    <TextView
-                        android:id="@+id/request_headers_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textIsSelectable="true"
-                        android:layout_marginBottom="8dp" />
-
-                    <!-- Response message. -->
-                    <TextView
-                        android:id="@+id/response_message_title_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:text="@string/response_message"
-                        android:textAlignment="center"
-                        android:textSize="18sp"
-                        android:textColor="?attr/blueTextColor"
-                        android:textStyle="bold" />
-
-                    <TextView
-                        android:id="@+id/response_message_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textIsSelectable="true"
-                        android:layout_marginBottom="8dp" />
-
-                    <!-- Response headers. -->
-                    <!-- The title text is set programatically. -->
-                    <TextView
-                        android:id="@+id/response_headers_title_textivew"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textAlignment="center"
-                        android:textSize="18sp"
-                        android:textColor="?attr/blueTextColor"
-                        android:textStyle="bold" />
-
-                    <TextView
-                        android:id="@+id/response_headers_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textIsSelectable="true"
-                        android:layout_marginBottom="8dp" />
-
-                    <!-- Response body. -->
-                    <!-- The title text is set programatically. -->
-                    <TextView
-                        android:id="@+id/response_body_title_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textAlignment="center"
-                        android:textSize="18sp"
-                        android:textColor="?attr/blueTextColor"
-                        android:textStyle="bold" />
-
-                    <TextView
-                        android:id="@+id/response_body_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textIsSelectable="true" />
-                </LinearLayout>
-            </ScrollView>
-        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
-
-        <!-- 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/PrivacyBrowserAppBar" >
-
-            <!-- The frame layout allows the toolbar and the progress bar to occupy the same space. -->
-            <FrameLayout
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" >
-
-                <androidx.appcompat.widget.Toolbar
-                    android:id="@+id/view_source_toolbar"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent" />
-
-                <!-- Android automatically uses a different, skinnier drawable with padding for indeterminate horizontal progress bars in API >= 21.
-                    They make this very difficult to override.  https://redmine.stoutner.com/issues/241
-                    `tools:ignore="UnusedAttribute"` removes the lint warning about `progressTint` and `progressBackgroundTint` not applying to API < 21. -->
-                <ProgressBar
-                    android:id="@+id/progress_bar"
-                    style="?android:attr/progressBarStyleHorizontal"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:minHeight="3dp"
-                    android:layout_gravity="bottom"
-                    android:visibility="gone"
-                    tools:ignore="UnusedAttribute" />
-            </FrameLayout>
-        </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/view_source_coordinatorlayout_top_appbar.xml b/app/src/main/res/layout/view_source_coordinatorlayout_top_appbar.xml
deleted file mode 100644 (file)
index 5fd4566..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser 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 Browser 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/>. -->
-
-<!-- Setting the layout root to be `focusableInTouchMode` prevents the URL toolbar from stealing focus on launch and opening the keyboard. -->
-<androidx.coordinatorlayout.widget.CoordinatorLayout
-    android:id="@+id/view_source_coordinatorlayout"
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_height="match_parent"
-    android:layout_width="match_parent"
-    android:focusable="true"
-    android:focusableInTouchMode="true" >
-
-    <!-- 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/PrivacyBrowserAppBar" >
-
-            <!-- The frame layout allows the toolbar and the progress bar to occupy the same space. -->
-            <FrameLayout
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" >
-
-                <androidx.appcompat.widget.Toolbar
-                    android:id="@+id/view_source_toolbar"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent" />
-
-                <!-- Android automatically uses a different, skinnier drawable with padding for indeterminate horizontal progress bars in API >= 21.
-                    They make this very difficult to override.  https://redmine.stoutner.com/issues/241
-                    `tools:ignore="UnusedAttribute"` removes the lint warning about `progressTint` and `progressBackgroundTint` not applying to API < 21. -->
-                <ProgressBar
-                    android:id="@+id/progress_bar"
-                    style="?android:attr/progressBarStyleHorizontal"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:minHeight="3dp"
-                    android:layout_gravity="bottom"
-                    android:visibility="gone"
-                    tools:ignore="UnusedAttribute" />
-            </FrameLayout>
-        </com.google.android.material.appbar.AppBarLayout>
-
-        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
-            android:id="@+id/view_source_swiperefreshlayout"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent">
-
-            <ScrollView
-                android:id="@+id/view_source_scrollview"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent" >
-
-                <LinearLayout
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent"
-                    android:orientation="vertical"
-                    android:layout_margin="10dp" >
-
-                    <!-- Request headers. -->
-                    <TextView
-                        android:id="@+id/request_headers_title_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:text="@string/request_headers"
-                        android:textAlignment="center"
-                        android:textSize="18sp"
-                        android:textColor="?attr/blueTextColor"
-                        android:textStyle="bold" />
-
-                    <TextView
-                        android:id="@+id/request_headers_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textIsSelectable="true"
-                        android:layout_marginBottom="8dp" />
-
-                    <!-- Response message. -->
-                    <TextView
-                        android:id="@+id/response_message_title_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:text="@string/response_message"
-                        android:textAlignment="center"
-                        android:textSize="18sp"
-                        android:textColor="?attr/blueTextColor"
-                        android:textStyle="bold" />
-
-                    <TextView
-                        android:id="@+id/response_message_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textIsSelectable="true"
-                        android:layout_marginBottom="8dp" />
-
-                    <!-- Response headers. -->
-                    <!-- The title text is set programatically. -->
-                    <TextView
-                        android:id="@+id/response_headers_title_textivew"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textAlignment="center"
-                        android:textSize="18sp"
-                        android:textColor="?attr/blueTextColor"
-                        android:textStyle="bold" />
-
-                    <TextView
-                        android:id="@+id/response_headers_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textIsSelectable="true"
-                        android:layout_marginBottom="8dp" />
-
-                    <!-- Response body. -->
-                    <!-- The title text is set programatically. -->
-                    <TextView
-                        android:id="@+id/response_body_title_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textAlignment="center"
-                        android:textSize="18sp"
-                        android:textColor="?attr/blueTextColor"
-                        android:textStyle="bold" />
-
-                    <TextView
-                        android:id="@+id/response_body_textview"
-                        android:layout_height="wrap_content"
-                        android:layout_width="match_parent"
-                        android:textIsSelectable="true" />
-                </LinearLayout>
-            </ScrollView>
-        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
-    </LinearLayout>
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_source_top_appbar.xml b/app/src/main/res/layout/view_source_top_appbar.xml
new file mode 100644 (file)
index 0000000..5fd4566
--- /dev/null
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2017-2021 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser 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 Browser 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/>. -->
+
+<!-- Setting the layout root to be `focusableInTouchMode` prevents the URL toolbar from stealing focus on launch and opening the keyboard. -->
+<androidx.coordinatorlayout.widget.CoordinatorLayout
+    android:id="@+id/view_source_coordinatorlayout"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent"
+    android:focusable="true"
+    android:focusableInTouchMode="true" >
+
+    <!-- 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/PrivacyBrowserAppBar" >
+
+            <!-- The frame layout allows the toolbar and the progress bar to occupy the same space. -->
+            <FrameLayout
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" >
+
+                <androidx.appcompat.widget.Toolbar
+                    android:id="@+id/view_source_toolbar"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent" />
+
+                <!-- Android automatically uses a different, skinnier drawable with padding for indeterminate horizontal progress bars in API >= 21.
+                    They make this very difficult to override.  https://redmine.stoutner.com/issues/241
+                    `tools:ignore="UnusedAttribute"` removes the lint warning about `progressTint` and `progressBackgroundTint` not applying to API < 21. -->
+                <ProgressBar
+                    android:id="@+id/progress_bar"
+                    style="?android:attr/progressBarStyleHorizontal"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:minHeight="3dp"
+                    android:layout_gravity="bottom"
+                    android:visibility="gone"
+                    tools:ignore="UnusedAttribute" />
+            </FrameLayout>
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+            android:id="@+id/view_source_swiperefreshlayout"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent">
+
+            <ScrollView
+                android:id="@+id/view_source_scrollview"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent" >
+
+                <LinearLayout
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:orientation="vertical"
+                    android:layout_margin="10dp" >
+
+                    <!-- Request headers. -->
+                    <TextView
+                        android:id="@+id/request_headers_title_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:text="@string/request_headers"
+                        android:textAlignment="center"
+                        android:textSize="18sp"
+                        android:textColor="?attr/blueTextColor"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:id="@+id/request_headers_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textIsSelectable="true"
+                        android:layout_marginBottom="8dp" />
+
+                    <!-- Response message. -->
+                    <TextView
+                        android:id="@+id/response_message_title_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:text="@string/response_message"
+                        android:textAlignment="center"
+                        android:textSize="18sp"
+                        android:textColor="?attr/blueTextColor"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:id="@+id/response_message_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textIsSelectable="true"
+                        android:layout_marginBottom="8dp" />
+
+                    <!-- Response headers. -->
+                    <!-- The title text is set programatically. -->
+                    <TextView
+                        android:id="@+id/response_headers_title_textivew"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textAlignment="center"
+                        android:textSize="18sp"
+                        android:textColor="?attr/blueTextColor"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:id="@+id/response_headers_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textIsSelectable="true"
+                        android:layout_marginBottom="8dp" />
+
+                    <!-- Response body. -->
+                    <!-- The title text is set programatically. -->
+                    <TextView
+                        android:id="@+id/response_body_title_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textAlignment="center"
+                        android:textSize="18sp"
+                        android:textColor="?attr/blueTextColor"
+                        android:textStyle="bold" />
+
+                    <TextView
+                        android:id="@+id/response_body_textview"
+                        android:layout_height="wrap_content"
+                        android:layout_width="match_parent"
+                        android:textIsSelectable="true" />
+                </LinearLayout>
+            </ScrollView>
+        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+    </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
index af679d73466ec6e7c3043bebd49b24a4944ef39a..c6d2247529ba1d9b6ffa80d303b2ca492bd0c162 100644 (file)
@@ -3,7 +3,7 @@
 <!--
   Copyright © 2016-2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2021 Jose A. León Becerra.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2021 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
index cbd7788a23e9b7df186666875b9f57997943ad78..525cb0f8ac44b1d1a895d21a1767737d6db6e708 100644 (file)
@@ -3,7 +3,7 @@
 <!--
   Copyright © 2015-2021 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019-2020 Kévin LE FLOHIC <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019-2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
 
     <string name="close">Fermer</string>
     <string name="domain">Domaine</string>
     <string name="domain_label">Domaine :</string>
-    <string name="ip_addresses">Addresse(s) IP :</string>
+    <string name="ip_addresses">Addresse(s) IP:</string>
     <string name="issued_to">Delivré à</string>
     <string name="issued_by">Délivré par</string>
-    <string name="common_name">Nom Commun (CN) :</string>
-    <string name="organization">Organisation (O) :</string>
-    <string name="organizational_unit">Unité Organisationelle (OU) :</string>
+    <string name="common_name">Nom courant (CN):</string>
+    <string name="organization">Organisation (O):</string>
+    <string name="organizational_unit">Unité Organisationelle (OU):</string>
     <string name="valid_dates">Dates de validités</string>
-    <string name="start_date">Début :</string>
-    <string name="end_date">Fin :</string>
+    <string name="start_date">Début:</string>
+    <string name="end_date">Fin:</string>
 
     <!-- SSL Certificate Error. -->
     <string name="ssl_certificate_error">Erreur de certificat SSL</string>
     <string name="proceed">Continuer</string>
     <string name="future_certificate">La date de début du certificat est dans le futur</string>
     <string name="expired_certificate">Le certificat a expiré</string>
-    <string name="cn_mismatch">Le nom commun n\'est pas en lien avec le nom d\'hôte</string>
+    <string name="cn_mismatch">Le nom courant n\'est pas en lien avec le nom d\'hôte</string>
     <string name="untrusted">L\'autorité de certification n\'est pas de confiance</string>
     <string name="invalid_date">La date du certificat est invalide</string>
     <string name="invalid_certificate">Le certificat est invalide</string>
         <string name="clear_history">Vider l\'historique</string>
     <string name="open">Ouvrir</string>
     <string name="downloads">Téléchargements</string>
-        <string name="no_file_manager_detected">Le système ne peut pas détecter un gestionnaire de fichiers compatible.</string>
+        <string name="no_file_manager_detected">Le système n\'a pas détecté de gestionnaire de fichiers compatible.</string>
     <string name="settings">Paramètres</string>
     <string name="import_export">Importer/Exporter</string>
     <string name="logcat">Journal système</string>
             <string name="user_agent_safari_on_macos">Safari sous macOS</string>
             <string name="user_agent_custom">Personnalisé</string>
         <string name="swipe_to_refresh_options_menu">Glisser pour actualiser</string>
-        <string name="wide_viewport">Fenêtre large</string>
+        <string name="wide_viewport">Fenêtre de visualisation large</string>
         <string name="display_images">Afficher les images</string>
         <string name="dark_webview">WebView sombre</string>
         <string name="font_size">Police</string>
     <string name="content_data">Données du contenu</string>
     <string name="untrusted_ssl_certificate">Le certificat SSL n\'est pas fiable.</string>
     <string name="load_anyway">Charger quand même</string>
-    <string name="about_view_source">A propos View Source</string>
+    <string name="about_view_source">A propos de Voir Source</string>
     <string name="about_view_source_message">Puisqu\'Android Webview ne permet pas de révêler l\'information source,
         une requête séparée a été effectuée en utilisant les outils sytèmes afin d\'afficher ce qui est présenté à l\'écran
         Il peut donc y avoir des différences entre ces connées et celle utilisée par Webview. Cette limitation sera supprimée lors de la sortie de Privacy Webview 4.x</string>
     <!-- Bookmarks. -->
     <string name="bookmarks">Favoris</string>
     <string name="database_view">Voir base de données</string>
-    <string name="bookmark_opened_in_background">Le signet a été ouvert dans un onglet en arrière-plan.</string>
+    <string name="bookmark_opened_in_background">Le favori a été ouvert dans un onglet en arrière-plan.</string>
     <string name="create_bookmark">Créer un favori</string>
     <string name="create_folder">Créer un dossier</string>
-    <string name="current_bookmark_icon">Icone actuelle</string>
-    <string name="current_folder_icon">Icone actuelle</string>
-    <string name="default_folder_icon">Icone par défaut</string>
-    <string name="webpage_favorite_icon">Icone de la page web courante</string>
+    <string name="current_bookmark_icon">Icône actuelle</string>
+    <string name="current_folder_icon">Icône actuelle</string>
+    <string name="default_folder_icon">Icône par défaut</string>
+    <string name="webpage_favorite_icon">Icône de la page web courante</string>
     <string name="bookmark_name">Nom du favori</string>
     <string name="folder_name">Nom du dossier</string>
     <string name="bookmark_url">Ajouter aux favoris</string>
     <!-- About Activity. -->
     <string name="about_privacy_browser">À propos</string>
     <string name="version">Version</string>
-        <string name="version_code">version du code</string>
+        <string name="version_code">Code de la version</string>
         <string name="hardware">Matériel</string>
             <string name="brand">Marque :</string>
             <string name="manufacturer">Constructeur :</string>
             <string name="ultralist_label">UltraList :</string>
             <string name="ultraprivacy_label">UltraPrivacy :</string>
         <string name="package_signature">Signature de paquets</string>
-            <string name="issuer_dn">Emetteur DN :</string>
-            <string name="subject_dn">Sujet DN :</string>
+            <string name="issuer_dn">DN émetteur :</string>
+            <string name="subject_dn">Dn sujet :</string>
             <string name="certificate_version">Version du certificat :</string>
             <string name="serial_number">Numéro de série :</string>
             <string name="signature_algorithm">Algorithme de chiffrement :</string>
         <string name="fanboys_social_blocking_list">Fanboy’s social blocking list</string>
         <string name="fanboys_social_blocking_list_summary">Bloque les contenus des médias sociaux tiers.</string>
         <string name="ultralist">UltraList</string>
-        <string name="ultralist_summary">UltraList bloque les publicités que EasyList ne bloque pas car cela peut casser les sites Web</string>
+        <string name="ultralist_summary">Bloque les publicités qu\'EasyList ne bloque pas car cela peut casser les sites Web</string>
         <string name="ultraprivacy">UltraPrivacy</string>
-        <string name="ultraprivacy_summary">UltraPrivacy bloque les pisteurs que EasyPrivacy ne bloque pas car cela peut casser les sites Web.</string>
-        <string name="block_all_third_party_requests">Bloquers toutes les requêtes tierces</string>
+        <string name="ultraprivacy_summary">Bloque les pisteurs qu\'EasyPrivacy ne bloque pas car cela peut casser les sites Web.</string>
+        <string name="block_all_third_party_requests">Bloquer toutes les requêtes tierces</string>
         <string name="block_all_third_party_requests_summary">Le blocage de toutes les requêtes tierces augmente la vie privée, mais détruit de nombreux sites Web.</string>
     <string name="url_modification">Modifications d\'URL</string>
         <string name="google_analytics">Google Analytics</string>
         <string name="facebook_click_ids">Facebook Click IDs</string>
         <string name="facebook_click_ids_summary">Supprime “?fbclid=”, “&amp;fbclid=”, “?fbadid=” et “&amp;fbadid=” et tout ce qui suit après ces URLs.</string>
         <string name="twitter_amp_redirects">Twitter AMP</string>
-        <string name="twitter_amp_redirects_summary">Supprimer “?amp=1” et tout ce qui suit après cette URL.</string>
+        <string name="twitter_amp_redirects_summary">Supprime “?amp=1” et tout ce qui suit après cette URL.</string>
     <string name="search">Moteur de Recherche</string>
         <string-array name="search_entries">
             <item>Mojeek</item>
             <item>I2P</item>
             <item>Personnalisé</item>
         </string-array>
-        <string name="no_proxy_enabled">Aucun - Connectez-vous directement à Internet.</string>
-        <string name="tor_enabled">Tor - Connectez-vous via socks://localhost:9050.</string>
-        <string name="tor_enabled_kitkat">Tor - Connectez-vous via http://localhost:8118.</string>
-        <string name="i2p_enabled">I2P - Connectez-vous via http://localhost:4444.</string>
+        <string name="no_proxy_enabled">Aucun - Se connecter directement à Internet.</string>
+        <string name="tor_enabled">Tor - Se connecter via socks://localhost:9050.</string>
+        <string name="tor_enabled_kitkat">Tor - Se connecter via http://localhost:8118.</string>
+        <string name="i2p_enabled">I2P - Se connecter via http://localhost:4444.</string>
         <string name="custom_proxy">Proxy personnalisé</string>
         <string name="proxy_custom_url">URL personnalisée du proxy</string>
     <string name="full_screen">Plein écran</string>
         <string name="full_screen_browsing_mode">Navigation plein écran</string>
-        <string name="full_screen_browsing_mode_summary">Appuyez deux fois pour basculer en mode de navigation en plein écran.</string>
+        <string name="full_screen_browsing_mode_summary">Appuyez deux fois pour basculer en mode plein écran.</string>
         <string name="hide_app_bar">Masquer la barre d\'application</string>
         <string name="hide_app_bar_summary">Masquer la barre d\'applications contenant l\'URL.</string>
     <string name="clear_everything">Tout effacer</string>
         <string name="open_intents_in_new_tab">Intentions dans un nouvel onglet</string>
         <string name="open_intents_in_new_tab_summary">Les intentions sont des liens envoyés à partir d\'autres applications.</string>
         <string name="swipe_to_refresh">Glisser pour rafraîchir</string>
-        <string name="swipe_to_refresh_summary">Certains sites Web ne fonctionnent pas bien "Glissez pour refraîchir" est activé.</string>
+        <string name="swipe_to_refresh_summary">Certains sites Web ne fonctionnent pas bien lorsque "Glisser pour rafraîchir" est activé.</string>
         <string name="download_with_external_app">Téléchargement avec une app externe</string>
         <string name="download_with_external_app_summary">Utiliser une application externe pour télécharger des fichiers.</string>
         <string name="scroll_app_bar">Défilement barre d\'applications</string>
             <item>Sombre</item>
         </string-array>
         <string name="wide_viewport_preference">Large fenêtre</string>
-        <string name="wide_viewport_summary">L\'utilisation d\'une fenêtre d\'affichage large fait que la mise en page de certaines pages Web ressemble davantage au site de bureau.</string>
+        <string name="wide_viewport_summary">L\'utilisation d\'une fenêtre d\'affichage large fait que la mise en page de certaines pages Web ressemble davantage au site sur ordinateur.</string>
         <string name="display_webpage_images">Afficher images Web</string>
-        <string name="display_webpage_images_summary">Désactiver pour conserver la bande passante.</string>
+        <string name="display_webpage_images_summary">Désactiver pour conserver de la bande passante.</string>
 
     <!-- Ad Control. There are no ads in the standard flavor, but these strings must exist because they are referenced in the code. -->
     <string name="ad_consent">Consentement publicitaire</string>
index afe0520891d01af7c0e46427bb3114cc353b7d37..ded459404d8a1cd9a57a995177c96e5ff4557a5b 100644 (file)
@@ -26,8 +26,8 @@ buildscript {
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:7.0.0'
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
+        classpath 'com.android.tools.build:gradle:7.0.2'
+        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
diff --git a/fastlane/metadata/android/en-US/images/promoGraphic.png b/fastlane/metadata/android/en-US/images/promoGraphic.png
deleted file mode 100644 (file)
index 5db0494..0000000
Binary files a/fastlane/metadata/android/en-US/images/promoGraphic.png and /dev/null differ
diff --git a/fastlane/metadata/android/en-US/images/tvBanner.png b/fastlane/metadata/android/en-US/images/tvBanner.png
deleted file mode 100644 (file)
index 0404b7d..0000000
Binary files a/fastlane/metadata/android/en-US/images/tvBanner.png and /dev/null differ