]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Update the file name when the URL changes in SaveDialog. https://redmine.stoutner...
authorSoren Stoutner <soren@stoutner.com>
Tue, 27 Dec 2022 20:30:44 +0000 (13:30 -0700)
committerSoren Stoutner <soren@stoutner.com>
Tue, 27 Dec 2022 20:30:44 +0000 (13:30 -0700)
16 files changed:
app/src/main/assets/de/about_licenses.html
app/src/main/assets/en/about_licenses.html
app/src/main/assets/es/about_licenses.html
app/src/main/assets/fr/about_licenses.html
app/src/main/assets/it/about_licenses.html
app/src/main/assets/pt-rBR/about_licenses.html
app/src/main/assets/pt-rBR/about_permissions.html
app/src/main/assets/pt-rBR/guide_interface.html
app/src/main/assets/ru/about_licenses.html
app/src/main/assets/tr/about_licenses.html
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/coroutines/PrepareSaveDialogCoroutine.kt
app/src/main/java/com/stoutner/privacybrowser/dialogs/SaveDialog.kt
app/src/main/java/com/stoutner/privacybrowser/helpers/GetUrlSizeHelper.kt [deleted file]
app/src/main/java/com/stoutner/privacybrowser/helpers/SanitizeUrlHelper.kt
app/src/main/java/com/stoutner/privacybrowser/helpers/UrlHelper.kt [new file with mode: 0644]

index 3d6411eb7f4e632cd9e7045a3a76ecab81073e42..9e404c052e51ca4e4f196de763bdce24de4d5b63 100644 (file)
 
         <h3>Icons:</h3>
         <p><img class="left" src="../shared_images/privacy_browser.svg"/> <img class="left" src="../shared_images/warning.svg"/> <img class="left" src="../shared_images/javascript_enabled.svg"/>
-            are derived from <code>security</code> and <code>language</code>, which are part of the <a href="https://material.io/icons/">Android Material icon set</a> and are released under the
+            are derived from <code>security</code> and <code>language</code>, which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             The full text of the license is below. Modifications copyright 2016 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/move_to_folder.svg#icon"/></svg> is derived from elements of <code>folder</code> and <code>exit_to_app</code>,
-            which are part of the <a href="https://material.io/icons/">Android Material icon set</a>
+            which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a>
             and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_bookmark.svg#icon"/></svg> is derived from elements of <code>bookmark</code> and <code>create_new_folder</code>, which are part of the
-            <a href="https://material.io/icons/">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> ist abgeleitet von <code>create_new_folder</code>,
-            das Teil des <a href="https://material.io/icons/">Android Material icon set</a> unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird.
+            das Teil des <a href="https://fonts.google.com/icons">Android Material icon set</a> unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird.
             Änderungen Copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Die resultierende Grafik wird unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ Lizenz</a> veröffentlicht.</p>
         <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg> ist abgeleitet von <code>exit_to_app</code>,
-            das Teil des <a href="https://material.io/icons/">Android Material icon set</a> unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird.
+            das Teil des <a href="https://fonts.google.com/icons">Android Material icon set</a> unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird.
             Änderungen Copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Die resultierende Grafik wird unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ Lizenz</a> veröffentlicht.</p>
         <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> ist abgeleitet von <code>compare</code>,
-            das Teil des <a href="https://material.io/icons/">Android Material icon set</a> unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird.
+            das Teil des <a href="https://fonts.google.com/icons">Android Material icon set</a> unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird.
             Änderungen Copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Die resultierende Grafik wird unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ Lizenz</a> veröffentlicht.</p>
-        <p><img class="left" src="../shared_images/sort_selected.svg"/> ist abgeleitet von <code>sort</code>, das Teil des <a href="https://material.io/icons/">Android Material icon set</a>
+        <p><img class="left" src="../shared_images/sort_selected.svg"/> ist abgeleitet von <code>sort</code>, das Teil des <a href="https://fonts.google.com/icons">Android Material icon set</a>
             unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird. Änderungen Copyright 2019, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Die resultierende Grafik wird unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ Lizenz</a> veröffentlicht.</p>
         <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"> ist abgeleitet von <code>push_pin_selected</code>,
-            das Teil des <a href="https://material.io/icons/">Android Material icon set</a> unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird.
+            das Teil des <a href="https://fonts.google.com/icons">Android Material icon set</a> unter der <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache Lizenz 2.0</a> veröffentlicht wird.
             Änderungen Copyright 2019-2020, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Die resultierende Grafik wird unter der <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ Lizenz</a> veröffentlicht.</p>
         <p><svg class="left"><use href="../shared_images/cookie.svg#icon"/></svg> <code>cookie</code> was created by Google.
             welches unter der <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">AGPLv3+ Lizenz</a> veröffentlicht wird. Den gesamte Text dieser Lizenz finden Sie unterhalb.
             Das Bild ist ein unverändertes Exzerpt zur Darstellung von Layout-Informationen wie Farbe, Größe und Rahmen.
             Es ist in Privacy Browser unter Beachtung der Bestimmungen von Sektion 13 der Lizenz enthalten.</p>
-        <p>The following icons come from the <a href="https://material.io/icons/">Android Material icon set</a>,
+        <p>The following icons come from the <a href="https://fonts.google.com/icons">Android Material icon set</a>,
             which is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             They are unchanged except for layout information like color and size. Some of them have been renamed to match their use in the code. The original icons and names are shown below.</p>
         <p><svg class="icon"><use href="../shared_images/add.svg#icon"/></svg> add.</p>
index 5814f18d31b458847bccc067ff52f55db9f78675..e1528674d5b0819cda8d45b45f7ba633c9d2319c 100644 (file)
 
         <h3>Icons</h3>
         <p><img class="left" src="../shared_images/privacy_browser.svg"/> <img class="left" src="../shared_images/warning.svg"/> <img class="left" src="../shared_images/javascript_enabled.svg"/>
-            are derived from <code>security</code> and <code>language</code>, which are part of the <a href="https://material.io/icons/">Android Material icon set</a> and are released under the
+            are derived from <code>security</code> and <code>language</code>, which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             The full text of the license is below. Modifications copyright 2016 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/move_to_folder.svg#icon"/></svg> is derived from elements of <code>folder</code> and <code>exit_to_app</code>,
-            which are part of the <a href="https://material.io/icons/">Android Material icon set</a>
+            which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a>
             and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_bookmark.svg#icon"/></svg> is derived from elements of <code>bookmark</code> and <code>create_new_folder</code>, which are part of the
-            <a href="https://material.io/icons/">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> is derived from <code>create_new_folder</code>,
-            which is part of the <a href="https://material.io/icons/">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            which is part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg> is derived from <code>exit_to_app</code>,
-            which is part of the <a href="https://material.io/icons/">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            which is part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> is derived from <code>compare</code>,
-            which is part of the <a href="https://material.io/icons/">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            which is part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
-        <p><img class="left" src="../shared_images/sort_selected.svg"> is derived from <code>sort</code>, which is part of the <a href="https://material.io/icons/">Android Material icon set</a>
+        <p><img class="left" src="../shared_images/sort_selected.svg"> is derived from <code>sort</code>, which is part of the <a href="https://fonts.google.com/icons">Android Material icon set</a>
             and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>. Modifications copyright 2019, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"> is derived from <code>push_pin_selected</code>,
-            which is part of the <a href="https://material.io/icons/">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            which is part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2019-2020, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/cookie.svg#icon"/></svg> <code>cookie</code> was created by Google.
             <a href="https://github.com/tootsuite/mastodon/blob/master/app/javascript/images/logo_transparent_black.svg">Mastodon project</a>,
             which is released under the <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">AGPLv3+ license</a>. The full text of the license is below.
             The image is unchanged except for layout information like color, size, and margin. It is included in Privacy Browser under the provisions in section 13 of the license.</p>
-        <p>The following icons come from the <a href="https://material.io/icons/">Android Material icon set</a>,
+        <p>The following icons come from the <a href="https://fonts.google.com/icons">Android Material icon set</a>,
             which is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             They are unchanged except for layout information like color and size. Some of them have been renamed to match their use in the code. The original icons and names are shown below.</p>
         <p><svg class="icon"><use href="../shared_images/add.svg#icon"/></svg> add.</p>
