]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Fix a bug that caused the tabs to misbehave if the app theme is different from the...
authorSoren Stoutner <soren@stoutner.com>
Fri, 6 Jan 2023 20:52:07 +0000 (13:52 -0700)
committerSoren Stoutner <soren@stoutner.com>
Fri, 6 Jan 2023 20:52:07 +0000 (13:52 -0700)
21 files changed:
app/src/main/assets/de/about_changelog.html
app/src/main/assets/de/about_licenses.html
app/src/main/assets/en/about_changelog.html
app/src/main/assets/en/about_licenses.html
app/src/main/assets/es/about_changelog.html
app/src/main/assets/es/about_licenses.html
app/src/main/assets/fr/about_changelog.html
app/src/main/assets/fr/about_licenses.html
app/src/main/assets/fr/about_permissions.html
app/src/main/assets/it/about_changelog.html
app/src/main/assets/it/about_licenses.html
app/src/main/assets/pt-rBR/about_changelog.html
app/src/main/assets/pt-rBR/about_licenses.html
app/src/main/assets/ru/about_changelog.html
app/src/main/assets/ru/about_licenses.html
app/src/main/assets/tr/about_changelog.html
app/src/main/assets/tr/about_licenses.html
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
app/src/main/res/values-de/strings.xml
app/src/main/res/values-fr/strings.xml
fastlane/metadata/android/fr-FR/changelogs/64.txt [new file with mode: 0644]

index 7e42e711301786f9fa0c8bbeb7992a20cc2f707a..77ce9c7331c0aba02ca55a506e4fb691b6ca263c 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019-2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019-2023 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   Translation 2018 Stefan Erhardt.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
     </head>
 
     <body>
-        <h3>3.13 (Version Code 64)</h3>
-        <p>30. Dezember 2022 - Mindest-API 23, Ziel-API 33</p>
+        <h3>3.13.1 (Version Code 65)</h3>
+        <p>9. Januar 2023 - Mindest-API 23, Ziel-API 33</p>
+        <ul>
+            <li>Fix <a href="https://redmine.stoutner.com/issues/952">problems with the tabs</a> when the app theme and the OS theme are different.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13/">3.13</a> (Version Code 64)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=f0e2eba964dbe0973dd20d54cc798e2cac85bd09">30. Dezember 2022</a> - Mindest-API 23, Ziel-API 33</p>
         <ul>
             <li>Fehler behoben, der manchmal zum Absturz führte, wenn WebView versuchte, <a href="https://redmine.stoutner.com/issues/930">eine Scroll-Position zu errechnen, wenn keine existierte</a>.</li>
             <li>Fehler behoben, der manchmal zum Absturz führte, wenn WebView versuchte, <a href="https://redmine.stoutner.com/issues/944">den Verlauf zu prüfen, wenn keiner existierte</a>.</li>
index 9e404c052e51ca4e4f196de763bdce24de4d5b63..ee8b1b0aa81bd978c11e1055d9eaff3d5f46399b 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2020 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -31,7 +31,7 @@
 
     <body>
         <h3>Copyright:</h3>
-        <p>Privacy Browser ist copyright 2015-2022 von <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Browser ist copyright 2015-2023 von <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <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.
index 6d915f8152a7ffaa2ed550202c5095943781efe3..c10f6952beb4a2ca7a2b65c1919c6e41654b21c2 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     </head>
 
     <body>
-        <h3>3.13 (version code 64)</h3>
-        <p>30 December 2022 - minimum API 23, target API 33</p>
+        <h3>3.13.1 (version code 65)</h3>
+        <p>9 January 2023 - minimum API 23, target API 33</p>
+        <ul>
+            <li>Fix <a href="https://redmine.stoutner.com/issues/952">problems with the tabs</a> when the app theme and the OS theme are different.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13/">3.13</a> (version code 64)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=f0e2eba964dbe0973dd20d54cc798e2cac85bd09">30 December 2022</a> - minimum API 23, target API 33</p>
         <ul>
             <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/930">calculate the scroll position when it doesn’t exist</a>.</li>
             <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/944">check the history when it doesn’t exist</a>.</li>
index e1528674d5b0819cda8d45b45f7ba633c9d2319c..e5453f9a4a651f4190bc3525edd2c2e3beab1723 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
@@ -28,7 +28,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Browser copyright 2015-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Browser copyright 2015-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <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.
index b6f4d2fcee2a76b4340a06dd4a05404b2831fbd1..2fbdc3d6992dfab1101aaece81c09b3a6a426aad 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2022 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2023 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     </head>
 
     <body>
-        <h3>3.13 (código de versión 64)</h3>
-        <p>30 de diciembre de 2022 - API mínimo 23, API objetivo 33</p>
+        <h3>3.13.1 (código de versión 65)</h3>
+        <p>9 de enero de 2023 - API mínimo 23, API objetivo 33</p>
+        <ul>
+            <li>Solucionar <a href="https://redmine.stoutner.com/issues/952">problemas con las pestañas</a> cuando el tema de la aplicación y el tema del SO son diferentes.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13/">3.13</a> (código de versión 64)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=f0e2eba964dbe0973dd20d54cc798e2cac85bd09">30 de diciembre de 2022</a> - API mínimo 23, API objetivo 33</p>
         <ul>
             <li>Corregir un fallo causado por WebView que a veces intenta <a href="https://redmine.stoutner.com/issues/930">calcular la posición de desplazamiento cuando no existe</a>.</li>
             <li>Corregir un error causado por WebView que a veces intenta <a href="https://redmine.stoutner.com/issues/944">comprobar el historial cuando no existe</a>.</li>
