]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Bump the minimum API to 26. https://redmine.stoutner.com/issues/1163
authorSoren Stoutner <soren@stoutner.com>
Tue, 27 Feb 2024 21:19:15 +0000 (14:19 -0700)
committerSoren Stoutner <soren@stoutner.com>
Tue, 27 Feb 2024 21:19:15 +0000 (14:19 -0700)
63 files changed:
app/build.gradle
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/filterlists/easyprivacy.txt
app/src/main/assets/fr/about_changelog.html
app/src/main/assets/fr/about_licenses.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/shared_images/subtitles.svg [deleted file]
app/src/main/assets/tr/about_changelog.html
app/src/main/assets/tr/about_licenses.html
app/src/main/assets/zh-rCN/about_changelog.html
app/src/main/assets/zh-rCN/about_licenses.html
app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.kt
app/src/main/java/com/stoutner/privacybrowser/activities/LogcatActivity.kt
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.kt
app/src/main/java/com/stoutner/privacybrowser/activities/ViewHeadersActivity.kt
app/src/main/java/com/stoutner/privacybrowser/coroutines/SaveAboutVersionImageCoroutine.kt
app/src/main/java/com/stoutner/privacybrowser/coroutines/SaveUrlCoroutine.kt
app/src/main/java/com/stoutner/privacybrowser/coroutines/SaveWebpageImageCoroutine.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/AboutVersionFragment.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt
app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt
app/src/main/java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.kt
app/src/main/res/drawable/about.xml [deleted file]
app/src/main/res/drawable/about_blue.xml
app/src/main/res/drawable/clear_form_data_disabled.xml [deleted file]
app/src/main/res/drawable/clear_form_data_enabled.xml [deleted file]
app/src/main/res/drawable/form_data_disabled.xml [deleted file]
app/src/main/res/drawable/form_data_enabled.xml [deleted file]
app/src/main/res/drawable/move_to_folder.xml [deleted file]
app/src/main/res/layout/domain_settings_fragment.xml
app/src/main/res/layout/edit_bookmark_databaseview_dialog.xml
app/src/main/res/layout/edit_bookmark_folder_databaseview_dialog.xml
app/src/main/res/layout/url_app_bar.xml
app/src/main/res/menu/bookmarks_context_menu.xml
app/src/main/res/menu/bookmarks_databaseview_context_menu.xml
app/src/main/res/menu/domains_options_menu.xml
app/src/main/res/menu/view_headers_options_menu.xml
app/src/main/res/menu/webview_navigation_menu_bottom_appbar.xml
app/src/main/res/menu/webview_navigation_menu_top_appbar.xml
app/src/main/res/menu/webview_options_menu.xml
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-fr/strings.xml
app/src/main/res/values-it/strings.xml
app/src/main/res/values-pt-rBR/strings.xml
app/src/main/res/values-ru/strings.xml
app/src/main/res/values-tr/strings.xml
app/src/main/res/values-zh-rCN/strings.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/preferences.xml
fastlane/metadata/android/de-DE/changelogs/73.txt [new file with mode: 0644]

index 9dc56232881259c88ffcc01cdb08e6e703859975..0a8c3a725417a70b742a2226788608b479a9671c 100644 (file)
@@ -26,7 +26,7 @@ android {
     compileSdk 34
 
     defaultConfig {
-        minSdk 24
+        minSdk 26
         targetSdk 34
         versionCode 73
         versionName "3.17"
index 73f95de543fcd1b99545450d6bf40ff24b80cda8..7374c44d04c77501b4fd3557bd2a2a1672441fb5 100644 (file)
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (Version Code 73)</h3>
-        <p>12. Februar 2024 - Mindest-API 24, Ziel-API 34</p>
-        <ul>
-            <li>Expand the <a href="https://redmine.stoutner.com/issues/717">download provider options</a> to be Privacy Browser, Android’s download manager, and an external app.</li>
-            <li>Remove <a href="https://redmine.stoutner.com/issues/1074">wasted space</a> between the navigation drawer icon and the URL bar.</li>
-            <li>Add a <a href="https://redmine.stoutner.com/issues/144">scroll to bottom/top entry</a> in the navigation menu.</li>
-            <li>Add an option to <a href="https://redmine.stoutner.com/issues/1073">display under camera cutouts</a> in full-screen browsing mode.</li>
-            <li>Fix a crash caused by a <a href="https://redmine.stoutner.com/issues/1136">tab sometimes being created without a corresponding page</a>.</li>
-            <li>Fix a rare problem caused by the <a href="https://redmine.stoutner.com/issues/1134">incorrect page being set as active</a> after the creation of a new tab.</li>
-            <li>Fix the <a href="https://redmine.stoutner.com/issues/747">updating of favorite icons</a> when navigating history.</li>
-            <li>Change the default for <a href="https://redmine.stoutner.com/issues/1130">scrolling the app bar to false</a> on new installs.</li>
-            <li>Make several <a href="https://redmine.stoutner.com/issues/1156">small</a>
-                <a href="https://redmine.stoutner.com/issues/1070">user</a>
-                <a href="https://redmine.stoutner.com/issues/1140">interface</a>
-                <a href="https://redmine.stoutner.com/issues/1143">improvements</a>.</li>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12. Februar 2024</a> - Mindest-API 24, Ziel-API 34</p>
+        <ul>
+            <li>Optionen für die <a href="https://redmine.stoutner.com/issues/717">Download Provider</a> erweitert, sodass nun Privacy Browser, Androids Download Manager oder eine externe App gewählt werden kann.</li>
+            <li><a href="https://redmine.stoutner.com/issues/1074">Verschwendeter Platz</a> zwischen dem Navigations-Menü-Icon und der URL-Leiste entfernt.</li>
+            <li>Neuer Eintrag für <a href="https://redmine.stoutner.com/issues/144">"Nach oben/unten scrollen"</a> im Navigations-Menü hinzugefügt.</li>
+            <li>Option für <a href="https://redmine.stoutner.com/issues/1073">Anzeige unter Kamera-Ausschnitt</a> im Vollbild-Modus hinzugefügt.</li>
+            <li>Fehler behoben, durch den gelegentlich <a href="https://redmine.stoutner.com/issues/1136">Tabs ohne entsprechende Seiten</a> geöffnet wurden.</li>
+            <li>Selten auftretender Fehler behoben, durch welchen nach der Erstellung neuer Tabs <a href="https://redmine.stoutner.com/issues/1134">falsche Seiten als aktiv gesetzt</a> wurden.</li>
+            <li>Fehler beim <a href="https://redmine.stoutner.com/issues/747">Aktualisieren von Favoriten-Icons</a> beim Navigieren im Verlauf behoben.</li>
+            <li>Vorgabe für das <a href="https://redmine.stoutner.com/issues/1130">Scrollen der App-Leiste</a> bei Neu-Installation deaktiviert.</li>
+            <li>Diverse <a href="https://redmine.stoutner.com/issues/1156">kleine</a>
+                <a href="https://redmine.stoutner.com/issues/1070">Verbesserungen</a>
+                <a href="https://redmine.stoutner.com/issues/1140">an der Benutzer-</a><a href="https://redmine.stoutner.com/issues/1143">Oberfläche</a>.</li>
             <li>Aktualisierte deutsche Übersetzung von Bernhard G. Keller.</li>
         </ul>
 
index 124a42946233e797347173985515bd2dea4c18f3..80a880036bc00e7f654d3637a23e1f1aa217b8cf 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
index 8ef5191febe213890b1ca86a5c9d74d37b68aa74..5f4d58c0f168109f7a8c5de23aac2833af24d7b2 100644 (file)
@@ -29,7 +29,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (version code 73)</h3>
-        <p>12 February 2024 - minimum API 24, target API 34</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12 February 2024</a> - minimum API 24, target API 34</p>
         <ul>
             <li>Expand the <a href="https://redmine.stoutner.com/issues/717">download provider options</a> to be Privacy Browser, Android’s download manager, and an external app.</li>
             <li>Remove <a href="https://redmine.stoutner.com/issues/1074">wasted space</a> between the navigation drawer icon and the URL bar.</li>
index 03a1b58b08b9a5c646b73613681ea76d2429b9d2..57bdc70d3e487fb7b49a8cb0456a869d8976b587 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
index 23958705b770046f48fd0d2d2e54bee60c9d8e4c..3ea2ac19b3c73a1ecf8bbc2143a6bec097b252e6 100644 (file)
@@ -31,7 +31,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (código de versión 73)</h3>
-        <p>12 de febrero de 2024 - API mínimo 24, API objetivo 34</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12 de febrero de 2024</a> - API mínimo 24, API objetivo 34</p>
         <ul>
             <li>Ampliar las <a href="https://redmine.stoutner.com/issues/717">opciones del proveedor de descargas</a> para que sean Navegador Privado, el gestor de descargas de Android, y una app externa.</li>
             <li>Eliminar <a href="https://redmine.stoutner.com/issues/1074">el espacio desperdiciado</a> entre el icono del cajón de navegación y la barra URL.</li>
index 798f330980183be5c97522ff19fd3410999e5256..8e6a68039fe3ebd52a6f7dc3e92bc41a549e6f1b 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
index b73bbfb2e6cf01e0cb2512b28dbc2d2e2c7a8b20..778624f97d0c25b7da23ecd1e79b22dfbba799f9 100644 (file)
@@ -19792,7 +19792,6 @@ abema.tv##+js(rmnt, script, NREUM)
 ||om.aopa.org^
 ||om.burberry.com^
 ||om.cbsi.com^
-||om.churchofjesuschrist.org^
 ||om.cyberrentals.com^
 ||om.dowjoneson.com^
 ||om.escapehomes.com^
index 05ea94bfde85688714e1b0793b7f1623e9091c2b..cf687fa83ab7e498227bf43566f58bf8d570d703 100644 (file)
@@ -31,7 +31,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (version du code 73)</h3>
-        <p>12 Février 2024 - API minimale : 24, API optimale : 34</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12 Février 2024</a> - API minimale : 24, API optimale : 34</p>
         <ul>
             <li>Étendre les <a href="https://redmine.stoutner.com/issues/717">options du fournisseur de téléchargement</a> pour inclure Privacy Browser,
                 le gestionnaire de téléchargement d'Android et une application externe.</li>
index d734afb48af90734cda1d77c09e105535948cdf4..1e80e640fe3989bd741fa85ce93e588d9f48a9d4 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
index 4c23043f6d2e9c24f56f51e5067a7e987af0031e..42b5187f2a009bd6231bf96ea69414b29ab62185 100644 (file)
@@ -31,7 +31,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (versione codice 73)</h3>
-        <p>12 Febbraio 2024 - minima API 24, target API 34</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12 Febbraio 2024</a> - minima API 24, target API 34</p>
         <ul>
             <li>Ampliamento delle <a href="https://redmine.stoutner.com/issues/717">opzioni per il provider dei download</a> che può essere Privacy Browser, il download manager di Android o una app esterna.</li>
             <li>Rimozione di <a href="https://redmine.stoutner.com/issues/1074">spazio sprecato</a> tra l'icona del cassetto di navigazione e la barra delle URL.</li>
index 1e8f396d4ca025be2bebbe756e5fc54d5cde6f41..5ffebc36a23eb972e046b3641bf8ff524c3636c7 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
index 483c9593b9aaa720dfe8452788671ad25ab13d68..bd874e8024cab9efe1965b6cc25c5d575ab5378e 100644 (file)
@@ -31,7 +31,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (código de versão 73)</h3>
-        <p>12 de fevereiro de 2024 - minimum API 24, target API 34</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12 de fevereiro de 2024</a> - minimum API 24, target API 34</p>
         <ul>
             <li>Expand the <a href="https://redmine.stoutner.com/issues/717">download provider options</a> to be Privacy Browser, Android’s download manager, and an external app.</li>
             <li>Remove <a href="https://redmine.stoutner.com/issues/1074">wasted space</a> between the navigation drawer icon and the URL bar.</li>
index 871a9a8f62764b8de43dff4213f987d2b23f5904..94df5f90748a2830e4cd920c6c650f9b251aabda 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
index de367cb6a52c84586719527bc2fd05f4e4169a07..b6afaa1060455f9d713732aaddc0167e5cdeacda 100644 (file)
@@ -29,7 +29,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (код версии 73)</h3>
-        <p>12 февраля 2024 года - минимальный API 24, целевой API 34</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12 февраля 2024 года</a> - минимальный API 24, целевой API 34</p>
         <ul>
             <li>Добавлена возможность <a href="https://redmine.stoutner.com/issues/717">выбора следующих вариантов загрузки файлов:</a> Privacy Browser, менеджер загрузок Android и внешнее приложение.</li>
             <li>Убрано <a href="https://redmine.stoutner.com/issues/1074">ненужное пространство</a> между значком навигационного панели и строкой URL.</li>
index d27bb47cb020e34af71e1b9b1396ab168f896d31..ea12fd22727948380e9aa2797c6207aac6939848 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
diff --git a/app/src/main/assets/shared_images/subtitles.svg b/app/src/main/assets/shared_images/subtitles.svg
deleted file mode 100644 (file)
index 67f149c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-
-<!--
-  Copyright 2020,2022 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
-
-  It is a modified version of `subtitles`, which is part of the Android Material icon set and is released under the Apache License 2.0.
-
-  Privacy Browser Android 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 Android 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 Android.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<svg
-    xmlns="http://www.w3.org/2000/svg"
-    viewBox="0 0 24 24"
-    id="icon" >
-
-    <path
-        d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM4 12h4v2H4v-2zm10 6H4v-2h10v2zm6 0h-4v-2h4v2zm0-4H10v-2h10v2z" />
-</svg>
index 26c6e2c34b07ed0540b7805078481c21ec05b221..bc89c0613410d967d1c07767a40583e8c455e183 100644 (file)
@@ -29,7 +29,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (version code 73)</h3>
-        <p>12 Şubat 2024 - minimum API 24, target API 34</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12 Şubat 2024</a> - minimum API 24, target API 34</p>
         <ul>
             <li>Expand the <a href="https://redmine.stoutner.com/issues/717">download provider options</a> to be Privacy Browser, Android’s download manager, and an external app.</li>
             <li>Remove <a href="https://redmine.stoutner.com/issues/1074">wasted space</a> between the navigation drawer icon and the URL bar.</li>
index 4d9688e2c3c4b1587c8ce1a82c267f91e8f5caf9..43a4a06599fefcd57b506db3e9d4136fe070364c 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
index 421275245c1ff7ea02e950742ac7baf3d24bc10c..128c54977e9a258c85b1abbedd322c64de96d74f 100644 (file)
@@ -31,7 +31,7 @@
 
     <body>
         <h3><a href="https://www.stoutner.com/privacy-browser-android-3-17/">3.17</a> (version code 73)</h3>
-        <p>12 February 2024 - 最低支持API 24, 最高支持API 34</p>
+        <p><a href="https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff;h=7a54e6907e74196a4840a2434dd13e2b68a95db4">12 February 2024</a> - 最低支持API 24, 最高支持API 34</p>
         <ul>
             <li>Expand the <a href="https://redmine.stoutner.com/issues/717">download provider options</a> to be Privacy Browser, Android’s download manager, and an external app.</li>
             <li>Remove <a href="https://redmine.stoutner.com/issues/1074">wasted space</a> between the navigation drawer icon and the URL bar.</li>
index 5703c65ae0983af92735460b297ea62ba07f7895..d5f4a6b2bb438a8ca55d62bb05c28f5a69f4d656 100644 (file)
         <p><svg class="icon"><use href="../shared_images/sort.svg#icon"/></svg> sort.</p>
         <p><svg class="icon"><use href="../shared_images/style.svg#icon"/></svg> style.</p>
         <p><svg class="icon"><use href="../shared_images/subheader_rounded_weight400_grade0_48px.svg#icon"/></svg> subheader_<wbr>rounded_<wbr>weight400_<wbr>grade0_<wbr>48px.</p>
-        <p><svg class="icon"><use href="../shared_images/subtitles.svg#icon"/></svg> subtitles.</p>
         <p><svg class="icon"><use href="../shared_images/tab.svg#icon"/></svg> tab.</p>
         <p><svg class="icon"><use href="../shared_images/text_fields.svg#icon"/></svg> text_fields.</p>
         <p><svg class="icon"><use href="../shared_images/thumbs_up_down.svg#icon"/></svg> thumbs_up_down.</p>
index 96de49fa03c178f7f5042855f2dfbe90e9a8ab76..a4e3505aa19f18b80c710f0a8526770fee77cdde 100644 (file)
@@ -694,7 +694,6 @@ class DomainsActivity : AppCompatActivity(), AddDomainListener, DismissSnackbarI
         val javaScriptSpinner = view.findViewById<Spinner>(R.id.javascript_spinner)
         val cookiesSpinner = view.findViewById<Spinner>(R.id.cookies_spinner)
         val domStorageSpinner = view.findViewById<Spinner>(R.id.dom_storage_spinner)
-        val formDataSpinner = view.findViewById<Spinner>(R.id.form_data_spinner) // Form data can be removed once the minimum API >= 26.
         val userAgentSpinner = view.findViewById<Spinner>(R.id.user_agent_spinner)
         val customUserAgentEditText = view.findViewById<EditText>(R.id.custom_user_agent_edittext)
         val easyListSpinner = view.findViewById<Spinner>(R.id.easylist_spinner)
@@ -720,7 +719,6 @@ class DomainsActivity : AppCompatActivity(), AddDomainListener, DismissSnackbarI
         val javaScriptInt = javaScriptSpinner.selectedItemPosition
         val cookiesInt = cookiesSpinner.selectedItemPosition
         val domStorageInt = domStorageSpinner.selectedItemPosition
-        val formDataInt = formDataSpinner.selectedItemPosition // Form data can be removed once the minimum API >= 26.
         val userAgentSwitchPosition = userAgentSpinner.selectedItemPosition
         val easyListInt = easyListSpinner.selectedItemPosition
         val easyPrivacyInt = easyPrivacySpinner.selectedItemPosition
@@ -762,7 +760,7 @@ class DomainsActivity : AppCompatActivity(), AddDomainListener, DismissSnackbarI
             fontSizeInt = customFontSizeEditText.text.toString().toInt()
 
         // Save the domain settings.
-        domainsDatabaseHelper.updateDomain(currentDomainDatabaseId, domainNameString, javaScriptInt, cookiesInt, domStorageInt, formDataInt, userAgentName, easyListInt, easyPrivacyInt, fanboysAnnoyanceInt,
+        domainsDatabaseHelper.updateDomain(currentDomainDatabaseId, domainNameString, javaScriptInt, cookiesInt, domStorageInt, userAgentName, easyListInt, easyPrivacyInt, fanboysAnnoyanceInt,
             fanboysSocialBlockingInt, ultraListInt, ultraPrivacyInt, blockAllThirdPartyRequestsInt, fontSizeInt, swipeToRefreshInt, webViewThemeInt, wideViewportInt, displayWebpageImagesInt,
             pinnedSslCertificate, pinnedIpAddress)
 
index 8294caef64a51db2db5de73c7f3444c68f643b68..4005443ae1c0d0e637c48dd7639713093b91c1b0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2019-2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -87,23 +87,17 @@ class LogcatActivity : AppCompatActivity() {
                     }
                 }
 
-                // Initialize the file name string from the file URI last path segment.
-                var fileNameString = fileUri.lastPathSegment
+                // Get a cursor from the content resolver.
+                val contentResolverCursor = contentResolver.query(fileUri, null, null, null)!!
 
-                // Query the exact file name if the API >= 26.
-                if (Build.VERSION.SDK_INT >= 26) {
-                    // Get a cursor from the content resolver.
-                    val contentResolverCursor = contentResolver.query(fileUri, null, null, null)!!
+                // Move to the fist row.
+                contentResolverCursor.moveToFirst()
 
-                    // Move to the fist row.
-                    contentResolverCursor.moveToFirst()
+                // Get the file name from the cursor.
+                val fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
 
-                    // Get the file name from the cursor.
-                    fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
-
-                    // Close the cursor.
-                    contentResolverCursor.close()
-                }
+                // Close the cursor.
+                contentResolverCursor.close()
 
                 // Display a snackbar with the saved logcat information.
                 Snackbar.make(logcatTextView, getString(R.string.saved, fileNameString), Snackbar.LENGTH_SHORT).show()
index 782116a9c64053a60cd07a8b1711994df208316e..204023e332e89df7fc8e47780877d43ebf22903f 100644 (file)
@@ -76,7 +76,6 @@ import android.webkit.WebSettings
 import android.webkit.WebStorage
 import android.webkit.WebView
 import android.webkit.WebViewClient
-import android.webkit.WebViewDatabase
 import android.widget.AdapterView
 import android.widget.ArrayAdapter
 import android.widget.CheckBox
@@ -152,7 +151,6 @@ import com.stoutner.privacybrowser.helpers.ENABLE_EASYLIST
 import com.stoutner.privacybrowser.helpers.ENABLE_EASYPRIVACY
 import com.stoutner.privacybrowser.helpers.ENABLE_FANBOYS_ANNOYANCE_LIST
 import com.stoutner.privacybrowser.helpers.ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST
-import com.stoutner.privacybrowser.helpers.ENABLE_FORM_DATA
 import com.stoutner.privacybrowser.helpers.ENABLE_JAVASCRIPT
 import com.stoutner.privacybrowser.helpers.ENABLE_ULTRAPRIVACY
 import com.stoutner.privacybrowser.helpers.ENABLED
@@ -290,7 +288,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
     private lateinit var optionsClearCookiesMenuItem: MenuItem
     private lateinit var optionsClearDataMenuItem: MenuItem
     private lateinit var optionsClearDomStorageMenuItem: MenuItem
-    private lateinit var optionsClearFormDataMenuItem: MenuItem
     private lateinit var optionsCookiesMenuItem: MenuItem
     private lateinit var optionsDarkWebViewMenuItem: MenuItem
     private lateinit var optionsDisplayImagesMenuItem: MenuItem
@@ -308,7 +305,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
     private lateinit var optionsProxyNoneMenuItem: MenuItem
     private lateinit var optionsProxyTorMenuItem: MenuItem
     private lateinit var optionsRefreshMenuItem: MenuItem
-    private lateinit var optionsSaveFormDataMenuItem: MenuItem
     private lateinit var optionsSwipeToRefreshMenuItem: MenuItem
     private lateinit var optionsUltraListMenuItem: MenuItem
     private lateinit var optionsUltraPrivacyMenuItem: MenuItem
@@ -363,7 +359,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
     private var defaultEasyPrivacy = true
     private var defaultFanboysAnnoyanceList = true
     private var defaultFanboysSocialBlockingList = true
-    private var defaultFormData = false  // Form data can be removed once the minimum API >= 26.
     private var defaultProgressViewEndOffset = 0
     private var defaultProgressViewStartOffset = 0
     private var defaultJavaScript = false
@@ -421,23 +416,17 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
     private val saveWebpageArchiveActivityResultLauncher = registerForActivityResult<String, Uri>(ActivityResultContracts.CreateDocument("multipart/related")) { fileUri ->
         // Only save the webpage archive if the file URI is not null, which happens if the user exited the file picker by pressing back.
         if (fileUri != null) {
-            // Initialize the file name string from the file URI last path segment.
-            var fileNameString = fileUri.lastPathSegment
+            // Get a cursor from the content resolver.
+            val contentResolverCursor = contentResolver.query(fileUri, null, null, null)!!
 
-            // Query the exact file name if the API >= 26.
-            if (Build.VERSION.SDK_INT >= 26) {
-                // Get a cursor from the content resolver.
-                val contentResolverCursor = contentResolver.query(fileUri, null, null, null)!!
+            // Move to the fist row.
+            contentResolverCursor.moveToFirst()
 
-                // Move to the fist row.
-                contentResolverCursor.moveToFirst()
+            // Get the file name from the cursor.
+            val fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
 
-                // Get the file name from the cursor.
-                fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
-
-                // Close the cursor.
-                contentResolverCursor.close()
-            }
+            // Close the cursor.
+            contentResolverCursor.close()
 
             // Use a coroutine to save the file.
             CoroutineScope(Dispatchers.Main).launch {
@@ -1049,11 +1038,9 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
         val optionsBookmarksMenuItem = menu.findItem(R.id.bookmarks)
         optionsCookiesMenuItem = menu.findItem(R.id.cookies)
         optionsDomStorageMenuItem = menu.findItem(R.id.dom_storage)
-        optionsSaveFormDataMenuItem = menu.findItem(R.id.save_form_data) // Form data can be removed once the minimum API >= 26.
         optionsClearDataMenuItem = menu.findItem(R.id.clear_data)
         optionsClearCookiesMenuItem = menu.findItem(R.id.clear_cookies)
         optionsClearDomStorageMenuItem = menu.findItem(R.id.clear_dom_storage)
-        optionsClearFormDataMenuItem = menu.findItem(R.id.clear_form_data) // Form data can be removed once the minimum API >= 26.
         optionsEasyListMenuItem = menu.findItem(R.id.easylist)
         optionsEasyPrivacyMenuItem = menu.findItem(R.id.easyprivacy)
         optionsFanboysAnnoyanceListMenuItem = menu.findItem(R.id.fanboys_annoyance_list)
@@ -1091,13 +1078,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
         // Set the initial status of the privacy icons.  `false` does not call `invalidateOptionsMenu` as the last step.
         updatePrivacyIcons(false)
 
-        // Only display the form data menu items if the API < 26.
-        optionsSaveFormDataMenuItem.isVisible = Build.VERSION.SDK_INT < 26
-        optionsClearFormDataMenuItem.isVisible = Build.VERSION.SDK_INT < 26
-
-        // Disable the clear form data menu item if the API >= 26 so that the status of the main Clear Data is calculated correctly.
-        optionsClearFormDataMenuItem.isEnabled = Build.VERSION.SDK_INT < 26
-
         // Set the status of the additional app bar icons.  Setting the refresh menu item to `SHOW_AS_ACTION_ALWAYS` makes it appear even on small devices like phones.
         if (displayAdditionalAppBarIcons) {  // Display the additional icons.
             optionsRefreshMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
@@ -1114,7 +1094,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
             // Set the title.
             optionsRefreshMenuItem.setTitle(R.string.stop)
 
-            // Set the icon if it is displayed in the app bar.  Once the minimum API is >= 26, the blue and black icons can be combined with a tint list.
+            // Set the icon if it is displayed in the app bar.
             if (displayAdditionalAppBarIcons)
                 optionsRefreshMenuItem.setIcon(R.drawable.close_blue)
         }
@@ -1147,8 +1127,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
 
             // Set the status of the menu item checkboxes.
             optionsDomStorageMenuItem.isChecked = currentWebView!!.settings.domStorageEnabled
-            @Suppress("DEPRECATION")
-            optionsSaveFormDataMenuItem.isChecked = currentWebView!!.settings.saveFormData  // Form data can be removed once the minimum API >= 26.
             optionsEasyListMenuItem.isChecked = currentWebView!!.easyListEnabled
             optionsEasyPrivacyMenuItem.isChecked = currentWebView!!.easyPrivacyEnabled
             optionsFanboysAnnoyanceListMenuItem.isChecked = currentWebView!!.fanboysAnnoyanceListEnabled
@@ -1218,18 +1196,8 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
         // Enable Clear DOM Storage if there is any.
         optionsClearDomStorageMenuItem.isEnabled = localStorageDirectoryNumberOfFiles > 0 || indexedDBDirectoryNumberOfFiles > 0
 
-        // Enable Clear Form Data is there is any.  This can be removed once the minimum API >= 26.
-        if (Build.VERSION.SDK_INT < 26) {
-            // Get the WebView database.
-            val webViewDatabase = WebViewDatabase.getInstance(this)
-
-            // Enable the clear form data menu item if there is anything to clear.
-            @Suppress("DEPRECATION")
-            optionsClearFormDataMenuItem.isEnabled = webViewDatabase.hasFormData()
-        }
-
         // Enable Clear Data if any of the submenu items are enabled.
-        optionsClearDataMenuItem.isEnabled = (optionsClearCookiesMenuItem.isEnabled || optionsClearDomStorageMenuItem.isEnabled || optionsClearFormDataMenuItem.isEnabled)
+        optionsClearDataMenuItem.isEnabled = (optionsClearCookiesMenuItem.isEnabled || optionsClearDomStorageMenuItem.isEnabled)
 
         // Disable Fanboy's Social Blocking List menu item if Fanboy's Annoyance List is checked.
         optionsFanboysSocialBlockingListMenuItem.isEnabled = !optionsFanboysAnnoyanceListMenuItem.isChecked
@@ -1473,32 +1441,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
                 true
             }
 
-            R.id.save_form_data -> {  // Form data.  This can be removed once the minimum API >= 26.
-                // Switch the status of saveFormDataEnabled.
-                @Suppress("DEPRECATION")
-                currentWebView!!.settings.saveFormData = !currentWebView!!.settings.saveFormData
-
-                // Update the menu checkbox.
-                @Suppress("DEPRECATION")
-                menuItem.isChecked = currentWebView!!.settings.saveFormData
-
-                // Display a snackbar.
-                @Suppress("DEPRECATION")
-                if (currentWebView!!.settings.saveFormData)
-                    Snackbar.make(webViewViewPager2, R.string.form_data_enabled, Snackbar.LENGTH_SHORT).show()
-                else
-                    Snackbar.make(webViewViewPager2, R.string.form_data_disabled, Snackbar.LENGTH_SHORT).show()
-
-                // Update the privacy icon.
-                updatePrivacyIcons(true)
-
-                // Reload the current WebView.
-                currentWebView!!.reload()
-
-                // Consume the event.
-                true
-            }
-
             R.id.clear_cookies -> {  // Clear cookies.
                 // Create a snackbar.
                 Snackbar.make(webViewViewPager2, R.string.cookies_deleted, Snackbar.LENGTH_LONG)
@@ -1574,28 +1516,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
                 true
             }
 
-            R.id.clear_form_data -> {  // Clear form data.  This can be remove once the minimum API >= 26.
-                // Create a snackbar.
-                Snackbar.make(webViewViewPager2, R.string.form_data_deleted, Snackbar.LENGTH_LONG)
-                    .setAction(R.string.undo) {}  // Everything will be handled by `onDismissed()` below.
-                    .addCallback(object : Snackbar.Callback() {
-                        override fun onDismissed(snackbar: Snackbar, event: Int) {
-                            if (event != DISMISS_EVENT_ACTION) {  // The snackbar was dismissed without the undo button being pushed.
-                                // Get a handle for the webView database.
-                                val webViewDatabase = WebViewDatabase.getInstance(applicationContext)
-
-                                // Delete the form data.
-                                @Suppress("DEPRECATION")
-                                webViewDatabase.clearFormData()
-                            }
-                        }
-                    })
-                    .show()
-
-                // Consume the event.
-                true
-            }
-
             R.id.easylist -> {  // EasyList.
                 // Toggle the EasyList status.
                 currentWebView!!.easyListEnabled = !currentWebView!!.easyListEnabled
@@ -2167,19 +2087,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
                     val wideViewportInt = calculateSettingsInt(currentWebView!!.settings.useWideViewPort, sharedPreferences.getBoolean(getString(R.string.wide_viewport_key), true))
                     val displayImagesInt = calculateSettingsInt(currentWebView!!.settings.loadsImagesAutomatically, sharedPreferences.getBoolean(getString(R.string.display_webpage_images_key), true))
 
-                    // Initialize the form data int.
-                    var formDataInt = SYSTEM_DEFAULT
-
-                    // Set the form data int, which can be removed once the minimum API >= 26.
-                    @Suppress("DEPRECATION")
-                    if (Build.VERSION.SDK_INT < 26) {
-                        // Get the form data status.
-                        val formDataEnabled = currentWebView!!.settings.saveFormData
-
-                        // Calculate the form data Int.
-                        formDataInt = calculateSettingsInt(formDataEnabled, sharedPreferences.getBoolean(getString(R.string.save_form_data_key), false))
-                    }
-
                     // Get the current user agent string.
                     val currentUserAgentString = currentWebView!!.settings.userAgentString
 
@@ -2261,7 +2168,7 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
                         LIGHT_THEME
 
                     // Create the domain and store the database ID.
-                    val newDomainDatabaseId = domainsDatabaseHelper!!.addDomain(currentDomain, javaScriptInt, cookiesInt, domStorageInt, formDataInt, userAgentName, easyListInt, easyPrivacyInt,
+                    val newDomainDatabaseId = domainsDatabaseHelper!!.addDomain(currentDomain, javaScriptInt, cookiesInt, domStorageInt, userAgentName, easyListInt, easyPrivacyInt,
                                                                                 fanboysAnnoyanceListInt, fanboysSocialBlockingListInt, ultraListInt, ultraPrivacyInt, blockAllThirdPartyRequestsInt, fontSizeInt,
                                                                                 swipeToRefreshInt, webViewThemeInt, wideViewportInt, displayImagesInt)
 
@@ -3072,7 +2979,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
         defaultJavaScript = sharedPreferences.getBoolean(getString(R.string.javascript_key), false)
         defaultCookies = sharedPreferences.getBoolean(getString(R.string.cookies_key), false)
         defaultDomStorage = sharedPreferences.getBoolean(getString(R.string.dom_storage_key), false)
-        defaultFormData = sharedPreferences.getBoolean(getString(R.string.save_form_data_key), false)  // Form data can be removed once the minimum API >= 26.
         defaultEasyList = sharedPreferences.getBoolean(getString(R.string.easylist_key), true)
         defaultEasyPrivacy = sharedPreferences.getBoolean(getString(R.string.easyprivacy_key), true)
         defaultFanboysAnnoyanceList = sharedPreferences.getBoolean(getString(R.string.fanboys_annoyance_list_key), true)
@@ -3339,7 +3245,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
                 val javaScriptInt = currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT))
                 val cookiesInt = currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndexOrThrow(COOKIES))
                 val domStorageInt = currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE))
-                val formDataInt = currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndexOrThrow(ENABLE_FORM_DATA))  // Form data can be removed once the minimum API >= 26.
                 val easyListInt = currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndexOrThrow(ENABLE_EASYLIST))
                 val easyPrivacyInt = currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY))
                 val fanboysAnnoyanceListInt = currentDomainSettingsCursor.getInt(currentDomainSettingsCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_ANNOYANCE_LIST))