index 01188b454e73a815cb64e92a505f1ee4c4eddd6c..15f85cdd306a1e1d50150535134d3780a1acbf3e 100644 (file)
 
         <h3>Iconos</h3>
         <p><img class="left" src="../shared_images/privacy_browser.svg"/> <img class="left" src="../shared_images/warning.svg"/> <img class="left" src="../shared_images/javascript_enabled.svg"/>
-            derivan de <code>security</code> y de <code>language</code>, que son parte del <a href="https://material.io/icons/">conjunto de iconos Android Material</a> y son liberados bajo la
+            derivan de <code>security</code> y de <code>language</code>, que son parte del <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a> y son liberados bajo la
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             El texto completo de la licencia se encuentra debajo. Copyright de modificaciones 2016 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Las imágenes resultantes se liberan bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/move_to_folder.svg#icon"/></svg> deriva de elementos de <code>folder</code> y <code>exit_to_app</code>, que son parte del
-            <a href="https://material.io/icons/">conjunto de iconos Android Material</a> y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
+            <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a> y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             Copyright de modificaciones 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_bookmark.svg#icon"/></svg> deriva de elementos de <code>bookmark</code> y <code>create_new_folder</code>, que son parte del
-            <a href="https://material.io/icons/">conjunto de iconos Android Material</a> y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
+            <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a> y son liberados bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             Copyright de modificaciones 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> deriva de <code>create_new_folder</code>,
-            que es parte del <a href="https://material.io/icons/">conjunto de iconos Android Material</a> y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
+            que es parte del <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a> y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             Copyright de modificaciones 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg> deriva de <code>exit_to_app</code>,
-            que es parte del <a href="https://material.io/icons/">conjunto de iconos Android Material</a> y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
+            que es parte del <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a> y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             Copyright de modificaciones 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> deriva de <code>compare</code>,
-            que es parte del <a href="https://material.io/icons/">conjunto de iconos Android Material</a> y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
+            que es parte del <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a> y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             Copyright de modificaciones 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
-        <p><img class="left" src="../shared_images/sort_selected.svg"/> deriva de <code>sort</code>, que es parte del <a href="https://material.io/icons/">conjunto de iconos Android Material</a>
+        <p><img class="left" src="../shared_images/sort_selected.svg"/> deriva de <code>sort</code>, que es parte del <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a>
             y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>. Copyright de modificaciones 2019, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"/> deriva de <code>push_pin_selected</code>,
-            que es parte del <a href="https://material.io/icons/">conjunto de iconos Android Material</a> y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
+            que es parte del <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a> y es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licencia Apache 2.0</a>.
             Copyright de modificaciones 2019-2020, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             La imagen resultante se libera bajo la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licencia GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/cookie.svg#icon"/></svg> <code>cookie</code> fue creado por Google.
             que se libera bajo la <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">licencia AGPLv3+</a>. El texto completo de la licencia está abajo.
             La imagen no ha cambiado excepto por la información de diseño como el color, el tamaño y el margen.
             Está incluida en el Navegador de Privacidad bajo las disposiciones de la sección 13 de la licencia.</p>
-        <p>Los siguientes iconos proceden de <a href="https://material.io/icons/">conjunto de iconos Android Material</a>,
+        <p>Los siguientes iconos proceden de <a href="https://fonts.google.com/icons">conjunto de iconos Android Material</a>,
             el cual es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">licencia Apache 2.0</a>.
             Están sin cambios, excepto por la información de diseño como el color y el tamaño. Algunos de ellos se han renombrado para que coincida con su uso en el código.
             Los iconos y los nombres originales se muestran a continuación.</p>
index 615ce34ce421ed9a9435676cc91bbe5a3f4918bb..a18cb1bc352e6a6a25f924cf58cef904af2df2e6 100644 (file)
 
         <h3>Icônes</h3>
         <p><img class="left" src="../shared_images/privacy_browser.svg"> <img class="left" src="../shared_images/warning.svg"> <img class="left" src="../shared_images/javascript_enabled.svg"> sont dérivés de
-            <code>security</code> et de <code>language</code>, qui font partie de <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a> et sont publiés sous la
+            <code>security</code> et de <code>language</code>, qui font partie de <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a> et sont publiés sous la
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Le texte complet de la licence est ci-dessous. Modifications copyright 2016 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Les images résultantes sont publiées sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/move_to_folder.svg#icon"/></svg> est dérivé des éléments <code>folder</code> et <code>exit_to_app</code>,
-            qui font partie de <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a>
+            qui font partie de <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a>
             et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_bookmark.svg#icon"/></svg> est dérivé des éléments <code>bookmark</code> et <code>create_new_folder</code>, qui font partie de
-            <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
+            <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> est dérivée de l'élément <code>create_new_folder</code>,
-            qui fait partie de <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
+            qui fait partie de <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg>  est dérivée de l'élément <code>exit_to_app</code>, qui fait partie de
-            <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
+            <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> est dérivée de l'élément <code>compare</code>,
-            qui fait partie de <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
+            qui fait partie de <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><img class="left" src="../shared_images/sort_selected.svg"/> est dérivée de l'élément <code>sort</code>,
-            qui fait partie de <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
+            qui fait partie de <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Modifications copyright 2019, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"/> est dérivée de l'élément <code>push_pin_selected</code>,
-            qui fait partie de <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
+            qui fait partie de <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a> et sont publiés sous <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Modifications copyright 2019-2020, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'image résultante est publiée sous la <a href="https://www.gnu.org/licenses/gpl-3.0.html">licence GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/cookie.svg#icon"/></svg> <code>cookie</code> a été créé par Google.
             qui est publié sous <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">la licence AGPLv3+</a>. Le texte complet de la licence est ci-dessous.
             L'image reste inchangée à l'exception des informations de mise en page telles que la couleur, la taille et la marge.
             Il est inclus dans Privacy Browser conformément aux dispositions de la section 13 de la licence.</p>
-        <p>Les icônes suivantes proviennent de <a href="https://material.io/icons/">l'ensemble d'icônes Matériel Android</a>,
+        <p>Les icônes suivantes proviennent de <a href="https://fonts.google.com/icons">l'ensemble d'icônes Matériel Android</a>,
             qui est publié sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>.
             Ils sont inchangés sauf pour les informations de mise en page comme la couleur et la taille. Certains d'entre eux ont été renommés pour correspondre à leur utilisation dans le code.
             Les icônes et les noms d'origine sont indiqués ci-dessous.</p>
index daf859287bb6185fa990d6f36d5000d59f1714e8..ea88771ad59877b53882047c808455428a8b2e26 100644 (file)
 
         <h3>Icone</h3>
         <p><img class="left" src="../shared_images/privacy_browser.svg"/> <img class="left" src="../shared_images/warning.svg"/> <img class="left" src="../shared_images/javascript_enabled.svg"/>