index 15f85cdd306a1e1d50150535134d3780a1acbf3e..0e7173553cea4039e278d1e8a2ccaa12bf60b278 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2017-2020 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Derechos de autor</h3>
-        <p>Navegador Privado tiene derechos de autor 2015-2022 por <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Navegador Privado tiene derechos de autor 2015-2023 por <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>Licencia</h3>
         <p>Navegador Privado está liberado bajo la licencia <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a>.
index 0d86215ca6e9002505c2c5bb3fb88f1ec970248b..cc57048ea8e959bf1123d9e32272a25d48569bce 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019-2022 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019-2023 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     </head>
 
     <body>
-        <h3>3.13 (version du code 64)</h3>
-        <p>30 Décembre 2022 - API minimale : 23, API optimale : 33</p>
-        <ul>
-            <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/930">calculate the scroll position when it doesn’t exist</a>.</li>
-            <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/944">check the history when it doesn’t exist</a>.</li>
-            <li>Run <a href="https://redmine.stoutner.com/issues/939">Clear and Exit</a> when the system back button closes the last tab.</li>
-            <li>Make long-pressing a bookmark folder <a href="https://redmine.stoutner.com/issues/926">open all the bookmarks it contains</a>.</li>
-            <li>Add the ability to <a href="https://redmine.stoutner.com/issues/932">pin the bookmarks drawer</a>.</li>
-            <li>Always display the <a href="https://redmine.stoutner.com/issues/947">highest resolution</a> favorite icon.</li>
-            <li>Add documentation for <a href="https://redmine.stoutner.com/issues/924">DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a>.</li>
-            <li>Fix EasyPrivacy so it doesn’t <a href="https://redmine.stoutner.com/issues/943">unintentionally block</a> all of startpage.com.</li>
-            <li>Fix Fanboy’s Annoyance List so it doesn’t <a href="https://redmine.stoutner.com/issues/936">unintentionally block</a> all resources on shopify.com.</li>
-            <li><a href="https://redmine.stoutner.com/issues/780">Include</a>
-                <a href="https://redmine.stoutner.com/issues/896">several</a>
-                <a href="https://redmine.stoutner.com/issues/883">minor</a>
-                <a href="https://redmine.stoutner.com/issues/781">improvements</a>.</li>
+        <h3>3.13.1 (version du code 65)</h3>
+        <p>9 Janvier 2023 - API minimale : 23, API optimale : 33</p>
+        <ul>
+            <li>Fix <a href="https://redmine.stoutner.com/issues/952">problems with the tabs</a> when the app theme and the OS theme are different.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13/">3.13</a> (version du code 64)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=f0e2eba964dbe0973dd20d54cc798e2cac85bd09">30 Décembre 2022</a> - API minimale : 23, API optimale : 33</p>
+        <ul>
+            <li>Correction d'un crash causé par WebView qui essaie parfois de <a href="https://redmine.stoutner.com/issues/930">calculer la position de scroll quand elle n'existe pas</a>.</li>
+            <li>Correction d'un crash causé par WebView qui essaie parfois de <a href="https://redmine.stoutner.com/issues/944">vérifier l'historique alors qu'il n'existe pas</a>.</li>
+            <li>Lancement de <a href="https://redmine.stoutner.com/issues/939">Nettoyer et Quitter</a> lorsque le bouton retour du système ferme le dernier onglet.</li>
+            <li>Une pression longue sur un dossier de signets <a href="https://redmine.stoutner.com/issues/926">ouvre tous les signets qu'il contient</a>.</li>
+            <li>Ajout de la possibilité <a href="https://redmine.stoutner.com/issues/932">d'épingler le gestionnaire de signets</a>.</li>
+            <li>Affichage permanent de l'icône de favori <a href="https://redmine.stoutner.com/issues/947">à la plus haute résolution</a>.</li>
+            <li>Ajout de documentation pour la permission <a href="https://redmine.stoutner.com/issues/924">DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a>.</li>
+            <li>Correction de EasyPrivacy pour qu'il ne bloque pas <a href="https://redmine.stoutner.com/issues/943">involontairement</a> tout le site startpage.com.</li>
+            <li>Correction de Fanboy’s Annoyance List pour qu'il ne bloque pas <a href="https://redmine.stoutner.com/issues/936">involontairement</a> toutes les ressources sur shopify.com.</li>
+            <li><a href="https://redmine.stoutner.com/issues/780">Inclu</a>
+                <a href="https://redmine.stoutner.com/issues/896">quelques</a>
+                <a href="https://redmine.stoutner.com/issues/883">améliorations</a>
+                <a href="https://redmine.stoutner.com/issues/781">mineures</a>.</li>
             <li>Traduction française mise à jour fournie par <a href="mailto:kevinliste@framalistes.org">Kévin L</a>.</li>
         </ul>
 
index a18cb1bc352e6a6a25f924cf58cef904af2df2e6..2c27098d13a2133f42137fd3bf0c62e4d57e1e71 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019-2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019-2022 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Browser copyright 2015-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Browser copyright 2015-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <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.
index 846a6467dd95775a9174a70f3ff0fbf310bf3d06..9744df9296b7aa0ab25bc7488d9195d845ca3e21 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright 2016-2018,2020-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2018,2020-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019-2023 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
@@ -39,7 +39,6 @@
 
         <h3><a href="https://developer.android.com/about/versions/13/features#runtime-receivers">
             com.stoutner.privacybrowser.<wbr>standard.<wbr>DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a></h3>