@@ -3392,17 +3297,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
                     DISABLED -> nestedScrollWebView.settings.domStorageEnabled = false
                 }
 
-                // Apply the form data setting if the API < 26.
-                @Suppress("DEPRECATION")
-                if (Build.VERSION.SDK_INT < 26) {
-                    // Set the form data status.
-                    when (formDataInt) {
-                        SYSTEM_DEFAULT -> nestedScrollWebView.settings.saveFormData = defaultFormData
-                        ENABLED -> nestedScrollWebView.settings.saveFormData = true
-                        DISABLED -> nestedScrollWebView.settings.saveFormData = false
-                    }
-                }
-
                 // Set the EasyList status.
                 when (easyListInt) {
                     SYSTEM_DEFAULT -> nestedScrollWebView.easyListEnabled = defaultEasyList
@@ -3607,11 +3501,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
                 // Apply the default cookie setting.
                 cookieManager.setAcceptCookie(nestedScrollWebView.acceptCookies)
 
-                // Apply the form data setting if the API < 26.
-                if (Build.VERSION.SDK_INT < 26)
-                    @Suppress("DEPRECATION")
-                    nestedScrollWebView.settings.saveFormData = defaultFormData
-
                 // Apply the default font size setting.
                 try {
                     // Try to set the font size from the value in the app settings.
@@ -3922,26 +3811,6 @@ class MainWebViewActivity : AppCompatActivity(), CreateBookmarkDialog.CreateBook
             }
         }
 