-            sono state derivate da <code>security</code> e <code>language</code>, che fanno parte dell'<a href="https://material.io/icons/">Android Material icon set</a> e sono state rilasciate sotto
+            sono state derivate da <code>security</code> e <code>language</code>, che fanno parte dell'<a href="https://fonts.google.com/icons">Android Material icon set</a> e sono state rilasciate sotto
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Il testo completo della Licenza è riportato di seguito. Copyright delle modifiche 2016 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Le immagini risultanti sono rilasciate sotto <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/move_to_folder.svg#icon"/></svg> è stata derivata da elementi di <code>folder</code> e di <code>exit_to_app</code>, che fanno parte
-            dell'<a href="https://material.io/icons/">Android Material icon set</a> e sono state rilasciate sotto <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            dell'<a href="https://fonts.google.com/icons">Android Material icon set</a> e sono state rilasciate sotto <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Copyright delle modifiche 2017, 2020 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'immagine risultante è rilasciata sotto <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_bookmark.svg#icon"/></svg> è stata derivata da elementi di <code>bookmark</code> e di <code>create_new_folder</code>, che fanno parte
-            dell'<a href="https://material.io/icons/">Android Material icon set</a> e sono state rilasciate sotto <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            dell'<a href="https://fonts.google.com/icons">Android Material icon set</a> e sono state rilasciate sotto <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Copyright delle modifiche 2017, 2020 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'immagine risultante è rilasciata sotto <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> è stata derivata da <code>create_new_folder</code>,
-            che fa parte dell'<a href="https://material.io/icons/">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            che fa parte dell'<a href="https://fonts.google.com/icons">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Copyright delle modifiche 2017, 2020 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'immagine risultante è rilasciata sotto <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg> è stata derivata da <code>exit_to_app</code>,
-            che fa parte dell'<a href="https://material.io/icons/">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            che fa parte dell'<a href="https://fonts.google.com/icons">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Copyright delle modifiche 2017, 2020 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'immagine risultante è rilasciata sotto <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> è stata derivata da <code>compare</code>,
-            che fa parte dell'<a href="https://material.io/icons/">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            che fa parte dell'<a href="https://fonts.google.com/icons">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Copyright delle modifiche 2017, 2020 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'immagine risultante è rilasciata sotto <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><img class="left" src="../shared_images/sort_selected.svg"/> è stata derivata da <code>sort</code>,
-            che fa parte dell'<a href="https://material.io/icons/">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            che fa parte dell'<a href="https://fonts.google.com/icons">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Copyright delle modifiche 2019, 2020 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'immagine risultante è rilasciata sotto <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"/> è stata derivata da <code>push_pin_selected</code>,
-            che fa parte dell'<a href="https://material.io/icons/">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
+            che fa parte dell'<a href="https://fonts.google.com/icons">Android Material icon set</a> ed è stata rilasciata sotto <a href="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Copyright delle modifiche 2019-2020, 2020 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             L'immagine risultante è rilasciata sotto <a href="https://www.gnu.org/licenses/gpl-3.0.html">Licenza GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/cookie.svg#icon"/></svg> <code>cookie</code> è stata creata da Google.
             <a href="https://github.com/tootsuite/mastodon/blob/master/app/javascript/images/logo_transparent_black.svg">progetto Mastodon</a>,
             che è rilasciato sotto <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">licenza AGPLv3+</a>. Il testo completo della licenza è riportato qui sotto.
             L'immagine non è stata modificata ad eccezione del layout come il colore, le dimensioni, i bordi. E' inclusa in Privacy Browser in accordo con quanto indicato nella sezione 13 della licenza.</p>
-        <p>Le seguenti icone derivano dall'<a href="https://material.io/icons/">Android Material icon set</a>,
+        <p>Le seguenti icone derivano dall'<a href="https://fonts.google.com/icons">Android Material icon set</a>,
             che è rilasciato sotto <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>.
             Non sono state modificatae ad eccezione del colore e della dimensione. Alcune sono state rinominate per coerenza con il tipo di utilizzo all'interno del codice.
             Le icone con i loro nomi originali sono riportate di seguito.</p>
index 61a9e660e399cf91354e8553e8c2dd40e0f232d4..04be0d6f6c10d5680bb323b48570f651adadea09 100644 (file)
 
         <h3>Icons</h3>
         <p><img class="left" src="../shared_images/privacy_browser.svg"/> <img class="left" src="../shared_images/warning.svg"/> <img class="left" src="../shared_images/javascript_enabled.svg"/>
-            are derived from <code>security</code> and <code>language</code>, which are part of the <a href="https://material.io/icons/">Android Material icon set</a> and are released under the
+            are derived from <code>security</code> and <code>language</code>, which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             The full text of the license is below. Modifications copyright 2016 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting images are released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/move_to_folder.svg#icon"/></svg> is derived from elements of <code>folder</code> and <code>exit_to_app</code>,
-            which are part of the <a href="https://material.io/icons/">Android Material icon set</a>
+            which are part of the <a href="https://fonts.google.com/icons">Android Material icon set</a>
             and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_bookmark.svg#icon"/></svg> is derived from elements of <code>bookmark</code> and <code>create_new_folder</code>, which are part of the
-            <a href="https://material.io/icons/">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            <a href="https://fonts.google.com/icons">Android Material icon set</a> and are released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
-        <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> is derived from <code>create_new_folder</code>,
-            which is part of the <a href="https://material.io/icons/">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
-            The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
-        <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg> is derived from <code>exit_to_app</code>,
-            which is part of the <a href="https://material.io/icons/">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
-            The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
-        <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> is derived from <code>compare</code>,
-            which is part of the <a href="https://material.io/icons/">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Modifications copyright 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
-            The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
-        <p><img class="left" src="../shared_images/sort_selected.svg"> is derived from <code>sort</code>, which is part of the <a href="https://material.io/icons/">Android Material icon set</a>
-            and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>. Modifications copyright 2019, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
-            The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
-        <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"> is derived from <code>push_pin_selected</code>,
-            which is part of the <a href="https://material.io/icons/">Android Material icon set</a> and is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
-            Modifications copyright 2019-2020, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
-            The resulting image is released under the <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+ license</a>.</p>
+        <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> é deridado de <code>create_new_folder</code>,
+            que faz parte do <a href="https://fonts.google.com/icons">conjunto de ícones do Android Material</a> é lançado sob a <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licença Apache 2.0</a>.
+            Direitos autorais das modificações 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            A imagem resultante é liberada sob a <a href="https://www.gnu.org/licenses/gpl-3.0.html">licença GPLv3+</a>.</p>
+        <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg> é deridado de <code>exit_to_app</code>,
+            que faz parte do <a href="https://fonts.google.com/icons">conjunto de ícones do Android Material</a> é lançado sob a <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licença Apache 2.0</a>.
+            Direitos autorais das modificações 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            A imagem resultante é liberada sob a <a href="https://www.gnu.org/licenses/gpl-3.0.html">licença GPLv3+</a>.</p>
+        <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> é deridado de <code>compare</code>,
+            que faz parte do <a href="https://fonts.google.com/icons">conjunto de ícones do Android Material</a> é lançado sob a <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licença Apache 2.0</a>.
+            Direitos autorais das modificações 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            A imagem resultante é liberada sob a <a href="https://www.gnu.org/licenses/gpl-3.0.html">licença GPLv3+</a>.</p>
+        <p><img class="left" src="../shared_images/sort_selected.svg"> é deridado de <code>sort</code>, que faz parte do <a href="https://fonts.google.com/icons">conjunto de ícones do Android Material</a>
+            é lançado sob a <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licença Apache 2.0</a>. Direitos autorais das modificações 2019, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            A imagem resultante é liberada sob a <a href="https://www.gnu.org/licenses/gpl-3.0.html">licença GPLv3+</a>.</p>
+        <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"> é deridado de <code>push_pin_selected</code>,
+            que faz parte do <a href="https://fonts.google.com/icons">conjunto de ícones do Android Material</a> é lançado sob a <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licença Apache 2.0</a>.
+            Direitos autorais das modificações 2019-2020, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
+            A imagem resultante é liberada sob a <a href="https://www.gnu.org/licenses/gpl-3.0.html">licença GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/cookie.svg#icon"/></svg> <code>cookie</code> was created by Google.
             It is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>
             and can be downloaded from <a href="https://materialdesignicons.com/icon/cookie">Material Design Icons</a>. It is unchanged except for layout information like color and size.</p>
             <a href="https://github.com/tootsuite/mastodon/blob/master/app/javascript/images/logo_transparent_black.svg">Mastodon project</a>,
             which is released under the <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">AGPLv3+ license</a>. The full text of the license is below.
             The image is unchanged except for layout information like color, size, and margin. It is included in Privacy Browser under the provisions in section 13 of the license.</p>
-        <p>The following icons come from the <a href="https://material.io/icons/">Android Material icon set</a>,
+        <p>The following icons come from the <a href="https://fonts.google.com/icons">Android Material icon set</a>,
             which is released under the <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             They are unchanged except for layout information like color and size. Some of them have been renamed to match their use in the code. The original icons and names are shown below.</p>
         <p><svg class="icon"><use href="../shared_images/add.svg#icon"/></svg> add.</p>