-        <p>Automatically added to all apps targeting API >= 33 (Android 13) to prevent other apps from connecting to dynamic receivers without explicit permission.</p>
+        <p>Ajout automatique à toutes les applications ciblant l'API >= 33 (Android 13) pour empêcher les autres applications de se connecter aux destinataires dynamiques sans autorisation explicite.</p>
     </body>
 </html>
-
index 71bdaf8eb234b735097e3a34a9f189c0637a5817..48d3eafb2f422280fee9800168ef5ae15653ce4a 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2022 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2023 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     </head>
 
     <body>
-        <h3>3.13 (versione codice 64)</h3>
-        <p>30 Dicembre 2022 - minima API 23, target API 33</p>
+        <h3>3.13.1 (versione codice 65)</h3>
+        <p>9 Gennaio 2023 - minima API 23, target API 33</p>
+        <ul>
+            <li>Fix <a href="https://redmine.stoutner.com/issues/952">problems with the tabs</a> when the app theme and the OS theme are different.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13/">3.13</a> (versione codice 64)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=f0e2eba964dbe0973dd20d54cc798e2cac85bd09">30 Dicembre 2022</a> - minima API 23, target API 33</p>
         <ul>
             <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/930">calculate the scroll position when it doesn’t exist</a>.</li>
             <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/944">check the history when it doesn’t exist</a>.</li>
index ea88771ad59877b53882047c808455428a8b2e26..4b0c6d9210f93f031638b47560dc438fc77f89de 100644 (file)
@@ -1,7 +1,7 @@
 <!--
-  Copyright 2017-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2017-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2017-2020 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2017-2020,2022 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Browser copyright 2015-2022: <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Browser copyright 2015-2023: <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>Licenza</h3>
         <p>Privacy Browser è rilasciato con <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+ </a>.
index 311e146ba3bfdcafe78f65effc9569c6be6b8fa6..bc6472b70714e2ce8d6c29539e2ae085d75e272d 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2020-2022 Thiago Nazareno Conceição Silva de Jesus <mochileiro2006-trilhas@yahoo.com.br>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
     </head>
 
     <body>
-        <h3>3.13 (código de versão 64)</h3>
-        <p>30 de dezembro de 2022 - minimum API 23, target API 33</p>
+        <h3>3.13.1 (código de versão 65)</h3>
+        <p>9 de janeiro de 2023 - minimum API 23, target API 33</p>
+        <ul>
+            <li>Fix <a href="https://redmine.stoutner.com/issues/952">problems with the tabs</a> when the app theme and the OS theme are different.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13/">3.13</a> (código de versão 64)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=f0e2eba964dbe0973dd20d54cc798e2cac85bd09">30 de dezembro de 2022</a> - minimum API 23, target API 33</p>
         <ul>
             <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/930">calculate the scroll position when it doesn’t exist</a>.</li>
             <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/944">check the history when it doesn’t exist</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-3/">3.3</a> (código da versão 47)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=54153efaffb2447307fbd8be569529d0118b823d">3 January 2020</a> - API mínimo 19, API alvo 29</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=54153efaffb2447307fbd8be569529d0118b823d">3 de janeiro de 2020</a> - API mínimo 19, API alvo 29</p>
         <ul>
             <li>Add support for custom proxies, including <a href="https://redmine.stoutner.com/issues/486">SOCKS proxies</a>,
                 and include an entry for <a href="https://redmine.stoutner.com/issues/355">I2P</a>.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-2-16/">2.16</a> (código da versão 40)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=6fa1563622642855d342cd7bcb523a8c1b6bbc44">31 January 2019</a> - API mínimo 19, API alvo 28</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=6fa1563622642855d342cd7bcb523a8c1b6bbc44">31 de janeiro de 2019</a> - API mínimo 19, API alvo 28</p>
         <ul>
             <li>Fix a bug, introduced in 2.15, that caused <a href="https://redmine.stoutner.com/issues/370">SSL certificate pinning to be ignored</a> in most cases.</li>
             <li>Add <a href="https://redmine.stoutner.com/issues/179">IP</a> <a href="https://redmine.stoutner.com/issues/211">address</a>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-1-14-1/">1.14.1</a> (código da versão 17)</h3>
-        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=5bd318993ebf675433f514dd04fc3e29545c9312">4 January 2017</a> - API mínimo 19, API alvo 25</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=5bd318993ebf675433f514dd04fc3e29545c9312">4 de janeiro de 2017</a> - API mínimo 19, API alvo 25</p>
         <ul>
             <li>Fix a bug that caused Privacy Browser to <a href="https://redmine.stoutner.com/issues/80">crash on some websites</a> when ad blocking was enabled.</li>
         </ul>
index 04be0d6f6c10d5680bb323b48570f651adadea09..21135069cd8d08bc358a018d8f0e2093ec9878d5 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   Translation 2021-2022 Thiago Nazareno Conceição Silva de Jesus <mochileiro2006-trilhas@yahoo.com.br>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -30,7 +30,7 @@
 
     <body>
         <h3>Copyright</h3>
-        <p>Privacy Browser copyright 2015-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Browser copyright 2015-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <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.
index 531be7dc4513996ecc5e79058e51edf96cf95d48..e7a83cf9cae862227030134bdb754ea323ac8849 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     </head>
 
     <body>