-        // Clear form data if the API < 26.
-        if (Build.VERSION.SDK_INT < 26 && (clearEverything || sharedPreferences.getBoolean(getString(R.string.clear_form_data_key), true))) {
-            // Ask the WebView database to clear the form data.
-            @Suppress("DEPRECATION")
-            WebViewDatabase.getInstance(this).clearFormData()
-
-            // Manually delete the form data database, as the WebView database sometimes will not flush its changes to disk before system exit is run.
-            try {
-                // A string array must be used because the database contains a space and `Runtime.exec` will not otherwise escape the string correctly.
-                val deleteWebDataProcess = runtime.exec(arrayOf("rm", "-f", "$privateDataDirectoryString/app_webview/Web Data"))
-                val deleteWebDataJournalProcess = runtime.exec(arrayOf("rm", "-f", "$privateDataDirectoryString/app_webview/Web Data-journal"))
-
-                // Wait until the processes have finished.
-                deleteWebDataProcess.waitFor()
-                deleteWebDataJournalProcess.waitFor()
-            } catch (exception: Exception) {
-                // Do nothing if an error is thrown.
-            }
-        }
-
         // Clear the logcat.
         if (clearEverything || sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true)) {
             try {
index 3b6bb26f8d8de2d2dab1f8bdc5a5e1e1bd5cece1..b18365a5954362eef3e67a53815ffc806462f8d1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2017-2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -104,23 +104,17 @@ class ViewHeadersActivity: AppCompatActivity(), UntrustedSslCertificateListener
     private val saveTextActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { fileUri ->
         // Only save the file if the URI is not null, which happens if the user exited the file picker by pressing back.
         if (fileUri != null) {
-            // Initialize the file name string from the file URI last path segment.
-            var fileNameString = fileUri.lastPathSegment
+            // Get a cursor from the content resolver.
+            val contentResolverCursor = contentResolver.query(fileUri, null, null, null)!!
 
-            // Query the exact file name if the API >= 26.
-            if (Build.VERSION.SDK_INT >= 26) {
-                // Get a cursor from the content resolver.
-                val contentResolverCursor = contentResolver.query(fileUri, null, null, null)!!
+            // Move to the first row.
+            contentResolverCursor.moveToFirst()
 
-                // Move to the first row.
-                contentResolverCursor.moveToFirst()
+            // Get the file name from the cursor.
+            val fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
 
-                // Get the file name from the cursor.
-                fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
-
-                // Close the cursor.
-                contentResolverCursor.close()
-            }
+            // Close the cursor.
+            contentResolverCursor.close()
 
             try {
                 // Get the about version string.
index 8fdd9d07ab14b1c0b438b1a6cd18b16abe7e5d30..3aa847debf6342b912014abbc2bab5ba4bf4710b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2020-2022, 2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -23,7 +23,6 @@ import android.app.Activity
 import android.graphics.Bitmap
 import android.graphics.Canvas
 import android.net.Uri
-import android.os.Build
 import android.provider.OpenableColumns
 import android.widget.LinearLayout
 
@@ -53,26 +52,20 @@ object SaveAboutVersionImageCoroutine {
                 // Instantiate a file name string.
                 val fileNameString: String
 
-                // Query the exact file name if the API >= 26.
-                if (Build.VERSION.SDK_INT >= 26) {  // The API >= 26.
-                    // Get a cursor from the content resolver.
-                    val contentResolverCursor = activity.contentResolver.query(fileUri, null, null, null)
+                // Get a cursor from the content resolver.
+                val contentResolverCursor = activity.contentResolver.query(fileUri, null, null, null)
 
-                    // Get the file display name if the content resolve cursor is not null.
-                    if (contentResolverCursor != null) {  // The content resolve cursor is not null.
-                        // Move to the first row.
-                        contentResolverCursor.moveToFirst()
+                // Get the file display name if the content resolve cursor is not null.
+                if (contentResolverCursor != null) {  // The content resolve cursor is not null.
+                    // Move to the first row.
+                    contentResolverCursor.moveToFirst()
 
-                        // Get the file name from the cursor.
-                        fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
+                    // Get the file name from the cursor.
+                    fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
 
-                        // Close the cursor.
-                        contentResolverCursor.close()
-                    } else {  // The content resolve cursor is null.
-                        // Use the URI last path segment as the file name string.
-                        fileNameString = fileUri.lastPathSegment.toString()
-                    }
-                } else {  // The API is < 26.
+                    // Close the cursor.
+                    contentResolverCursor.close()
+                } else {  // The content resolve cursor is null.
                     // Use the URI last path segment as the file name string.
                     fileNameString = fileUri.lastPathSegment.toString()
                 }
@@ -86,16 +79,15 @@ object SaveAboutVersionImageCoroutine {
                     savingImageSnackbar.show()
                 }
 
-                // Create the about version bitmap.  This can be replaced by PixelCopy once the minimum API >= 26.
-                // Once the Minimum API >= 26 Bitmap.Config.RBGA_F16 can be used instead of ARGB_8888.  The linear layout commands must be run on the UI thread.
-                val aboutVersionBitmap = Bitmap.createBitmap(aboutVersionLinearLayout.width, aboutVersionLinearLayout.height, Bitmap.Config.ARGB_8888)
+                // Create an empty bitmap with the dimensions of the linear layout.  Once the minimum API >= 33 Bitmap.Config.RGBA_1010102 can be used instead of RBGA_F16.
+                val aboutVersionBitmap = Bitmap.createBitmap(aboutVersionLinearLayout.width, aboutVersionLinearLayout.height, Bitmap.Config.RGBA_F16)
 
                 // Create a canvas.
                 val aboutVersionCanvas = Canvas(aboutVersionBitmap)
 
                 // Use the main thread to interact with the linear layout.
                 withContext(Dispatchers.Main) {
-                    // Draw the current about version onto the bitmap.
+                    // Draw the current about version onto the bitmap.  It might be possible to do this with PixelCopy, but I am not sure that would be any better.
                     aboutVersionLinearLayout.draw(aboutVersionCanvas)
                 }
 
@@ -103,7 +95,7 @@ object SaveAboutVersionImageCoroutine {
                 val aboutVersionByteArrayOutputStream = ByteArrayOutputStream()
 
                 // Convert the bitmap to a PNG.  `0` is for lossless compression (the only option for a PNG).  This compression takes a long time.
-                // Once the minimum API >= 30 this could be replaced with WEBP_LOSSLESS.
+                // Once the minimum API >= 30 this can be replaced with WEBP_LOSSLESS.
                 aboutVersionBitmap.compress(Bitmap.CompressFormat.PNG, 0, aboutVersionByteArrayOutputStream)
 
                 // Create a file creation disposition string.
index 7ce88146a7ef60501c914829058b2c4ce3dfd73a..f8adc5b0f187862fbd611cab2d373becaad2645e 100644 (file)
@@ -22,7 +22,6 @@ package com.stoutner.privacybrowser.coroutines
 import android.app.Activity
 import android.content.Context
 import android.net.Uri
-import android.os.Build
 import android.provider.OpenableColumns
 import android.util.Base64
 import android.webkit.CookieManager
@@ -53,26 +52,17 @@ class SaveUrlCoroutine {
 
         // Use a coroutine to save the URL.
         CoroutineScope(Dispatchers.Main).launch {
-            // Create a file name string.
-            val fileNameString: String
+            // Get a cursor from the content resolver.
+            val contentResolverCursor = activity.contentResolver.query(fileUri, null, null, null)!!
 
-            // Query the exact file name if the API >= 26.
-            if (Build.VERSION.SDK_INT >= 26) {
-                // Get a cursor from the content resolver.
-                val contentResolverCursor = activity.contentResolver.query(fileUri, null, null, null)!!
+            // Move to the first row.
+            contentResolverCursor.moveToFirst()
 
-                // Move to the first row.
-                contentResolverCursor.moveToFirst()
+            // Get the file name from the cursor.
+            val fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
 
-                // Get the file name from the cursor.
-                fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
-
-                // Close the cursor.
-                contentResolverCursor.close()
-            } else {
-                // Use the file URI last path segment as the file name string.
-                fileNameString = fileUri.lastPathSegment!!
-            }
+            // Close the cursor.
+            contentResolverCursor.close()
 
             // Get a handle for the no swipe view pager.
             val webViewViewPager2 = activity.findViewById<ViewPager2>(R.id.webview_viewpager2)
@@ -155,9 +145,9 @@ class SaveUrlCoroutine {
                             val inputStream: InputStream = BufferedInputStream(httpUrlConnection.inputStream)
 
                             // Initialize the conversion buffer byte array.
-                            // This is set to a 100,000 bytes so that frequent updating of the snackbar doesn't freeze the interface on download, although `inputStream.read` currently used 8,000 as an upper limit.
+                            // This is set to a 50,000 bytes so that frequent updating of the snackbar doesn't freeze the interface on download, although `inputStream.read` currently uses 8,000 as an upper limit.
                             // <https://redmine.stoutner.com/issues/709>
-                            val conversionBufferByteArray = ByteArray(100_000)
+                            val conversionBufferByteArray = ByteArray(50_000)
 
                             // Initialize the longs.
                             var downloadedBytesCounterLong: Long = 0
@@ -242,4 +232,4 @@ class SaveUrlCoroutine {
             }
         }
     }
-}
\ No newline at end of file
+}
index 1c3a2c0310104f0f1d876f9aa22974bf8bb1fae9..d6c984625ccf3233a0d00eea0b6d6820ca7bee7c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright0 2019-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright0 2019-2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -23,7 +23,6 @@ import android.app.Activity
 import android.graphics.Bitmap
 import android.graphics.Canvas
 import android.net.Uri
-import android.os.Build
 import android.provider.OpenableColumns
 
 import com.google.android.material.snackbar.Snackbar
@@ -42,26 +41,17 @@ class SaveWebpageImageCoroutine {
     fun save(activity: Activity, fileUri: Uri, nestedScrollWebView: NestedScrollWebView) {
         // Use a coroutine to save the webpage image.
         CoroutineScope(Dispatchers.Main).launch {
-            // Create a file name string.
-            val fileNameString: String
+            // Get a cursor from the content resolver.
+            val contentResolverCursor = activity.contentResolver.query(fileUri, null, null, null)
 
-            // Query the exact file name if the API >= 26.
-            if (Build.VERSION.SDK_INT >= 26) {
-                // Get a cursor from the content resolver.
-                val contentResolverCursor = activity.contentResolver.query(fileUri, null, null, null)
+            // Move to the first row.
+            contentResolverCursor!!.moveToFirst()
 
-                // Move to the first row.
-                contentResolverCursor!!.moveToFirst()
+            // Get the file name from the cursor.
+            val fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
 
-                // Get the file name from the cursor.
-                fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
-
-                // Close the cursor.
-                contentResolverCursor.close()
-            } else {
-                // Use the file URI last path segment as the file name string.
-                fileNameString = fileUri.lastPathSegment!!
-            }
+            // Close the cursor.
+            contentResolverCursor.close()
 
             // Create a saving image snackbar.
             val savingImageSnackbar = Snackbar.make(nestedScrollWebView, activity.getString(R.string.processing_image, fileNameString), Snackbar.LENGTH_INDEFINITE)
@@ -69,7 +59,8 @@ class SaveWebpageImageCoroutine {
             // Display the saving image snackbar.
             savingImageSnackbar.show()
 
-            // Create a webpage bitmap.  Once the Minimum API >= 26 Bitmap.Config.RBGA_F16 can be used instead of ARGB_8888.  The nested scroll WebView commands must be run on the UI thread.
+            // Create a webpage bitmap.  Once the Minimum API >= 33 Bitmap.Config.RGBA_1010102 can be used instead of ARGB_8888.
+            // RGBA_F16 can't be used because it produces black output for the part of page not currently visible on the screen.
             val webpageBitmap = Bitmap.createBitmap(nestedScrollWebView.getHorizontalScrollRange(), nestedScrollWebView.getVerticalScrollRange(), Bitmap.Config.ARGB_8888)
 
             // Create a canvas.
@@ -115,8 +106,7 @@ class SaveWebpageImageCoroutine {
                         Snackbar.make(nestedScrollWebView, activity.getString(R.string.error_saving_file, fileNameString, exception), Snackbar.LENGTH_INDEFINITE).show()
                     }
                 }
-
             }
         }
     }
-}
\ No newline at end of file
+}
index aba433539f83d26110584e87acd4a957af1c1725..841456e3e591d3ddb88411eef9e58b9f2951d7f1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2015-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2015-2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -50,9 +50,9 @@ import com.stoutner.privacybrowser.R
 import java.io.ByteArrayOutputStream
 
 // Define the private class constants.
-private const val SHORTCUT_NAME = "shortcut_name"
-private const val URL_STRING = "url_string"
-private const val FAVORITE_ICON_BYTE_ARRAY = "favorite_icon_byte_array"
+private const val SHORTCUT_NAME = "A"
+private const val URL_STRING = "B"
+private const val FAVORITE_ICON_BYTE_ARRAY = "C"
 
 class CreateHomeScreenShortcutDialog : DialogFragment() {
     companion object {
@@ -239,7 +239,7 @@ class CreateHomeScreenShortcutDialog : DialogFragment() {
         val shortcutName = shortcutNameEditText.text.toString()
         val urlString = urlEditText.text.toString()
 
-        // Convert the favorite icon bitmap to an icon.  `IconCompat` must be used until the minimum API >= 26.
+        // Convert the favorite icon bitmap to an icon.
         val favoriteIcon = IconCompat.createWithBitmap(favoriteIconBitmap)
 
         // Create a shortcut intent.
@@ -262,7 +262,7 @@ class CreateHomeScreenShortcutDialog : DialogFragment() {
         shortcutInfoBuilder.setIntent(shortcutIntent)
         shortcutInfoBuilder.setShortLabel(shortcutName)
 
-        // Add the shortcut to the home screen.  `ShortcutManagerCompat` can be switched to `ShortcutManager` once the minimum API >= 26.
+        // Add the shortcut to the home screen.
         ShortcutManagerCompat.requestPinShortcut(requireContext(), shortcutInfoBuilder.build(), null)
     }
 }
\ No newline at end of file
index eeaae384d561ec956049a0241fa796ddf379729b..163e41d104cf4b6e9187c2586ece84196e973804 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2016-2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -41,11 +41,11 @@ import android.view.MenuInflater
 import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
+import android.webkit.WebView
 import android.widget.TextView
 
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.fragment.app.Fragment
-import androidx.webkit.WebViewCompat
 
 import com.google.android.material.snackbar.Snackbar
 
@@ -162,23 +162,17 @@ class AboutVersionFragment : Fragment() {
     private val saveAboutVersionTextActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { fileUri ->
         // Only save the file if the URI is not null, which happens if the user exited the file picker by pressing back.
         if (fileUri != null) {
-            // Initialize the file name string from the file URI last path segment.
-            var fileNameString = fileUri.lastPathSegment
+            // Get a cursor from the content resolver.
+            val contentResolverCursor = requireActivity().contentResolver.query(fileUri, null, null, null)!!
 
-            // Query the exact file name if the API >= 26.
-            if (Build.VERSION.SDK_INT >= 26) {
-                // Get a cursor from the content resolver.
-                val contentResolverCursor = requireActivity().contentResolver.query(fileUri, null, null, null)!!
+            // Move to the first row.
+            contentResolverCursor.moveToFirst()
 
-                // Move to the first row.
-                contentResolverCursor.moveToFirst()
+            // Get the file name from the cursor.
+            val fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
 
-                // Get the file name from the cursor.
-                fileNameString = contentResolverCursor.getString(contentResolverCursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
-
-                // Close the cursor.
-                contentResolverCursor.close()
-            }
+            // Close the cursor.
+            contentResolverCursor.close()
 
             try {
                 // Get the about version string.
@@ -307,8 +301,8 @@ class AboutVersionFragment : Fragment() {
         val serialNumberLabel = getString(R.string.serial_number)
         val signatureAlgorithmLabel = getString(R.string.signature_algorithm)
 
-        // Get the current WebView package info.  This can be replaced by the direct call once the minimum API >= 26.  <https://developer.android.com/reference/android/webkit/WebView#getCurrentWebViewPackage()>
-        val webViewPackageInfo = WebViewCompat.getCurrentWebViewPackage(requireContext())!!
+        // Get the current WebView package info.
+        val webViewPackageInfo = WebView.getCurrentWebViewPackage()!!
 
         // Get the device's information and store it in strings.
         val brand = Build.BRAND
index e5a995905f2e1e8dd907637e817e8e55f99612d0..00c3447e7681d996c1046caad5731e9f7e953c14 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2017-2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -22,7 +22,6 @@ package com.stoutner.privacybrowser.fragments
 import android.annotation.SuppressLint
 import android.content.Context
 import android.content.res.Configuration
-import android.os.Build
 import android.os.Bundle
 import android.text.Editable
 import android.text.SpannableStringBuilder
@@ -73,7 +72,6 @@ import com.stoutner.privacybrowser.helpers.ENABLE_EASYLIST
 import com.stoutner.privacybrowser.helpers.ENABLE_EASYPRIVACY
 import com.stoutner.privacybrowser.helpers.ENABLE_FANBOYS_ANNOYANCE_LIST
 import com.stoutner.privacybrowser.helpers.ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST
-import com.stoutner.privacybrowser.helpers.ENABLE_FORM_DATA
 import com.stoutner.privacybrowser.helpers.ENABLE_JAVASCRIPT
 import com.stoutner.privacybrowser.helpers.ENABLE_ULTRAPRIVACY
 import com.stoutner.privacybrowser.helpers.FONT_SIZE
@@ -142,7 +140,6 @@ class DomainSettingsFragment : Fragment() {
         val javaScriptDefault = sharedPreferences.getBoolean(getString(R.string.javascript_key), false)
         val cookiesDefault = sharedPreferences.getBoolean(getString(R.string.cookies_key), false)
         val domStorageDefault = sharedPreferences.getBoolean(getString(R.string.dom_storage_key), false)
-        val formDataDefault = sharedPreferences.getBoolean(getString(R.string.save_form_data_key), false)  // The form data views can be remove once the minimum API >= 26.
         val userAgentDefault = sharedPreferences.getString(getString(R.string.user_agent_key), getString(R.string.user_agent_default_value))
         val customUserAgentStringDefault = sharedPreferences.getString(getString(R.string.custom_user_agent_key), getString(R.string.custom_user_agent_default_value))
         val easyListDefault = sharedPreferences.getBoolean(getString(R.string.easylist_key), true)
@@ -173,10 +170,6 @@ class DomainSettingsFragment : Fragment() {
         val domStorageImageView = domainSettingsView.findViewById<ImageView>(R.id.dom_storage_imageview)
         val domStorageSpinner = domainSettingsView.findViewById<Spinner>(R.id.dom_storage_spinner)
         val domStorageTextView = domainSettingsView.findViewById<TextView>(R.id.dom_storage_textview)
-        val formDataLinearLayout = domainSettingsView.findViewById<LinearLayout>(R.id.form_data_linearlayout)  // The form data views can be remove once the minimum API >= 26.
-        val formDataImageView = domainSettingsView.findViewById<ImageView>(R.id.form_data_imageview)  // The form data views can be remove once the minimum API >= 26.
-        val formDataSpinner = domainSettingsView.findViewById<Spinner>(R.id.form_data_spinner)  // The form data views can be remove once the minimum API >= 26.
-        val formDataTextView = domainSettingsView.findViewById<TextView>(R.id.form_data_textview)  // The form data views can be remove once the minimum API >= 26.
         val userAgentLinearLayout = domainSettingsView.findViewById<LinearLayout>(R.id.user_agent_linearlayout)
         val userAgentSpinner = domainSettingsView.findViewById<Spinner>(R.id.user_agent_spinner)
         val userAgentTextView = domainSettingsView.findViewById<TextView>(R.id.user_agent_textview)
@@ -265,10 +258,6 @@ class DomainSettingsFragment : Fragment() {
         val currentIpAddressesRadioButton = domainSettingsView.findViewById<RadioButton>(R.id.current_ip_addresses_radiobutton)
         val currentIpAddressesTextView = domainSettingsView.findViewById<TextView>(R.id.current_ip_addresses_textview)
 
-        // Hide the form data linear layout if the API >= 26.
-        if (Build.VERSION.SDK_INT >= 26)
-            formDataLinearLayout.visibility = View.GONE
-
         // Initialize the database handler.
         val domainsDatabaseHelper = DomainsDatabaseHelper(requireContext())
 
@@ -283,7 +272,6 @@ class DomainSettingsFragment : Fragment() {
         val javaScriptInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT))
         val cookiesInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(COOKIES))
         val domStorageInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE))
-        val formDataInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_FORM_DATA))  // Form data can be remove once the minimum API >= 26.
         val currentUserAgentName = domainCursor.getString(domainCursor.getColumnIndexOrThrow(USER_AGENT))
         val easyListInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_EASYLIST))
         val easyPrivacyInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY))
@@ -316,7 +304,6 @@ class DomainSettingsFragment : Fragment() {
         val javaScriptArrayAdapter = ArrayAdapter.createFromResource(context, R.array.javascript_array, R.layout.spinner_item)
         val cookiesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.cookies_array, R.layout.spinner_item)
         val domStorageArrayAdapter = ArrayAdapter.createFromResource(context, R.array.dom_storage_array, R.layout.spinner_item)
-        val formDataArrayAdapter = ArrayAdapter.createFromResource(context, R.array.form_data_array, R.layout.spinner_item)  // Form data can be remove once the minimum API >= 26.
         val translatedUserAgentArrayAdapter = ArrayAdapter.createFromResource(context, R.array.translated_domain_settings_user_agent_names, R.layout.spinner_item)
         val easyListArrayAdapter = ArrayAdapter.createFromResource(context, R.array.easylist_array, R.layout.spinner_item)
         val easyPrivacyArrayAdapter = ArrayAdapter.createFromResource(context, R.array.easyprivacy_array, R.layout.spinner_item)
@@ -335,7 +322,6 @@ class DomainSettingsFragment : Fragment() {
         javaScriptArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         cookiesArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         domStorageArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
-        formDataArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)  // Form data can be remove once the minimum API >= 26.
         translatedUserAgentArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         easyListArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         easyPrivacyArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
@@ -354,7 +340,6 @@ class DomainSettingsFragment : Fragment() {
         javaScriptSpinner.adapter = javaScriptArrayAdapter
         cookiesSpinner.adapter = cookiesArrayAdapter
         domStorageSpinner.adapter = domStorageArrayAdapter
-        formDataSpinner.adapter = formDataArrayAdapter  // Form data can be remove once the minimum API >= 26.
         userAgentSpinner.adapter = translatedUserAgentArrayAdapter
         easyListSpinner.adapter = easyListArrayAdapter
         easyPrivacySpinner.adapter = easyPrivacyArrayAdapter
@@ -373,7 +358,6 @@ class DomainSettingsFragment : Fragment() {
         javaScriptTextView.setOnClickListener { javaScriptSpinner.performClick() }
         cookiesTextView.setOnClickListener { cookiesSpinner.performClick() }
         domStorageTextView.setOnClickListener { domStorageSpinner.performClick() }
-        formDataTextView.setOnClickListener { formDataSpinner.performClick() }  // Form data can be remove once the minimum API >= 26.
         userAgentTextView.setOnClickListener { userAgentSpinner.performClick() }
         easyListTextView.setOnClickListener { easyListSpinner.performClick() }
         easyPrivacyTextView.setOnClickListener { easyPrivacySpinner.performClick() }
@@ -392,7 +376,6 @@ class DomainSettingsFragment : Fragment() {
         javaScriptSpinner.setSelection(javaScriptInt)
         cookiesSpinner.setSelection(cookiesInt)
         domStorageSpinner.setSelection(domStorageInt)
-        formDataSpinner.setSelection(formDataInt)
         easyListSpinner.setSelection(easyListInt)
         easyPrivacySpinner.setSelection(easyPrivacyInt)
         fanboysAnnoyanceListSpinner.setSelection(fanboysAnnoyanceListInt)
@@ -409,7 +392,6 @@ class DomainSettingsFragment : Fragment() {
         populateTextView(javaScriptDefault, javaScriptArrayAdapter, javaScriptTextView)
         populateTextView(cookiesDefault, cookiesArrayAdapter, cookiesTextView)
         populateTextView(domStorageDefault, domStorageArrayAdapter, domStorageTextView)
-        populateTextView(formDataDefault, formDataArrayAdapter, formDataTextView)
         populateTextView(easyListDefault, easyListArrayAdapter, easyListTextView)
         populateTextView(easyPrivacyDefault, easyPrivacyArrayAdapter, easyPrivacyTextView)
         populateTextView(fanboysAnnoyanceListDefault, fanboysAnnoyanceListArrayAdapter, fanboysAnnoyanceListTextView)
@@ -424,7 +406,6 @@ class DomainSettingsFragment : Fragment() {
         // Set the icon and text view settings.  Non-standard items are handled individually below.
         setIconAndTextViewSettings(cookiesInt, cookiesDefault, cookiesLinearLayout, cookiesImageView, cookiesTextView)
         setIconAndTextViewSettings(domStorageInt, domStorageDefault, domStorageLinearLayout, domStorageImageView, domStorageTextView)
-        setIconAndTextViewSettings(formDataInt, formDataDefault, formDataLinearLayout, formDataImageView, formDataTextView)
         setIconAndTextViewSettings(easyListInt, easyListDefault, easyListLinearLayout, easyListImageView, easyListTextView)
         setIconAndTextViewSettings(easyPrivacyInt, easyPrivacyDefault, easyPrivacyLinearLayout, easyPrivacyImageView, easyListTextView)
         setIconAndTextViewSettings(fanboysAnnoyanceListInt, fanboysAnnoyanceListDefault, fanboysAnnoyanceListLinearLayout, fanboysAnnoyanceListImageView, fanboysAnnoyanceListTextView)
@@ -1059,20 +1040,6 @@ class DomainSettingsFragment : Fragment() {
             }
         }
 
-        // Set the form data spinner listener.  It can be removed once the minimum API >= 26.
-        if (Build.VERSION.SDK_INT < 26) {
-            formDataSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
-                override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
-                    // Update the icon and the text view settings.
-                    setIconAndTextViewSettings(position, formDataDefault, formDataLinearLayout, formDataImageView, formDataTextView)
-                }
-
-                override fun onNothingSelected(parent: AdapterView<*>?) {
-                    // Do nothing.
-                }
-            }
-        }
-
         // Set the user agent spinner listener.
         userAgentSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
             override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
index 10a4532d0880867c0283e48096a5839f9680de7a..b5d14b44c054863896066a1ecd7a9167946a9faf 100644 (file)
@@ -33,7 +33,6 @@ import android.widget.ArrayAdapter
 
 import androidx.appcompat.app.AppCompatDelegate
 import androidx.preference.Preference
-import androidx.preference.PreferenceCategory
 import androidx.preference.PreferenceFragmentCompat
 
 import com.stoutner.privacybrowser.R
@@ -65,7 +64,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
     private lateinit var clearCookiesPreference: Preference
     private lateinit var clearDomStoragePreference: Preference
     private lateinit var clearEverythingPreference: Preference
-    private lateinit var clearFormDataPreference: Preference  // The clear form data preference can be removed once the minimum API >= 26.
     private lateinit var clearLogcatPreference: Preference
     private lateinit var cookiesPreference: Preference
     private lateinit var customUserAgentPreference: Preference
@@ -80,7 +78,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
     private lateinit var fanboyAnnoyanceListPreference: Preference
     private lateinit var fanboySocialBlockingListPreference: Preference
     private lateinit var fontSizePreference: Preference
-    private lateinit var formDataPreference: Preference  // The form data preference can be removed once the minimum API >= 26.
     private lateinit var fullScreenBrowsingModePreference: Preference
     private lateinit var hideAppBarPreference: Preference
     private lateinit var displayUnderCutoutsPreference: Preference
@@ -127,7 +124,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
         javaScriptPreference = findPreference(getString(R.string.javascript_key))!!
         cookiesPreference = findPreference(getString(R.string.cookies_key))!!
         domStoragePreference = findPreference(getString(R.string.dom_storage_key))!!
-        formDataPreference = findPreference(getString(R.string.save_form_data_key))!!  // The form data preference can be removed once the minimum API >= 26.
         userAgentPreference = findPreference(getString(R.string.user_agent_key))!!
         customUserAgentPreference = findPreference(getString(R.string.custom_user_agent_key))!!
         incognitoModePreference = findPreference(getString(R.string.incognito_mode_key))!!
@@ -151,7 +147,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
         clearEverythingPreference = findPreference(getString(R.string.clear_everything_key))!!
         clearCookiesPreference = findPreference(getString(R.string.clear_cookies_key))!!
         clearDomStoragePreference = findPreference(getString(R.string.clear_dom_storage_key))!!
-        clearFormDataPreference = findPreference(getString(R.string.clear_form_data_key))!!  // The clear form data preference can be removed once the minimum API >= 26.
         clearLogcatPreference = findPreference(getString(R.string.clear_logcat_key))!!
         clearCachePreference = findPreference(getString(R.string.clear_cache_key))!!
         homepagePreference = findPreference(getString(R.string.homepage_key))!!
@@ -184,17 +179,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
         val fullScreenBrowsingMode = sharedPreferences.getBoolean(getString(R.string.full_screen_browsing_mode_key), false)
         val clearEverything = sharedPreferences.getBoolean(getString(R.string.clear_everything_key), true)
 
-        // Remove the form data preferences if the API is >= 26 as they no longer do anything.
-        if (Build.VERSION.SDK_INT >= 26) {
-            // Get handles for the categories.
-            val privacyCategory = findPreference<PreferenceCategory>(getString(R.string.privacy_category_key))!!
-            val clearAndExitCategory = findPreference<PreferenceCategory>(getString(R.string.clear_and_exit_category_key))!!
-
-            // Remove the form data preferences.
-            privacyCategory.removePreference(formDataPreference)
-            clearAndExitCategory.removePreference(clearFormDataPreference)
-        }
-
         // Only enable Fanboy's social blocking list preference if Fanboy's annoyance list is disabled.
         fanboySocialBlockingListPreference.isEnabled = !fanboyAnnoyanceListEnabled
 
@@ -271,7 +255,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
         // Set the status of the clear and exit preferences.
         clearCookiesPreference.isEnabled = !clearEverything
         clearDomStoragePreference.isEnabled = !clearEverything
-        clearFormDataPreference.isEnabled = !clearEverything  // Clear form data can be removed once the minimum API is >= 26.
         clearLogcatPreference.isEnabled = !clearEverything
         clearCachePreference.isEnabled = !clearEverything
 
@@ -344,14 +327,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
             domStoragePreference.setIcon(R.drawable.dom_storage_ghosted)
         }
 
-        // Set the save form data icon if API < 26.  Save form data has no effect on API >= 26.
-        if (Build.VERSION.SDK_INT < 26) {
-            if (sharedPreferences.getBoolean(getString(R.string.save_form_data_key), false))
-                formDataPreference.setIcon(R.drawable.form_data_enabled)
-            else
-                formDataPreference.setIcon(R.drawable.form_data_disabled)
-        }
-
         // Set the custom user agent icon.
         if (customUserAgentPreference.isEnabled)
             customUserAgentPreference.setIcon(R.drawable.custom_user_agent_enabled)
@@ -495,14 +470,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
         else
             clearDomStoragePreference.setIcon(R.drawable.clear_dom_storage_disabled)
 
-        // Set the clear form data icon if the API < 26.  It has no effect on newer versions of Android.
-        if (Build.VERSION.SDK_INT < 26) {
-            if (clearEverything || sharedPreferences.getBoolean(getString(R.string.clear_form_data_key), true))
-                clearFormDataPreference.setIcon(R.drawable.clear_form_data_enabled)
-            else
-                clearFormDataPreference.setIcon(R.drawable.clear_form_data_disabled)
-        }
-
         // Set the clear logcat icon.
         if (clearEverything || sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true))
             clearLogcatPreference.setIcon(R.drawable.clear_logcat_enabled)
@@ -679,14 +646,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
                         domStoragePreference.setIcon(R.drawable.dom_storage_disabled)
                 }
 
-                getString(R.string.save_form_data_key) -> {  // Saved form data can be removed once the minimum API >= 26.
-                    // Update the icon.
-                    if (sharedPreferences.getBoolean(getString(R.string.save_form_data_key), false))
-                        formDataPreference.setIcon(R.drawable.form_data_enabled)
-                    else
-                        formDataPreference.setIcon(R.drawable.form_data_disabled)
-                }
-
                 getString(R.string.user_agent_key) -> {
                     // Get the new user agent name.
                     val newUserAgentName = sharedPreferences.getString(getString(R.string.user_agent_key), getString(R.string.user_agent_default_value))
@@ -965,7 +924,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
                     // Update the status of the clear and exit preferences.
                     clearCookiesPreference.isEnabled = !newClearEverythingBoolean
                     clearDomStoragePreference.isEnabled = !newClearEverythingBoolean
-                    clearFormDataPreference.isEnabled = !newClearEverythingBoolean  // Clear form data can be removed once the minimum API >= 26.
                     clearLogcatPreference.isEnabled = !newClearEverythingBoolean
                     clearCachePreference.isEnabled = !newClearEverythingBoolean
 
@@ -987,14 +945,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
                     else
                         clearDomStoragePreference.setIcon(R.drawable.clear_dom_storage_disabled)
 
-                    // Update the clear form data preference icon if the API < 26.
-                    if (Build.VERSION.SDK_INT < 26) {
-                        if (newClearEverythingBoolean || sharedPreferences.getBoolean(getString(R.string.clear_form_data_key), true))
-                            clearFormDataPreference.setIcon(R.drawable.clear_form_data_enabled)
-                        else
-                            clearFormDataPreference.setIcon(R.drawable.clear_form_data_disabled)
-                    }
-
                     // Update the clear logcat preference icon.
                     if (newClearEverythingBoolean || sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true))
                         clearLogcatPreference.setIcon(R.drawable.clear_logcat_enabled)
@@ -1024,14 +974,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
                         clearDomStoragePreference.setIcon(R.drawable.clear_dom_storage_disabled)
                 }
 
-                getString(R.string.clear_form_data_key) -> {
-                    // Update the icon.
-                    if (sharedPreferences.getBoolean(getString(R.string.clear_form_data_key), true))
-                        clearFormDataPreference.setIcon(R.drawable.clear_form_data_enabled)
-                    else
-                        clearFormDataPreference.setIcon(R.drawable.clear_form_data_disabled)
-                }
-
                 getString(R.string.clear_logcat_key) -> {
                     // Update the icon.
                     if (sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true))
index dea4c75fe5316040456858d65defca7012e11b67..22ee1a25afe4a79fac0e148bf7b9a1d00c82d5c1 100644 (file)
@@ -31,7 +31,7 @@ import androidx.preference.PreferenceManager
 import com.stoutner.privacybrowser.R
 
 // Define the class constants.
-private const val SCHEMA_VERSION = 16
+private const val SCHEMA_VERSION = 17
 
 // Define the public database constants.
 const val DOMAINS_DATABASE = "domains.db"
@@ -54,7 +54,6 @@ const val ENABLE_EASYLIST = "enableeasylist"
 const val ENABLE_EASYPRIVACY = "enableeasyprivacy"
 const val ENABLE_FANBOYS_ANNOYANCE_LIST = "enablefanboysannoyancelist"
 const val ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST = "enablefanboyssocialblockinglist"
-const val ENABLE_FORM_DATA = "enableformdata" // Form data can be removed once the minimum API >= 26.
 const val ENABLE_JAVASCRIPT = "enablejavascript"
 const val ENABLE_ULTRAPRIVACY = "enableultraprivacy"
 const val FONT_SIZE = "fontsize"
@@ -83,7 +82,6 @@ const val CREATE_DOMAINS_TABLE = "CREATE TABLE $DOMAINS_TABLE (" +
         "$ENABLE_JAVASCRIPT INTEGER, " +
         "$COOKIES INTEGER, " +
         "$ENABLE_DOM_STORAGE INTEGER, " +
-        "$ENABLE_FORM_DATA INTEGER, " +
         "$USER_AGENT TEXT, " +
         "$ENABLE_EASYLIST INTEGER, " +
         "$ENABLE_EASYPRIVACY INTEGER, " +
@@ -269,7 +267,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
             val javaScriptDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.javascript_key), false)
             val cookiesDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.cookies_key), false)
             val domStorageDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.dom_storage_key), false)