index c54fd0296c2ee96f5630db5349add42f183a03f7..aa9b9a98fcac21bad9e88d1ab7f26326167de13f 100644 (file)
@@ -39,6 +39,6 @@
 
         <h3><a href="https://developer.android.com/about/versions/13/features#runtime-receivers">
             com.stoutner.privacybrowser.<wbr>standard.<wbr>DYNAMIC_<wbr>RECEIVER_<wbr>NOT_<wbr>EXPORTED_<wbr>PERMISSION</a></h3>
-        <p>Automatically added to all apps targeting API >= 33 (Android 13) to prevent other apps from connecting to dynamic receivers without explicit permission.</p>
+        <p>Adicionado automaticamente a todos os aplicativos direcionados à API >= 33 (Android 13) para impedir que outros aplicativos se conectem a receptores dinâmicos sem permissão explícita.</p>
     </body>
 </html>
index 094c0c7cbe1336adc4ec148353c43c5f44e04d87..8be37261c0c5d8ac7fac93a5a7f11e8a1a147432 100644 (file)
@@ -36,7 +36,8 @@
             the drawer may be opened by long-pressing on the edge of the screen <a href="https://redmine.stoutner.com/boards/1/topics/243">until the drawer peaks out</a> and then swiping it open.
             Sometimes it can be difficult to get the bookmarks drawer to reliably peak on devices with curved edges, so it is also possible to open the bookmarks drawer from the options menu.</p>
 
-        <p>Tapping on a bookmark opens it in the current tab. Long-pressing on a bookmark opens it in a new tab and long-pressing on a folder opens all the bookmarks it directly contains in new tabs.
+        <p>Tocar em um marcador o abre na guia atual.
+            Pressionar longamente um marcador abre-o em uma nova guia e pressionar longamente uma pasta abre todos os favoritos que ela contém diretamente em novas guias.
             Tapping the top floating action button in the bookmarks drawer opens the bookmarks activity, where bookmarks can be edited and reorganized.</p>
     </body>
 </html>
index bae60d8e36ece49d9d79dbaf269bc66684ffeb33..4d4588368caa2322221c113d06b388266dff1106 100644 (file)
 
         <h3>Иконки</h3>
         <p><img class="left" src="../shared_images/privacy_browser.svg"/> <img class="left" src="../shared_images/warning.svg"/> <img class="left" src="../shared_images/javascript_enabled.svg"/>
-            являются производными от <code>security</code> и <code>language</code>, которые являются частью <a href="https://material.io/icons/">Android Material icon set</a> и выпущены под
+            являются производными от <code>security</code> и <code>language</code>, которые являются частью <a href="https://fonts.google.com/icons">Android Material icon set</a> и выпущены под
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>. Полный текст лицензии приведен ниже.
             Модификации авторских прав 2016 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Полученные изображения выпущены под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/move_to_folder.svg#icon"/></svg> являются производными от <code>folder</code> и <code>exit_to_app</code>, которые являются частью
-            <a href="https://material.io/icons/">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            <a href="https://fonts.google.com/icons">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Модификации авторских прав 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Полученные изображения выпущены под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_bookmark.svg#icon"/></svg> являются производными от <code>bookmark</code> и <code>create_new_folder</code>, которые являются частью
-            <a href="https://material.io/icons/">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            <a href="https://fonts.google.com/icons">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Модификации авторских прав 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Полученные изображения выпущены под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> являются производными от <code>create_new_folder</code>, которые являются частью
-            <a href="https://material.io/icons/">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            <a href="https://fonts.google.com/icons">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Модификации авторских прав 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Полученные изображения выпущены под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg> являются производными от <code>exit_to_app</code>,
-            которые являются частью <a href="https://material.io/icons/">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            которые являются частью <a href="https://fonts.google.com/icons">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Модификации авторских прав 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Полученные изображения выпущены под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> являются производными от <code>compare</code>,
-            которые являются частью <a href="https://material.io/icons/">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            которые являются частью <a href="https://fonts.google.com/icons">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Модификации авторских прав 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Полученные изображения выпущены под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><img class="left" src="../shared_images/sort_selected.svg"/> являются производными от <code>sort</code>,
-            которые являются частью <a href="https://material.io/icons/">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            которые являются частью <a href="https://fonts.google.com/icons">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Модификации авторских прав 2019, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Полученные изображения выпущены под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"/> являются производными от <code>push_pin_selected</code>,
-            которые являются частью <a href="https://material.io/icons/">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
+            которые являются частью <a href="https://fonts.google.com/icons">Android Material icon set</a> и выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Модификации авторских прав 2019-2020, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Полученные изображения выпущены под <a href="https://www.gnu.org/licenses/gpl-3.0.html">лицензией GPLv3+</a>.</p>
         <p><svg class="left"><use href="../shared_images/cookie.svg#icon"/></svg> <code>cookie</code> были созданы Google.
             <a href="https://github.com/tootsuite/mastodon/blob/master/app/javascript/images/logo_transparent_black.svg">проекта Mastodon</a>,
             который выпускается под <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">лицензией AGPLv3+</a>. Полный текст лицензии приведен ниже.
             Изображение не было изменено, за исключением информации о верстке, в том числе цвет, размеры и отступы. В соответствии с положениями раздела 13 лицензии оно включено в Privacy Browser.</p>
-        <p>Следующие значки взяты из<a href="https://material.io/icons/">Android Material icon set</a>,
+        <p>Следующие значки взяты из<a href="https://fonts.google.com/icons">Android Material icon set</a>,
             которые выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.
             Они неизменны, за исключением такой информации, как цвет и размер. Некоторые из них были переименованы в соответствии с их использованием в коде. Оригинальные значки и имена показаны ниже.</p>
         <p><svg class="icon"><use href="../shared_images/add.svg#icon"/></svg> add.</p>
index 13946d99e8d44bf11ef0f4eaa042c71fb5bd0c8a..5137d942e346ed7e4dcb7d8d3ceb61f404927c08 100644 (file)
         <h3>Simgeler</h3>
         <p><img class="left" src="../shared_images/privacy_browser.svg"/> <img class="left" src="../shared_images/warning.svg"/> <img class="left" src="../shared_images/javascript_enabled.svg"/>
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan ve
-            <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>security</code> ve <code>language</code>'den elde edilmiştir.
+            <a href="https://fonts.google.com/icons">Android Material</a> simge setinin bir parçası olan <code>security</code> ve <code>language</code>'den elde edilmiştir.
             Lisansın tüm metni aşağıdadır. Değişikliklerin telif hakkı 2016 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Ortaya çıkan görüntüler <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı.</p>
         <p><svg class="left"><use href="../shared_images/move_to_folder.svg#icon"/></svg> <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan ve
-            <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>folder</code> ve <code>exit_to_app</code> elementlerinden elde edilmiştir.
+            <a href="https://fonts.google.com/icons">Android Material</a> simge setinin bir parçası olan <code>folder</code> ve <code>exit_to_app</code> elementlerinden elde edilmiştir.
             Değişikliklerin telif hakkı 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Ortaya çıkan görüntü <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı.</p>
         <p><svg class="left"><use href="../shared_images/create_bookmark.svg#icon"/></svg> <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan ve
-            <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>bookmarks</code> ve <code>create_new_folder</code> elementlerinden elde edilmiştir.
+            <a href="https://fonts.google.com/icons">Android Material</a> simge setinin bir parçası olan <code>bookmarks</code> ve <code>create_new_folder</code> elementlerinden elde edilmiştir.
             Değişikliklerin telif hakkı 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Ortaya çıkan görüntü <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı.</p>
         <p><svg class="left"><use href="../shared_images/create_folder.svg#icon"/></svg> <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan ve
-            <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>create_new_folder</code>'dan elde edilmiştir.
+            <a href="https://fonts.google.com/icons">Android Material</a> simge setinin bir parçası olan <code>create_new_folder</code>'dan elde edilmiştir.
             Değişikliklerin telif hakkı 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Ortaya çıkan görüntü <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı.</p>
         <p><svg class="left"><use href="../shared_images/clear_and_exit.svg#icon"/></svg> <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan ve