-        <h3>3.13 (код версии 64)</h3>
-        <p>30 декабря 2022 года - минимальный API 23, целевой API 33</p>
+        <h3>3.13.1 (код версии 65)</h3>
+        <p>9 января 2023 года - минимальный API 23, целевой API 33</p>
+        <ul>
+            <li>Fix <a href="https://redmine.stoutner.com/issues/952">problems with the tabs</a> when the app theme and the OS theme are different.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13/">3.13</a> (код версии 64)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=f0e2eba964dbe0973dd20d54cc798e2cac85bd09">30 декабря 2022 года</a> - минимальный API 23, целевой API 33</p>
         <ul>
             <li>Исправлен сбой, иногда возникавший после попытки WebView <a href="https://redmine.stoutner.com/issues/930">вычислить позицию прокрутки, когда она не существует</a>.</li>
             <li>Исправлен сбой, иногда возникавший после попытки WebView <a href="https://redmine.stoutner.com/issues/944">проверить историю, когда она не существует</a>.</li>
index 4d4588368caa2322221c113d06b388266dff1106..b0b91fddea85f0223f93b9a1ed380ff65bb2ad5e 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
@@ -28,7 +28,7 @@
 
     <body>
         <h3>Авторские права</h3>
-        <p>Авторские права Privacy Browser 2015-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Авторские права Privacy Browser 2015-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <h3>Лицензия</h3>
         <p>Privacy Browser выпущен под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>. Полный текст лицензии приведен ниже.
index ee2f16d13572ff01cc312aa425d128a5aefd25f9..fcdf0fc72e222603800006fe9c1146a685ade376 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     </head>
 
     <body>
-        <h3>3.13 (version code 64)</h3>
-        <p>30 Aralık 2022 - minimum API 23, target API 33</p>
+        <h3>3.13.1 (version code 65)</h3>
+        <p>9 Ocak 2023 - minimum API 23, target API 33</p>
+        <ul>
+            <li>Fix <a href="https://redmine.stoutner.com/issues/952">problems with the tabs</a> when the app theme and the OS theme are different.</li>
+        </ul>
+
+        <h3><a href="https://www.stoutner.com/privacy-browser-android-3-13/">3.13</a> (version code 64)</h3>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=f0e2eba964dbe0973dd20d54cc798e2cac85bd09">30 Aralık 2022</a> - minimum API 23, target API 33</p>
         <ul>
             <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/930">calculate the scroll position when it doesn’t exist</a>.</li>
             <li>Fix a crash caused by the WebView sometimes trying to <a href="https://redmine.stoutner.com/issues/944">check the history when it doesn’t exist</a>.</li>
index 5137d942e346ed7e4dcb7d8d3ceb61f404927c08..9786536510718d165fce067d8ecb4f9993474561 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
@@ -28,7 +28,7 @@
 
     <body>
         <h3>Telif Hakkı</h3>
-        <p>Privacy Browser telif hakkı 2015-2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
+        <p>Privacy Browser telif hakkı 2015-2023 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.</p>
 
         <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.
index 00a457db3394d8d583164f74175e41cebcf3f441..162a1c8fcee84c3dd5519f10f3c4f9c58519ef8c 100644 (file)
@@ -482,16 +482,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Populate the result launcher activity.  This will no longer be needed once the activity has transitioned to Kotlin.
         resultLauncherActivityHandle = this;
 
-        // Check to see if the activity has been restarted.
-        if (savedInstanceState != null) {
-            // Store the saved instance state variables.
-            bookmarksDrawerPinned = savedInstanceState.getBoolean(BOOKMARKS_DRAWER_PINNED);
-            savedStateArrayList = savedInstanceState.getParcelableArrayList(SAVED_STATE_ARRAY_LIST);
-            savedNestedScrollWebViewStateArrayList = savedInstanceState.getParcelableArrayList(SAVED_NESTED_SCROLL_WEBVIEW_STATE_ARRAY_LIST);
-            savedTabPosition = savedInstanceState.getInt(SAVED_TAB_POSITION);
-            savedProxyMode = savedInstanceState.getString(PROXY_MODE);
-        }
-
         // Initialize the default preference values the first time the program is run.  `false` keeps this command from resetting any current preferences back to default.
         PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
 
@@ -507,6 +497,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Get the theme entry values string array.
         String[] appThemeEntryValuesStringArray = getResources().getStringArray(R.array.app_theme_entry_values);
 
+        // Get the current theme status.
+        int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
+
         // Set the app theme according to the preference.  A switch statement cannot be used because the theme entry values string array is not a compile time constant.
         if (appTheme.equals(appThemeEntryValuesStringArray[1])) {  // The light theme is selected.
             // Apply the light theme.
@@ -524,142 +517,161 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             }
         }
 