-            val formDataDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.save_form_data_key), false)
             val easyListDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.easylist_key), true)
             val easyPrivacyDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.easyprivacy_key), true)
             val fanboysAnnoyanceListDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.fanboys_annoyance_list_key), true)
@@ -285,7 +282,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
             val javaScriptColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT)
             val cookiesColumnIndex = domainsCursor.getColumnIndexOrThrow(COOKIES)
             val domStorageColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE)
-            val formDataColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_FORM_DATA)
             val easyListColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_EASYLIST)
             val easyPrivacyColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY)
             val fanboysAnnoyanceListColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_ANNOYANCE_LIST)
@@ -303,7 +299,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
                 val javaScriptDomainCurrentValue = domainsCursor.getInt(javaScriptColumnIndex)
                 val cookiesDomainCurrentValue = domainsCursor.getInt(cookiesColumnIndex)
                 val domStorageDomainCurrentValue = domainsCursor.getInt(domStorageColumnIndex)
-                val formDataDomainCurrentValue = domainsCursor.getInt(formDataColumnIndex)
                 val easyListDomainCurrentValue = domainsCursor.getInt(easyListColumnIndex)
                 val easyPrivacyDomainCurrentValue = domainsCursor.getInt(easyPrivacyColumnIndex)
                 val fanboysAnnoyanceListCurrentValue = domainsCursor.getInt(fanboysAnnoyanceListColumnIndex)
@@ -319,7 +314,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
                 domainContentValues.put(ENABLE_JAVASCRIPT, convertFromSwitchToSpinner(javaScriptDefaultValue, javaScriptDomainCurrentValue))
                 domainContentValues.put(COOKIES, convertFromSwitchToSpinner(cookiesDefaultValue, cookiesDomainCurrentValue))
                 domainContentValues.put(ENABLE_DOM_STORAGE, convertFromSwitchToSpinner(domStorageDefaultValue, domStorageDomainCurrentValue))
-                domainContentValues.put(ENABLE_FORM_DATA, convertFromSwitchToSpinner(formDataDefaultValue, formDataDomainCurrentValue))
                 domainContentValues.put(ENABLE_EASYLIST, convertFromSwitchToSpinner(easyListDefaultValue, easyListDomainCurrentValue))
                 domainContentValues.put(ENABLE_EASYPRIVACY, convertFromSwitchToSpinner(easyPrivacyDefaultValue, easyPrivacyDomainCurrentValue))
                 domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, convertFromSwitchToSpinner(fanboysAnnoyanceListDefaultValue, fanboysAnnoyanceListCurrentValue))
@@ -335,6 +329,12 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
                 domainsDatabase.update(DOMAINS_TABLE, domainContentValues, "$ID = $currentDatabaseId", null)
             }
 
+            // Upgrade from schema version 16, first used in Privacy Browser 3.15, to schema version 17, first used in Privacy Browser 3.18.
+            // This upgrade removed `enableformdata`.
+            // SQLite amazingly only added a command to drop a column in version 3.35.0.  <https://www.sqlite.org/changes.html>
+            // That will not be supported in Android until the minimum API >= 34.  <https://developer.android.com/reference/android/database/sqlite/package-summary>
+            // Although a new table could be created and all the data copied to it, I think I will just leave the `enableformdata` column.  It will be wiped out the next time an import is run.
+
             // Close the cursor.
             domainsCursor.close()
         }