-            <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>exit_to_app</code>'ten elde edilmiştir.
+            <a href="https://fonts.google.com/icons">Android Material</a> simge setinin bir parçası olan <code>exit_to_app</code>'ten elde edilmiştir.
             Değişikliklerin telif hakkı 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Ortaya çıkan görüntü <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı.</p>
         <p><svg class="left"><use href="../shared_images/night_mode.svg#icon"/></svg> <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan ve
-            <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>compare</code>'den elde edilmiştir.
+            <a href="https://fonts.google.com/icons">Android Material</a> simge setinin bir parçası olan <code>compare</code>'den elde edilmiştir.
             Değişikliklerin telif hakkı 2017, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Ortaya çıkan görüntü <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı.</p>
         <p><img class="left" src="../shared_images/sort_selected.svg"/> <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan ve
-            <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>sort</code>'dan elde edilmiştir.
+            <a href="https://fonts.google.com/icons">Android Material</a> simge setinin bir parçası olan <code>sort</code>'dan elde edilmiştir.
             Değişikliklerin telif hakkı 2019, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Ortaya çıkan görüntü <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı.</p>
         <p><img class="left" src="../shared_images/push_pin_filled_selected.svg"/> <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan ve
-            <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>push_pin_selected</code>'dan elde edilmiştir.
+            <a href="https://fonts.google.com/icons">Android Material</a> simge setinin bir parçası olan <code>push_pin_selected</code>'dan elde edilmiştir.
             Değişikliklerin telif hakkı 2019-2020, 2022 <a href="mailto:soren@stoutner.com">Soren Stoutner</a>.
             Ortaya çıkan görüntü <a href="https://www.gnu.org/licenses/gpl-3.0.html">GPLv3+</a> lisansı altında yayınlandı.</p>
         <p><svg class="left"><use href="../shared_images/cookie.svg#icon"/></svg> <code>cookie</code> Google tarafından oluşturuldu.
             <a href="https://github.com/tootsuite/mastodon/blob/master/app/javascript/images/logo_transparent_black.svg">Mastodon project</a>,
             which is released under the <a href="https://www.gnu.org/licenses/agpl-3.0.en.html">AGPLv3+ license</a>. The full text of the license is below.
             The image is unchanged except for layout information like color, size, and margin. It is included in Privacy Browser under the provisions in section 13 of the license.</p>
-        <p>Aşağıdaki simgeler <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan <a href="https://material.io/icons/">Android Material</a>
+        <p>Aşağıdaki simgeler <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlanan <a href="https://fonts.google.com/icons">Android Material</a>
             simge setinden gelmektedir. Renk ve ebat gibi düzen bilgileri dışında herhangi bir değişiklik yapılmamıştır. Bazıları koddaki kullanımlarıyla uygun olacak şekilde yeniden adlandırıldı.
             Orijinal simgeler ve adlar aşağıda gösterilmiştir.</p>
         <p><svg class="icon"><use href="../shared_images/add.svg#icon"/></svg> add.</p>
index 46be93ad25a680872c925f8fa519e67b753c475c..d3e352b60834ac5b0b9dcd3e3f66fe6051d4e938 100644 (file)
@@ -153,6 +153,7 @@ import com.stoutner.privacybrowser.helpers.BookmarksDatabaseHelper;
 import com.stoutner.privacybrowser.helpers.DomainsDatabaseHelper;
 import com.stoutner.privacybrowser.helpers.ProxyHelper;
 import com.stoutner.privacybrowser.helpers.SanitizeUrlHelper;
+import com.stoutner.privacybrowser.helpers.UrlHelper;
 import com.stoutner.privacybrowser.views.NestedScrollWebView;
 
 import java.io.ByteArrayInputStream;
@@ -263,7 +264,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
     private BookmarksDatabaseHelper bookmarksDatabaseHelper;
     private DomainsDatabaseHelper domainsDatabaseHelper;
     private ProxyHelper proxyHelper;
-    private SanitizeUrlHelper sanitizeUrlHelper;
 
     // Declare the class variables
     private boolean bookmarksDrawerPinned;
@@ -608,7 +608,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         bookmarksDatabaseHelper = new BookmarksDatabaseHelper(this);
         domainsDatabaseHelper = new DomainsDatabaseHelper(this);
         proxyHelper = new ProxyHelper();
-        sanitizeUrlHelper = new SanitizeUrlHelper();
 
         // Update the bookmarks drawer pinned image view.
         updateBookmarksDrawerPinnedImageView();
@@ -4371,11 +4370,11 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
     private String sanitizeUrl(String url) {
         // Sanitize tracking queries.
         if (sanitizeTrackingQueries)
-            url = sanitizeUrlHelper.sanitizeTrackingQueries(url);
+            url = SanitizeUrlHelper.sanitizeTrackingQueries(url);
 
         // Sanitize AMP redirects.
         if (sanitizeAmpRedirects)
-            url = sanitizeUrlHelper.sanitizeAmpRedirects(url);
+            url = SanitizeUrlHelper.sanitizeAmpRedirects(url);
 
         // Return the sanitized URL.
         return url;
@@ -5140,10 +5139,10 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 }
 
                 // Get the file name from the content disposition.
-                String fileNameString = PrepareSaveDialogCoroutine.getFileNameFromHeaders(this, contentDisposition, mimetype, downloadUrl);
+                String fileNameString = UrlHelper.getFileName(this, contentDisposition, mimetype, downloadUrl);
 
                 // Instantiate the save dialog.