-        // Disable screenshots if not allowed.
-        if (!allowScreenshots) {
-            getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
-        }
+        // Do not continue if the app theme is different than the OS theme.  The app always initially starts in the OS theme.
+        // If the user has specified the opposite theme should be used, the app will restart in that mode after the above `setDefaultNightMode()` code processes.  However, the restart is delayed.
+        // If the blacklist coroutine starts below it will continue to run during the restart, which leads to indeterminate behavior, with the system often not knowing how many tabs exist.
+        // See https://redmine.stoutner.com/issues/952.
+        if (appTheme.equals(appThemeEntryValuesStringArray[0]) ||  // The system default theme is used.
+                (appTheme.equals(appThemeEntryValuesStringArray[1]) && currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) ||  // The app is running in day theme as desired.
+                (appTheme.equals(appThemeEntryValuesStringArray[2]) && currentThemeStatus == Configuration.UI_MODE_NIGHT_YES)) {  // The app is running in night theme as desired.
+
+            // Disable screenshots if not allowed.
+            if (!allowScreenshots) {
+                getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
+            }
 
-        // Enable the drawing of the entire webpage.  This makes it possible to save a website image.  This must be done before anything else happens with the WebView.
-        WebView.enableSlowWholeDocumentDraw();
+            // Check to see if the activity has been restarted.
+            if (savedInstanceState != null) {
+                // Store the saved instance state variables.
+                bookmarksDrawerPinned = savedInstanceState.getBoolean(BOOKMARKS_DRAWER_PINNED);
+                savedStateArrayList = savedInstanceState.getParcelableArrayList(SAVED_STATE_ARRAY_LIST);
+                savedNestedScrollWebViewStateArrayList = savedInstanceState.getParcelableArrayList(SAVED_NESTED_SCROLL_WEBVIEW_STATE_ARRAY_LIST);
+                savedTabPosition = savedInstanceState.getInt(SAVED_TAB_POSITION);
+                savedProxyMode = savedInstanceState.getString(PROXY_MODE);
+            }
 
-        // Set the content view according to the position of the app bar.
-        if (bottomAppBar) setContentView(R.layout.main_framelayout_bottom_appbar);
-        else setContentView(R.layout.main_framelayout_top_appbar);
+            // Enable the drawing of the entire webpage.  This makes it possible to save a website image.  This must be done before anything else happens with the WebView.
+            WebView.enableSlowWholeDocumentDraw();
 
-        // Get handles for the views.
-        rootFrameLayout = findViewById(R.id.root_framelayout);
-        drawerLayout = findViewById(R.id.drawerlayout);
-        coordinatorLayout = findViewById(R.id.coordinatorlayout);
-        appBarLayout = findViewById(R.id.appbar_layout);
-        toolbar = findViewById(R.id.toolbar);
-        findOnPageLinearLayout = findViewById(R.id.find_on_page_linearlayout);
-        tabsLinearLayout = findViewById(R.id.tabs_linearlayout);
-        tabLayout = findViewById(R.id.tablayout);
-        swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
-        webViewPager = findViewById(R.id.webviewpager);
-        NavigationView navigationView = findViewById(R.id.navigationview);
-        bookmarksDrawerPinnedImageView = findViewById(R.id.bookmarks_drawer_pinned_imageview);
-        fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
+            // Set the content view according to the position of the app bar.
+            if (bottomAppBar) setContentView(R.layout.main_framelayout_bottom_appbar);
+            else setContentView(R.layout.main_framelayout_top_appbar);
 
-        // Get a handle for the navigation menu.
-        Menu navigationMenu = navigationView.getMenu();
+            // Get handles for the views.
+            rootFrameLayout = findViewById(R.id.root_framelayout);
+            drawerLayout = findViewById(R.id.drawerlayout);
+            coordinatorLayout = findViewById(R.id.coordinatorlayout);
+            appBarLayout = findViewById(R.id.appbar_layout);
+            toolbar = findViewById(R.id.toolbar);
+            findOnPageLinearLayout = findViewById(R.id.find_on_page_linearlayout);
+            tabsLinearLayout = findViewById(R.id.tabs_linearlayout);
+            tabLayout = findViewById(R.id.tablayout);
+            swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
+            webViewPager = findViewById(R.id.webviewpager);
+            NavigationView navigationView = findViewById(R.id.navigationview);
+            bookmarksDrawerPinnedImageView = findViewById(R.id.bookmarks_drawer_pinned_imageview);
+            fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
 
-        // Get handles for the navigation menu items.
-        navigationBackMenuItem = navigationMenu.findItem(R.id.back);
-        navigationForwardMenuItem = navigationMenu.findItem(R.id.forward);
-        navigationHistoryMenuItem = navigationMenu.findItem(R.id.history);
-        navigationRequestsMenuItem = navigationMenu.findItem(R.id.requests);
+            // Get a handle for the navigation menu.
+            Menu navigationMenu = navigationView.getMenu();
 
-        // Listen for touches on the navigation menu.
-        navigationView.setNavigationItemSelectedListener(this);
+            // Get handles for the navigation menu items.
+            navigationBackMenuItem = navigationMenu.findItem(R.id.back);
+            navigationForwardMenuItem = navigationMenu.findItem(R.id.forward);
+            navigationHistoryMenuItem = navigationMenu.findItem(R.id.history);
+            navigationRequestsMenuItem = navigationMenu.findItem(R.id.requests);
 
-        // Get a handle for the app compat delegate.
-        AppCompatDelegate appCompatDelegate = getDelegate();
+            // Listen for touches on the navigation menu.
+            navigationView.setNavigationItemSelectedListener(this);
 
-        // Set the support action bar.
-        appCompatDelegate.setSupportActionBar(toolbar);
+            // Get a handle for the app compat delegate.
+            AppCompatDelegate appCompatDelegate = getDelegate();
 
-        // Get a handle for the action bar.
-        actionBar = appCompatDelegate.getSupportActionBar();
+            // Set the support action bar.
+            appCompatDelegate.setSupportActionBar(toolbar);
 
-        // Remove the incorrect lint warning below that the action bar might be null.
-        assert actionBar != null;
+            // Get a handle for the action bar.
+            actionBar = appCompatDelegate.getSupportActionBar();
 
-        // Add the custom layout, which shows the URL text bar.
-        actionBar.setCustomView(R.layout.url_app_bar);
-        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+            // Remove the incorrect lint warning below that the action bar might be null.
+            assert actionBar != null;
 
-        // Get handles for the views in the URL app bar.
-        urlRelativeLayout = findViewById(R.id.url_relativelayout);
-        urlEditText = findViewById(R.id.url_edittext);
+            // Add the custom layout, which shows the URL text bar.
+            actionBar.setCustomView(R.layout.url_app_bar);
+            actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
 
-        // Create the hamburger icon at the start of the AppBar.
-        actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_navigation_drawer, R.string.close_navigation_drawer);
+            // Get handles for the views in the URL app bar.
+            urlRelativeLayout = findViewById(R.id.url_relativelayout);
+            urlEditText = findViewById(R.id.url_edittext);
 