@@ -410,11 +410,11 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
 
     fun addDomain(domainName: String): Int {
         // Add the domain with default settings.
-        return addDomain(domainName, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, appContext.getString(R.string.system_default_user_agent), SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT,
+        return addDomain(domainName, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, appContext.getString(R.string.system_default_user_agent), SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT,
                          SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT)
     }
 
-    fun addDomain(domainName: String, javaScriptInt: Int, cookiesInt: Int, domStorageInt: Int, formDataInt: Int, userAgentName: String, easyListInt: Int, easyPrivacyInt: Int, fanboysAnnoyanceListInt: Int,
+    fun addDomain(domainName: String, javaScriptInt: Int, cookiesInt: Int, domStorageInt: Int, userAgentName: String, easyListInt: Int, easyPrivacyInt: Int, fanboysAnnoyanceListInt: Int,
                   fanboysSocialBlockingListInt: Int, ultraListInt: Int, ultraPrivacyInt: Int, blockAllThirdPartyRequestsInt: Int, fontSizeInt: Int, swipeToRefreshInt: Int, webViewThemeInt: Int,
                   wideViewportInt: Int, displayImagesInt: Int): Int {
         // Instantiate a content values.
@@ -425,7 +425,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
         domainContentValues.put(ENABLE_JAVASCRIPT, javaScriptInt)
         domainContentValues.put(COOKIES, cookiesInt)
         domainContentValues.put(ENABLE_DOM_STORAGE, domStorageInt)
-        domainContentValues.put(ENABLE_FORM_DATA, formDataInt) // Form data can be removed once the minimum API >= 26.
         domainContentValues.put(USER_AGENT, userAgentName)
         domainContentValues.put(ENABLE_EASYLIST, easyListInt)
         domainContentValues.put(ENABLE_EASYPRIVACY, easyPrivacyInt)
@@ -453,7 +452,7 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
         return newDomainDatabaseId
     }
 
-    fun updateDomain(databaseId: Int, domainName: String, javaScript: Int, cookies: Int, domStorage: Int, formData: Int, userAgent: String, easyList: Int, easyPrivacy: Int, fanboysAnnoyance: Int,
+    fun updateDomain(databaseId: Int, domainName: String, javaScript: Int, cookies: Int, domStorage: Int, userAgent: String, easyList: Int, easyPrivacy: Int, fanboysAnnoyance: Int,
                      fanboysSocialBlocking: Int, ultraList: Int, ultraPrivacy: Int, blockAllThirdPartyRequests: Int, fontSize: Int, swipeToRefresh: Int, webViewTheme: Int, wideViewport: Int, displayImages: Int,
                      pinnedSslCertificate: Boolean, pinnedIpAddresses: Boolean) {
 
@@ -465,7 +464,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
         domainContentValues.put(ENABLE_JAVASCRIPT, javaScript)
         domainContentValues.put(COOKIES, cookies)
         domainContentValues.put(ENABLE_DOM_STORAGE, domStorage)
-        domainContentValues.put(ENABLE_FORM_DATA, formData) // Form data can be removed once the minimum API >= 26.
         domainContentValues.put(USER_AGENT, userAgent)
         domainContentValues.put(ENABLE_EASYLIST, easyList)
         domainContentValues.put(ENABLE_EASYPRIVACY, easyPrivacy)
index 8f1b93c0ea87d8fae2357ea6b9d87157403e5e5f..0b040748dbfad1112dd3e29c80c51ac0c1f16516 100644 (file)
@@ -38,7 +38,7 @@ import java.io.OutputStream
 import java.util.Date
 
 // Define the public constants.
-const val IMPORT_EXPORT_SCHEMA_VERSION = 18
+const val IMPORT_EXPORT_SCHEMA_VERSION = 19
 const val EXPORT_SUCCESSFUL = "A"
 const val IMPORT_SUCCESSFUL = "B"
 
@@ -51,7 +51,6 @@ private const val CLEAR_CACHE = "clear_cache"
 private const val CLEAR_COOKIES = "clear_cookies"
 private const val CLEAR_DOM_STORAGE = "clear_dom_storage"
 private const val CLEAR_EVERYTHING = "clear_everything"
-private const val CLEAR_FORM_DATA = "clear_form_data"  // Clear form data can be removed once the minimum API >= 26.
 private const val CLEAR_LOGCAT = "clear_logcat"
 private const val CUSTOM_USER_AGENT = "custom_user_agent"
 private const val DISPLAY_ADDITIONAL_APP_BAR_ICONS = "display_additional_app_bar_icons"
@@ -75,7 +74,6 @@ private const val PREFERENCES_TABLE = "preferences"
 private const val PREFERENCES_USER_AGENT = "user_agent"
 private const val PROXY = "proxy"
 private const val PROXY_CUSTOM_URL = "proxy_custom_url"
-private const val SAVE_FORM_DATA = "save_form_data"
 private const val SEARCH = "search"
 private const val SEARCH_CUSTOM_URL = "search_custom_url"
 private const val SCROLL_APP_BAR = "scroll_app_bar"
@@ -401,11 +399,14 @@ class ImportExportDatabaseHelper {
             }
 
             // Upgrade from schema version 15, first used in Privacy Browser 3.11, to schema version 16, first used in Privacy Browser 3.12.
-            // This upgrade removed the `x_requested_with_header` from the domains and preferences tables.
+            // This upgrade removed `x_requested_with_header` from the domains and preferences tables.
             // There is no need to delete the columns as they will simply be ignored by the import.
 
             // Upgrade from schema version 16, first used in Privacy Browser 3.12, to schema version 17, first used in Privacy Browser 3.15.
             if (importDatabaseVersion < 17) {
+                // This upgrade removed `parentfolder` from the Bookmarks table.
+                // There is no need to delete the column as they will simply be ignored by the import.
+
                 // Add the folder ID column.
                 importDatabase.execSQL("ALTER TABLE $BOOKMARKS_TABLE ADD COLUMN $FOLDER_ID INTEGER")
 
@@ -490,10 +491,74 @@ class ImportExportDatabaseHelper {
                 // Close the bookmarks cursor.
                 bookmarksCursor.close()
 
-                // This upgrade removed the old `parentfolder` string column.
-                // SQLite amazingly only added a command to drop a column in version 3.35.0.  <https://www.sqlite.org/changes.html>
-                // It will be a while before that is supported in Android.  <https://developer.android.com/reference/android/database/sqlite/package-summary>
-                // Although a new table could be created and all the data copied to it, I think I will just leave the old parent folder column.  It will be wiped out the next time an import is run.
+                // Get the current switch default values.
+                val javaScriptDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.javascript_key), false)
+                val cookiesDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.cookies_key), false)
+                val domStorageDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.dom_storage_key), false)
+                val easyListDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.easylist_key), true)
+                val easyPrivacyDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.easyprivacy_key), true)
+                val fanboysAnnoyanceListDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.fanboys_annoyance_list_key), true)
+                val fanboysSocialBlockingListDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.fanboys_social_blocking_list), true)
+                val ultraListDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.ultralist_key), true)
+                val ultraPrivacyDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.ultraprivacy_key), true)
+                val blockAllThirdPartyRequestsDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.block_all_third_party_requests_key), false)
+
+                // Get a domains cursor.
+                val importDomainsConversionCursor = importDatabase.rawQuery("SELECT * FROM $DOMAINS_TABLE", null)
+
+                // Get the domains column indexes.
+                val javaScriptColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT)
+                val cookiesColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(COOKIES)
+                val domStorageColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE)
+                val easyListColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_EASYLIST)
+                val easyPrivacyColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY)
+                val fanboysAnnoyanceListColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_ANNOYANCE_LIST)
+                val fanboysSocialBlockingListColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST)
+                val ultraListColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ULTRALIST)
+                val ultraPrivacyColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_ULTRAPRIVACY)
+                val blockAllThirdPartyRequestsColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(BLOCK_ALL_THIRD_PARTY_REQUESTS)
+
+                // Convert the domain from the switch booleans to the spinner integers.
+                for (i in 0 until importDomainsConversionCursor.count) {
+                    // Move to the current record.
+                    importDomainsConversionCursor.moveToPosition(i)
+
+                    // Get the domain current values.
+                    val javaScriptDomainCurrentValue = importDomainsConversionCursor.getInt(javaScriptColumnIndex)
+                    val cookiesDomainCurrentValue = importDomainsConversionCursor.getInt(cookiesColumnIndex)
+                    val domStorageDomainCurrentValue = importDomainsConversionCursor.getInt(domStorageColumnIndex)
+                    val easyListDomainCurrentValue = importDomainsConversionCursor.getInt(easyListColumnIndex)
+                    val easyPrivacyDomainCurrentValue = importDomainsConversionCursor.getInt(easyPrivacyColumnIndex)
+                    val fanboysAnnoyanceListCurrentValue = importDomainsConversionCursor.getInt(fanboysAnnoyanceListColumnIndex)
+                    val fanboysSocialBlockingListCurrentValue = importDomainsConversionCursor.getInt(fanboysSocialBlockingListColumnIndex)
+                    val ultraListCurrentValue = importDomainsConversionCursor.getInt(ultraListColumnIndex)
+                    val ultraPrivacyCurrentValue = importDomainsConversionCursor.getInt(ultraPrivacyColumnIndex)
+                    val blockAllThirdPartyRequestsCurrentValue = importDomainsConversionCursor.getInt(blockAllThirdPartyRequestsColumnIndex)
+
+                    // Instantiate a domain content values.
+                    val domainContentValues = ContentValues()
+
+                    // Populate the domain content values.
+                    domainContentValues.put(ENABLE_JAVASCRIPT, convertFromSwitchToSpinner(javaScriptDefaultValue, javaScriptDomainCurrentValue))
+                    domainContentValues.put(COOKIES, convertFromSwitchToSpinner(cookiesDefaultValue, cookiesDomainCurrentValue))
+                    domainContentValues.put(ENABLE_DOM_STORAGE, convertFromSwitchToSpinner(domStorageDefaultValue, domStorageDomainCurrentValue))
+                    domainContentValues.put(ENABLE_EASYLIST, convertFromSwitchToSpinner(easyListDefaultValue, easyListDomainCurrentValue))
+                    domainContentValues.put(ENABLE_EASYPRIVACY, convertFromSwitchToSpinner(easyPrivacyDefaultValue, easyPrivacyDomainCurrentValue))
+                    domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, convertFromSwitchToSpinner(fanboysAnnoyanceListDefaultValue, fanboysAnnoyanceListCurrentValue))
+                    domainContentValues.put(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST, convertFromSwitchToSpinner(fanboysSocialBlockingListDefaultValue, fanboysSocialBlockingListCurrentValue))
+                    domainContentValues.put(ULTRALIST, convertFromSwitchToSpinner(ultraListDefaultValue, ultraListCurrentValue))
+                    domainContentValues.put(ENABLE_ULTRAPRIVACY, convertFromSwitchToSpinner(ultraPrivacyDefaultValue, ultraPrivacyCurrentValue))
+                    domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, convertFromSwitchToSpinner(blockAllThirdPartyRequestsDefaultValue, blockAllThirdPartyRequestsCurrentValue))
+
+                    // Get the current database ID.
+                    val currentDatabaseId = importDomainsConversionCursor.getInt(importDomainsConversionCursor.getColumnIndexOrThrow(ID))
+
+                    // Update the row for the specified database ID.
+                    importDatabase.update(DOMAINS_TABLE, domainContentValues, "$ID = $currentDatabaseId", null)
+                }
+
+                // Close the cursor.
+                importDomainsConversionCursor.close()
             }
 
             // Upgrade from schema version 17, first used in Privacy Browser 3.15, to schema version 18, first used in Privacy Browser 3.17.
@@ -506,7 +571,7 @@ class ImportExportDatabaseHelper {
                 val displayUnderCutouts = sharedPreferences.getBoolean(DISPLAY_UNDER_CUTOUTS, false)
 
                 // Populate the preferences table with the current display under cutouts value.
-                // This can switch to using the variables directly once the API >= 30.  <https://www.sqlite.org/datatype3.html#boolean_datatype>
+                // This can switch to using the variables directly once the minimum API >= 30.  <https://www.sqlite.org/datatype3.html#boolean_datatype>
                 // <https://developer.android.com/reference/android/database/sqlite/package-summary>
                 if (displayUnderCutouts)
                     importDatabase.execSQL("UPDATE $PREFERENCES_TABLE SET $DISPLAY_UNDER_CUTOUTS = 1")
@@ -535,6 +600,11 @@ class ImportExportDatabaseHelper {
                     importDatabase.execSQL("UPDATE $PREFERENCES_TABLE SET $DOWNLOAD_PROVIDER = '${downloadProviderEntryValuesStringArray[0]}'")
             }
 
+            // Upgrade from schema version 18, first used in Privacy Browser 3.17, to schema version 19, first used in Privacy Browser 3.18.
+            // This upgrade removed `enableformdata` from the Domains table and `save_form_data` and `clear_form_data` from the Preferences table.
+            // There is no need to delete the columns as they will simply be ignored by the import.
+
+
             /* End of database upgrade logic. */
 
 
@@ -580,82 +650,6 @@ class ImportExportDatabaseHelper {
                 importBookmarksCursor.moveToNext()
             }
 
-            // Upgrade from schema version 16, first used in Privacy Browser 3.12, to schema version 17, first used in Privacy Browser 3.15.
-            if (importDatabaseVersion < 16) {
-                // Get the current switch default values.
-                val javaScriptDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.javascript_key), false)
-                val cookiesDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.cookies_key), false)
-                val domStorageDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.dom_storage_key), false)
-                val formDataDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.save_form_data_key), false)
-                val easyListDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.easylist_key), true)
-                val easyPrivacyDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.easyprivacy_key), true)
-                val fanboysAnnoyanceListDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.fanboys_annoyance_list_key), true)
-                val fanboysSocialBlockingListDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.fanboys_social_blocking_list), true)
-                val ultraListDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.ultralist_key), true)
-                val ultraPrivacyDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.ultraprivacy_key), true)
-                val blockAllThirdPartyRequestsDefaultValue = sharedPreferences.getBoolean(context.getString(R.string.block_all_third_party_requests_key), false)
-
-                // Get a domains cursor.
-                val importDomainsConversionCursor = importDatabase.rawQuery("SELECT * FROM $DOMAINS_TABLE", null)
-
-                // Get the domains column indexes.
-                val javaScriptColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT)
-                val cookiesColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(COOKIES)
-                val domStorageColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE)
-                val formDataColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_FORM_DATA)
-                val easyListColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_EASYLIST)
-                val easyPrivacyColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY)
-                val fanboysAnnoyanceListColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_ANNOYANCE_LIST)
-                val fanboysSocialBlockingListColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST)
-                val ultraListColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ULTRALIST)
-                val ultraPrivacyColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(ENABLE_ULTRAPRIVACY)
-                val blockAllThirdPartyRequestsColumnIndex = importDomainsConversionCursor.getColumnIndexOrThrow(BLOCK_ALL_THIRD_PARTY_REQUESTS)
-
-                // Convert the domain from the switch booleans to the spinner integers.
-                for (i in 0 until importDomainsConversionCursor.count) {
-                    // Move to the current record.
-                    importDomainsConversionCursor.moveToPosition(i)
-
-                    // Get the domain current values.
-                    val javaScriptDomainCurrentValue = importDomainsConversionCursor.getInt(javaScriptColumnIndex)
-                    val cookiesDomainCurrentValue = importDomainsConversionCursor.getInt(cookiesColumnIndex)
-                    val domStorageDomainCurrentValue = importDomainsConversionCursor.getInt(domStorageColumnIndex)
-                    val formDataDomainCurrentValue = importDomainsConversionCursor.getInt(formDataColumnIndex)
-                    val easyListDomainCurrentValue = importDomainsConversionCursor.getInt(easyListColumnIndex)
-                    val easyPrivacyDomainCurrentValue = importDomainsConversionCursor.getInt(easyPrivacyColumnIndex)
-                    val fanboysAnnoyanceListCurrentValue = importDomainsConversionCursor.getInt(fanboysAnnoyanceListColumnIndex)
-                    val fanboysSocialBlockingListCurrentValue = importDomainsConversionCursor.getInt(fanboysSocialBlockingListColumnIndex)
-                    val ultraListCurrentValue = importDomainsConversionCursor.getInt(ultraListColumnIndex)
-                    val ultraPrivacyCurrentValue = importDomainsConversionCursor.getInt(ultraPrivacyColumnIndex)
-                    val blockAllThirdPartyRequestsCurrentValue = importDomainsConversionCursor.getInt(blockAllThirdPartyRequestsColumnIndex)
-
-                    // Instantiate a domain content values.
-                    val domainContentValues = ContentValues()
-
-                    // Populate the domain content values.
-                    domainContentValues.put(ENABLE_JAVASCRIPT, convertFromSwitchToSpinner(javaScriptDefaultValue, javaScriptDomainCurrentValue))
-                    domainContentValues.put(COOKIES, convertFromSwitchToSpinner(cookiesDefaultValue, cookiesDomainCurrentValue))
-                    domainContentValues.put(ENABLE_DOM_STORAGE, convertFromSwitchToSpinner(domStorageDefaultValue, domStorageDomainCurrentValue))
-                    domainContentValues.put(ENABLE_FORM_DATA, convertFromSwitchToSpinner(formDataDefaultValue, formDataDomainCurrentValue))
-                    domainContentValues.put(ENABLE_EASYLIST, convertFromSwitchToSpinner(easyListDefaultValue, easyListDomainCurrentValue))
-                    domainContentValues.put(ENABLE_EASYPRIVACY, convertFromSwitchToSpinner(easyPrivacyDefaultValue, easyPrivacyDomainCurrentValue))
-                    domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, convertFromSwitchToSpinner(fanboysAnnoyanceListDefaultValue, fanboysAnnoyanceListCurrentValue))
-                    domainContentValues.put(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST, convertFromSwitchToSpinner(fanboysSocialBlockingListDefaultValue, fanboysSocialBlockingListCurrentValue))
-                    domainContentValues.put(ULTRALIST, convertFromSwitchToSpinner(ultraListDefaultValue, ultraListCurrentValue))
-                    domainContentValues.put(ENABLE_ULTRAPRIVACY, convertFromSwitchToSpinner(ultraPrivacyDefaultValue, ultraPrivacyCurrentValue))
-                    domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, convertFromSwitchToSpinner(blockAllThirdPartyRequestsDefaultValue, blockAllThirdPartyRequestsCurrentValue))
-
-                    // Get the current database ID.
-                    val currentDatabaseId = importDomainsConversionCursor.getInt(importDomainsConversionCursor.getColumnIndexOrThrow(ID))
-
-                    // Update the row for the specified database ID.
-                    importDatabase.update(DOMAINS_TABLE, domainContentValues, "$ID = $currentDatabaseId", null)
-                }
-
-                // Close the cursor.
-                importDomainsConversionCursor.close()
-            }
-
             // Close the bookmarks cursor and database.
             importBookmarksCursor.close()
             bookmarksDatabaseHelper.close()
@@ -678,7 +672,6 @@ class ImportExportDatabaseHelper {
             val domainJavaScriptColumnIndex = importDomainsCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT)
             val domainCookiesColumnIndex = importDomainsCursor.getColumnIndexOrThrow(COOKIES)
             val domainDomStorageColumnIndex = importDomainsCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE)
-            val domainFormDataColumnIndex = importDomainsCursor.getColumnIndexOrThrow(ENABLE_FORM_DATA)  // Form data can be removed once the minimum API >= 26.
             val domainEasyListColumnIndex = importDomainsCursor.getColumnIndexOrThrow(ENABLE_EASYLIST)
             val domainEasyPrivacyColumnIndex = importDomainsCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY)
             val domainFanboysAnnoyanceListColumnIndex = importDomainsCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_ANNOYANCE_LIST)
@@ -714,7 +707,6 @@ class ImportExportDatabaseHelper {
                 domainContentValues.put(ENABLE_JAVASCRIPT, importDomainsCursor.getInt(domainJavaScriptColumnIndex))
                 domainContentValues.put(COOKIES, importDomainsCursor.getInt(domainCookiesColumnIndex))
                 domainContentValues.put(ENABLE_DOM_STORAGE, importDomainsCursor.getInt(domainDomStorageColumnIndex))
-                domainContentValues.put(ENABLE_FORM_DATA, importDomainsCursor.getInt(domainFormDataColumnIndex))  // Form data can be removed once the minimum API >= 26.
                 domainContentValues.put(ENABLE_EASYLIST, importDomainsCursor.getInt(domainEasyListColumnIndex))
                 domainContentValues.put(ENABLE_EASYPRIVACY, importDomainsCursor.getInt(domainEasyPrivacyColumnIndex))
                 domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, importDomainsCursor.getInt(domainFanboysAnnoyanceListColumnIndex))
@@ -763,7 +755,6 @@ class ImportExportDatabaseHelper {
                 .putBoolean(JAVASCRIPT, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(JAVASCRIPT)) == 1)
                 .putBoolean(COOKIES, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(COOKIES)) == 1)
                 .putBoolean(DOM_STORAGE, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(DOM_STORAGE)) == 1)
-                .putBoolean(SAVE_FORM_DATA, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(SAVE_FORM_DATA)) == 1)  // Save form data can be removed once the minimum API >= 26.
                 .putString(PREFERENCES_USER_AGENT, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndexOrThrow(PREFERENCES_USER_AGENT)))
                 .putString(CUSTOM_USER_AGENT, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndexOrThrow(CUSTOM_USER_AGENT)))
                 .putBoolean(INCOGNITO_MODE, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(INCOGNITO_MODE)) == 1)
@@ -787,7 +778,6 @@ class ImportExportDatabaseHelper {
                 .putBoolean(CLEAR_EVERYTHING, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(CLEAR_EVERYTHING)) == 1)
                 .putBoolean(CLEAR_COOKIES, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(CLEAR_COOKIES)) == 1)
                 .putBoolean(CLEAR_DOM_STORAGE, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(CLEAR_DOM_STORAGE)) == 1)
-                .putBoolean(CLEAR_FORM_DATA, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(CLEAR_FORM_DATA)) == 1)  // Clear form data can be removed once the minimum API >= 26.
                 .putBoolean(CLEAR_LOGCAT, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(CLEAR_LOGCAT)) == 1)
                 .putBoolean(CLEAR_CACHE, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndexOrThrow(CLEAR_CACHE)) == 1)
                 .putString(HOMEPAGE, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndexOrThrow(HOMEPAGE)))
@@ -895,7 +885,6 @@ class ImportExportDatabaseHelper {
             val domainJavaScriptColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT)
             val domainCookiesColumnIndex = domainsCursor.getColumnIndexOrThrow(COOKIES)
             val domainDomStorageColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE)
-            val domainFormDataColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_FORM_DATA)  // Form data can be removed once the minimum API >= 26.
             val domainEasyListColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_EASYLIST)
             val domainEasyPrivacyColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY)
             val domainFanboysAnnoyanceListColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_ANNOYANCE_LIST)
@@ -931,7 +920,6 @@ class ImportExportDatabaseHelper {
                 domainContentValues.put(ENABLE_JAVASCRIPT, domainsCursor.getInt(domainJavaScriptColumnIndex))
                 domainContentValues.put(COOKIES, domainsCursor.getInt(domainCookiesColumnIndex))
                 domainContentValues.put(ENABLE_DOM_STORAGE, domainsCursor.getInt(domainDomStorageColumnIndex))
-                domainContentValues.put(ENABLE_FORM_DATA, domainsCursor.getInt(domainFormDataColumnIndex))  // Form data can be removed once the minimum API >= 26.
                 domainContentValues.put(ENABLE_EASYLIST, domainsCursor.getInt(domainEasyListColumnIndex))
                 domainContentValues.put(ENABLE_EASYPRIVACY, domainsCursor.getInt(domainEasyPrivacyColumnIndex))
                 domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, domainsCursor.getInt(domainFanboysAnnoyanceListColumnIndex))