-                DialogFragment saveDialogFragment = SaveDialog.saveUrl(downloadUrl, formattedFileSizeString, fileNameString, userAgent,
+                DialogFragment saveDialogFragment = SaveDialog.saveUrl(downloadUrl, fileNameString, formattedFileSizeString, userAgent,
                         nestedScrollWebView.getAcceptCookies());
 
                 // Try to show the dialog.  The download listener continues to function even when the WebView is paused.  Attempting to display a dialog in that state leads to a crash.
index 1af0320745446da3ff92bba0d76f2a9dd768e54c..200e049204ab3acb5c8fc3f7d08ffa5450b139dd 100644 (file)
@@ -20,9 +20,6 @@
 package com.stoutner.privacybrowser.coroutines
 
 import android.content.Context
-import android.net.Uri
-import android.webkit.CookieManager
-import android.webkit.MimeTypeMap
 
 import androidx.fragment.app.DialogFragment
 import androidx.fragment.app.FragmentManager
@@ -31,16 +28,14 @@ import com.stoutner.privacybrowser.R
 import com.stoutner.privacybrowser.activities.MainWebViewActivity
 import com.stoutner.privacybrowser.dataclasses.PendingDialogDataClass
 import com.stoutner.privacybrowser.dialogs.SaveDialog
-import com.stoutner.privacybrowser.helpers.ProxyHelper
+import com.stoutner.privacybrowser.helpers.UrlHelper
+
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 
 import java.lang.Exception
-import java.net.HttpURLConnection
-import java.net.URL
-import java.text.NumberFormat
 
 object PrepareSaveDialogCoroutine {
     @JvmStatic
@@ -49,108 +44,13 @@ object PrepareSaveDialogCoroutine {
         CoroutineScope(Dispatchers.Main).launch {
             // Make the network requests on the IO thread.
             withContext(Dispatchers.IO) {
-                // Define the strings.
-                var formattedFileSize: String
-                var fileNameString: String
-
-                // Populate the file size and name strings.
-                if (urlString.startsWith("data:")) {  // The URL contains the entire data of an image.
-                    // Remove `data:` from the beginning of the URL.
-                    val urlWithoutData = urlString.substring(5)
-
-                    // Get the URL MIME type, which ends with a `;`.
-                    val urlMimeType = urlWithoutData.substring(0, urlWithoutData.indexOf(";"))
-
-                    // Get the Base64 data, which begins after a `,`.
-                    val base64DataString = urlWithoutData.substring(urlWithoutData.indexOf(",") + 1)
-
-                    // Calculate the file size of the data URL.  Each Base64 character represents 6 bits.
-                    formattedFileSize = NumberFormat.getInstance().format(base64DataString.length * 3L / 4) + " " + context.getString(R.string.bytes)
-
-                    // Set the file name according to the MIME type.
-                    fileNameString = context.getString(R.string.file) + "." + MimeTypeMap.getSingleton().getExtensionFromMimeType(urlMimeType)
-                } else {  // The URL refers to the location of the data.
-                    // Initialize the formatted file size string.
-                    formattedFileSize = context.getString(R.string.unknown_size)
-
-                    // Because everything relating to requesting data from a webserver can throw errors, the entire section must catch exceptions.
-                    try {
-                        // Convert the URL string to a URL.
-                        val url = URL(urlString)
-
-                        // Instantiate the proxy helper.
-                        val proxyHelper = ProxyHelper()
-
-                        // Get the current proxy.
-                        val proxy = proxyHelper.getCurrentProxy(context)
-
-                        // Open a connection to the URL.  No data is actually sent at this point.
-                        val httpUrlConnection = url.openConnection(proxy) as HttpURLConnection
-
-                        // Add the user agent to the header property.
-                        httpUrlConnection.setRequestProperty("User-Agent", userAgent)
-
-                        // Add the cookies if they are enabled.
-                        if (cookiesEnabled) {
-                            // Get the cookies for the current domain.
-                            val cookiesString = CookieManager.getInstance().getCookie(url.toString())
-
-                            // Add the cookies if they are not null.
-                            if (cookiesString != null)
-                                httpUrlConnection.setRequestProperty("Cookie", cookiesString)
-                        }
-
-                        // The actual network request is in a `try` bracket so that `disconnect()` is run in the `finally` section even if an error is encountered in the main block.
-                        try {
-                            // Get the status code.  This initiates a network connection.
-                            val responseCode = httpUrlConnection.responseCode
-
-                            // Check the response code.
-                            if (responseCode >= 400) {  // The response code is an error message.
-                                // Set the formatted file size to indicate a bad URL.
-                                formattedFileSize = context.getString(R.string.invalid_url)
-
-                                // Set the file name according to the URL.
-                                fileNameString = getFileNameFromUrl(context, urlString, null)
-                            } else {  // The response code is not an error message.
-                                // Get the headers.
-                                val contentLengthString = httpUrlConnection.getHeaderField("Content-Length")
-                                val contentDispositionString = httpUrlConnection.getHeaderField("Content-Disposition")
-                                var contentTypeString = httpUrlConnection.contentType
-
-                                // Remove anything after the MIME type in the content type string.
-                                if (contentTypeString.contains(";"))
-                                    contentTypeString = contentTypeString.substring(0, contentTypeString.indexOf(";"))
-
-                                // Only process the content length string if it isn't null.
-                                if (contentLengthString != null) {
-                                    // Convert the content length string to a long.
-                                    val fileSize = contentLengthString.toLong()
-
-                                    // Format the file size.
-                                    formattedFileSize = NumberFormat.getInstance().format(fileSize) + " " + context.getString(R.string.bytes)
-                                }
-
-                                // Get the file name string from the content disposition.
-                                fileNameString = getFileNameFromHeaders(context, contentDispositionString, contentTypeString, urlString)
-                            }
-                        } finally {
-                            // Disconnect the HTTP URL connection.
-                            httpUrlConnection.disconnect()
-                        }
-                    } catch (exception: Exception) {
-                        // Set the formatted file size to indicate a bad URL.
-                        formattedFileSize = context.getString(R.string.invalid_url)
-
-                        // Set the file name according to the URL.
-                        fileNameString = getFileNameFromUrl(context, urlString, null)
-                    }
-                }
+                // Get the file name and size.
+                val fileNameAndSize = UrlHelper.getNameAndSize(context, urlString, userAgent, cookiesEnabled)
 
                 // Display the dialog on the main thread.
                 withContext(Dispatchers.Main) {
                     // Instantiate the save dialog.
-                    val saveDialogFragment: DialogFragment = SaveDialog.saveUrl(urlString, formattedFileSize, fileNameString, userAgent, cookiesEnabled)
+                    val saveDialogFragment: DialogFragment = SaveDialog.saveUrl(urlString, fileNameAndSize.first, fileNameAndSize.second, userAgent, cookiesEnabled)
 
                     // Try to show the dialog.  Sometimes the window is not active.
                     try {
@@ -164,63 +64,4 @@ object PrepareSaveDialogCoroutine {
             }
         }
     }
-
-    // Content dispositions can contain other text besides the file name, and they can be in any order.
-    // Elements are separated by semicolons.  Sometimes the file names are contained in quotes.
-    @JvmStatic
-    fun getFileNameFromHeaders(context: Context, contentDispositionString: String?, contentTypeString: String?, urlString: String): String {
-        // Define a file name string.
-        var fileNameString: String
-
-        // Only process the content disposition string if it isn't null.
-        if (contentDispositionString != null) {  // The content disposition is not null.
-            // Check to see if the content disposition contains a file name.
-            if (contentDispositionString.contains("filename=")) {  // The content disposition contains a filename.
-                // Get the part of the content disposition after `filename=`.
-                fileNameString = contentDispositionString.substring(contentDispositionString.indexOf("filename=") + 9)
-
-                // Remove any `;` and anything after it.  This removes any entries after the filename.
-                if (fileNameString.contains(";"))
-                    fileNameString = fileNameString.substring(0, fileNameString.indexOf(";") - 1)
-
-                // Remove any `"` at the beginning of the string.
-                if (fileNameString.startsWith("\""))
-                    fileNameString = fileNameString.substring(1)
-
-                // Remove any `"` at the end of the string.
-                if (fileNameString.endsWith("\""))
-                    fileNameString = fileNameString.substring(0, fileNameString.length - 1)
-            } else {  // The headers contain no useful information.
-                // Get the file name string from the URL.
-                fileNameString = getFileNameFromUrl(context, urlString, contentTypeString)
-            }
-        } else {  // The content disposition is null.
-            // Get the file name string from the URL.
-            fileNameString = getFileNameFromUrl(context, urlString, contentTypeString)
-        }
-
-        // Return the file name string.
-        return fileNameString
-    }
-
-    private fun getFileNameFromUrl(context: Context, urlString: String, contentTypeString: String?): String {
-        // Convert the URL string to a URI.
-        val uri = Uri.parse(urlString)
-
-        // Get the last path segment.
-        var lastPathSegment = uri.lastPathSegment
-
-        // Use a default file name if the last path segment is null.
-        if (lastPathSegment == null) {
-            // Set the last path segment to be the generic file name.
-            lastPathSegment = context.getString(R.string.file)
-
-            // Add a file extension if it can be detected.
-            if (MimeTypeMap.getSingleton().hasMimeType(contentTypeString))
-                lastPathSegment = lastPathSegment + "." + MimeTypeMap.getSingleton().getExtensionFromMimeType(contentTypeString)
-        }
-
-        // Return the last path segment as the file name.
-        return lastPathSegment
-    }
 }
index 63a6eaa301c0d8f76a41e0ab3b589b2c97d0719e..2f7868e93817fad2e92c15f8114ac2584b007307 100644 (file)
@@ -35,15 +35,13 @@ import androidx.fragment.app.DialogFragment
 import androidx.preference.PreferenceManager
 
 import com.stoutner.privacybrowser.R
-import com.stoutner.privacybrowser.helpers.GetUrlSizeHelper
+import com.stoutner.privacybrowser.helpers.UrlHelper
 
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 
-import java.net.URL
-
 // Define the class constants.
 private const val URL_STRING = "url_string"
 private const val FILE_SIZE_STRING = "file_size_string"
@@ -71,14 +69,14 @@ class SaveDialog : DialogFragment() {
     companion object {
         // `@JvmStatic` will no longer be required once all the code has transitioned to Kotlin.
         @JvmStatic
-        fun saveUrl(urlString: String, fileSizeString: String, fileNameString: String, userAgentString: String, cookiesEnabled: Boolean): SaveDialog {
+        fun saveUrl(urlString: String, fileNameString: String, fileSizeString: String, userAgentString: String, cookiesEnabled: Boolean): SaveDialog {
             // Create an arguments bundle.
             val argumentsBundle = Bundle()
 
             // Store the arguments in the bundle.
             argumentsBundle.putString(URL_STRING, urlString)
-            argumentsBundle.putString(FILE_SIZE_STRING, fileSizeString)
             argumentsBundle.putString(FILE_NAME_STRING, fileNameString)
+            argumentsBundle.putString(FILE_SIZE_STRING, fileSizeString)
             argumentsBundle.putString(USER_AGENT_STRING, userAgentString)
             argumentsBundle.putBoolean(COOKIES_ENABLED, cookiesEnabled)
 
@@ -96,8 +94,8 @@ class SaveDialog : DialogFragment() {
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         // Get the arguments from the bundle.
         val originalUrlString = requireArguments().getString(URL_STRING)!!
+        var fileNameString = requireArguments().getString(FILE_NAME_STRING)!!
         val fileSizeString = requireArguments().getString(FILE_SIZE_STRING)!!
-        val fileNameString = requireArguments().getString(FILE_NAME_STRING)!!
         val userAgentString = requireArguments().getString(USER_AGENT_STRING)!!
         val cookiesEnabled = requireArguments().getBoolean(COOKIES_ENABLED)
 
@@ -181,16 +179,19 @@ class SaveDialog : DialogFragment() {
 
                 CoroutineScope(Dispatchers.Main).launch {
                     // Create a URL size string.
-                    var urlSize: String
+                    var fileNameAndSize: Pair<String, String>
 
                     // Get the URL size on the IO thread.
                     withContext(Dispatchers.IO) {
-                        // Get the URL size.
-                        urlSize = GetUrlSizeHelper.getUrl(requireContext(), URL(urlToSave), userAgentString, cookiesEnabled)
+                        // Get the updated file name and size.
+                        fileNameAndSize = UrlHelper.getNameAndSize(requireContext(), urlToSave, userAgentString, cookiesEnabled)
+
+                        // Save the updated file name.
+                        fileNameString = fileNameAndSize.first
                     }
 
                     // Display the updated URL.
-                    fileSizeTextView.text = urlSize
+                    fileSizeTextView.text = fileNameAndSize.second
                 }
             }
         })
diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/GetUrlSizeHelper.kt b/app/src/main/java/com/stoutner/privacybrowser/helpers/GetUrlSizeHelper.kt
deleted file mode 100644 (file)
index 6c3b3f8..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2020-2022 Soren Stoutner <soren@stoutner.com>.
- *
- * 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/>.
- */
-
-package com.stoutner.privacybrowser.helpers
-
-import android.content.Context
-import android.webkit.CookieManager
-
-import com.stoutner.privacybrowser.R
-
-import java.lang.Exception
-import java.net.HttpURLConnection
-import java.net.URL
-import java.text.NumberFormat
-
-object GetUrlSizeHelper {
-    fun getUrl(context: Context, url: URL, userAgent: String, cookiesEnabled: Boolean): String {
-        // Initialize the formatted file size string.
-        var formattedFileSize = context.getString(R.string.unknown_size)
-
-        // Because everything relating to requesting data from a webserver can throw errors, the entire section must catch exceptions.
-        try {
-            // Instantiate the proxy helper.
-            val proxyHelper = ProxyHelper()
-
-            // Get the current proxy.
-            val proxy = proxyHelper.getCurrentProxy(context)
-
-            // Open a connection to the URL.  No data is actually sent at this point.
-            val httpUrlConnection = url.openConnection(proxy) as HttpURLConnection
-
-            // Add the user agent to the header property.
-            httpUrlConnection.setRequestProperty("User-Agent", userAgent)
-
-            // Add the cookies if they are enabled.
-            if (cookiesEnabled) {
-                // Get the cookies for the current domain.
-                val cookiesString = CookieManager.getInstance().getCookie(url.toString())
-
-                // Only add the cookies if they are not null.
-                if (cookiesString != null) {
-                    // Add the cookies to the header property.
-                    httpUrlConnection.setRequestProperty("Cookie", cookiesString)
-                }
-            }
-
-            // The actual network request is in a `try` bracket so that `disconnect()` is run in the `finally` section even if an error is encountered in the main block.
-            try {
-                // Get the status code.  This initiates a network connection.
-                val responseCode = httpUrlConnection.responseCode
-
-                // Check the response code.
-                if (responseCode >= 400) {  // The response code is an error message.
-                    // Set the formatted file size to indicate a bad URL.
-                    formattedFileSize = context.getString(R.string.invalid_url)
-                } else {  // The response code is not an error message.
-                    // Get the content length header.
-                    val contentLengthString = httpUrlConnection.getHeaderField("Content-Length")
-
-                    // Only process the content length string if it isn't null.
-                    if (contentLengthString != null) {
-                        // Convert the content length string to a long.
-                        val fileSize = contentLengthString.toLong()
-
-                        // Format the file size.
-                        formattedFileSize = NumberFormat.getInstance().format(fileSize) + " " + context.getString(R.string.bytes)
-                    }
-                }
-            } finally {
-                // Disconnect the HTTP URL connection.
-                httpUrlConnection.disconnect()
-            }
-        } catch (exception: Exception) {
-            // Set the formatted file size to indicate a bad URL.
-            formattedFileSize = context.getString(R.string.invalid_url)
-        }
-
-        // Return the formatted file size.
-        return formattedFileSize
-    }
-}
index 7e4ad981f017ede460e2628a9f728355a34d8f22..370eae96934a947958437df1e961e291e616ff6b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright ©2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -48,7 +48,8 @@ private val trackingQueriesList = listOf(
     "yclid="               // Yandex Click ID.
 )
 
-class SanitizeUrlHelper {
+object SanitizeUrlHelper {
+    @JvmStatic
     fun sanitizeTrackingQueries(inputUrl: String): String {
         // Make a copy of the input URL so that it can be modified.
         var url = inputUrl
@@ -69,6 +70,7 @@ class SanitizeUrlHelper {
         return url
     }
 
+    @JvmStatic
     fun sanitizeAmpRedirects(inputUrl: String): String {
         // Make a copy of the input URL so that it can be modified.
         var url = inputUrl
@@ -82,4 +84,4 @@ class SanitizeUrlHelper {
         // Return the sanitized URL.
         return url
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/UrlHelper.kt b/app/src/main/java/com/stoutner/privacybrowser/helpers/UrlHelper.kt
new file mode 100644 (file)
index 0000000..e51b2c0
--- /dev/null
@@ -0,0 +1,261 @@
+/*
+ * Copyright 2020-2022 Soren Stoutner <soren@stoutner.com>.
+ *
+ * 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/>.
+ */
+
+package com.stoutner.privacybrowser.helpers
+
+import android.content.Context
+import android.net.Uri
+import android.webkit.CookieManager
+import android.webkit.MimeTypeMap
+
+import com.stoutner.privacybrowser.R
+
+import java.lang.Exception
+import java.net.HttpURLConnection
+import java.net.URL
+import java.text.NumberFormat
+
+object UrlHelper {
+    // Content dispositions can contain other text besides the file name, and they can be in any order.
+    // Elements are separated by semicolons.  Sometimes the file names are contained in quotes.
+    @JvmStatic
+    fun getFileName(context: Context, contentDispositionString: String?, contentTypeString: String?, urlString: String): String {
+        // Define a file name string.
+        var fileNameString: String
+
+        // Only process the content disposition string if it isn't null.
+        if (contentDispositionString != null) {  // The content disposition is not null.
+            // Check to see if the content disposition contains a file name.
+            if (contentDispositionString.contains("filename=")) {  // The content disposition contains a filename.
+                // Get the part of the content disposition after `filename=`.
+                fileNameString = contentDispositionString.substring(contentDispositionString.indexOf("filename=") + 9)
+
+                // Remove any `;` and anything after it.  This removes any entries after the filename.
+                if (fileNameString.contains(";"))
+                    fileNameString = fileNameString.substring(0, fileNameString.indexOf(";") - 1)
+
+                // Remove any `"` at the beginning of the string.
+                if (fileNameString.startsWith("\""))
+                    fileNameString = fileNameString.substring(1)
+
+                // Remove any `"` at the end of the string.
+                if (fileNameString.endsWith("\""))
+                    fileNameString = fileNameString.substring(0, fileNameString.length - 1)
+            } else {  // The headers contain no useful information.
+                // Get the file name string from the URL.
+                fileNameString = getFileNameFromUrl(context, urlString, contentTypeString)
+            }
+        } else {  // The content disposition is null.
+            // Get the file name string from the URL.
+            fileNameString = getFileNameFromUrl(context, urlString, contentTypeString)
+        }
+
+        // Return the file name string.
+        return fileNameString
+    }
+
+    private fun getFileNameFromUrl(context: Context, urlString: String, contentTypeString: String?): String {
+        // Convert the URL string to a URI.
+        val uri = Uri.parse(urlString)
+
+        // Get the last path segment.
+        var lastPathSegment = uri.lastPathSegment
+
+        // Use a default file name if the last path segment is null.
+        if (lastPathSegment == null) {
+            // Set the last path segment to be the generic file name.
+            lastPathSegment = context.getString(R.string.file)
+
+            // Add a file extension if it can be detected.
+            if (MimeTypeMap.getSingleton().hasMimeType(contentTypeString))
+                lastPathSegment = lastPathSegment + "." + MimeTypeMap.getSingleton().getExtensionFromMimeType(contentTypeString)
+        }
+
+        // Return the last path segment as the file name.
+        return lastPathSegment
+    }
+
+    fun getNameAndSize(context: Context, urlString: String, userAgent: String, cookiesEnabled: Boolean): Pair<String, String> {
+        // Define the strings.
+        var fileNameString: String
+        var formattedFileSize: String
+
+        // Populate the file size and name strings.
+        if (urlString.startsWith("data:")) {  // The URL contains the entire data of an image.
+            // Remove `data:` from the beginning of the URL.
+            val urlWithoutData = urlString.substring(5)
+
+            // Get the URL MIME type, which ends with a `;`.
+            val urlMimeType = urlWithoutData.substring(0, urlWithoutData.indexOf(";"))
+
+            // Get the Base64 data, which begins after a `,`.
+            val base64DataString = urlWithoutData.substring(urlWithoutData.indexOf(",") + 1)
+
+            // Calculate the file size of the data URL.  Each Base64 character represents 6 bits.
+            formattedFileSize = NumberFormat.getInstance().format(base64DataString.length * 3L / 4) + " " + context.getString(R.string.bytes)
+
+            // Set the file name according to the MIME type.
+            fileNameString = context.getString(R.string.file) + "." + MimeTypeMap.getSingleton().getExtensionFromMimeType(urlMimeType)
+        } else {  // The URL refers to the location of the data.
+            // Initialize the formatted file size string.
+            formattedFileSize = context.getString(R.string.unknown_size)
+
+            // Because everything relating to requesting data from a webserver can throw errors, the entire section must catch exceptions.
+            try {
+                // Convert the URL string to a URL.
+                val url = URL(urlString)
+
+                // Instantiate the proxy helper.
+                val proxyHelper = ProxyHelper()
+
+                // Get the current proxy.
+                val proxy = proxyHelper.getCurrentProxy(context)
+
+                // Open a connection to the URL.  No data is actually sent at this point.
+                val httpUrlConnection = url.openConnection(proxy) as HttpURLConnection
+
+                // Add the user agent to the header property.
+                httpUrlConnection.setRequestProperty("User-Agent", userAgent)
+
+                // Add the cookies if they are enabled.
+                if (cookiesEnabled) {
+                    // Get the cookies for the current domain.
+                    val cookiesString = CookieManager.getInstance().getCookie(url.toString())
+
+                    // Add the cookies if they are not null.
+                    if (cookiesString != null)
+                        httpUrlConnection.setRequestProperty("Cookie", cookiesString)
+                }
+
+                // The actual network request is in a `try` bracket so that `disconnect()` is run in the `finally` section even if an error is encountered in the main block.
+                try {
+                    // Get the status code.  This initiates a network connection.
+                    val responseCode = httpUrlConnection.responseCode
+
+                    // Check the response code.
+                    if (responseCode >= 400) {  // The response code is an error message.
+                        // Set the formatted file size to indicate a bad URL.
+                        formattedFileSize = context.getString(R.string.invalid_url)
+
+                        // Set the file name according to the URL.
+                        fileNameString = getFileNameFromUrl(context, urlString, null)
+                    } else {  // The response code is not an error message.
+                        // Get the headers.
+                        val contentLengthString = httpUrlConnection.getHeaderField("Content-Length")
+                        val contentDispositionString = httpUrlConnection.getHeaderField("Content-Disposition")
+                        var contentTypeString = httpUrlConnection.contentType
+
+                        // Remove anything after the MIME type in the content type string.
+                        if (contentTypeString.contains(";"))
+                            contentTypeString = contentTypeString.substring(0, contentTypeString.indexOf(";"))
+
+                        // Only process the content length string if it isn't null.
+                        if (contentLengthString != null) {
+                            // Convert the content length string to a long.
+                            val fileSize = contentLengthString.toLong()
+
+                            // Format the file size.
+                            formattedFileSize = NumberFormat.getInstance().format(fileSize) + " " + context.getString(R.string.bytes)
+                        }
+
+                        // Get the file name string from the content disposition.
+                        fileNameString = getFileName(context, contentDispositionString, contentTypeString, urlString)
+                    }
+                } finally {
+                    // Disconnect the HTTP URL connection.
+                    httpUrlConnection.disconnect()
+                }
+            } catch (exception: Exception) {
+                // Set the formatted file size to indicate a bad URL.
+                formattedFileSize = context.getString(R.string.invalid_url)
+
+                // Set the file name according to the URL.
+                fileNameString = getFileNameFromUrl(context, urlString, null)
+            }
+        }
+
+        // Return the file name and size.
+        return Pair(fileNameString, formattedFileSize)
+    }
+
+    fun getSize(context: Context, url: URL, userAgent: String, cookiesEnabled: Boolean): String {
+        // Initialize the formatted file size string.
+        var formattedFileSize = context.getString(R.string.unknown_size)
+
+        // Because everything relating to requesting data from a webserver can throw errors, the entire section must catch exceptions.
+        try {
+            // Instantiate the proxy helper.
+            val proxyHelper = ProxyHelper()
+
+            // Get the current proxy.
+            val proxy = proxyHelper.getCurrentProxy(context)
+
+            // Open a connection to the URL.  No data is actually sent at this point.
+            val httpUrlConnection = url.openConnection(proxy) as HttpURLConnection
+
+            // Add the user agent to the header property.
+            httpUrlConnection.setRequestProperty("User-Agent", userAgent)
+
+            // Add the cookies if they are enabled.
+            if (cookiesEnabled) {
+                // Get the cookies for the current domain.
+                val cookiesString = CookieManager.getInstance().getCookie(url.toString())
+
+                // Only add the cookies if they are not null.
+                if (cookiesString != null) {
+                    // Add the cookies to the header property.
+                    httpUrlConnection.setRequestProperty("Cookie", cookiesString)
+                }
+            }
+
+            // The actual network request is in a `try` bracket so that `disconnect()` is run in the `finally` section even if an error is encountered in the main block.
+            try {
+                // Get the status code.  This initiates a network connection.
+                val responseCode = httpUrlConnection.responseCode
+
+                // Check the response code.
+                if (responseCode >= 400) {  // The response code is an error message.
+                    // Set the formatted file size to indicate a bad URL.
+                    formattedFileSize = context.getString(R.string.invalid_url)
+                } else {  // The response code is not an error message.
+                    // Get the content length header.
+                    val contentLengthString = httpUrlConnection.getHeaderField("Content-Length")
+
+                    // Only process the content length string if it isn't null.
+                    if (contentLengthString != null) {
+                        // Convert the content length string to a long.
+                        val fileSize = contentLengthString.toLong()
+
+                        // Format the file size.
+                        formattedFileSize = NumberFormat.getInstance().format(fileSize) + " " + context.getString(R.string.bytes)
+                    }
+                }
+            } finally {
+                // Disconnect the HTTP URL connection.
+                httpUrlConnection.disconnect()
+            }
+        } catch (exception: Exception) {
+            // Set the formatted file size to indicate a bad URL.
+            formattedFileSize = context.getString(R.string.invalid_url)
+        }
+
+        // Return the formatted file size.
+        return formattedFileSize
+    }
+}