-        // Initially disable the sliding drawers.  They will be enabled once the blocklists are loaded.
-        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
+            // Create the hamburger icon at the start of the AppBar.
+            actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_navigation_drawer, R.string.close_navigation_drawer);
 
-        // Initially hide the user interface so that only the blocklist loading screen is shown (if reloading).
-        drawerLayout.setVisibility(View.GONE);
+            // Initially disable the sliding drawers.  They will be enabled once the blocklists are loaded.
+            drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
 
-        // Initialize the web view pager adapter.
-        webViewPagerAdapter = new WebViewPagerAdapter(getSupportFragmentManager());
+            // Initially hide the user interface so that only the blocklist loading screen is shown (if reloading).
+            drawerLayout.setVisibility(View.GONE);
 
-        // Set the pager adapter on the web view pager.
-        webViewPager.setAdapter(webViewPagerAdapter);
+            // Initialize the web view pager adapter.
+            webViewPagerAdapter = new WebViewPagerAdapter(getSupportFragmentManager());
 
-        // Store up to 100 tabs in memory.
-        webViewPager.setOffscreenPageLimit(100);
+            // Set the pager adapter on the web view pager.
+            webViewPager.setAdapter(webViewPagerAdapter);
 
-        // Instantiate the helpers.
-        bookmarksDatabaseHelper = new BookmarksDatabaseHelper(this);
-        domainsDatabaseHelper = new DomainsDatabaseHelper(this);
-        proxyHelper = new ProxyHelper();
+            // Store up to 100 tabs in memory.
+            webViewPager.setOffscreenPageLimit(100);
 
-        // Update the bookmarks drawer pinned image view.
-        updateBookmarksDrawerPinnedImageView();
+            // Instantiate the helpers.
+            bookmarksDatabaseHelper = new BookmarksDatabaseHelper(this);
+            domainsDatabaseHelper = new DomainsDatabaseHelper(this);
+            proxyHelper = new ProxyHelper();
 
-        // Initialize the app.
-        initializeApp();
+            // Update the bookmarks drawer pinned image view.
+            updateBookmarksDrawerPinnedImageView();
 
-        // Apply the app settings from the shared preferences.
-        applyAppSettings();
+            // Initialize the app.
+            initializeApp();
 
-        // Control what the system back command does.
-        OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(true) {
-            @Override
-            public void handleOnBackPressed() {
-                // Process the different back options.
-                if (drawerLayout.isDrawerVisible(GravityCompat.START)) {  // The navigation drawer is open.
-                    // Close the navigation drawer.
-                    drawerLayout.closeDrawer(GravityCompat.START);
-                } else if (drawerLayout.isDrawerVisible(GravityCompat.END)){  // The bookmarks drawer is open.
-                    // close the bookmarks drawer.
-                    drawerLayout.closeDrawer(GravityCompat.END);
-                } else if (displayingFullScreenVideo) {  // A full screen video is shown.
-                    // Exit the full screen video.
-                    exitFullScreenVideo();
-                    // It shouldn't be possible for the currentWebView to be null, but crash logs indicate it sometimes happens.
-                } else if ((currentWebView != null) && (currentWebView.canGoBack())) {  // There is at least one item in the current WebView history.
-                    // Get the current web back forward list.
-                    WebBackForwardList webBackForwardList = currentWebView.copyBackForwardList();
-
-                    // Get the previous entry URL.
-                    String previousUrl = webBackForwardList.getItemAtIndex(webBackForwardList.getCurrentIndex() - 1).getUrl();
-
-                    // Apply the domain settings.
-                    applyDomainSettings(currentWebView, previousUrl, false, false, false);
-
-                    // Go back.
-                    currentWebView.goBack();
-                } else if (tabLayout.getTabCount() > 1) {  // There are at least two tabs.
-                    // Close the current tab.
-                    closeCurrentTab();
-                } else {  // There isn't anything to do in Privacy Browser.
-                    // Run clear and exit.
-                    clearAndExit();
+            // Apply the app settings from the shared preferences.
+            applyAppSettings();
+
+            // Control what the system back command does.
+            OnBackPressedCallback onBackPressedCallback = new OnBackPressedCallback(true) {
+                @Override
+                public void handleOnBackPressed() {
+                    // Process the different back options.
+                    if (drawerLayout.isDrawerVisible(GravityCompat.START)) {  // The navigation drawer is open.
+                        // Close the navigation drawer.
+                        drawerLayout.closeDrawer(GravityCompat.START);
+                    } else if (drawerLayout.isDrawerVisible(GravityCompat.END)) {  // The bookmarks drawer is open.
+                        // close the bookmarks drawer.
+                        drawerLayout.closeDrawer(GravityCompat.END);
+                    } else if (displayingFullScreenVideo) {  // A full screen video is shown.
+                        // Exit the full screen video.
+                        exitFullScreenVideo();
+                        // It shouldn't be possible for the currentWebView to be null, but crash logs indicate it sometimes happens.
+                    } else if ((currentWebView != null) && (currentWebView.canGoBack())) {  // There is at least one item in the current WebView history.
+                        // Get the current web back forward list.
+                        WebBackForwardList webBackForwardList = currentWebView.copyBackForwardList();
+
+                        // Get the previous entry URL.
+                        String previousUrl = webBackForwardList.getItemAtIndex(webBackForwardList.getCurrentIndex() - 1).getUrl();
+
+                        // Apply the domain settings.
+                        applyDomainSettings(currentWebView, previousUrl, false, false, false);
+
+                        // Go back.
+                        currentWebView.goBack();
+                    } else if (tabLayout.getTabCount() > 1) {  // There are at least two tabs.
+                        // Close the current tab.
+                        closeCurrentTab();
+                    } else {  // There isn't anything to do in Privacy Browser.
+                        // Run clear and exit.
+                        clearAndExit();
+                    }
                 }
-            }
-        };
+            };
 
-        // Register the on back pressed callback.
-        getOnBackPressedDispatcher().addCallback(this, onBackPressedCallback);
+            // Register the on back pressed callback.
+            getOnBackPressedDispatcher().addCallback(this, onBackPressedCallback);
 
-        // Instantiate the populate blocklists coroutine.
-        PopulateBlocklistsCoroutine populateBlocklistsCoroutine = new PopulateBlocklistsCoroutine(this);
+            // Instantiate the populate blocklists coroutine.
+            PopulateBlocklistsCoroutine populateBlocklistsCoroutine = new PopulateBlocklistsCoroutine(this);
 
-        // Populate the blocklists.
-        populateBlocklistsCoroutine.populateBlocklists(this);
+            // Populate the blocklists.
+            populateBlocklistsCoroutine.populateBlocklists(this);
+        }
     }
 
     @Override