@@ -975,7 +963,6 @@ class ImportExportDatabaseHelper {
                     "$JAVASCRIPT BOOLEAN, " +
                     "$COOKIES BOOLEAN, " +
                     "$DOM_STORAGE BOOLEAN, " +
-                    "$SAVE_FORM_DATA BOOLEAN, " +
                     "$PREFERENCES_USER_AGENT TEXT, " +
                     "$CUSTOM_USER_AGENT TEXT, " +
                     "$INCOGNITO_MODE BOOLEAN, " +
@@ -999,7 +986,6 @@ class ImportExportDatabaseHelper {
                     "$CLEAR_EVERYTHING BOOLEAN, " +
                     "$CLEAR_COOKIES BOOLEAN, " +
                     "$CLEAR_DOM_STORAGE BOOLEAN, " +
-                    "$CLEAR_FORM_DATA BOOLEAN, " +
                     "$CLEAR_LOGCAT BOOLEAN, " +
                     "$CLEAR_CACHE BOOLEAN, " +
                     "$HOMEPAGE TEXT, " +
@@ -1028,7 +1014,6 @@ class ImportExportDatabaseHelper {
             preferencesContentValues.put(JAVASCRIPT, sharedPreferences.getBoolean(JAVASCRIPT, false))
             preferencesContentValues.put(COOKIES, sharedPreferences.getBoolean(COOKIES, false))
             preferencesContentValues.put(DOM_STORAGE, sharedPreferences.getBoolean(DOM_STORAGE, false))
-            preferencesContentValues.put(SAVE_FORM_DATA, sharedPreferences.getBoolean(SAVE_FORM_DATA, false))  // Save form data can be removed once the minimum API >= 26.
             preferencesContentValues.put(PREFERENCES_USER_AGENT, sharedPreferences.getString(PREFERENCES_USER_AGENT, context.getString(R.string.user_agent_default_value)))
             preferencesContentValues.put(CUSTOM_USER_AGENT, sharedPreferences.getString(CUSTOM_USER_AGENT, context.getString(R.string.custom_user_agent_default_value)))
             preferencesContentValues.put(INCOGNITO_MODE, sharedPreferences.getBoolean(INCOGNITO_MODE, false))
@@ -1052,7 +1037,6 @@ class ImportExportDatabaseHelper {
             preferencesContentValues.put(CLEAR_EVERYTHING, sharedPreferences.getBoolean(CLEAR_EVERYTHING, true))
             preferencesContentValues.put(CLEAR_COOKIES, sharedPreferences.getBoolean(CLEAR_COOKIES, true))
             preferencesContentValues.put(CLEAR_DOM_STORAGE, sharedPreferences.getBoolean(CLEAR_DOM_STORAGE, true))
-            preferencesContentValues.put(CLEAR_FORM_DATA, sharedPreferences.getBoolean(CLEAR_FORM_DATA, true))  // Clear form data can be removed once the minimum API >= 26.
             preferencesContentValues.put(CLEAR_LOGCAT, sharedPreferences.getBoolean(CLEAR_LOGCAT, true))
             preferencesContentValues.put(CLEAR_CACHE, sharedPreferences.getBoolean(CLEAR_CACHE, true))
             preferencesContentValues.put(HOMEPAGE, sharedPreferences.getString(HOMEPAGE, context.getString(R.string.homepage_default_value)))
diff --git a/app/src/main/res/drawable/about.xml b/app/src/main/res/drawable/about.xml
deleted file mode 100644 (file)
index 90444f6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This file comes from the Android Material icon set, where it is called `info_outline`.  It is released under the Apache License 2.0. -->
-
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportHeight="24"
-    android:viewportWidth="24" >
-
-    <path
-        android:fillColor="@color/icon"
-        android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z" />
-</vector>
index 71035bcce27d5973403ae05bd7e0db89178878bb..05b7570ecf4d39b18e5a4f5bce01ca62c2654048 100644 (file)
@@ -10,4 +10,4 @@
     <path
         android:fillColor="@color/blue_icon"
         android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z" />
-</vector>
\ No newline at end of file
+</vector>
diff --git a/app/src/main/res/drawable/clear_form_data_disabled.xml b/app/src/main/res/drawable/clear_form_data_disabled.xml
deleted file mode 100644 (file)
index 16aa9e7..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- This file comes from the Android Material icon set, where it is called `subtitles`.  It is released under the Apache License 2.0. -->
-
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportHeight="24"
-    android:viewportWidth="24"
-    android:autoMirrored="true" >
-
-    <path
-        android:fillColor="@color/red_icon"
-        android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM4,12h4v2L4,14v-2zM14,18L4,18v-2h10v2zM20,18h-4v-2h4v2zM20,14L10,14v-2h10v2z"/>
-</vector>
diff --git a/app/src/main/res/drawable/clear_form_data_enabled.xml b/app/src/main/res/drawable/clear_form_data_enabled.xml
deleted file mode 100644 (file)
index 237d4b7..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- This file comes from the Android Material icon set, where it is called `subtitles`.  It is released under the Apache License 2.0. -->
-
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportHeight="24"
-    android:viewportWidth="24"
-    android:autoMirrored="true" >
-
-    <path
-        android:fillColor="@color/blue_icon"
-        android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM4,12h4v2L4,14v-2zM14,18L4,18v-2h10v2zM20,18h-4v-2h4v2zM20,14L10,14v-2h10v2z"/>
-</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/form_data_disabled.xml b/app/src/main/res/drawable/form_data_disabled.xml
deleted file mode 100644 (file)
index d4dbefa..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- This file comes from the Android Material icon set, where it is called `subtitles`.  It is released under the Apache License 2.0. -->
-
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportHeight="24"
-    android:viewportWidth="24"
-    android:autoMirrored="true" >
-
-    <path
-        android:fillColor="@color/disabled_icon"
-        android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM4,12h4v2L4,14v-2zM14,18L4,18v-2h10v2zM20,18h-4v-2h4v2zM20,14L10,14v-2h10v2z"/>
-</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/form_data_enabled.xml b/app/src/main/res/drawable/form_data_enabled.xml
deleted file mode 100644 (file)
index 3809607..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- This file comes from the Android Material icon set, where it is called `subtitles`.  It is released under the Apache License 2.0. -->
-
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportHeight="24"
-    android:viewportWidth="24"
-    android:autoMirrored="true" >
-
-    <path
-        android:fillColor="@color/yellow_900"
-        android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM4,12h4v2L4,14v-2zM14,18L4,18v-2h10v2zM20,18h-4v-2h4v2zM20,14L10,14v-2h10v2z"/>
-</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/move_to_folder.xml b/app/src/main/res/drawable/move_to_folder.xml
deleted file mode 100644 (file)
index 0914f14..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-  Copyright 2017,2022 Soren Stoutner <soren@stoutner.com>.
-
-  This file is derived from elements of `folder` and `exit_to_app`, which are part of the Android Material icon set.  They are released under the Apache License 2.0.
-
-  This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
-
-  Privacy Browser Android 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 Android 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 Android.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportHeight="24"
-    android:viewportWidth="24"
-    android:autoMirrored="true" >
-
-    <path
-        android:fillColor="@color/icon"
-        android:pathData="M4,4C2.9,4 2.01,4.9 2.01,6L2,18C2,19.1 2.9,20 4,20L20,20C21.1,20 22,19.1 22,18L22,8C22,6.9 21.1,6 20,6L12,6L10,4L4,4zM13.75,7.83L18.75,12.83L13.75,17.83L12.34,16.421L14.92,13.83L5.25,13.83L5.25,11.83L14.92,11.83L12.34,9.24L13.75,7.83z" />
-</vector>
index 5b143b0ce3855313254bf82a22ea4a6de9ea90ed..34cf2c3e6dd3e6dd00d1348f803f535f9657455b 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2017-2023 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2017-2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
                 android:textSize="13sp" />
         </LinearLayout>
 
-        <!-- Form Data. This may be removed one the minimum API >= 26. -->
-        <LinearLayout
-            android:id="@+id/form_data_linearlayout"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:orientation="vertical"
-            android:padding="12dp" >
-
-            <TextView
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                android:text="@string/form_data" />
-
-            <LinearLayout
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                android:orientation="horizontal" >
-
-                <ImageView
-                    android:id="@+id/form_data_imageview"
-                    android:layout_height="wrap_content"
-                    android:layout_width="wrap_content"
-                    android:layout_marginTop="1dp"
-                    android:layout_marginEnd="10dp"
-                    android:layout_gravity="center_vertical"
-                    android:src="@drawable/form_data_enabled"
-                    app:tint="@color/yellow_icon_selector"
-                    android:contentDescription="@string/form_data" />
-
-                <Spinner
-                    android:id="@+id/form_data_spinner"
-                    android:layout_height="wrap_content"
-                    android:layout_width="match_parent" />
-            </LinearLayout>
-
-            <TextView
-                android:id="@+id/form_data_textview"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                android:layout_marginStart="45dp"
-                android:layout_marginEnd="36dp"
-                android:textSize="13sp" />
-        </LinearLayout>
-
         <!-- User Agent. -->
         <LinearLayout
             android:id="@+id/user_agent_linearlayout"
index 3be08cd9809966e3125dd8d0df8705afe222c9bb..c4d6fd7e296657eb1251abc3a319537ee4b44978 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
                 android:imeOptions="actionGo"
                 android:inputType="number"
                 android:selectAllOnFocus="true"
-                android:importantForAutofill="no"
-                tools:targetApi="26" />
+                android:importantForAutofill="no" />
         </LinearLayout>
     </LinearLayout>
 </ScrollView>
index cffc03d9e38fb24361c7a4ae8f389850481ea5fd..e297a95652ac6cc1685b5f9a98389796f549d2a5 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
                 android:imeOptions="actionGo"
                 android:inputType="number"
                 android:selectAllOnFocus="true"
-                android:importantForAutofill="no"
-                tools:targetApi="26" />
+                android:importantForAutofill="no" />
         </LinearLayout>
     </LinearLayout>
 </ScrollView>
index da8fcea3f072758fbbbf33f559d74399350eb34c..97aae6080dbd1230c24f9d3f2435d0f4c68a81ec 100644 (file)
@@ -21,7 +21,6 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
     android:orientation="horizontal" >
@@ -43,8 +42,7 @@
     android:layout_width="match_parent"
     android:orientation="horizontal" >
 
-    <!-- `android:imeOptions="actionGo"` sets the keyboard to have a go key instead of a new line key.  `android:inputType="textUri"` disables spell check in the `EditText`.
-        `android:autofillHints` only applies to API >= 26.  `tools:ignore="UnusedAttribute"` removes the lint warning. -->
+    <!-- `android:imeOptions="actionGo"` sets the keyboard to have a go key instead of a new line key.  `android:inputType="textUri"` disables spell check in the `EditText`. -->
     <EditText
         android:id="@+id/url_edittext"
         android:layout_height="wrap_content"
@@ -53,7 +51,6 @@
         android:imeOptions="actionGo"
         android:inputType="textUri"
         android:selectAllOnFocus="true"
-        android:autofillHints=""
-        tools:ignore="UnusedAttribute" />
+        android:autofillHints="" />
     </RelativeLayout>
 </LinearLayout>
index 66aa89ae2e045253ba984fa97b7d8b51142964d6..35f3461be4e3403e2a5a634d7c97aee2edc09931 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2015-2017,2020,2022-2023 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2015-2017, 2020, 2022-2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
         android:orderInCategory="20"
         app:showAsAction="ifRoom" />
 
-    <!-- `android:iconTint` can be used once API >= 26 instead of including a separate drawable for each theme. -->
     <item
         android:id="@+id/move_to_folder"
         android:title="@string/move_to_folder"
         android:orderInCategory="30"
-        android:icon="@drawable/move_to_folder"
+        android:icon="@drawable/move_to_folder_blue"
+        android:iconTint="@color/icon"
         app:showAsAction="ifRoom" />
 
     <item
@@ -49,7 +49,6 @@
         android:icon="@drawable/edit"
         app:showAsAction="ifRoom" />
 
-    <!-- `android:iconTint` can be used once API >= 26 instead of including a separate drawable for each theme. -->
     <item
         android:id="@+id/delete_bookmark"
         android:title="@string/delete"
index f3982ea388e0a972e73e4e66248fa11f2ad648ea..5bbe3fad8229d384e778944772f4af033b7a2021 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2019-2020,2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2019-2020, 2022, 2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
         android:icon="@drawable/select_all"
         app:showAsAction="ifRoom" />
 
-    <!-- `android:iconTint` can be used once API >= 26 instead of including a separate drawable for each theme. -->
     <item
         android:id="@+id/delete"
         android:title="@string/delete"
         android:orderInCategory="20"
         android:icon="@drawable/delete"
         app:showAsAction="ifRoom" />
-</menu>
\ No newline at end of file
+</menu>
index 23d2dbb21c05a63ca33303814d7484bb7f128f94..f16fa2b524b801411f3cae49fc06fedfce62a4bb 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright © 2017,2020,2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2017, 2020, 2022, 2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
-    <!-- `android:iconTint` can be used once API >= 26 instead of including a separate drawable for each theme. -->
     <item
         android:id="@+id/delete_domain"
         android:title="@string/delete"
         android:orderInCategory="10"
         android:icon="@drawable/delete"
         app:showAsAction="ifRoom" />
-</menu>
\ No newline at end of file
+</menu>
index 5557ccf63a8a99a899ad6f72219cea3c0166bbf0..4cd8d33bafd8f3d998f05e7fd1a10f47d3425349 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2018,2022-2023 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2018, 2022-2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
         android:id="@+id/copy_headers"
         android:title="@string/copy_string"
         android:orderInCategory="10"
-        android:icon="@drawable/copy"
         app:showAsAction="never" />
 
     <item
         android:id="@+id/share_headers"
         android:title="@string/share"
         android:orderInCategory="20"
-        android:icon="@drawable/share"
         app:showAsAction="never" />
 
     <item
         android:id="@+id/save_headers"
         android:title="@string/save"
         android:orderInCategory="30"
-        android:icon="@drawable/save"
         app:showAsAction="never" />
 
     <item
         android:id="@+id/about_view_headers"
         android:title="@string/about"
         android:orderInCategory="40"
-        android:icon="@drawable/about"
         app:showAsAction="never" />
 </menu>
index 87bc956dc22e40f1e77c3b333beb2a5d93cad243..7674f00d63fdb9113ec97153da6c3e1410ad7948 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
@@ -22,7 +22,7 @@
     <item
         android:id="@+id/about"
         android:title="@string/about"
-        android:icon="@drawable/about"
+        android:icon="@drawable/about_blue"
         android:orderInCategory="10" />
 
     <item
index 90912a69567e0e3c37191eca419cfcc42756f546..3f3fcd5aa679b6792c8ae38ab69a650facf21acd 100644 (file)
         <item
             android:id="@+id/about"
             android:title="@string/about"
-            android:icon="@drawable/about"
+            android:icon="@drawable/about_blue"
             android:orderInCategory="160" />
     </group>
 </menu>
index ec30a3c0b1f914b1b6a553719c1122cee51c0091..49ac11aef4627f9f30236670b3ca188ccc7dea31 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2015-2023 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2015-2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
         android:checkable="true"
         app:showAsAction="never" />
 
-    <item
-        android:id="@+id/save_form_data"
-        android:title="@string/form_data"
-        android:orderInCategory="700"
-        android:checkable="true"
-        app:showAsAction="never" />
-
     <item
         android:id="@+id/clear_data"
         android:title="@string/clear_data"
-        android:orderInCategory="800"
+        android:orderInCategory="700"
         app:showAsAction="never" >
 
         <menu>
             <item
                 android:id="@+id/clear_cookies"
                 android:title="@string/clear_cookies"
-                android:orderInCategory="810"
+                android:orderInCategory="710"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/clear_dom_storage"
                 android:title="@string/clear_dom_storage"
-                android:orderInCategory="820"
-                app:showAsAction="never" />
-
-            <item
-                android:id="@+id/clear_form_data"
-                android:title="@string/clear_form_data"
-                android:orderInCategory="830"
+                android:orderInCategory="720"
                 app:showAsAction="never" />
         </menu>
     </item>
     <item
         android:id="@+id/filterlists"
         android:title="@string/filterlists"
-        android:orderInCategory="900"
+        android:orderInCategory="800"
         app:showAsAction="never" >
 
         <menu>
             <item
                 android:id="@+id/easylist"
                 android:title="@string/easylist"
-                android:orderInCategory="910"
+                android:orderInCategory="810"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/easyprivacy"
                 android:title="@string/easyprivacy"
-                android:orderInCategory="920"
+                android:orderInCategory="820"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/fanboys_annoyance_list"
                 android:title="@string/options_fanboys_annoyance_list"
-                android:orderInCategory="930"
+                android:orderInCategory="830"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/fanboys_social_blocking_list"
                 android:title="@string/options_fanboys_social_blocking_list"
-                android:orderInCategory="940"
+                android:orderInCategory="840"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/ultralist"
                 android:title="@string/ultralist"
-                android:orderInCategory="950"
+                android:orderInCategory="850"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/ultraprivacy"
                 android:title="@string/ultraprivacy"
-                android:orderInCategory="960"
+                android:orderInCategory="860"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/block_all_third_party_requests"
                 android:title="@string/options_block_all_third_party_requests"
-                android:orderInCategory="970"
+                android:orderInCategory="870"
                 android:checkable="true"
                 app:showAsAction="never" />
         </menu>
     <item
         android:id="@+id/proxy"
         android:title="@string/proxy"
-        android:orderInCategory="1000"
+        android:orderInCategory="900"
         app:showAsAction="never" >
 
         <menu>
                 <item
                     android:id="@+id/proxy_none"
                     android:title="@string/proxy_none"
-                    android:orderInCategory="1010"
+                    android:orderInCategory="910"
                     app:showAsAction="never" />
 
                 <item
                     android:id="@+id/proxy_tor"
                     android:title="@string/proxy_tor"
-                    android:orderInCategory="1020"
+                    android:orderInCategory="920"
                     app:showAsAction="never" />
 
                 <item
                     android:id="@+id/proxy_i2p"
                     android:title="@string/proxy_i2p"
-                    android:orderInCategory="1030"
+                    android:orderInCategory="930"
                     app:showAsAction="never" />
 
                 <item
                     android:id="@+id/proxy_custom"
                     android:title="@string/proxy_custom"
-                    android:orderInCategory="1040"
+                    android:orderInCategory="940"
                     app:showAsAction="never" />
             </group>
         </menu>
     <item
         android:id="@+id/page"
         android:title="@string/page"
-        android:orderInCategory="1100"
+        android:orderInCategory="1000"
         app:showAsAction="never" >
 
         <menu>
             <item
                 android:id="@+id/user_agent"
                 android:title="@string/options_user_agent"
-                android:orderInCategory="1110"
+                android:orderInCategory="1010"
                 app:showAsAction="never" >
 
                 <menu>
                         <item
                             android:id="@+id/user_agent_privacy_browser"
                             android:title="@string/user_agent_privacy_browser"
-                            android:orderInCategory="1111"
+                            android:orderInCategory="1011"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_webview_default"
                             android:title="@string/user_agent_webview_default"
-                            android:orderInCategory="1112"
+                            android:orderInCategory="1012"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_firefox_on_android"
                             android:title="@string/user_agent_firefox_on_android"
-                            android:orderInCategory="1113"
+                            android:orderInCategory="1013"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_chrome_on_android"
                             android:title="@string/user_agent_chrome_on_android"
-                            android:orderInCategory="1114"
+                            android:orderInCategory="1014"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_safari_on_ios"
                             android:title="@string/user_agent_safari_on_ios"
-                            android:orderInCategory="1115"
+                            android:orderInCategory="1015"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_firefox_on_linux"
                             android:title="@string/user_agent_firefox_on_linux"
-                            android:orderInCategory="1116"
+                            android:orderInCategory="1016"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_chromium_on_linux"
                             android:title="@string/user_agent_chromium_on_linux"
-                            android:orderInCategory="1117"
+                            android:orderInCategory="1017"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_firefox_on_windows"
                             android:title="@string/user_agent_firefox_on_windows"
-                            android:orderInCategory="1118"
+                            android:orderInCategory="1018"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_chrome_on_windows"
                             android:title="@string/user_agent_chrome_on_windows"
-                            android:orderInCategory="1119"
+                            android:orderInCategory="1019"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_edge_on_windows"
                             android:title="@string/user_agent_edge_on_windows"
-                            android:orderInCategory="1120"
+                            android:orderInCategory="1020"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_safari_on_macos"
                             android:title="@string/user_agent_safari_on_macos"
-                            android:orderInCategory="1121"
+                            android:orderInCategory="1021"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_custom"
                             android:title="@string/user_agent_custom"
-                            android:orderInCategory="1122"
+                            android:orderInCategory="1022"
                             app:showAsAction="never" />
                     </group>
                 </menu>
             <item
                 android:id="@+id/swipe_to_refresh"
                 android:title="@string/swipe_to_refresh_options_menu"
-                android:orderInCategory="1130"
+                android:orderInCategory="1030"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/wide_viewport"
                 android:title="@string/wide_viewport"
-                android:orderInCategory="1140"
+                android:orderInCategory="1040"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/display_images"
                 android:title="@string/display_images"
-                android:orderInCategory="1150"
+                android:orderInCategory="1050"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/dark_webview"
                 android:title="@string/dark_webview"
-                android:orderInCategory="1160"
+                android:orderInCategory="1060"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/font_size"
                 android:title="@string/font_size"
-                android:orderInCategory="1170"
+                android:orderInCategory="1070"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/find_on_page"
                 android:title="@string/find_on_page"
-                android:orderInCategory="1180"
+                android:orderInCategory="1080"
                 app:showAsAction="never|collapseActionView" />
 
             <item
                 android:id="@+id/print"
                 android:title="@string/print"
-                android:orderInCategory="1190"
+                android:orderInCategory="1090"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/save"
                 android:title="@string/save"
-                android:orderInCategory="1200"
+                android:orderInCategory="1100"
                 app:showAsAction="never" >
 
                 <menu>
                     <item
                         android:id="@+id/save_url"
                         android:title="@string/save_url"
-                        android:orderInCategory="1201"
+                        android:orderInCategory="1101"
                         app:showAsAction="never" />
 
                     <item
                         android:id="@+id/save_archive"
                         android:title="@string/save_archive"
-                        android:orderInCategory="1202"
+                        android:orderInCategory="1102"
                         app:showAsAction="never" />
 
                     <item
                         android:id="@+id/save_image"
                         android:title="@string/save_image"
-                        android:orderInCategory="1203"
+                        android:orderInCategory="1103"
                         app:showAsAction="never" />
                 </menu>
             </item>
             <item
                 android:id="@+id/add_to_homescreen"
                 android:title="@string/add_to_home_screen"
-                android:orderInCategory="1210"
+                android:orderInCategory="1110"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/view_source"
                 android:title="@string/view_source"
-                android:orderInCategory="1220"
+                android:orderInCategory="1120"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/view_headers"
                 android:title="@string/view_headers"
-                android:orderInCategory="1230"
+                android:orderInCategory="1130"
                 app:showAsAction="never" />
         </menu>
     </item>
     <item
         android:id="@+id/share"
         android:title="@string/share"
-        android:orderInCategory="1300"
+        android:orderInCategory="1200"
         app:showAsAction="never" >
 
         <menu>
             <item
                 android:id="@+id/share_message"
                 android:title="@string/share_message"
-                android:orderInCategory="1310"
+                android:orderInCategory="1210"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/share_url"
                 android:title="@string/share_url"
-                android:orderInCategory="1320"
+                android:orderInCategory="1220"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/open_with_app"
                 android:title="@string/open_with_app"
-                android:orderInCategory="1330"
+                android:orderInCategory="1230"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/open_with_browser"
                 android:title="@string/open_with_browser"
-                android:orderInCategory="1340"
+                android:orderInCategory="1240"
                 app:showAsAction="never" />
         </menu>
     </item>
     <item
         android:id="@+id/add_or_edit_domain"
         android:title="@string/add_domain_settings"
-        android:orderInCategory="1400"
+        android:orderInCategory="1300"
         app:showAsAction="never" />
 </menu>
index cca29e749e8d227dfdcfc042c5f7566bc45c5dfc..0830c64baee458d08ce01cf7d3afd230b122f9f6 100644 (file)
     <string name="cookies_disabled">Cookies deaktiviert</string>
     <string name="dom_storage_enabled">DOM-Speicher aktiviert</string>
     <string name="dom_storage_disabled">DOM-Speicher deaktiviert</string>
-    <string name="form_data_enabled">Formulardaten aktiviert</string>
-    <string name="form_data_disabled">Formulardaten deaktiviert</string>
     <string name="cookies_deleted">Cookies gelöscht</string>
     <string name="dom_storage_deleted">DOM-Speicher gelöscht</string>
-    <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="stop">Stop</string>
     <string name="cookies">Cookies</string>
     <string name="dom_storage">DOM-Speicher</string>
-    <string name="form_data">Formulardaten</string>
     <string name="clear_data">Daten löschen</string>
         <string name="clear_cookies">Cookies löschen</string>
         <string name="clear_dom_storage">DOM-Speicher löschen</string>
-        <string name="clear_form_data">Formulardaten löschen</string>
         <string name="options_fanboys_annoyance_list">Fanboy’s Annoyance Sperrliste</string>
         <string name="options_fanboys_social_blocking_list">Fanboy’s Social Blocking Sperrliste</string>
         <string name="options_block_all_third_party_requests">Alle Zugriffe auf Dritt-Anbieter-Inhalte blockieren</string>
         <item>DOM-Speicher aktiviert</item>
         <item>DOM-Speicher deaktiviert</item>
     </string-array>
-    <string-array name="form_data_array">  <!-- Form data can be removed once the minimum API >= 26. -->
-        <item>Systemeinstellung</item>
-        <item>Formulardaten aktiviert</item>
-        <item>Formulardaten deaktiviert</item>
-    </string-array>
     <string-array name="easylist_array">
         <item>Systemeinstellung</item>
         <item>EasyList aktiviert</item>
             Sind Cookies im aktiven Tab aktiviert, sind diese auch für alle Netzwerk-Anfragen anderer Tabs im Hintergrund aktiviert.</string>
         <string name="dom_storage_preference">DOM-Speicher</string>
         <string name="dom_storage_preference_summary">JavaScript muss aktiviert sein, damit der DOM-(Document Object Model)-Speicher funktioniert.</string>
-        <string name="save_form_data_preference">Formulardaten</string>
-        <string name="save_form_data_preference_summary">Mit gespeicherten Formulardaten können Formularfelder auf Websites automatisch ausgefüllt werden.</string>
         <string name="user_agent">User Agent</string>
         <string-array name="translated_user_agent_names">
             <item>Privacy Browser</item>
         <string name="display_under_cutouts_summary">Zeigt die Internetseite unterhalb von Ausschnitten wie etwa Kamera-Einbuchtungen.
             Ist diese Option aktiv, wrd Privacy Browser auch unterhalb der Tastatur dargestellt. Das Ändern dieser Einstellung startet Privacy Browser neu.</string>
     <string name="clear_everything">Alles löschen</string>
-        <!-- The form data part of this string can be removed once the minimum API >= 26. -->
-        <string name="clear_everything_summary">Löscht Cookies, DOM-Storage, Formular-Daten, das Logcat Systemlogbuch und den WebView-Cache, sowie die gesamten “app_webview”- und “cache”-Ordner.</string>
+        <string name="clear_everything_summary">Löscht Cookies, DOM-Storage, das Logcat Systemlogbuch und den WebView-Cache, sowie die gesamten “app_webview”- und “cache”-Ordner.</string>
         <string name="clear_cookies_preference">Cookies löschen</string>
         <string name="clear_cookies_summary">Löscht Cookies.</string>
         <string name="clear_dom_storage_preference">DOM Storage löschen</string>
         <string name="clear_dom_storage_summary">Löscht DOM storage (aka Web Storage oder Supercookies).</string>
-        <string name="clear_form_data_preference">Formulardaten löschen</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">Löscht in Formulare eingegebene Daten.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_logcat">Logcat leeren</string>
         <string name="clear_logcat_summary">Leert das Logcat Systemlogbuch.</string>
         <string name="clear_cache">Cache löschen</string>
index 3d250717c2d4e843c302f0f208d96e0b5e516a71..c8dec3c76368b19bc2ce2ccb8633a56348a14291 100644 (file)
     <string name="cookies_disabled">Cookies deshabilitadas</string>
     <string name="dom_storage_enabled">Almacenamiento DOM habilitado</string>
     <string name="dom_storage_disabled">Almacenamiento DOM deshabilitado</string>
-    <string name="form_data_enabled">Datos de formulario habilitados</string>
-    <string name="form_data_disabled">Datos de formulario deshabilitados</string>
     <string name="cookies_deleted">Cookies borradas</string>
     <string name="dom_storage_deleted">Almacenamiento DOM borrado</string>
-    <string name="form_data_deleted">Datos de formulario borrado</string>
     <string name="open_navigation_drawer">Abrir la caja de navegación</string>
     <string name="close_navigation_drawer">Cerrar la caja de navegación</string>
     <string name="pin_drawer">Fijar el cajón</string>
     <string name="stop">Parar</string>
     <string name="cookies">Cookies</string>
     <string name="dom_storage">Almacenamiento DOM</string>
-    <string name="form_data">Datos de formulario</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Borrar datos</string>
         <string name="clear_cookies">Borrar cookies</string>
         <string name="clear_dom_storage">Borrar almacenamiento DOM</string>
-        <string name="clear_form_data">Borrar datos de formulario</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="options_fanboys_annoyance_list">Lista molesta de Fanboy</string>
         <string name="options_fanboys_social_blocking_list">Lista de bloqueo social de Fanboy</string>
         <string name="options_block_all_third_party_requests">Bloquear todas las solicitudes de terceros</string>
         <item>Almacenamiento DOM habilitado</item>
         <item>Almacenamiento DOM deshabilitado</item>
     </string-array>
-    <string-array name="form_data_array">  <!-- Form data can be removed once the minimum API >= 26. -->
-        <item>Por defecto del sistema</item>
-        <item>Datos de formulario habilitados</item>
-        <item>Datos de formulario deshabilitados</item>
-    </string-array>
     <string-array name="easylist_array">
         <item>Por defecto del sistema</item>
         <item>EasyList habilitada</item>
             Cuando la pestaña activa tiene las cookies habilitadas, cualquier solicitud de red realizada en segundo plano por otra pestaña también tiene las cookies habilitadas.</string>
         <string name="dom_storage_preference">Almacenamiento DOM</string>
         <string name="dom_storage_preference_summary">JavaScript debe estar activado para que el almacenamiento del Modelo de Objetos del Documento funcione.</string>
-        <string name="save_form_data_preference">Datos de formulario</string>
-        <string name="save_form_data_preference_summary">Los datos de formularios guardados pueden rellenar automáticamente las casillas o campos de las webs.</string>
         <string name="user_agent">Agente de usuario</string>
         <string-array name="translated_user_agent_names">
             <item>Navegador Privado</item>
         <string name="display_under_cutouts_summary">Mostrar el sitio web bajo los recortes, como las muescas de la cámara. Cuando está opción está activada, Navegador Privado también se dibujará bajo el teclado.
             Al cambiar esta configuración se reiniciará Navegador Privado.</string>
     <string name="clear_everything">Borrar todo</string>
-        <!-- The form data part of this string can be removed once the minimum API >= 26. -->
-        <string name="clear_everything_summary">Borra cookies, almacenamiento DOM, datos de formulario, el logcat y la caché de  WebView.
-            A continuación borra manualmente los directorios “app_webview” y “cache”.</string>
+        <string name="clear_everything_summary">Borra cookies, almacenamiento DOM, el logcat y la caché de  WebView. A continuación borra manualmente los directorios “app_webview” y “cache”.</string>
         <string name="clear_cookies_preference">Borrar cookies</string>
         <string name="clear_cookies_summary">Borra las cookies.</string>
         <string name="clear_dom_storage_preference">Borrar almacenamiento DOM</string>
         <string name="clear_dom_storage_summary">Borra el almacenamiento DOM.</string>
-        <string name="clear_form_data_preference">Borrar datos de formulario</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">Borra los datos de formulario.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_logcat">Borrar logcat</string>
         <string name="clear_logcat_summary">Borra el logcat.</string>
         <string name="clear_cache">Borrar caché</string>
index e2518fa02f264e97a5822157316e610cb73c2d07..d9bd0976be6558f22061ca926ef2fa51d3eca7d4 100644 (file)
     <string name="cookies_disabled">Cookies désactivés</string>
     <string name="dom_storage_enabled">Stockage du DOM activé</string>
     <string name="dom_storage_disabled">Stockage du DOM désactivé</string>
-    <string name="form_data_enabled">Données de formulaires activé</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-    <string name="form_data_disabled">Données de formulaires désactivé</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="cookies_deleted">Cookies supprimés</string>
     <string name="dom_storage_deleted">Stockage du DOM supprimé</string>
-    <string name="form_data_deleted">Données de formulaires supprimées</string>
     <string name="open_navigation_drawer">Ouvrir le panneau de navigation</string>
     <string name="close_navigation_drawer">Fermer le panneau de navigation</string>
     <string name="pin_drawer">Épingler le panneau</string>
     <string name="stop">Stop</string>
     <string name="cookies">Cookies</string>
     <string name="dom_storage">Stockage DOM</string>
-    <string name="form_data">Formulaire de données</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Effacer les données</string>
         <string name="clear_cookies">Effacer les cookies</string>
         <string name="clear_dom_storage">Effacer le stockage du DOM</string>
-        <string name="clear_form_data">Effacer les données de formulaire</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="options_fanboys_annoyance_list">Fanboy’s Annoyance List</string>
         <string name="options_fanboys_social_blocking_list">Fanboy’s Social Blocking List</string>
         <string name="options_block_all_third_party_requests">Bloquer toutes les requêtes tierces parties</string>
         <item>Stockage du DOM activé</item>
         <item>Stockage du DOM désactivé</item>
     </string-array>
-    <string-array name="form_data_array">  <!-- Form data can be removed once the minimum API >= 26. -->
-        <item>Valeur système</item>
-        <item>Données de formulaire activées</item>
-        <item>Données de formulaire désactivées</item>
-    </string-array>
     <string-array name="easylist_array">
         <item>Valeur système</item>
         <item>EasyList activé</item>
             toute requête réseau effectuée en arrière-plan par un autre onglet a également les cookies activés.</string>
         <string name="dom_storage_preference">Stockage du DOM</string>
         <string name="dom_storage_preference_summary">JavaScript doit être activé pour que le stockage du Document Object Model fonctionne.</string>
-        <string name="save_form_data_preference">Formulaire de données</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="save_form_data_preference_summary">Les formulaires de données sauvegardés peuvent remplir automatiquement des champs sur les sites web.</string>
         <string name="user_agent">User agent</string>
         <string-array name="translated_user_agent_names">
             <item>Privacy Browser</item>
         <string name="display_under_cutouts_summary">Affiche le site web sous les éléments découpés, tels que les encoches d\'appareil photo.
             Lorsque ce paramètre est activé, Privacy Browser sera également affiché sous le clavier. La modification de ce paramètre entraînera le redémarrage de Privacy Browser.</string>
     <string name="clear_everything">Tout effacer</string>
-        <!-- The form data part of this string can be removed once the minimum API >= 26. -->
-        <string name="clear_everything_summary">Efface les cookies, le stockage DOM, les données de formulaire, le logcat et le cache de WebView.
-            Supprime ensuite manuellement les répertoires entiers «app_webview» et «cache».</string>
+        <string name="clear_everything_summary">Efface les cookies, le stockage DOM, le logcat et le cache de WebView. Supprime ensuite manuellement les répertoires entiers «app_webview» et «cache».</string>
         <string name="clear_cookies_preference">Effacer les cookies</string>
         <string name="clear_cookies_summary">Efface les cookies.</string>
         <string name="clear_dom_storage_preference">Effacer le stockage DOM</string>
         <string name="clear_dom_storage_summary">Efface le stockage du DOM.</string>
-        <string name="clear_form_data_preference">Effacer les données de formulaire</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">Efface les données de formulaire.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_logcat">Vider logcat</string>
         <string name="clear_logcat_summary">Vide le logcat.</string>
         <string name="clear_cache">Effacer cache</string>
index ec164bc1ce42d626b7bfa2ed9c4458da5d914184..e1bcff0fa15dbd9315b55e2a4d1b665426137a09 100644 (file)
     <string name="cookies_disabled">Cookies disabilitati</string>
     <string name="dom_storage_enabled">DOM Storage abilitato</string>
     <string name="dom_storage_disabled">DOM Storage disabilitato</string>
-    <string name="form_data_enabled">Dati dei Moduli abilitati</string>
-    <string name="form_data_disabled">Dati dei Moduli disabilitati</string>
     <string name="cookies_deleted">Cookies eliminati</string>
     <string name="dom_storage_deleted">DOM Storage eliminato</string>
-    <string name="form_data_deleted">Dati dei Moduli eliminati</string>
     <string name="open_navigation_drawer">Apri il menu di navigazione</string>
     <string name="close_navigation_drawer">Chiudi il menu di navigazione</string>
     <string name="pin_drawer">Fissa il cassetto</string>
     <string name="stop">Stop</string>
     <string name="cookies">Cookies</string>
     <string name="dom_storage">DOM storage</string>
-    <string name="form_data">Dati dei moduli</string>
     <string name="clear_data">Elimina dati</string>
         <string name="clear_cookies">Elimina cookies</string>
         <string name="clear_dom_storage">Elimina DOM storage</string>
-        <string name="clear_form_data">Elimina dati dei moduli</string>
         <string name="options_fanboys_annoyance_list">Fanboy’s annoyance list</string>
         <string name="options_fanboys_social_blocking_list">Fanboy’s social blocking list</string>
         <string name="options_block_all_third_party_requests">Blocca tutte le richieste di Terze Parti</string>
         <item>DOM storage abilitato</item>
         <item>DOM storage disabilitato</item>
     </string-array>
-    <string-array name="form_data_array">  <!-- Form data can be removed once the minimum API >= 26. -->
-        <item>Default di Sistema</item>
-        <item>Dati dei Form abilitati</item>
-        <item>Dati dei Form disabilitati</item>
-    </string-array>
     <string-array name="easylist_array">
         <item>Default di Sistema</item>
         <item>EasyList abilitata</item>
             Quando la scheda attiva ha i cookies abilitati, anche ogni altra richiesta di rete effettuata in background da altre schede ha i cookies abilitati.</string>
         <string name="dom_storage_preference">DOM Storage</string>
         <string name="dom_storage_preference_summary">JavaScript deve essere  abilitato per permettere il funzionamento del Document Object Model storage.</string>
-        <string name="save_form_data_preference">Dati dei moduli</string>
-        <string name="save_form_data_preference_summary">I dati dei moduli salvati permettono di auto-compilare i campi dei moduli nei siti web.</string>
         <string name="user_agent">User agent</string>
         <string-array name="translated_user_agent_names">
             <item>Privacy Browser</item>
         <string name="display_under_cutouts_summary">Visualizza il sito web sotto i ritagli dello schermo come quello della fotocamera.
             Quando questa opzione è abilitata, Privacy Browser sarà anche visualizzato sotto alla tastiera. La modifica di questa impostazione provoca il riavvio di Privacy Browser.</string>
     <string name="clear_everything">Elimina tutto</string>
-        <!-- The form data part of this string can be removed once the minimum API >= 26. -->
-        <string name="clear_everything_summary">Cancella i cookies, il DOM storage, i dati dei moduli, il logcat e la cache di WebView.  Cancella completamente le cartelle “app_webview” e “cache”.</string>
+        <string name="clear_everything_summary">Cancella i cookies, il DOM storage, il logcat e la cache di WebView.  Cancella completamente le cartelle “app_webview” e “cache”.</string>
         <string name="clear_cookies_preference">Elimina i cookie</string>
         <string name="clear_cookies_summary">Cancella i cookies.</string>
         <string name="clear_dom_storage_preference">Elimina il DOM storage</string>
         <string name="clear_dom_storage_summary">Cancella solo il DOM storage.</string>
-        <string name="clear_form_data_preference">Elimina i dati dei moduli</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">Cancella solo i dati dei moduli.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_logcat">Elimina il logcat</string>
         <string name="clear_logcat_summary">Cancella il logcat.</string>
         <string name="clear_cache">Elimina la cache</string>
index 10999f0a13e8fca4244a90792ca9ca7fbcc0d74d..d50014b7c4672f320bcb3306b75d8d92868eb825 100644 (file)
     <string name="cookies_disabled">Cookies desativados</string>
     <string name="dom_storage_enabled">Armazenamento DOM ativado</string>
     <string name="dom_storage_disabled">Armazenamento DOM desativado</string>
-    <string name="form_data_enabled">Dados de formulário habilitados</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-    <string name="form_data_disabled">Dados de formulário desabilitados</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="cookies_deleted">Cookies excluídos</string>
     <string name="dom_storage_deleted">Armazenamento DOM excluído</string>
-    <string name="form_data_deleted">Dados do formulário excluídos</string>
     <string name="open_navigation_drawer">Abrir a caixa de navegação</string>
     <string name="close_navigation_drawer">Fechar a caixa de navegação</string>
     <string name="unrecognized_url">URL desconhecida:\u0020 %1$s</string>
     <string name="stop">Parar</string>
     <string name="cookies">Cookies</string>
     <string name="dom_storage">Armazenamento DOM</string>
-    <string name="form_data">Dados do formulário</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Limpar dados</string>
         <string name="clear_cookies">Limpar Cookies</string>
         <string name="clear_dom_storage">Limpar Armazenamento DOM</string>
-        <string name="clear_form_data">Clear Form Data</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="options_fanboys_annoyance_list">Lista de Aborrecimento Fanboy’s</string>
         <string name="options_fanboys_social_blocking_list">Lista de bloqueio social Fanboy’s</string>
         <string name="options_block_all_third_party_requests">Bloquear todas as solicitações de terceiros</string>
             Quando a guia ativa tem cookies habilitados, qualquer solicitação de rede feita em segundo plano por outra guia também tem cookies habilitados.</string>
         <string name="dom_storage_preference">Armazenamento DOM</string>
         <string name="dom_storage_preference_summary">O JavaScript deve estar habilitado para que o armazenamento do Document Object Model funcione.</string>
-        <string name="save_form_data_preference">Dados do formulário</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="save_form_data_preference_summary">Dados de formulário salvos podem preencher campos automaticamente em sites.</string>
-        <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="user_agent">Agente do usuário</string>
         <string-array name="translated_user_agent_names">
             <item>Privacy Browser</item>
         <string name="hide_app_bar">Ocultar a barra de aplicativos</string>
         <string name="hide_app_bar_summary">Oculte a barra de aplicativos que contém o URL.</string>
     <string name="clear_everything">Limpar tudo</string>
-        <!-- The form data part of this string can be removed once the minimum API >= 26. -->
-        <string name="clear_everything_summary">Limpa cookies, armazenamento DOM, dados de formulário e cache do WebView. Em seguida, exclui manualmente todos os diretórios “app_webview” e “cache”.</string>
+        <string name="clear_everything_summary">Limpa cookies, armazenamento DOM, e cache do WebView. Em seguida, exclui manualmente todos os diretórios “app_webview” e “cache”.</string>
         <string name="clear_cookies_preference">Limpar cookies</string>
         <string name="clear_cookies_summary">Limpar os cookies.</string>
         <string name="clear_dom_storage_preference">Limpar armazenamento DOM</string>
         <string name="clear_dom_storage_summary">Limpa o armazenamento DOM.</string>
-        <string name="clear_form_data_preference">Limpar dados do formulário</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">Limpa os dados do formulário.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_logcat">Limpar Logcat</string>
         <string name="clear_logcat_summary">Limpar os Logcats.</string>
         <string name="clear_cache">Limpar cache</string>
index 5f633b3a0de9fbb66f30f529392dc7339c770335..19b25cc6057a553c0ed27cd08200aa89cadb6ffb 100644 (file)
     <string name="cookies_disabled">Cookie отключены</string>
     <string name="dom_storage_enabled">DOM-хранилище включено</string>
     <string name="dom_storage_disabled">DOM-хранилище отключено</string>
-    <string name="form_data_enabled">Данные формы включены</string>
-    <string name="form_data_disabled">Данные формы отключены</string>
     <string name="cookies_deleted">Файлы cookie удалены</string>
     <string name="dom_storage_deleted">DOM-хранилище удалено</string>
-    <string name="form_data_deleted">Данные формы удалены</string>
     <string name="open_navigation_drawer">Открыть панель навигации</string>
     <string name="close_navigation_drawer">Закрыть панель навигации</string>
     <string name="pin_drawer">Закрепить панель</string>
     <string name="stop">Остановить</string>
     <string name="cookies">Cookie</string>
     <string name="dom_storage">DOM-хранилище</string>
-    <string name="form_data">Данные формы</string>
     <string name="clear_data">Очистить данные</string>
         <string name="clear_cookies">Очистить cookie</string>
         <string name="clear_dom_storage"> Очистить DOM-хранилище</string>
-        <string name="clear_form_data">Очистить данные формы</string>
         <string name="options_fanboys_annoyance_list">Fanboy’s annoyance list</string>
         <string name="options_fanboys_social_blocking_list">Fanboy’s social blocking list</string>
         <string name="options_block_all_third_party_requests">Блокировать все сторонние запросы</string>
         <item>DOM-хранилище включено</item>
         <item>DOM-хранилище отключено</item>
     </string-array>
-    <string-array name="form_data_array">  <!-- Form data can be removed once the minimum API >= 26. -->
-        <item>По умолчанию</item>
-        <item>Данные форм включены</item>
-        <item>Данные форм отключены</item>
-    </string-array>
     <string-array name="easylist_array">
         <item>По умолчанию</item>
         <item>EasyList включен</item>
             Включение cookie на активной вкладке также приведет к их включению и на фоновых вкладках для выполняемых сетевых запросов.</string>
         <string name="dom_storage_preference">DOM-хранилище</string>
         <string name="dom_storage_preference_summary">Для работы DOM-хранилища необходимо включить JavaScript.</string>
-        <string name="save_form_data_preference">Сохранение данных формы</string>
-        <string name="save_form_data_preference_summary">Сохраненные данные формы могут автоматически заполнять поля на веб-сайтах.</string>
         <string name="user_agent">User agent</string>
         <string-array name="translated_user_agent_names">
             <item>Privacy Browser</item>
         <string name="display_under_cutouts_summary">Отрисовывать сайт под вырезами, например, под камерой. Если эта опция включена, Privacy Browser также будет отображаться под клавиатурой.
             Изменение этой настройки приведет к перезапуску Privacy Browser.</string>
     <string name="clear_everything">Очистить все</string>
-        <!-- The form data part of this string can be removed once the minimum API >= 26. -->
-        <string name="clear_everything_summary">Очищает cookie, DOM-хранилище, данные форм, logcat и кэш WebView. После этого вручную удаляет каталоги "app_webview" и "cache".</string>
+        <string name="clear_everything_summary">Очищает cookie, DOM-хранилище, logcat и кэш WebView. После этого вручную удаляет каталоги "app_webview" и "cache".</string>
         <string name="clear_cookies_preference">Очистить cookie</string>
         <string name="clear_cookies_summary">Очищает cookie.</string>
         <string name="clear_dom_storage_preference">Очистить DOM-хранилище</string>
         <string name="clear_dom_storage_summary">Очищает DOM-хранилище.</string>
-        <string name="clear_form_data_preference">Очистка данных формы</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">Очищает данные формы.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_logcat">Очистить logcat</string>
         <string name="clear_logcat_summary">Очищает logcat.</string>
         <string name="clear_cache">Очистить кэш</string>
index 352c2996f806575d03f02626e43ab994e87777aa..45658be00ab78a2d005621593f9a6401ce3b5619 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2015-2023 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2015-2024 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
     <string name="javascript_disabled">JavaScript devre dışı</string>
     <string name="dom_storage_enabled">DOM Depolama etkin</string>
     <string name="dom_storage_disabled">DOM Depolama devre dışı</string>
-    <string name="form_data_enabled">Form Verisi etkin</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-    <string name="form_data_disabled">Form Verisi devre dışı</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="cookies_deleted">Çerezler silindi</string>
     <string name="dom_storage_deleted">DOM Depolama silindi</string>
-    <string name="form_data_deleted">Form Verisi silindi</string>
     <string name="open_navigation_drawer">Gezinti Menüsünü aç</string>
     <string name="close_navigation_drawer">Gezinti Menüsünü kapa</string>
     <string name="unrecognized_url">Onaylanmamış URL:\u0020 %1$s</string>
     <string name="refresh">Yenile</string>
     <string name="stop">Dur</string>
     <string name="dom_storage">DOM Depolama</string>
-    <string name="form_data">Form Verisi</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Veriyi temizle</string>
         <string name="clear_cookies">Çerezleri temizle</string>
         <string name="clear_dom_storage">DOM Depolamayı temizle</string>
-        <string name="clear_form_data">Form Verisini temizle</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="options_fanboys_annoyance_list">Fanboy’s Annoyance List</string>
         <string name="options_fanboys_social_blocking_list">Fanboy’s Social Blocking List</string>
         <string name="options_block_all_third_party_requests">Tüm Üçüncü Taraf İstekleri engelle</string>
     <string name="privacy">Gizlilik</string>
         <string name="javascript_preference_summary">JavaScript, web sitelerin cihazdaki programları (scriptler) çalıştırmasına izin verir.</string>
         <string name="dom_storage_preference">DOM depolama</string>
-        <string name="save_form_data_preference">Form verisi</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="save_form_data_preference_summary">Kaydedilen form verisi, web sitelerdeki boşlukları otomatik olarak dolduracaktır.</string>
         <string name="user_agent">Kullanıcı aracısı</string>
         <string-array name="translated_user_agent_names">
             <item>Privacy Browser</item>
         <string name="hide_app_bar">Uygulama çubuğunu gizle</string>
         <string name="hide_app_bar_summary">URL içeren uygulama çubuğunu gizler.</string>
     <string name="clear_everything">Her şeyi temizle</string>
-        <string name="clear_everything_summary">Çerezleri, DOM depolamayı, form verisini ve WebView ön belleğini temizler. Sonrasında, manuel olarak bütün “app_webview” ve “cache” dizinlerini siler.</string>
+        <string name="clear_everything_summary">Çerezleri, DOM depolamayı, ve WebView ön belleğini temizler. Sonrasında, manuel olarak bütün “app_webview” ve “cache” dizinlerini siler.</string>
         <string name="clear_cookies_preference">Çerezleri temizle</string>
         <string name="clear_dom_storage_preference">DOM Depolamayı temizle</string>
         <string name="clear_dom_storage_summary">DOM Depolamayı temizler.</string>
-        <string name="clear_form_data_preference">Form verisini temizle</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">Form verisini temizler.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_cache">Önbelleği temizle</string>
         <string name="clear_cache_summary">WebView önbelleğini temizler.</string>
     <string name="general">Genel</string>
index cd165b6a38bc807516b9fce070566963b93db224..47c69780a386e481aaf1924dc62ac7a4d8fe321b 100644 (file)
     <string name="cookies_disabled">关闭 Cookies</string>
     <string name="dom_storage_enabled">开启 DOM 储存</string>
     <string name="dom_storage_disabled">关闭 DOM 储存</string>
-    <string name="form_data_enabled">启用表单数据</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-    <string name="form_data_disabled">关闭表单数据</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="cookies_deleted">删除 Cookies</string>
     <string name="dom_storage_deleted">删除 DOM 储存</string>
-    <string name="form_data_deleted">删除表单数据</string>
     <string name="open_navigation_drawer">打开导航栏</string>
     <string name="close_navigation_drawer">关闭导航栏</string>
     <string name="pin_drawer">引脚栏</string>
     <string name="stop">暂停</string>
     <string name="cookies">Cookies</string>
     <string name="dom_storage">DOM 储存</string>
-    <string name="form_data">表单数据</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">清空数据</string>
         <string name="clear_cookies">清空 Cookies</string>
         <string name="clear_dom_storage">清空 DOM 储存</string>
-        <string name="clear_form_data">清楚表单数据</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="options_fanboys_annoyance_list">Fanboy’s Annoyance List</string>
         <string name="options_fanboys_social_blocking_list">Fanboy’s Social Blocking List</string>
         <string name="options_block_all_third_party_requests">阻止所有第三方请求</string>
         <string name="cookies_preference_summary">Cookies 是应用程序级的设置,当活动的页面允许cookies,后台的其他请求网络的页面也允许cookies.</string>
         <string name="dom_storage_preference">DOM 储存</string>
         <string name="dom_storage_preference_summary">JavaScript 必须启用,DOM才能工作.</string>
-        <string name="save_form_data_preference">保存表单数据</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="save_form_data_preference_summary">保存的表单数据可以自动填写网页的一些字段.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="user_agent">User agent</string>
         <string-array name="translated_user_agent_names">
             <item>Privacy Browser</item>
         <string name="hide_app_bar">隐藏应用栏</string>
         <string name="hide_app_bar_summary">隐藏包含URL的应用栏.</string>
     <string name="clear_everything">清除所有</string>
-        <!-- The form data part of this string can be removed once the minimum API >= 26. -->
-        <string name="clear_everything_summary">清除cookies,DOM储存,表单数据,日志,WebView缓存,之后手动删除app_WebView缓存</string>
         <string name="clear_cookies_preference">清除 cookies</string>
         <string name="clear_cookies_summary">清除 cookies.</string>
         <string name="clear_dom_storage_preference">清除 DOM 储存</string>
         <string name="clear_dom_storage_summary">清除 DOM 储存.</string>
-        <string name="clear_form_data_preference">清除表单数据</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">清除表单数据.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_logcat">清除日志</string>
         <string name="clear_logcat_summary">清除日志.</string>
         <string name="clear_cache">清除缓存</string>
index 3ece00cdee765eaef6327f0e1c9d29502c4d2190..c44f2ed28dba14f4e7bb0060aa73015c1ea932be 100644 (file)
     <string name="cookies_disabled">Cookies disabled</string>
     <string name="dom_storage_enabled">DOM Storage enabled</string>
     <string name="dom_storage_disabled">DOM Storage disabled</string>
-    <string name="form_data_enabled">Form Data enabled</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-    <string name="form_data_disabled">Form Data disabled</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="cookies_deleted">Cookies deleted</string>
     <string name="dom_storage_deleted">DOM Storage deleted</string>
-    <string name="form_data_deleted">Form Data deleted</string>
     <string name="open_navigation_drawer">Open navigation drawer</string>
     <string name="close_navigation_drawer">Close navigation drawer</string>
     <string name="pin_drawer">Pin drawer</string>
     <string name="stop">Stop</string>
     <string name="cookies">Cookies</string>
     <string name="dom_storage">DOM Storage</string>
-    <string name="form_data">Form Data</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
     <string name="clear_data">Clear Data</string>
         <string name="clear_cookies">Clear Cookies</string>
         <string name="clear_dom_storage">Clear DOM Storage</string>
-        <string name="clear_form_data">Clear Form Data</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="options_fanboys_annoyance_list">Fanboy’s Annoyance List</string>
         <string name="options_fanboys_social_blocking_list">Fanboy’s Social Blocking List</string>
         <string name="options_block_all_third_party_requests">Block All Third-Party Requests</string>
         <item>DOM storage enabled</item>
         <item>DOM storage disabled</item>
     </string-array>
-    <string-array name="form_data_array">  <!-- Form data can be removed once the minimum API >= 26. -->
-        <item>System default</item>
-        <item>Form data enabled</item>
-        <item>Form data disabled</item>
-    </string-array>
     <string-array name="easylist_array">
         <item>System default</item>
         <item>EasyList enabled</item>
             When the active tab has cookies enabled, any network request made in the background by another tab also has cookies enabled.</string>
         <string name="dom_storage_preference">DOM storage</string>
         <string name="dom_storage_preference_summary">JavaScript must be enabled for Document Object Model storage to function.</string>
-        <string name="save_form_data_preference">Form data</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="save_form_data_preference_summary">Saved form data can auto-populate fields on websites.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="user_agent">User agent</string>
         <string-array name="translated_user_agent_names">
             <item>Privacy Browser</item>
         <string name="display_under_cutouts_summary">Draw the website under cutouts, like camera notches. When this is enabled, Privacy Browser will also be drawn under the keyboard.
             Changing this setting will restart Privacy Browser.</string>
     <string name="clear_everything">Clear everything</string>
-        <!-- The form data part of this string can be removed once the minimum API >= 26. -->
-        <string name="clear_everything_summary">Clears cookies, DOM storage, form data, the logcat, and WebView’s cache.  Then manually deletes the entire “app_webview” and “cache” directories.</string>
+        <string name="clear_everything_summary">Clears cookies, DOM storage, the logcat, and WebView’s cache.  Then manually deletes the entire “app_webview” and “cache” directories.</string>
         <string name="clear_cookies_preference">Clear cookies</string>
         <string name="clear_cookies_summary">Clears cookies.</string>
         <string name="clear_dom_storage_preference">Clear DOM storage</string>
         <string name="clear_dom_storage_summary">Clears DOM storage.</string>
-        <string name="clear_form_data_preference">Clear form data</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
-        <string name="clear_form_data_summary">Clears form data.</string>  <!-- The form data strings can be removed once the minimum API >= 26. -->
         <string name="clear_logcat">Clear logcat</string>
         <string name="clear_logcat_summary">Clears the logcat.</string>
         <string name="clear_cache">Clear cache</string>
     <string name="clear_cookies_key" translatable="false">clear_cookies</string>
     <string name="clear_dom_storage_key" translatable="false">clear_dom_storage</string>
     <string name="clear_everything_key" translatable="false">clear_everything</string>
-    <string name="clear_form_data_key" translatable="false">clear_form_data</string>  <!-- The clear form data string can be removed once the minimum API >= 26. -->
     <string name="clear_logcat_key" translatable="false">clear_logcat</string>
     <string name="custom_user_agent_key" translatable="false">custom_user_agent</string>
     <string name="display_additional_app_bar_icons_key" translatable="false">display_additional_app_bar_icons</string>
     <string name="privacy_category_key" translatable="false">privacy</string>
     <string name="proxy_key" translatable="false">proxy</string>
     <string name="proxy_custom_url_key" translatable="false">proxy_custom_url</string>
-    <string name="save_form_data_key" translatable="false">save_form_data</string>  <!--The form data string can be removed once the minimum API >= 26. -->
     <string name="scroll_app_bar_key" translatable="false">scroll_app_bar</string>
     <string name="search_custom_url_key" translatable="false">search_custom_url</string>
     <string name="search_key" translatable="false">search</string>
index 2e106fd561a6ce8cb98454ee09a491b94a3ba4b0..85fb5e8e57d5a1da0fa5a88161a83759696e29f3 100644 (file)
             app:summary="@string/dom_storage_preference_summary"
             app:defaultValue="false" />
 
-        <!-- Save form data can be removed once the minimum API >= 26. -->
-        <SwitchPreferenceCompat
-            app:key="@string/save_form_data_key"
-            app:title="@string/save_form_data_preference"
-            app:summary="@string/save_form_data_preference_summary"
-            app:defaultValue="false" />
-
         <ListPreference
             app:key="@string/user_agent_key"
             app:title="@string/user_agent"
             app:summary="@string/clear_dom_storage_summary"
             app:defaultValue="true" />
 
-        <!-- Clear form data can be removed once the minimum API >= 26. -->
-        <SwitchPreferenceCompat
-            app:key="@string/clear_form_data_key"
-            app:title="@string/clear_form_data_preference"
-            app:summary="@string/clear_form_data_summary"
-            app:defaultValue="true" />
-
         <SwitchPreferenceCompat
             app:key="@string/clear_logcat_key"
             app:title="@string/clear_logcat"
diff --git a/fastlane/metadata/android/de-DE/changelogs/73.txt b/fastlane/metadata/android/de-DE/changelogs/73.txt
new file mode 100644 (file)
index 0000000..bb0feb7
--- /dev/null
@@ -0,0 +1,10 @@
+• Optionen für die Download Provider erweitert, sodass nun Privacy Browser, Androids Download Manager oder eine externe App gewählt werden kann.
+• Verschwendeter Platz zwischen dem Navigations-Menü-Icon und der URL-Leiste entfernt.
+• Neuer Eintrag für "Nach oben/unten scrollen" im Navigations-Menü hinzugefügt.
+• Option für Anzeige unter Kamera-Ausschnitt im Vollbild-Modus hinzugefügt.
+• Fehler behoben, durch den gelegentlich Tabs ohne entsprechende Seiten geöffnet wurden.
+• Selten auftretender Fehler behoben, durch welchen nach der Erstellung neuer Tabs falsche Seiten als aktiv gesetzt wurden.
+• Fehler beim Aktualisieren von Favoriten-Icons beim Navigieren im Verlauf behoben.
+• Vorgabe für das Scrollen der App-Leiste bei Neu-Installation deaktiviert.
+• Diverse kleine Verbesserungen an der Benutzer-Oberfläche.
+• Aktualisierte deutsche Übersetzung von Bernhard G. Keller.
\ No newline at end of file