@@ -809,21 +821,23 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Run the default commands.
         super.onStart();
 
-        // Resume any WebViews.
-        for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
-            // Get the WebView tab fragment.
-            WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
+        // Resume any WebViews if the pager adapter exists.  If the app is restarting to change the initial app theme it won't have been populated yet.
+        if (webViewPagerAdapter != null) {
+            for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
+                // Get the WebView tab fragment.
+                WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
 
-            // Get the fragment view.
-            View fragmentView = webViewTabFragment.getView();
+                // Get the fragment view.
+                View fragmentView = webViewTabFragment.getView();
 
-            // Only resume the WebViews if they exist (they won't when the app is first created).
-            if (fragmentView != null) {
-                // Get the nested scroll WebView from the tab fragment.
-                NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
+                // Only resume the WebViews if they exist (they won't when the app is first created).
+                if (fragmentView != null) {
+                    // Get the nested scroll WebView from the tab fragment.
+                    NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
 
-                // Resume the nested scroll WebView.
-                nestedScrollWebView.onResume();
+                    // Resume the nested scroll WebView.
+                    nestedScrollWebView.onResume();
+                }
             }
         }
 
@@ -868,20 +882,24 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Run the default commands.
         super.onStop();
 
-        for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
-            // Get the WebView tab fragment.
-            WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
+        // Only pause the WebViews if the pager adapter is not null, which is the case if the app is restarting to change the initial app theme.
+        if (webViewPagerAdapter != null) {
+            // Pause each web view.
+            for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
+                // Get the WebView tab fragment.
+                WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
 
-            // Get the fragment view.
-            View fragmentView = webViewTabFragment.getView();
+                // Get the fragment view.
+                View fragmentView = webViewTabFragment.getView();
 
-            // Only pause the WebViews if they exist (they won't when the app is first created).
-            if (fragmentView != null) {
-                // Get the nested scroll WebView from the tab fragment.
-                NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
+                // Only pause the WebViews if they exist (they won't when the app is first created).
+                if (fragmentView != null) {
+                    // Get the nested scroll WebView from the tab fragment.
+                    NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
 
-                // Pause the nested scroll WebView.
-                nestedScrollWebView.onPause();
+                    // Pause the nested scroll WebView.
+                    nestedScrollWebView.onPause();
+                }
             }
         }
 
@@ -896,44 +914,47 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Run the default commands.
         super.onSaveInstanceState(savedInstanceState);
 
-        // Create the saved state array lists.
-        ArrayList<Bundle> savedStateArrayList = new ArrayList<>();
-        ArrayList<Bundle> savedNestedScrollWebViewStateArrayList = new ArrayList<>();
+        // Only save the instance state if the WebView pager adapter is not null, which will be the case if the app is restarting to change the initial app theme.
+        if (webViewPagerAdapter != null) {
+            // Create the saved state array lists.
+            ArrayList<Bundle> savedStateArrayList = new ArrayList<>();
+            ArrayList<Bundle> savedNestedScrollWebViewStateArrayList = new ArrayList<>();
 
-        // Get the URLs from each tab.
-        for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
-            // Get the WebView tab fragment.
-            WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
+            // Get the URLs from each tab.
+            for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
+                // Get the WebView tab fragment.
+                WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
 
-            // Get the fragment view.
-            View fragmentView = webViewTabFragment.getView();
+                // Get the fragment view.
+                View fragmentView = webViewTabFragment.getView();
 
-            if (fragmentView != null) {
-                // Get the nested scroll WebView from the tab fragment.
-                NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
+                if (fragmentView != null) {
+                    // Get the nested scroll WebView from the tab fragment.
+                    NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
 
-                // Create saved state bundle.
-                Bundle savedStateBundle = new Bundle();
+                    // Create saved state bundle.
+                    Bundle savedStateBundle = new Bundle();
 
-                // Get the current states.
-                nestedScrollWebView.saveState(savedStateBundle);
-                Bundle savedNestedScrollWebViewStateBundle = nestedScrollWebView.saveNestedScrollWebViewState();
+                    // Get the current states.
+                    nestedScrollWebView.saveState(savedStateBundle);
+                    Bundle savedNestedScrollWebViewStateBundle = nestedScrollWebView.saveNestedScrollWebViewState();
 
-                // Store the saved states in the array lists.
-                savedStateArrayList.add(savedStateBundle);
-                savedNestedScrollWebViewStateArrayList.add(savedNestedScrollWebViewStateBundle);
+                    // Store the saved states in the array lists.
+                    savedStateArrayList.add(savedStateBundle);
+                    savedNestedScrollWebViewStateArrayList.add(savedNestedScrollWebViewStateBundle);
+                }
             }
-        }
 
-        // Get the current tab position.
-        int currentTabPosition = tabLayout.getSelectedTabPosition();
+            // Get the current tab position.
+            int currentTabPosition = tabLayout.getSelectedTabPosition();
 
-        // Store the saved states in the bundle.
-        savedInstanceState.putBoolean(BOOKMARKS_DRAWER_PINNED, bookmarksDrawerPinned);
-        savedInstanceState.putString(PROXY_MODE, proxyMode);
-        savedInstanceState.putParcelableArrayList(SAVED_STATE_ARRAY_LIST, savedStateArrayList);
-        savedInstanceState.putParcelableArrayList(SAVED_NESTED_SCROLL_WEBVIEW_STATE_ARRAY_LIST, savedNestedScrollWebViewStateArrayList);
-        savedInstanceState.putInt(SAVED_TAB_POSITION, currentTabPosition);
+            // Store the saved states in the bundle.
+            savedInstanceState.putBoolean(BOOKMARKS_DRAWER_PINNED, bookmarksDrawerPinned);
+            savedInstanceState.putString(PROXY_MODE, proxyMode);
+            savedInstanceState.putParcelableArrayList(SAVED_STATE_ARRAY_LIST, savedStateArrayList);
+            savedInstanceState.putParcelableArrayList(SAVED_NESTED_SCROLL_WEBVIEW_STATE_ARRAY_LIST, savedNestedScrollWebViewStateArrayList);
+            savedInstanceState.putInt(SAVED_TAB_POSITION, currentTabPosition);
+        }
     }
 
     @Override
@@ -2261,7 +2282,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         super.onPostCreate(savedInstanceState);
 
         // Sync the state of the DrawerToggle after the default `onRestoreInstanceState()` has finished.  This creates the navigation drawer icon.
-        actionBarDrawerToggle.syncState();
+        // If the app is restarting to change the app theme the action bar drawer toggle will not yet be populated.
+        if (actionBarDrawerToggle != null)
+            actionBarDrawerToggle.syncState();
     }
 
     @Override
index bc7ceab0acc7cc308ee769824f46f04e91ec5736..be02c677a3c3212b19ae97dbe7436c32191dad80 100644 (file)
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019-2022 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019-2023 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   Translation 2018 Stefan Erhardt.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
@@ -46,6 +46,7 @@
     <string name="form_data_deleted">Formulardaten gelöscht</string>
     <string name="open_navigation_drawer">Navigationspanel öffnen</string>
     <string name="close_navigation_drawer">Navigationspanel schließen</string>
+    <string name="pin_drawer">Menü anpinnen</string>
     <string name="unrecognized_url">Unbekannte URL:</string>
     <string name="add_tab">Tab hinzufügen</string>
     <string name="close_tab">Tab schließen</string>
index b7aba5399f99ff726ac5044becbb507ed39e8f7d..fec22646d4e0ec3320f36ad9faf70d8e3ab1dd1c 100644 (file)
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2015-2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2015-2023 Soren Stoutner <soren@stoutner.com>.
 
-  Translation 2019-2021 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+  Translation 2019-2023 Kévin L. <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     <string name="export">Exporter</string>
     <string name="import_button">Importer</string>  <!-- `import` is a reserved word and cannot be used as the name. -->
     <string name="decrypt">Déchiffrer</string>
+    <string name="privacy_browser_settings_pbs">Privacy Browser Paramètres %1$s.pbs</string>
+    <string name="privacy_browser_settings_pbs_aes">Privacy Browser Paramètres %1$s.pbs.aes</string>
     <string name="export_successful">Export effectué.</string>
     <string name="export_failed">L\'export a échoué : %1$s</string>
     <string name="import_failed">L\'import a échoué : %1$s</string>
diff --git a/fastlane/metadata/android/fr-FR/changelogs/64.txt b/fastlane/metadata/android/fr-FR/changelogs/64.txt
new file mode 100644 (file)
index 0000000..c4d1d9c
--- /dev/null
@@ -0,0 +1,11 @@
+• Correction d'un crash causé par WebView qui essaie parfois de calculer la position de scroll quand elle n'existe pas.
+• Correction d'un crash causé par WebView qui essaie parfois de vérifier l'historique alors qu'il n'existe pas.
+• Lancement de Nettoyer et Quitter lorsque le bouton retour du système ferme le dernier onglet.
+• Une pression longue sur un dossier de signets ouvre tous les signets qu'il contient.
+• Ajout de la possibilité d'épingler le gestionnaire de signets.
+• Affichage permanent de l'icône de favori à la plus haute résolution.
+• Ajout de documentation pour la permission DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION.
+• Correction de EasyPrivacy pour qu'il ne bloque pas involontairement tout le site startpage.com.
+• Correction de Fanboy’s Annoyance List pour qu'il ne bloque pas involontairement toutes les ressources sur shopify.com.
+• Inclu quelques améliorations mineures.
+• Traduction française mise à jour fournie par Kévin L.
\ No newline at end of file