]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Add support for I2P and custom proxies. https://redmine.stoutner.com/issues/355
authorSoren Stoutner <soren@stoutner.com>
Thu, 19 Dec 2019 23:30:09 +0000 (16:30 -0700)
committerSoren Stoutner <soren@stoutner.com>
Thu, 19 Dec 2019 23:30:09 +0000 (16:30 -0700)
110 files changed:
.idea/assetWizardSettings.xml
.idea/dictionaries/soren.xml
app/build.gradle
app/src/main/assets/de/about_licenses_dark.html
app/src/main/assets/de/about_licenses_light.html
app/src/main/assets/de/guide_proxies_dark.html [new file with mode: 0644]
app/src/main/assets/de/guide_proxies_light.html [new file with mode: 0644]
app/src/main/assets/de/guide_tor_dark.html [deleted file]
app/src/main/assets/de/guide_tor_light.html [deleted file]
app/src/main/assets/en/about_licenses_dark.html
app/src/main/assets/en/about_licenses_light.html
app/src/main/assets/en/guide_proxies_dark.html [new file with mode: 0644]
app/src/main/assets/en/guide_proxies_light.html [new file with mode: 0644]
app/src/main/assets/en/guide_tor_dark.html [deleted file]
app/src/main/assets/en/guide_tor_light.html [deleted file]
app/src/main/assets/es/about_licenses_dark.html
app/src/main/assets/es/about_licenses_light.html
app/src/main/assets/es/guide_proxies_dark.html [new file with mode: 0644]
app/src/main/assets/es/guide_proxies_light.html [new file with mode: 0644]
app/src/main/assets/es/guide_tor_dark.html [deleted file]
app/src/main/assets/es/guide_tor_light.html [deleted file]
app/src/main/assets/fr/about_licenses_dark.html
app/src/main/assets/fr/about_licenses_light.html
app/src/main/assets/fr/guide_proxies_dark.html [new file with mode: 0644]
app/src/main/assets/fr/guide_proxies_light.html [new file with mode: 0644]
app/src/main/assets/fr/guide_tor_dark.html [deleted file]
app/src/main/assets/fr/guide_tor_light.html [deleted file]
app/src/main/assets/it/about_licenses_dark.html
app/src/main/assets/it/about_licenses_light.html
app/src/main/assets/it/guide_proxies_dark.html [new file with mode: 0644]
app/src/main/assets/it/guide_proxies_light.html [new file with mode: 0644]
app/src/main/assets/it/guide_tor_dark.html [deleted file]
app/src/main/assets/it/guide_tor_light.html [deleted file]
app/src/main/assets/ru/about_licenses_dark.html
app/src/main/assets/ru/about_licenses_light.html
app/src/main/assets/ru/guide_proxies_dark.html [new file with mode: 0644]
app/src/main/assets/ru/guide_proxies_light.html [new file with mode: 0644]
app/src/main/assets/ru/guide_tor_dark.html [deleted file]
app/src/main/assets/ru/guide_tor_light.html [deleted file]
app/src/main/assets/shared_images/open_in_browser_blue_dark.png [new file with mode: 0644]
app/src/main/assets/shared_images/open_in_browser_blue_light.png [new file with mode: 0644]
app/src/main/assets/shared_images/open_in_browser_dark.png [new file with mode: 0644]
app/src/main/assets/shared_images/open_in_browser_light.png [new file with mode: 0644]
app/src/main/assets/shared_images/orbot_blue_dark.png [deleted file]
app/src/main/assets/shared_images/orbot_blue_light.png [deleted file]
app/src/main/assets/shared_images/orbot_dark.png [deleted file]
app/src/main/assets/shared_images/orbot_light.png [deleted file]
app/src/main/assets/tr/about_licenses_dark.html
app/src/main/assets/tr/about_licenses_light.html
app/src/main/assets/tr/guide_proxies_dark.html [new file with mode: 0644]
app/src/main/assets/tr/guide_proxies_light.html [new file with mode: 0644]
app/src/main/assets/tr/guide_tor_dark.html [deleted file]
app/src/main/assets/tr/guide_tor_light.html [deleted file]
app/src/main/java/com/stoutner/privacybrowser/activities/GuideActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java
app/src/main/java/com/stoutner/privacybrowser/adapters/AboutPagerAdapter.java
app/src/main/java/com/stoutner/privacybrowser/adapters/GuidePagerAdapter.java [new file with mode: 0644]
app/src/main/java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java
app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java
app/src/main/java/com/stoutner/privacybrowser/dialogs/ProxyNotInstalledDialog.java [new file with mode: 0644]
app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java
app/src/main/java/com/stoutner/privacybrowser/dialogs/WaitingForProxyDialog.java [new file with mode: 0644]
app/src/main/java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java
app/src/main/java/com/stoutner/privacybrowser/fragments/GuideTabFragment.java
app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java
app/src/main/java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java
app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java [deleted file]
app/src/main/java/com/stoutner/privacybrowser/helpers/ProxyHelper.java [new file with mode: 0644]
app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java
app/src/main/res/drawable/.idea/codeStyles/Project.xml [new file with mode: 0644]
app/src/main/res/drawable/.idea/misc.xml [new file with mode: 0644]
app/src/main/res/drawable/.idea/modules.xml [new file with mode: 0644]
app/src/main/res/drawable/.idea/vcs.xml [new file with mode: 0644]
app/src/main/res/drawable/.idea/workspace.xml [new file with mode: 0644]
app/src/main/res/drawable/app_bar_disabled_dark.xml
app/src/main/res/drawable/app_bar_disabled_light.xml
app/src/main/res/drawable/app_bar_enabled_dark.xml
app/src/main/res/drawable/app_bar_enabled_light.xml
app/src/main/res/drawable/app_bar_ghosted_dark.xml
app/src/main/res/drawable/app_bar_ghosted_light.xml
app/src/main/res/drawable/orbot_disabled_dark.xml [deleted file]
app/src/main/res/drawable/orbot_disabled_light.xml [deleted file]
app/src/main/res/drawable/orbot_enabled_dark.xml [deleted file]
app/src/main/res/drawable/orbot_enabled_light.xml [deleted file]
app/src/main/res/drawable/proxy_disabled_dark.xml [new file with mode: 0644]
app/src/main/res/drawable/proxy_disabled_light.xml [new file with mode: 0644]
app/src/main/res/drawable/proxy_enabled_dark.xml [new file with mode: 0644]
app/src/main/res/drawable/proxy_enabled_light.xml [new file with mode: 0644]
app/src/main/res/drawable/proxy_ghosted_dark.xml [new file with mode: 0644]
app/src/main/res/drawable/proxy_ghosted_light.xml [new file with mode: 0644]
app/src/main/res/layout/about_tab_version.xml
app/src/main/res/layout/unencrypted_website.xml [deleted file]
app/src/main/res/layout/unencrypted_website_dialog.xml [new file with mode: 0644]
app/src/main/res/layout/view_ssl_certificate.xml [deleted file]
app/src/main/res/layout/view_ssl_certificate_dialog.xml [new file with mode: 0644]
app/src/main/res/layout/waiting_for_proxy_dialog.xml [new file with mode: 0644]
app/src/main/res/menu/webview_options_menu.xml
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-fr/strings.xml
app/src/main/res/values-it/strings.xml
app/src/main/res/values-ru/strings.xml
app/src/main/res/values-tr/strings.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/preferences.xml
build.gradle
fastlane/metadata/android/fr-FR/full_description.txt [new file with mode: 0644]
fastlane/metadata/android/fr-FR/short_description.txt [new file with mode: 0644]
fastlane/metadata/android/fr-FR/title.txt [new file with mode: 0644]

index 69358445524b83310ec507f8792402850cc4c980..12947148141d7cd65ed2003e00f060a2f67342ea 100644 (file)
@@ -68,7 +68,7 @@
                                 <PersistentState>
                                   <option name="values">
                                     <map>
-                                      <entry key="url" value="jar:file:/home/soren/Android/android-studio/plugins/android/lib/android.jar!/images/material_design_icons/action/ic_settings_overscan_black_24dp.xml" />
+                                      <entry key="url" value="jar:file:/home/soren/Android/android-studio/plugins/android/lib/android.jar!/images/material_design_icons/action/ic_open_in_browser_black_24dp.xml" />
                                     </map>
                                   </option>
                                 </PersistentState>
@@ -78,7 +78,7 @@
                         </option>
                         <option name="values">
                           <map>
-                            <entry key="outputName" value="wide_viewport_enabled_light" />
+                            <entry key="outputName" value="proxy_enabled_light" />
                             <entry key="sourceFile" value="$USER_HOME$/ownCloud/Android/Privacy Browser/Icons/Icons/link_off_light.svg" />
                           </map>
                         </option>
index 053898493850547bc4dbf8e5e511a58f0673a6ae..c71e3926db29e87e865e7435a434ffde4f5bf35c 100644 (file)
       <w>radiobutton</w>
       <w>radiogroup</w>
       <w>rbga</w>
+      <w>redisplays</w>
       <w>redmine</w>
       <w>referer</w>
       <w>refreshlayout</w>
       <w>sslissuedtoorganization</w>
       <w>sslissuedtoorganizationalunit</w>
       <w>sslstartdate</w>
+      <w>startpage</w>
       <w>stoutner</w>
       <w>subdocument</w>
       <w>subdomain</w>
index a7d278bb1ab6ab7f6fa4787cc981416ae3d79e6d..d9b91dae35924369092b38f7d091e38296efd9b8 100644 (file)
@@ -72,7 +72,7 @@ dependencies {
     implementation 'androidx.arch.core:core-runtime:2.1.0'
     implementation 'androidx.appcompat:appcompat:1.1.0'
     implementation 'androidx.cardview:cardview:1.0.0'
-    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0'
+    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
     implementation 'androidx.drawerlayout:drawerlayout:1.0.0'
     implementation 'androidx.preference:preference:1.1.0'
     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
index a85852b230b8f3e581fead73f44e9ba67bbe6f3d..374ae106b7b90f95133f593369db478dd8532b2e 100644 (file)
         <p><img class="left" src="../shared_images/sort_selected_light.png"> 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 <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/orbot_dark.png"> <code>orbot</code> is a modified version of
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">the status icon from the Orbot project</a>,
-            which is copyright 2009-2010 Nathan Freitas, The Guardian Project. It is released under the <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD license</a>.
-            The full text of the license is below. Modifications copyright © 2017 <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/cookie_dark.png"> <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>
         <p><img class="icon" src="../shared_images/map_dark.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_dark.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_dark.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_dark.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_dark.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_dark.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_dark.png"> refresh.</p>
@@ -1065,40 +1061,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-                notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-                copyright notice, this list of conditions and the following disclaimer
-                in the documentation and/or other materials provided with the
-                distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-                contributors may be used to endorse or promote products derived from
-                this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
index dc90edea9f713ce52f9572976b4679db899f6d24..503d12a329c17b52861b005a679a09fd3facd12a 100644 (file)
         <p><img class="left" src="../shared_images/sort_selected_light.png"> 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 <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/orbot_light.png"> <code>orbot</code> is a modified version of
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">the status icon from the Orbot project</a>,
-            which is copyright 2009-2010 Nathan Freitas, The Guardian Project. It is released under the <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD license</a>.
-            The full text of the license is below. Modifications copyright © 2017 <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/cookie_light.png"> <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>
         <p><img class="icon" src="../shared_images/map_light.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_light.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_light.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_light.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_light.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_light.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_light.png"> refresh.</p>
@@ -1065,40 +1061,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-                notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-                copyright notice, this list of conditions and the following disclaimer
-                in the documentation and/or other materials provided with the
-                distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-                contributors may be used to endorse or promote products derived from
-                this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
diff --git a/app/src/main/assets/de/guide_proxies_dark.html b/app/src/main/assets/de/guide_proxies_dark.html
new file mode 100644 (file)
index 0000000..ca09549
--- /dev/null
@@ -0,0 +1,91 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2019 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2016 Aaron Gerlach <aaron@gerlach.com>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/dark_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Proxies and Their Limits</h3>
+
+        <p>Faktoren, die die Privatsphäre im Web einschränken wollen, lassen sich hauptsächlich in zwei verschiedene Kategorien unterteilen:
+            Neugierige Behörden mit Zugriff auf Internetprovider und grosse Konzerne, die "soziale" und Werbe-Netzwerke betreiben.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Neugierige Behörden</h3>
+
+        <p>Oft spähen neugierige Behörden Bürger aus, um Fehlverhalten und Menschenrechtsaktivitäten zu bestrafen.
+            Üblicherweise betreiben sie entweder die Internetprovider selbst oder sie können Provider dazu zwingen, Informationen über jede besuchte IP-Adresse und die zugehörigen Benutzer herauszugeben.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Megafirmen</h3>
+
+        <p>Wenn ein Benutzer sich mit einem Webserver verbindet, kann der Webserver seine IP-Adresse sehen.
+            Obwohl es keine ausgereifte Methode ist, können IP-Adressen in physische Adressen umgewandelt werden - <a href="https://www.whatismyip.com/">mit erstaunlicher Genauigkeit</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Große Megafirmen, die "soziale" und Werbe-Netzwerke betreiben, nutzen jedoch Profile an Informationen, um Benutzer über ihre Geräte und IP-Adressen hinweg zu tracken.
+            Diese Profile nutzen verschiedene Techniken um Benutzer ausfindig zu machen, inklusive JavaScript, Cookies, Tracking-IDs und den sogenannten
+            <a href="https://panopticlick.eff.org/">"Browser-Fingerabdruck" (fingerprinting)</a>.
+            Weil die große Mehrheit der Websites im Internet Werbung entweder von den großen Werbenetzwerken oder von eingebetteten Social-Media-Buttons mit ihrem zugewiesenen JavaScript lädt,
+            haben die großen Megafirmen Profile von so gut wie jedem Internetnutzer angefertigt und verfolgen deren Aktivitäten über zueinander unabhängige Seiten.</p>
+
+        <p>Sie verfolgen jede besuchte Seite, Alles online Gekaufte, jede für Einkäufe genutzte Kreditkarte, jede Adresse,
+            an die Waren verschickt werden, und die GPS-Metadaten von jedem ins Internet hochgeladene Foto.
+            Sie fertigen Profile an, die Alter, Geschlecht, Beziehungsstatus, Adresse, politische und religiöse Ansichten, familiäre Umstände,
+            Anzahl der Haustiere und alles Andere, was sie über einen Nutzer herausfinden können, beinhalten.
+            Sie kaufen sogar ganze Datenbanken mit Informationen über Kreditkartennutzungen in Geschäften auf, damit sie Offline-Einkaufsverhalten von Nutzern in ihren Profilen nachverfolgen können.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>Der einzige und beste Schutz der Privatsphäre gegen Megafirmen ist es, mit deaktivieren JavaScript durchs Web zu surfen, gefolgt von geblockten Werbenetzwerken,
+            deaktivierten Cookies und DOM-Speicher und das Benutzen eines Browsers, der schwierig zu "fingerprinten" ist.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_dark.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+
+        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Herunterladen von Dateien mittels TOR</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn't have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/de/guide_proxies_light.html b/app/src/main/assets/de/guide_proxies_light.html
new file mode 100644 (file)
index 0000000..34d7211
--- /dev/null
@@ -0,0 +1,91 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2019 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2016 Aaron Gerlach <aaron@gerlach.com>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/light_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Proxies and Their Limits</h3>
+
+        <p>Faktoren, die die Privatsphäre im Web einschränken wollen, lassen sich hauptsächlich in zwei verschiedene Kategorien unterteilen:
+            Neugierige Behörden mit Zugriff auf Internetprovider und grosse Konzerne, die "soziale" und Werbe-Netzwerke betreiben.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Neugierige Behörden</h3>
+
+        <p>Oft spähen neugierige Behörden Bürger aus, um Fehlverhalten und Menschenrechtsaktivitäten zu bestrafen.
+            Üblicherweise betreiben sie entweder die Internetprovider selbst oder sie können Provider dazu zwingen, Informationen über jede besuchte IP-Adresse und die zugehörigen Benutzer herauszugeben.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Megafirmen</h3>
+
+        <p>Wenn ein Benutzer sich mit einem Webserver verbindet, kann der Webserver seine IP-Adresse sehen.
+            Obwohl es keine ausgereifte Methode ist, können IP-Adressen in physische Adressen umgewandelt werden - <a href="https://www.whatismyip.com/">mit erstaunlicher Genauigkeit</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Große Megafirmen, die "soziale" und Werbe-Netzwerke betreiben, nutzen jedoch Profile an Informationen, um Benutzer über ihre Geräte und IP-Adressen hinweg zu tracken.
+            Diese Profile nutzen verschiedene Techniken um Benutzer ausfindig zu machen, inklusive JavaScript, Cookies, Tracking-IDs und den sogenannten
+            <a href="https://panopticlick.eff.org/">"Browser-Fingerabdruck" (fingerprinting)</a>.
+            Weil die große Mehrheit der Websites im Internet Werbung entweder von den großen Werbenetzwerken oder von eingebetteten Social-Media-Buttons mit ihrem zugewiesenen JavaScript lädt,
+            haben die großen Megafirmen Profile von so gut wie jedem Internetnutzer angefertigt und verfolgen deren Aktivitäten über zueinander unabhängige Seiten.</p>
+
+        <p>Sie verfolgen jede besuchte Seite, Alles online Gekaufte, jede für Einkäufe genutzte Kreditkarte, jede Adresse,
+            an die Waren verschickt werden, und die GPS-Metadaten von jedem ins Internet hochgeladene Foto.
+            Sie fertigen Profile an, die Alter, Geschlecht, Beziehungsstatus, Adresse, politische und religiöse Ansichten, familiäre Umstände,
+            Anzahl der Haustiere und alles Andere, was sie über einen Nutzer herausfinden können, beinhalten.
+            Sie kaufen sogar ganze Datenbanken mit Informationen über Kreditkartennutzungen in Geschäften auf, damit sie Offline-Einkaufsverhalten von Nutzern in ihren Profilen nachverfolgen können.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>Der einzige und beste Schutz der Privatsphäre gegen Megafirmen ist es, mit deaktivieren JavaScript durchs Web zu surfen, gefolgt von geblockten Werbenetzwerken,
+            deaktivierten Cookies und DOM-Speicher und das Benutzen eines Browsers, der schwierig zu "fingerprinten" ist.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_light.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+
+        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Herunterladen von Dateien mittels TOR</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn't have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/de/guide_tor_dark.html b/app/src/main/assets/de/guide_tor_dark.html
deleted file mode 100644 (file)
index af88032..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--
-  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2019 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2016 Aaron Gerlach <aaron@gerlach.com>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/dark_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Tor und seine Grenzen</h3>
-
-        <p>Faktoren, die die Privatsphäre im Web einschränken wollen, lassen sich hauptsächlich in zwei verschiedene Kategorien unterteilen:
-            Neugierige Behörden mit Zugriff auf Internetprovider und grosse Konzerne, die "soziale" und Werbe-Netzwerke betreiben.
-            TOR (The Onion Router) ist nützlich, wenn es auf den Schutz der Privatsphäre vor neugierigen Behörden ankommt, nicht jedoch bei Konzernen bzw. Megafirmen.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Neugierige Behörden</h3>
-
-        <p>Oft spähen neugierige Behörden Bürger aus, um Fehlverhalten und Menschenrechtsaktivitäten zu bestrafen.
-            Üblicherweise betreiben sie entweder die Internetprovider selbst oder sie können Provider dazu zwingen, Informationen über jede besuchte IP-Adresse und die zugehörigen Benutzer herauszugeben.
-            TOR wurde entwickelt, um diese Eingriffe in die Privatsphäre zu bekämpfen, indem es die Daten verschlüsselt, die ein Nutzer sendet und sie durch viele verschiedene Server schleust,
-            bevor sie die Zieladresse erreichen.
-            Das bedeutet, dass kein individueller Internetprovider, Server oder Website sowohl die <a href="https://ipleak.net">IP-Adresse des Nutzers</a>
-            als auch die IP-Adresse des letztendlich besuchten Webservers erfährt.
-            Neugierige Behörden und die von ihnen kontrollierten Internetprovider können nur vermuten, welche Webserver ein Benutzer besucht, da sie letztendlich nur sehen, dass er TOR benutzt.
-            In einigen Teilen der Welt könnte das Benutzen von TOR als illegale Aktivität ausgelegt werden ("wenn Du nichts zu verstecken hättest,
-            würdest Du nicht Deinen Traffic vor uns verstecken") und Benutzer könnten bestraft werden, da die Regierung vermutet, sie würden etwas Untersagtes tun.
-            Also kann TOR hilfreich sein, ein Allheilmittel ist es jedoch nicht.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Megafirmen</h3>
-
-        <p>Wenn ein Benutzer sich mit einem Webserver verbindet, kann der Webserver seine IP-Adresse sehen.
-            Obwohl es keine ausgereifte Methode ist, können IP-Adressen in physische Adressen umgewandelt werden - <a href="https://www.whatismyip.com/">mit erstaunlicher Genauigkeit</a>.
-            Kleine Webserver nutzen normalerweise die IP-Adresse, um festzulegen, woher der Benutzer die Seite besucht. TOR ist eine gute Lösung, wenn man seinen Standort vor diesen Servern verstecken möchte.
-            Große Megafirmen, die "soziale" und Werbe-Netzwerke betreiben, nutzen jedoch Profile an Informationen, um Benutzer über ihre Geräte und IP-Adressen hinweg zu tracken.
-            Diese Profile nutzen verschiedene Techniken um Benutzer ausfindig zu machen, inklusive JavaScript, Cookies, Tracking-IDs und den sogenannten
-            <a href="https://panopticlick.eff.org/">"Browser-Fingerabdruck" (fingerprinting)</a>.
-            Weil die große Mehrheit der Websites im Internet Werbung entweder von den großen Werbenetzwerken oder von eingebetteten Social-Media-Buttons mit ihrem zugewiesenen JavaScript lädt,
-            haben die großen Megafirmen Profile von so gut wie jedem Internetnutzer angefertigt und verfolgen deren Aktivitäten über zueinander unabhängige Seiten.</p>
-
-        <p>Sie verfolgen jede besuchte Seite, Alles online Gekaufte, jede für Einkäufe genutzte Kreditkarte, jede Adresse,
-            an die Waren verschickt werden, und die GPS-Metadaten von jedem ins Internet hochgeladene Foto.
-            Sie fertigen Profile an, die Alter, Geschlecht, Beziehungsstatus, Adresse, politische und religiöse Ansichten, familiäre Umstände,
-            Anzahl der Haustiere und alles Andere, was sie über einen Nutzer herausfinden können, beinhalten.
-            Sie kaufen sogar ganze Datenbanken mit Informationen über Kreditkartennutzungen in Geschäften auf, damit sie Offline-Einkaufsverhalten von Nutzern in ihren Profilen nachverfolgen können.
-            Weil sie bereits weitaus genauere Adressinformationen über einen Nutzer haben, als eine IP-Adresse aussagt, bietet TOR keinen echten Schutz der Privatsphäre gegen derartige Megafirmen.</p>
-
-        <p>Der einzige und beste Schutz der Privatsphäre gegen Megafirmen ist es, mit deaktivieren JavaScript durchs Web zu surfen, gefolgt von geblockten Werbenetzwerken,
-            deaktivierten Cookies und DOM-Speicher und das Benutzen eines Browsers, der schwierig zu "fingerprinten" ist.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_dark.png"> Benutzen von TOR</h3>
-
-        <p>Neben den vorhin genannten Einschränkungen kann TOR in bestimmten Situationen hilfreich sein.
-            Das TOR Project bietet eine App für Android namens Orbot an, die auf <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-            verfügbar ist und überall sonst, wo Privacy Browser angeboten wird. Privacy Browser hat eine Option, um Orbot als Proxy zu benutzen.
-            Wenn diese aktiviert wird, hat Privacy Browser einen hellblauen Hintergrund für die Adresszeile statt dem standardmäßigen Hellgrau.
-            Wenn Privacy Browsers Orbot-Proxy-Einstellung aktiviert ist, wird das Internet ausschließlich funktionieren, solange Orbot ausgeführt und mit dem TOR-Netzwerk verbunden ist.
-            Weil die Daten durch verschiedene Anlaufstellen geleitet werden, ist das Nutzen von TOR oft weitaus langsamer als bei einer direkten Verbindung mit dem Internet.</p>
-
-        <img class="center" src="images/tor.png">
-
-
-        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Herunterladen von Dateien mittels TOR</h3>
-
-        <p>Wenn Orbot im Proxy-Modus genutzt wird, werden zwar beim Surfen mit dem Privacy Browser die Daten über das TOR-Netzwerk geroutet, nicht jedoch heruntergeladene Dateien.
-            Die Ursache dafür ist, dass Privacy Browser den in Android eingebauten Download-Manager verwendet, der keine Proxy-Optionen hat.
-            Benutzer, die auch Dateien über Orbot herunterladen möchten, müssen daher dessen VPN-Modus aktivieren.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
diff --git a/app/src/main/assets/de/guide_tor_light.html b/app/src/main/assets/de/guide_tor_light.html
deleted file mode 100644 (file)
index 8eca533..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--
-  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2019 Bernhard G. Keller.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2016 Aaron Gerlach <aaron@gerlach.com>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/light_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Tor und seine Grenzen</h3>
-
-        <p>Faktoren, die die Privatsphäre im Web einschränken wollen, lassen sich hauptsächlich in zwei verschiedene Kategorien unterteilen:
-            Neugierige Behörden mit Zugriff auf Internetprovider und grosse Konzerne, die "soziale" und Werbe-Netzwerke betreiben.
-            TOR (The Onion Router) ist nützlich, wenn es auf den Schutz der Privatsphäre vor neugierigen Behörden ankommt, nicht jedoch bei Konzernen bzw. Megafirmen.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Neugierige Behörden</h3>
-
-        <p>Oft spähen neugierige Behörden Bürger aus, um Fehlverhalten und Menschenrechtsaktivitäten zu bestrafen.
-            Üblicherweise betreiben sie entweder die Internetprovider selbst oder sie können Provider dazu zwingen, Informationen über jede besuchte IP-Adresse und die zugehörigen Benutzer herauszugeben.
-            TOR wurde entwickelt, um diese Eingriffe in die Privatsphäre zu bekämpfen, indem es die Daten verschlüsselt, die ein Nutzer sendet und sie durch viele verschiedene Server schleust,
-            bevor sie die Zieladresse erreichen.
-            Das bedeutet, dass kein individueller Internetprovider, Server oder Website sowohl die <a href="https://ipleak.net">IP-Adresse des Nutzers</a>
-            als auch die IP-Adresse des letztendlich besuchten Webservers erfährt.
-            Neugierige Behörden und die von ihnen kontrollierten Internetprovider können nur vermuten, welche Webserver ein Benutzer besucht, da sie letztendlich nur sehen, dass er TOR benutzt.
-            In einigen Teilen der Welt könnte das Benutzen von TOR als illegale Aktivität ausgelegt werden ("wenn Du nichts zu verstecken hättest,
-            würdest Du nicht Deinen Traffic vor uns verstecken") und Benutzer könnten bestraft werden, da die Regierung vermutet, sie würden etwas Untersagtes tun.
-            Also kann TOR hilfreich sein, ein Allheilmittel ist es jedoch nicht.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Megafirmen</h3>
-
-        <p>Wenn ein Benutzer sich mit einem Webserver verbindet, kann der Webserver seine IP-Adresse sehen.
-            Obwohl es keine ausgereifte Methode ist, können IP-Adressen in physische Adressen umgewandelt werden - <a href="https://www.whatismyip.com/">mit erstaunlicher Genauigkeit</a>.
-            Kleine Webserver nutzen normalerweise die IP-Adresse, um festzulegen, woher der Benutzer die Seite besucht. TOR ist eine gute Lösung, wenn man seinen Standort vor diesen Servern verstecken möchte.
-            Große Megafirmen, die "soziale" und Werbe-Netzwerke betreiben, nutzen jedoch Profile an Informationen, um Benutzer über ihre Geräte und IP-Adressen hinweg zu tracken.
-            Diese Profile nutzen verschiedene Techniken um Benutzer ausfindig zu machen, inklusive JavaScript, Cookies, Tracking-IDs und den sogenannten
-            <a href="https://panopticlick.eff.org/">"Browser-Fingerabdruck" (fingerprinting)</a>.
-            Weil die große Mehrheit der Websites im Internet Werbung entweder von den großen Werbenetzwerken oder von eingebetteten Social-Media-Buttons mit ihrem zugewiesenen JavaScript lädt,
-            haben die großen Megafirmen Profile von so gut wie jedem Internetnutzer angefertigt und verfolgen deren Aktivitäten über zueinander unabhängige Seiten.</p>
-
-        <p>Sie verfolgen jede besuchte Seite, Alles online Gekaufte, jede für Einkäufe genutzte Kreditkarte, jede Adresse,
-            an die Waren verschickt werden, und die GPS-Metadaten von jedem ins Internet hochgeladene Foto.
-            Sie fertigen Profile an, die Alter, Geschlecht, Beziehungsstatus, Adresse, politische und religiöse Ansichten, familiäre Umstände,
-            Anzahl der Haustiere und alles Andere, was sie über einen Nutzer herausfinden können, beinhalten.
-            Sie kaufen sogar ganze Datenbanken mit Informationen über Kreditkartennutzungen in Geschäften auf, damit sie Offline-Einkaufsverhalten von Nutzern in ihren Profilen nachverfolgen können.
-            Weil sie bereits weitaus genauere Adressinformationen über einen Nutzer haben, als eine IP-Adresse aussagt, bietet TOR keinen echten Schutz der Privatsphäre gegen derartige Megafirmen.</p>
-
-        <p>Der einzige und beste Schutz der Privatsphäre gegen Megafirmen ist es, mit deaktivieren JavaScript durchs Web zu surfen, gefolgt von geblockten Werbenetzwerken,
-            deaktivierten Cookies und DOM-Speicher und das Benutzen eines Browsers, der schwierig zu "fingerprinten" ist.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_light.png"> Benutzen von TOR</h3>
-
-        <p>Neben den vorhin genannten Einschränkungen kann TOR in bestimmten Situationen hilfreich sein.
-            Das TOR Project bietet eine App für Android namens Orbot an, die auf <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-            verfügbar ist und überall sonst, wo Privacy Browser angeboten wird. Privacy Browser hat eine Option, um Orbot als Proxy zu benutzen.
-            Wenn diese aktiviert wird, hat Privacy Browser einen hellblauen Hintergrund für die Adresszeile statt dem standardmäßigen Hellgrau.
-            Wenn Privacy Browsers Orbot-Proxy-Einstellung aktiviert ist, wird das Internet ausschließlich funktionieren, solange Orbot ausgeführt und mit dem TOR-Netzwerk verbunden ist.
-            Weil die Daten durch verschiedene Anlaufstellen geleitet werden, ist das Nutzen von TOR oft weitaus langsamer als bei einer direkten Verbindung mit dem Internet.</p>
-
-        <img class="center" src="images/tor.png">
-
-
-        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Herunterladen von Dateien mittels TOR</h3>
-
-        <p>Wenn Orbot im Proxy-Modus genutzt wird, werden zwar beim Surfen mit dem Privacy Browser die Daten über das TOR-Netzwerk geroutet, nicht jedoch heruntergeladene Dateien.
-            Die Ursache dafür ist, dass Privacy Browser den in Android eingebauten Download-Manager verwendet, der keine Proxy-Optionen hat.
-            Benutzer, die auch Dateien über Orbot herunterladen möchten, müssen daher dessen VPN-Modus aktivieren.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
index a336be228ae3779649baba38b795b0bcfe6ef653..3bf34f6f1a7d571e75c026cca39f20b44c3e9297 100644 (file)
         <p><img class="left" src="../shared_images/sort_selected_dark.png"> 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 <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/orbot_dark.png"> <code>orbot</code> is a modified version of
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">the status icon from the Orbot project</a>,
-            which is copyright 2009-2010 Nathan Freitas, The Guardian Project. It is released under the <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD license</a>.
-            The full text of the license is below. Modifications copyright © 2017 <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/cookie_dark.png"> <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>
         <p><img class="icon" src="../shared_images/map_dark.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_dark.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_dark.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_dark.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_dark.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_dark.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_dark.png"> refresh.</p>
@@ -1061,40 +1057,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following disclaimer
-            in the documentation and/or other materials provided with the
-            distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-            contributors may be used to endorse or promote products derived from
-            this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
index de4abd56ae49d2b14198b4bed245b7b12fc1b28e..87e3895da087c75611c32492d8bc11483eef4a04 100644 (file)
         <p><img class="left" src="../shared_images/sort_selected_light.png"> 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 <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/orbot_light.png"> <code>orbot</code> is a modified version of
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">the status icon from the Orbot project</a>,
-            which is copyright 2009-2010 Nathan Freitas, The Guardian Project. It is released under the <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD license</a>.
-            The full text of the license is below. Modifications copyright © 2017 <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/cookie_light.png"> <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>
         <p><img class="icon" src="../shared_images/map_light.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_light.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_light.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_light.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_light.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_light.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_light.png"> refresh.</p>
@@ -1062,40 +1058,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following disclaimer
-            in the documentation and/or other materials provided with the
-            distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-            contributors may be used to endorse or promote products derived from
-            this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
diff --git a/app/src/main/assets/en/guide_proxies_dark.html b/app/src/main/assets/en/guide_proxies_dark.html
new file mode 100644 (file)
index 0000000..cc723ea
--- /dev/null
@@ -0,0 +1,85 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/dark_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Proxies and Their Limits</h3>
+
+        <p>There are two general categories of bad actors that want to infringe on the privacy of the web:
+            malicious governments with access to ISPs (Internet Service Providers) and mega corporations that run social and advertising networks.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Malicious Governments</h3>
+
+        <p>Malicious governments often spy on their citizens to punish dissent or human rights activity.
+            They commonly either operate the local ISPs or they can force them to disclose information showing every IP address that is visited by each user.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Mega Corporations</h3>
+
+        <p>When a user connects to a web server, the web server can see the user’s IP address.
+            Although it isn’t a perfect science, IP addresses can be turned into physical addresses with a <a href="https://www.whatismyip.com/">fair amount of accuracy</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            But large mega corporations that own social media and advertising networks use a whole profile of information that is designed to track users across devices and IP addresses.
+            These profiles employ a variety of techniques to identify users, including JavaScript, cookies, tracking IDs, and <a href="https://panopticlick.eff.org/">browser fingerprinting</a>.
+            Because the vast majority of the websites on the internet either load an ad from one of the major networks or embed social media icons with their associated JavaScript,
+            these corporations have built profiles for almost every online user and can track their internet activity across unrelated sites.</p>
+
+        <p>They track every site that is visited, everything that is purchased, every credit card that is used to make a purchase, every address that items are shipped to,
+            and the GPS metadata of every picture that is uploaded to the internet.
+            They build a profile of a user’s age, gender, marital status, address, political affiliations, religious affiliations, family circumstances, number of pets,
+            and everything else they can get their hands on.
+            They even buy up databases of credit card transactions at local stores, so they can track the off-line purchasing patterns of the users in their profiles.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>The single best privacy protection against mega corporations is to browse the web with JavaScript disabled, followed by blocking ad networks, disabling cookies and DOM storage,
+            and using a browser that is difficult to fingerprint.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_dark.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Downloading Files Via Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/en/guide_proxies_light.html b/app/src/main/assets/en/guide_proxies_light.html
new file mode 100644 (file)
index 0000000..26da4f9
--- /dev/null
@@ -0,0 +1,85 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/light_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Proxies and Their Limits</h3>
+
+        <p>There are two general categories of bad actors that want to infringe on the privacy of the web:
+            malicious governments with access to ISPs (Internet Service Providers) and mega corporations that run social and advertising networks.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Malicious Governments</h3>
+
+        <p>Malicious governments often spy on their citizens to punish dissent or human rights activity.
+            They commonly either operate the local ISPs or they can force them to disclose information showing every IP address that is visited by each user.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Mega Corporations</h3>
+
+        <p>When a user connects to a web server, the web server can see the user’s IP address.
+            Although it isn’t a perfect science, IP addresses can be turned into physical addresses with a <a href="https://www.whatismyip.com/">fair amount of accuracy</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            But large mega corporations that own social media and advertising networks use a whole profile of information that is designed to track users across devices and IP addresses.
+            These profiles employ a variety of techniques to identify users, including JavaScript, cookies, tracking IDs, and <a href="https://panopticlick.eff.org/">browser fingerprinting</a>.
+            Because the vast majority of the websites on the internet either load an ad from one of the major networks or embed social media icons with their associated JavaScript,
+            these corporations have built profiles for almost every online user and can track their internet activity across unrelated sites.</p>
+
+        <p>They track every site that is visited, everything that is purchased, every credit card that is used to make a purchase, every address that items are shipped to,
+            and the GPS metadata of every picture that is uploaded to the internet.
+            They build a profile of a user’s age, gender, marital status, address, political affiliations, religious affiliations, family circumstances, number of pets,
+            and everything else they can get their hands on.
+            They even buy up databases of credit card transactions at local stores, so they can track the off-line purchasing patterns of the users in their profiles.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>The single best privacy protection against mega corporations is to browse the web with JavaScript disabled, followed by blocking ad networks, disabling cookies and DOM storage,
+            and using a browser that is difficult to fingerprint.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_light.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Downloading Files Via Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/en/guide_tor_dark.html b/app/src/main/assets/en/guide_tor_dark.html
deleted file mode 100644 (file)
index cc7c47b..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
-  Copyright © 2016-2018 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/dark_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Tor and Its Limits</h3>
-
-        <p>There are two general categories of bad actors that want to infringe on the privacy of the web:
-            malicious governments with access to ISPs (Internet Service Providers) and mega corporations that run social and advertising networks.
-            TOR (The Onion Router) is useful in protecting privacy from malicious governments (which spy on traffic in transit) but not from mega corporations (which embed malicious code on web servers).</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Malicious Governments</h3>
-
-        <p>Malicious governments often spy on their citizens to punish dissent or human rights activity.
-            They commonly either operate the local ISPs or they can force them to disclose information showing every IP address that is visited by each user.
-            Tor is designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through three separate servers on the internet
-            before sending it on to the final destination.
-            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address the user’s device</a> and the IP address of the final web server.
-            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using Tor.
-            In some parts of the world, using Tor could be construed as an evidence of illegal behavior (“if you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
-            and users could be punished because governments assume they are doing something that is prohibited. Thus, Tor can be helpful, but isn’t a panacea.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Mega Corporations</h3>
-
-        <p>When a user connects to a web server, the web server can see the user’s IP address.
-            Although it isn’t a perfect science, IP addresses can be turned into physical addresses with a <a href="https://www.whatismyip.com/">fair amount of accuracy</a>.
-            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Tor is a good solution to mask the user’s location from these servers.
-            But large mega corporations that own social media and advertising networks use a whole profile of information that is designed to track users across devices and IP addresses.
-            These profiles employ a variety of techniques to identify users, including JavaScript, cookies, tracking IDs, and <a href="https://panopticlick.eff.org/">browser fingerprinting</a>.
-            Because the vast majority of the websites on the internet either load an ad from one of the major networks or embed social media icons with their associated JavaScript,
-            these corporations have built profiles for almost every user online and can track their internet activity across unrelated sites.</p>
-
-        <p>They track every site that is visited, everything that is purchased, every credit card that is used to make a purchase, every address that items are shipped to,
-            and the GPS metadata of every picture that is uploaded to the internet.
-            They build a profile of a user’s age, gender, marital status, address, political affiliations, religious affiliations, family circumstances, number of pets,
-            and everything else they can get their hands on.
-            They even buy up databases of credit card transactions at local stores, so they can track the off-line purchasing patterns of the users in their profiles.
-            Because they already have much more accurate address information about a user than an IP address discloses, Tor provides no real privacy protection against mega corporations.</p>
-
-        <p>The single best privacy protection against mega corporations is to browse the web with JavaScript disabled, followed by blocking ad networks, disabling cookies and DOM storage,
-            and using a browser that is difficult to fingerprint.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_dark.png"> Using Tor</h3>
-
-        <p>Despite its limitations, Tor can be useful in some circumstances.
-            The Tor project has an app for Android called Orbot, which is available on <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-            and everywhere else that Privacy Browser is distributed. Privacy Browser has a setting to use Orbot as a proxy.
-            When this is turned on, Privacy Browser’s app bar will have a light blue background instead of the default light grey.
-            When Privacy Browser’s Orbot proxy setting is enabled, internet access will not work unless Orbot is running and connected to Tor.
-            Because traffic is being routed through several Tor nodes, using Tor is often much slower than connecting directly to the internet.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Downloading Files Via Tor</h3>
-
-        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the Tor network, but file downloads will not.
-            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn't have a proxy option.
-            Users who want to download files via Orbot need to enable its VPN mode.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
diff --git a/app/src/main/assets/en/guide_tor_light.html b/app/src/main/assets/en/guide_tor_light.html
deleted file mode 100644 (file)
index 6e3d48e..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
-  Copyright © 2016-2018 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/light_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Tor and Its Limits</h3>
-
-        <p>There are two general categories of bad actors that want to infringe on the privacy of the web:
-            malicious governments with access to ISPs (Internet Service Providers) and mega corporations that run social and advertising networks.
-            TOR (The Onion Router) is useful in protecting privacy from malicious governments (which spy on traffic in transit) but not from mega corporations (which embed malicious code on web servers).</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Malicious Governments</h3>
-
-        <p>Malicious governments often spy on their citizens to punish dissent or human rights activity.
-            They commonly either operate the local ISPs or they can force them to disclose information showing every IP address that is visited by each user.
-            Tor is designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through three separate servers on the internet
-            before sending it on to the final destination.
-            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address the user’s device</a> and the IP address of the final web server.
-            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using Tor.
-            In some parts of the world, using Tor could be construed as an evidence of illegal behavior (“if you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
-            and users could be punished because governments assume they are doing something that is prohibited. Thus, Tor can be helpful, but isn’t a panacea.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Mega Corporations</h3>
-
-        <p>When a user connects to a web server, the web server can see the user’s IP address.
-            Although it isn’t a perfect science, IP addresses can be turned into physical addresses with a <a href="https://www.whatismyip.com/">fair amount of accuracy</a>.
-            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Tor is a good solution to mask the user’s location from these servers.
-            But large mega corporations that own social media and advertising networks use a whole profile of information that is designed to track users across devices and IP addresses.
-            These profiles employ a variety of techniques to identify users, including JavaScript, cookies, tracking IDs, and <a href="https://panopticlick.eff.org/">browser fingerprinting</a>.
-            Because the vast majority of the websites on the internet either load an ad from one of the major networks or embed social media icons with their associated JavaScript,
-            these corporations have built profiles for almost every user online and can track their internet activity across unrelated sites.</p>
-
-        <p>They track every site that is visited, everything that is purchased, every credit card that is used to make a purchase, every address that items are shipped to,
-            and the GPS metadata of every picture that is uploaded to the internet.
-            They build a profile of a user’s age, gender, marital status, address, political affiliations, religious affiliations, family circumstances, number of pets,
-            and everything else they can get their hands on.
-            They even buy up databases of credit card transactions at local stores, so they can track the off-line purchasing patterns of the users in their profiles.
-            Because they already have much more accurate address information about a user than an IP address discloses, Tor provides no real privacy protection against mega corporations.</p>
-
-        <p>The single best privacy protection against mega corporations is to browse the web with JavaScript disabled, followed by blocking ad networks, disabling cookies and DOM storage,
-            and using a browser that is difficult to fingerprint.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_light.png"> Using Tor</h3>
-
-        <p>Despite its limitations, Tor can be useful in some circumstances.
-            The Tor project has an app for Android called Orbot, which is available on <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-            and everywhere else that Privacy Browser is distributed. Privacy Browser has a setting to use Orbot as a proxy.
-            When this is turned on, Privacy Browser’s app bar will have a light blue background instead of the default light grey.
-            When Privacy Browser’s Orbot proxy setting is enabled, internet access will not work unless Orbot is running and connected to Tor.
-            Because traffic is being routed through several Tor nodes, using Tor is often much slower than connecting directly to the internet.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Downloading Files Via Tor</h3>
-
-        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the Tor network, but file downloads will not.
-            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn't have a proxy option.
-            Users who want to download files via Orbot need to enable its VPN mode.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
index b01fd2cbd7dc3dc0b728477cecda0d6cf5f7192e..73cd0f46ea8eb80a7984c5f6557bf7e3501b47de 100644 (file)
         <p><img class="left" src="../shared_images/sort_selected_dark.png"> deriva de <code>sort</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>. Copyright de modificaciones © 2019 <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/orbot_dark.png"> <code>orbot</code> es una versión modificada del
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">icono de estado del proyecto Orbot</a>,
-            que tiene copyright 2009-2010 por Nathan Freitas, The Guardian Project.
-            Es liberado bajo la <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">licencia BSD modificada (de 3 cláusulas)</a>.
-            El texto completo de la licencia se encuentra debajo. Copyright de modificaciones © 2017 <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/cookie_dark.png"> <code>cookie</code> fue creado por Google. Es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">licencia Apache 2.0</a>
             y puede ser descargado desde <a href="https://materialdesignicons.com/icon/cookie">Material Design Icons</a>.
             Está sin cambios, excepto por la información de diseño como el color y el tamaño.</p>
         <p><img class="icon" src="../shared_images/map_dark.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_dark.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_dark.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_dark.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_dark.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_dark.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_dark.png"> refresh.</p>
@@ -1065,38 +1060,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>Licencia BSD modificada (de 3 cláusulas)</h3>
-
-        <p>La redistribución y el uso en las formas de código fuente y binario, con o sin
-            modificaciones, están permitidos siempre que se cumplan las siguientes condiciones:</p>
-
-        <ul>
-            <li>Las redistribuciones del código fuente deben conservar el aviso de copyright
-                anterior, esta lista de condiciones y el siguiente descargo de responsabilidad.</li>
-
-            <li>Las redistribuciones en formato binario deben reproducir el aviso de copyright
-                anterior, esta lista de condiciones y el siguiente descargo de responsabilidad
-                en la documentación y/u otros materiales suministrados con la distribución.</li>
-
-            <li>Ni el nombre de los titulares de derechos de autor ni los nombres de sus
-                colaboradores pueden usarse para apoyar o promocionar productos derivados de
-                este software sin permiso específico previo y por escrito.</li>
-        </ul>
-
-        <p>ESTE SOFTWARE SE SUMINISTRA POR LOS PROPIETARIOS DEL COPYRIGHT Y COLABORADORES
-            “COMO ESTÁ” Y CUALQUIER GARANTÍAS EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO
-            LIMITADO A, LAS GARANTÍAS IMPLÍCITAS DE COMERCIALIZACIÓN Y APTITUD PARA UN
-            PROPÓSITO PARTICULAR SON RECHAZADAS. EN NINGÚN CASO LOS PROPIETARIOS DEL COPYRIGHT
-            Y COLABORADORES SERÁN RESPONSABLES POR NINGÚN DAÑO DIRECTO, INDIRECTO, INCIDENTAL,
-            ESPECIAL, EJEMPLAR O COSECUENCIAL (INCLUYENDO, PERO NO LIMITADO A, LA ADQUISICIÓN
-            O SUSTITUCIÓN DE BIENES O SERVICIOS; LA PÉRDIDA DE USO, DE DATOS O DE BENEFICIOS;
-            O INTERRUPCIÓN DE LA ACTIVIDAD EMPRESARIAL) O POR CUALQUIER TEORÍA DE
-            RESPONSABILIDAD, YA SEA POR CONTRATO, RESPONSABILIDAD ESTRICTA O AGRAVIO
-            (INCLUYENDO NEGLIGENCIA O CUALQUIER OTRA CAUSA) QUE SURJA DE CUALQUIER MANERA DEL
-            USO DE ESTE SOFTWARE, INCLUSO SI SE HA ADVERTIDO DE LA POSIBILIDAD DE TALES DAÑOS.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
index 757d058d063a78c0e2f1616efde9f377be272bdd..deb7a040ffdc1020aaa866b0527d7b495da0ed6c 100644 (file)
         <p><img class="left" src="../shared_images/sort_selected_light.png"> deriva de <code>sort</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>. Copyright de modificaciones © 2019 <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/orbot_light.png"> <code>orbot</code> es una versión modificada del
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">icono de estado del proyecto Orbot</a>,
-            que tiene copyright 2009-2010 por Nathan Freitas, The Guardian Project.
-            Es liberado bajo la <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">licencia BSD modificada (de 3 cláusulas)</a>.
-            El texto completo de la licencia se encuentra debajo. Copyright de modificaciones © 2017 <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/cookie_light.png"> <code>cookie</code> fue creado por Google.
             Es liberado bajo la <a href ="https://www.apache.org/licenses/LICENSE-2.0">licencia Apache 2.0</a>
             y puede ser descargado desde <a href="https://materialdesignicons.com/icon/cookie">Material Design Icons</a>.
         <p><img class="icon" src="../shared_images/map_light.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_light.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_light.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_light.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_light.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_light.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_light.png"> refresh.</p>
@@ -1067,38 +1062,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>Licencia BSD modificada (de 3 cláusulas)</h3>
-
-        <p>La redistribución y el uso en las formas de código fuente y binario, con o sin
-            modificaciones, están permitidos siempre que se cumplan las siguientes condiciones:</p>
-
-        <ul>
-            <li>Las redistribuciones del código fuente deben conservar el aviso de copyright
-                anterior, esta lista de condiciones y el siguiente descargo de responsabilidad.</li>
-
-            <li>Las redistribuciones en formato binario deben reproducir el aviso de copyright
-                anterior, esta lista de condiciones y el siguiente descargo de responsabilidad
-                en la documentación y/u otros materiales suministrados con la distribución.</li>
-
-            <li>Ni el nombre de los titulares de derechos de autor ni los nombres de sus
-                colaboradores pueden usarse para apoyar o promocionar productos derivados de
-                este software sin permiso específico previo y por escrito.</li>
-        </ul>
-
-        <p>ESTE SOFTWARE SE SUMINISTRA POR LOS PROPIETARIOS DEL COPYRIGHT Y COLABORADORES
-            “COMO ESTÁ” Y CUALQUIER GARANTÍAS EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO
-            LIMITADO A, LAS GARANTÍAS IMPLÍCITAS DE COMERCIALIZACIÓN Y APTITUD PARA UN
-            PROPÓSITO PARTICULAR SON RECHAZADAS. EN NINGÚN CASO LOS PROPIETARIOS DEL COPYRIGHT
-            Y COLABORADORES SERÁN RESPONSABLES POR NINGÚN DAÑO DIRECTO, INDIRECTO, INCIDENTAL,
-            ESPECIAL, EJEMPLAR O COSECUENCIAL (INCLUYENDO, PERO NO LIMITADO A, LA ADQUISICIÓN
-            O SUSTITUCIÓN DE BIENES O SERVICIOS; LA PÉRDIDA DE USO, DE DATOS O DE BENEFICIOS;
-            O INTERRUPCIÓN DE LA ACTIVIDAD EMPRESARIAL) O POR CUALQUIER TEORÍA DE
-            RESPONSABILIDAD, YA SEA POR CONTRATO, RESPONSABILIDAD ESTRICTA O AGRAVIO
-            (INCLUYENDO NEGLIGENCIA O CUALQUIER OTRA CAUSA) QUE SURJA DE CUALQUIER MANERA DEL
-            USO DE ESTE SOFTWARE, INCLUSO SI SE HA ADVERTIDO DE LA POSIBILIDAD DE TALES DAÑOS.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
diff --git a/app/src/main/assets/es/guide_proxies_dark.html b/app/src/main/assets/es/guide_proxies_dark.html
new file mode 100644 (file)
index 0000000..fae7b7b
--- /dev/null
@@ -0,0 +1,90 @@
+<!--
+  Copyright © 2017-2019 Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2017,2019 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/dark_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Proxies and Their Limits</h3>
+
+        <p>Existen dos categorías generales de malos actores que quieren infringir la privacidad de la web:
+            gobiernos maliciosos con acceso a ISPs (Proveedores de Servicios de Internet) y grandes corporaciones que ofrecen redes sociales y de publicidad.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Gobiernos maliciosos</h3>
+
+        <p>Los gobiernos maliciosos a menudo espían a sus ciudadanos para castigar la disidencia o la actividad de derechos humanos.
+            Normalmente suelen operar los ISPs locales o los fuerzan a revelar información mostrando cada dirección IP que visita cada usuario.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Grandes corporaciones</h3>
+
+        <p>Cuando un usuario se conecta a un servidor web, éste puede ver la dirección IP del usuario.
+            Aunque esto no es una ciencia perfecta, las direcciones IP se pueden convertir a direcciones físicas con <a href="https://www.whatismyip.com/">bastante precisión</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Pero las más grandes corporaciones que poseen medios sociales y redes de publicidad usan un perfil completo de información diseñado
+            para rastrear a los usuarios a través de los dispositivos y direcciones IP.
+            Estos perfiles emplean una variedad de técnicas para identificar a los usuarios, incluyendo Javascript, cookies, IDs de seguimiento,
+            y <a href="https://panopticlick.eff.org/">huellas del navegador</a>.
+            Debido a que la gran mayoría de páginas web en internet, o cargan un anuncio de una de las principales redes, o integran iconos de medios sociales con su Javascript asociado,
+            estas corporaciones han creado perfiles para casi todos los usuarios en línea y pueden rastrear su actividad en internet a través de sitios que no están relacionados.</p>
+
+        <p>Ellos rastrean cada sitio web visitado, todo lo que se compra, cada tarjeta de crédito que es usada para realizar una compra, cada dirección a la que se envían los artículos,
+            y los metadatos GPS de cada imágen que se sube a internet.
+            Construyen un perfil de la edad del usuario, género, estado civil, dirección, afiliaciones políticas, afiliaciones religiosas, circunstancias familiares, número de mascotas,
+            y cualquier otra cosa que caiga en sus manos.
+            Incluso compran bases de datos de transacciones con tarjeta de crédito en tiendas locales,
+            para así poder rastrear de los usuarios en sus perfiles los patrones de compra que hacen cuando no están conectados.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>La única mejor protección de la privacidad contra las grandes corporaciones es navegar por la web con Javascript deshabilitado, seguido de bloquear redes publicitarias,
+            inhabilitar cookies y almacenamiento DOM, y usar un navegador del que sea difícil recoger huellas.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_dark.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Descarga de archivos a través de Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/es/guide_proxies_light.html b/app/src/main/assets/es/guide_proxies_light.html
new file mode 100644 (file)
index 0000000..97dc8ff
--- /dev/null
@@ -0,0 +1,90 @@
+<!--
+  Copyright © 2017-2019 Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2017,2019 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/light_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Proxies and Their Limits</h3>
+
+        <p>Existen dos categorías generales de malos actores que quieren infringir la privacidad de la web:
+            gobiernos maliciosos con acceso a ISPs (Proveedores de Servicios de Internet) y grandes corporaciones que ofrecen redes sociales y de publicidad.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Gobiernos maliciosos</h3>
+
+        <p>Los gobiernos maliciosos a menudo espían a sus ciudadanos para castigar la disidencia o la actividad de derechos humanos.
+            Normalmente suelen operar los ISPs locales o los fuerzan a revelar información mostrando cada dirección IP que visita cada usuario.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Grandes corporaciones</h3>
+
+        <p>Cuando un usuario se conecta a un servidor web, éste puede ver la dirección IP del usuario.
+            Aunque esto no es una ciencia perfecta, las direcciones IP se pueden convertir a direcciones físicas con <a href="https://www.whatismyip.com/">bastante precisión</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Pero las más grandes corporaciones que poseen medios sociales y redes de publicidad usan un perfil completo de información diseñado
+            para rastrear a los usuarios a través de los dispositivos y direcciones IP.
+            Estos perfiles emplean una variedad de técnicas para identificar a los usuarios, incluyendo Javascript, cookies, IDs de seguimiento,
+            y <a href="https://panopticlick.eff.org/">huellas del navegador</a>.
+            Debido a que la gran mayoría de páginas web en internet, o cargan un anuncio de una de las principales redes, o integran iconos de medios sociales con su Javascript asociado,
+            estas corporaciones han creado perfiles para casi todos los usuarios en línea y pueden rastrear su actividad en internet a través de sitios que no están relacionados.</p>
+
+        <p>Ellos rastrean cada sitio web visitado, todo lo que se compra, cada tarjeta de crédito que es usada para realizar una compra, cada dirección a la que se envían los artículos,
+            y los metadatos GPS de cada imágen que se sube a internet.
+            Construyen un perfil de la edad del usuario, género, estado civil, dirección, afiliaciones políticas, afiliaciones religiosas, circunstancias familiares, número de mascotas,
+            y cualquier otra cosa que caiga en sus manos.
+            Incluso compran bases de datos de transacciones con tarjeta de crédito en tiendas locales,
+            para así poder rastrear de los usuarios en sus perfiles los patrones de compra que hacen cuando no están conectados.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>La única mejor protección de la privacidad contra las grandes corporaciones es navegar por la web con Javascript deshabilitado, seguido de bloquear redes publicitarias,
+            inhabilitar cookies y almacenamiento DOM, y usar un navegador del que sea difícil recoger huellas.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_light.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Descarga de archivos a través de Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/es/guide_tor_dark.html b/app/src/main/assets/es/guide_tor_dark.html
deleted file mode 100644 (file)
index 2c60e81..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--
-  Copyright © 2017-2019 Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2017 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/dark_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Tor y sus límites</h3>
-
-        <p>Existen dos categorías generales de malos actores que quieren infringir la privacidad de la web:
-            gobiernos maliciosos con acceso a ISPs (Proveedores de Servicios de Internet) y grandes corporaciones que ofrecen redes sociales y de publicidad.
-            TOR (El Enrutador de Cebolla) es útil en proteger la privacidad de gobiernos maliciosos (que espían el tráfico en tránsito) pero no de grandes corporaciones
-            (que incrustan código malicioso en los servidores web).</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Gobiernos maliciosos</h3>
-
-        <p>Los gobiernos maliciosos a menudo espían a sus ciudadanos para castigar la disidencia o la actividad de derechos humanos.
-            Normalmente suelen operar los ISPs locales o los fuerzan a revelar información mostrando cada dirección IP que visita cada usuario.
-            Tor está diseñado para vencer esta infracción de privacidad encriptando el tráfico del dispositivo de un usuario,
-            enrutándolo a través de tres servidores separados en internet antes de enviarlo al destino final.
-            Esto significa que ningún ISP local, servidor o página web pueden, a la vez, conocer la dirección IP del dispositivo del usuario y la dirección IP del servidor web final.
-            Los gobiernos maliciosos y los ISPs que ellos controlan no pueden decir a qué servidores web está accediendo un determinado usuario, aunque pueden decir que ese usuario está usando Tor.
-            En algunas partes del mundo, usar Tor podría interpretarse como una prueba de conducta ilegal (“si no tuvieras nada que esconder no estarías encriptando tu tráfico”)
-            y los usuarios podrían ser castigados porque los gobiernos asumen que están haciendo algo prohibido. Por tanto, Tor puede ser útil, pero no es la panacea.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Grandes corporaciones</h3>
-
-        <p>Cuando un usuario se conecta a un servidor web, éste puede ver la dirección IP del usuario.
-            Aunque esto no es una ciencia perfecta, las direcciones IP se pueden convertir a direcciones físicas con <a href="https://www.whatismyip.com/">bastante precisión</a>.
-            Los pequeños servidores web normalmente se basan en las direcciones IP para identificar la ubicación de los usuarios que visitan su web.
-            Tor es una buena solución para ocultar la ubicación del usuario de estos servidores.
-            Pero las más grandes corporaciones que poseen medios sociales y redes de publicidad usan un perfil completo de información diseñado
-            para rastrear a los usuarios a través de los dispositivos y direcciones IP.
-            Estos perfiles emplean una variedad de técnicas para identificar a los usuarios, incluyendo Javascript, cookies, IDs de seguimiento,
-            y <a href="https://panopticlick.eff.org/">huellas del navegador</a>.
-            Debido a que la gran mayoría de páginas web en internet, o cargan un anuncio de una de las principales redes, o integran iconos de medios sociales con su Javascript asociado,
-            estas corporaciones han creado perfiles para casi todos los usuarios en línea y pueden rastrear su actividad en internet a través de sitios que no están relacionados.</p>
-
-        <p>Ellos rastrean cada sitio web visitado, todo lo que se compra, cada tarjeta de crédito que es usada para realizar una compra, cada dirección a la que se envían los artículos,
-            y los metadatos GPS de cada imágen que se sube a internet.
-            Construyen un perfil de la edad del usuario, género, estado civil, dirección, afiliaciones políticas, afiliaciones religiosas, circunstancias familiares, número de mascotas,
-            y cualquier otra cosa que caiga en sus manos.
-            Incluso compran bases de datos de transacciones con tarjeta de crédito en tiendas locales,
-            para así poder rastrear de los usuarios en sus perfiles los patrones de compra que hacen cuando no están conectados.
-            Debido a que ya tienen información de dirección mucho más precisa sobre un usuario que lo que pueda revelar una dirección IP,
-            Tor no ofrece una verdadera protección de la privacidad contra las grandes corporaciones.</p>
-
-        <p>La única mejor protección de la privacidad contra las grandes corporaciones es navegar por la web con Javascript deshabilitado, seguido de bloquear redes publicitarias,
-            inhabilitar cookies y almacenamiento DOM, y usar un navegador del que sea difícil recoger huellas.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_dark.png"> Usando Tor</h3>
-
-        <p>A pesar de sus limitaciones, Tor puede ser útil en algunas circunstancias.
-            El proyecto Tor tiene una app para Android llamada Orbot, que está disponible en F-Droid y en todos los sitios donde se distribuye Navegador Privado.
-            Navegador Privado tiene un ajuste para usar Orbot como un proxy. Cuando se enciende, la barra de aplicaciones de Navegador Privado tendrá un fondo azul claro en lugar del gris claro por defecto.
-            Cuando el ajuste proxy Orbot de Navegador Privado está habilitado, el acceso a internet no funcionará a menos que se esté ejecutando Orbot y esté conectado a Tor.
-            Ya que el tráfico se está enrutando a través de varios nodos Tor, usar Tor es a menudo mucho más lento que conectar directamente a internet.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Descarga de archivos a través de Tor</h3>
-
-        <p>Cuando Orbot está operando en modo proxy, navegar por Internet usando Navegador Privado será enrutado a través de la red Tor, pero no en el caso de las descargas de archivos.
-            Esto es debido a que Navegador Privado utiliza el gestor de descargas integrado de Android para descargar archivos, que no tiene una opción de proxy.
-            Los usuarios que quieran descargar archivos a través de Orbot necesitan habilitar su modo VPN.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
diff --git a/app/src/main/assets/es/guide_tor_light.html b/app/src/main/assets/es/guide_tor_light.html
deleted file mode 100644 (file)
index b33ecb1..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--
-  Copyright © 2017-2019 Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2017 Jose A. León.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/light_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Tor y sus límites</h3>
-
-        <p>Existen dos categorías generales de malos actores que quieren infringir la privacidad de la web:
-            gobiernos maliciosos con acceso a ISPs (Proveedores de Servicios de Internet) y grandes corporaciones que ofrecen redes sociales y de publicidad.
-            TOR (El Enrutador de Cebolla) es útil en proteger la privacidad de gobiernos maliciosos (que espían el tráfico en tránsito) pero no de grandes corporaciones
-            (que incrustan código malicioso en los servidores web).</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Gobiernos maliciosos</h3>
-
-        <p>Los gobiernos maliciosos a menudo espían a sus ciudadanos para castigar la disidencia o la actividad de derechos humanos.
-            Normalmente suelen operar los ISPs locales o los fuerzan a revelar información mostrando cada dirección IP que visita cada usuario.
-            Tor está diseñado para vencer esta infracción de privacidad encriptando el tráfico del dispositivo de un usuario,
-            enrutándolo a través de tres servidores separados en internet antes de enviarlo al destino final.
-            Esto significa que ningún ISP local, servidor o página web pueden, a la vez, conocer la dirección IP del dispositivo del usuario y la dirección IP del servidor web final.
-            Los gobiernos maliciosos y los ISPs que ellos controlan no pueden decir a qué servidores web está accediendo un determinado usuario, aunque pueden decir que ese usuario está usando Tor.
-            En algunas partes del mundo, usar Tor podría interpretarse como una prueba de conducta ilegal (“si no tuvieras nada que esconder no estarías encriptando tu tráfico”)
-            y los usuarios podrían ser castigados porque los gobiernos asumen que están haciendo algo prohibido. Por tanto, Tor puede ser útil, pero no es la panacea.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Grandes corporaciones</h3>
-
-        <p>Cuando un usuario se conecta a un servidor web, éste puede ver la dirección IP del usuario.
-            Aunque esto no es una ciencia perfecta, las direcciones IP se pueden convertir a direcciones físicas con <a href="https://www.whatismyip.com/">bastante precisión</a>.
-            Los pequeños servidores web normalmente se basan en las direcciones IP para identificar la ubicación de los usuarios que visitan su web.
-            Tor es una buena solución para ocultar la ubicación del usuario de estos servidores.
-            Pero las más grandes corporaciones que poseen medios sociales y redes de publicidad usan un perfil completo de información diseñado
-            para rastrear a los usuarios a través de los dispositivos y direcciones IP.
-            Estos perfiles emplean una variedad de técnicas para identificar a los usuarios, incluyendo Javascript, cookies, IDs de seguimiento,
-            y <a href="https://panopticlick.eff.org/">huellas del navegador</a>.
-            Debido a que la gran mayoría de páginas web en internet, o cargan un anuncio de una de las principales redes, o integran iconos de medios sociales con su Javascript asociado,
-            estas corporaciones han creado perfiles para casi todos los usuarios en línea y pueden rastrear su actividad en internet a través de sitios que no están relacionados.</p>
-
-        <p>Ellos rastrean cada sitio web visitado, todo lo que se compra, cada tarjeta de crédito que es usada para realizar una compra, cada dirección a la que se envían los artículos,
-            y los metadatos GPS de cada imágen que se sube a internet.
-            Construyen un perfil de la edad del usuario, género, estado civil, dirección, afiliaciones políticas, afiliaciones religiosas, circunstancias familiares, número de mascotas,
-            y cualquier otra cosa que caiga en sus manos.
-            Incluso compran bases de datos de transacciones con tarjeta de crédito en tiendas locales,
-            para así poder rastrear de los usuarios en sus perfiles los patrones de compra que hacen cuando no están conectados.
-            Debido a que ya tienen información de dirección mucho más precisa sobre un usuario que lo que pueda revelar una dirección IP,
-            Tor no ofrece una verdadera protección de la privacidad contra las grandes corporaciones.</p>
-
-        <p>La única mejor protección de la privacidad contra las grandes corporaciones es navegar por la web con Javascript deshabilitado, seguido de bloquear redes publicitarias,
-            inhabilitar cookies y almacenamiento DOM, y usar un navegador del que sea difícil recoger huellas.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_light.png"> Usando Tor</h3>
-
-        <p>A pesar de sus limitaciones, Tor puede ser útil en algunas circunstancias.
-            El proyecto Tor tiene una app para Android llamada Orbot, que está disponible en F-Droid y en todos los sitios donde se distribuye Navegador Privado.
-            Navegador Privado tiene un ajuste para usar Orbot como un proxy. Cuando se enciende, la barra de aplicaciones de Navegador Privado tendrá un fondo azul claro en lugar del gris claro por defecto.
-            Cuando el ajuste proxy Orbot de Navegador Privado está habilitado, el acceso a internet no funcionará a menos que se esté ejecutando Orbot y esté conectado a Tor.
-            Ya que el tráfico se está enrutando a través de varios nodos Tor, usar Tor es a menudo mucho más lento que conectar directamente a internet.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Descarga de archivos a través de Tor</h3>
-
-        <p>Cuando Orbot está operando en modo proxy, navegar por Internet usando Navegador Privado será enrutado a través de la red Tor, pero no en el caso de las descargas de archivos.
-            Esto es debido a que Navegador Privado utiliza el gestor de descargas integrado de Android para descargar archivos, que no tiene una opción de proxy.
-            Los usuarios que quieran descargar archivos a través de Orbot necesitan habilitar su modo VPN.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
index 088597402d20434aa84023ea5ffc5e8880587443..becbb455f6abff128c493f69a582cccef9a84257 100644 (file)
             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>.
             Modifications copyright © 2019 <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/orbot_dark.png"> <code>orbot</code> est une version modifiée de
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">l'icône de statut du projet Orbot</a>,
-            qui est copyright 2009-2010 de Nathan Freitas, The Guardian Project. Elle est publiée sous la <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">licence BSD à 3 clauses</a>.
-            Le texte complet de la licence est ci-dessous. Modifications copyright © 2017 <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/cookie_dark.png"> <code>cookie</code> a été créé par Google.
             Il est publié sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>
             et peut être téléchargé à partir des <a href="https://materialdesignicons.com/icon/cookie">Icônes Material Design</a>.
         <p><img class="icon" src="../shared_images/map_dark.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_dark.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_dark.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_dark.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_dark.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_dark.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_dark.png"> refresh.</p>
@@ -1070,40 +1066,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following disclaimer
-            in the documentation and/or other materials provided with the
-            distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-            contributors may be used to endorse or promote products derived from
-            this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
index a905b913805eca71cb2a001cdea26099f1754754..7640e9fe4dbd43a5c5ca8a889f2e58a26e46432f 100644 (file)
             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>.
             Modifications copyright © 2019 <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/orbot_light.png"> <code>orbot</code> est une version modifiée de
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">l'icône de statut du projet Orbot</a>,
-            qui est copyright 2009-2010 de Nathan Freitas, The Guardian Project. Elle est publiée sous la <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">licence BSD à 3 clauses</a>.
-            Le texte complet de la licence est ci-dessous. Modifications copyright © 2017 <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/cookie_light.png"> <code>cookie</code> a été créé par Google.
             Il est publié sous la <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licence Apache 2.0</a>
             et peut être téléchargé à partir des <a href="https://materialdesignicons.com/icon/cookie">Icônes Material Design</a>.
         <p><img class="icon" src="../shared_images/map_light.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_light.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_light.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_light.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_light.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_light.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_light.png"> refresh.</p>
@@ -1070,40 +1066,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following disclaimer
-            in the documentation and/or other materials provided with the
-            distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-            contributors may be used to endorse or promote products derived from
-            this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
diff --git a/app/src/main/assets/fr/guide_proxies_dark.html b/app/src/main/assets/fr/guide_proxies_dark.html
new file mode 100644 (file)
index 0000000..04a8766
--- /dev/null
@@ -0,0 +1,88 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2019 Kévin LE FLOHIC <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/dark_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Proxies and Their Limits</h3>
+
+        <p>Il existe deux catégories générales de mauvais acteurs qui veulent porter atteinte à la vie privée du Web:
+            des gouvernements malveillants ayant accès à des fournisseurs de services Internet (FAI) et des méga entreprises exploitant des réseaux sociaux et publicitaires.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Gouvernements Malicieux</h3>
+
+        <p>Les gouvernements malveillants espionnent souvent leurs citoyens pour punir la dissidence ou les activités liées aux droits de l'homme.
+            Ils exploitent généralement les FAI locaux ou peuvent les obliger à divulguer des informations indiquant chaque adresse IP visitée par chaque utilisateur.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Méga entreprises</h3>
+
+        <p>Lorsqu'un utilisateur se connecte à un serveur Web, celui-ci peut voir l'adresse IP de l'utilisateur.
+            Bien que ce ne soit pas une science parfaite, les adresses IP peuvent être transformées en adresses physiques avec une <a href="https://www.whatismyip.com/">juste précision</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Mais les grandes méga-entreprises propriétaires de réseaux de médias sociaux et de publicité utilisent tout un profil d'informations
+            conçu pour suivre les utilisateurs sur des appareils et des adresses IP.
+            Ces profils utilisent diverses techniques pour identifier les utilisateurs, notamment JavaScript, les cookies, les identifiants de suivi et les
+            <a href="https://panopticlick.eff.org/">empreintes digitales du navigateur</a>.
+            Parce que la grande majorité des sites Web sur Internet téléchargent une annonce publicitaire sur l'un des principaux réseaux ou intègrent
+            des icônes de réseaux sociaux avec leur code JavaScript associé,
+            ces sociétés ont créé des profils pour presque tous les utilisateurs en ligne et peuvent suivre leur activité Internet sur des sites indépendants.</p>
+
+        <p>Ils suivent chaque site visité, tout ce qui est acheté, chaque carte de crédit utilisée pour effectuer un achat, chaque adresse à laquelle les articles sont expédiés,
+            et les métadonnées GPS de chaque image téléchargée sur Internet.
+            Ils établissent un profil de l'âge, du sexe, de l'état matrimonial, de l'adresse, des affiliations politiques, des appartenances religieuses, de la situation de famille,
+            du nombre d'animaux de compagnie, et tout ce qu'ils peuvent mettre la main dessus.
+            Ils achètent même des bases de données de transactions par carte de crédit dans les magasins locaux, afin de pouvoir suivre les habitudes d'achat hors ligne des utilisateurs dans leurs profils.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>La meilleure protection contre la confidentialité des grandes entreprises consiste à naviguer sur le Web avec JavaScript désactivé, le suivi du blocage des réseaux publicitaires,
+            la désactivation des cookies et du stockage du DOM et en utilisant un navigateur difficile à identifier.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_dark.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Téléchargement de fichiers via Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/fr/guide_proxies_light.html b/app/src/main/assets/fr/guide_proxies_light.html
new file mode 100644 (file)
index 0000000..c2b6117
--- /dev/null
@@ -0,0 +1,88 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2019 Kévin LE FLOHIC <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/light_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Proxies and Their Limits</h3>
+
+        <p>Il existe deux catégories générales de mauvais acteurs qui veulent porter atteinte à la vie privée du Web:
+            des gouvernements malveillants ayant accès à des fournisseurs de services Internet (FAI) et des méga entreprises exploitant des réseaux sociaux et publicitaires.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Gouvernements Malicieux</h3>
+
+        <p>Les gouvernements malveillants espionnent souvent leurs citoyens pour punir la dissidence ou les activités liées aux droits de l'homme.
+            Ils exploitent généralement les FAI locaux ou peuvent les obliger à divulguer des informations indiquant chaque adresse IP visitée par chaque utilisateur.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Méga entreprises</h3>
+
+        <p>Lorsqu'un utilisateur se connecte à un serveur Web, celui-ci peut voir l'adresse IP de l'utilisateur.
+            Bien que ce ne soit pas une science parfaite, les adresses IP peuvent être transformées en adresses physiques avec une <a href="https://www.whatismyip.com/">juste précision</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Mais les grandes méga-entreprises propriétaires de réseaux de médias sociaux et de publicité utilisent tout un profil d'informations
+            conçu pour suivre les utilisateurs sur des appareils et des adresses IP.
+            Ces profils utilisent diverses techniques pour identifier les utilisateurs, notamment JavaScript, les cookies, les identifiants de suivi et les
+            <a href="https://panopticlick.eff.org/">empreintes digitales du navigateur</a>.
+            Parce que la grande majorité des sites Web sur Internet téléchargent une annonce publicitaire sur l'un des principaux réseaux ou intègrent
+            des icônes de réseaux sociaux avec leur code JavaScript associé,
+            ces sociétés ont créé des profils pour presque tous les utilisateurs en ligne et peuvent suivre leur activité Internet sur des sites indépendants.</p>
+
+        <p>Ils suivent chaque site visité, tout ce qui est acheté, chaque carte de crédit utilisée pour effectuer un achat, chaque adresse à laquelle les articles sont expédiés,
+            et les métadonnées GPS de chaque image téléchargée sur Internet.
+            Ils établissent un profil de l'âge, du sexe, de l'état matrimonial, de l'adresse, des affiliations politiques, des appartenances religieuses, de la situation de famille,
+            du nombre d'animaux de compagnie, et tout ce qu'ils peuvent mettre la main dessus.
+            Ils achètent même des bases de données de transactions par carte de crédit dans les magasins locaux, afin de pouvoir suivre les habitudes d'achat hors ligne des utilisateurs dans leurs profils.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>La meilleure protection contre la confidentialité des grandes entreprises consiste à naviguer sur le Web avec JavaScript désactivé, le suivi du blocage des réseaux publicitaires,
+            la désactivation des cookies et du stockage du DOM et en utilisant un navigateur difficile à identifier.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_light.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Téléchargement de fichiers via Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/fr/guide_tor_dark.html b/app/src/main/assets/fr/guide_tor_dark.html
deleted file mode 100644 (file)
index f47be23..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--
-  Copyright © 2016-2018 Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2019 Kévin LE FLOHIC <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/dark_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Tor et ses limites</h3>
-
-        <p>Il existe deux catégories générales de mauvais acteurs qui veulent porter atteinte à la vie privée du Web:
-             des gouvernements malveillants ayant accès à des fournisseurs de services Internet (FAI) et des méga entreprises exploitant des réseaux sociaux et publicitaires.
-             TOR (The Onion Router) est utile pour protéger la vie 
-             privée envers des gouvernements malveillants (qui espionnent le trafic en transit), mais pas des méga-entreprises (qui intègrent du code malveillant sur les serveurs Web).</p>
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Gouvernements Malicieux</h3>
-
-        <p>Les gouvernements malveillants espionnent souvent leurs citoyens pour punir la dissidence ou les activités liées aux droits de l'homme.
-            Ils exploitent généralement les FAI locaux ou peuvent les obliger à divulguer des informations indiquant chaque adresse IP visitée par chaque utilisateur.
-            Tor est conçu pour mettre fin à cette atteinte à la vie privée en chiffrant le trafic depuis le périphérique d'un utilisateur et en le routant via trois serveurs distincts sur Internet.
-            avant de l'envoyer à la destination finale.
-            Cela signifie qu'aucun fournisseur de services Internet, serveur ou site Web ne peut connaître à la fois l'adresse <a href="https://ipleak.net">et le périphérique de l'utilisateur</a>
-            et l'adresse IP du serveur Web final.
-            Les gouvernements malveillants et les fournisseurs de services Internet qu'ils contrôlent ne peuvent pas déterminer les serveurs Web auxquels un utilisateur a accès,
-            bien qu'ils puissent dire que l'utilisateur utilise Tor.
-            Dans certaines régions du monde, l'utilisation de Tor pourrait être interprétée comme une preuve de comportement illégal («si vous n'aviez rien à cacher, vous ne crypteriez pas votre trafic»).
-            et les utilisateurs pourraient être punis parce que les gouvernements supposent qu'ils font quelque chose d'interdit. Ainsi, Tor peut être utile, mais n'est pas une panacée.</p>
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Méga entreprises</h3>
-
-        <p>Lorsqu'un utilisateur se connecte à un serveur Web, celui-ci peut voir l'adresse IP de l'utilisateur.
-            Bien que ce ne soit pas une science parfaite, les adresses IP peuvent être transformées en adresses physiques avec une <a href="https://www.whatismyip.com/">juste précision</a>.
-            Les petits serveurs Web dépendent généralement des adresses IP pour identifier l'emplacement des utilisateurs visitant leur site.
-            Tor est une bonne solution pour masquer l'emplacement de l'utilisateur de ces serveurs.
-            Mais les grandes méga-entreprises propriétaires de réseaux de médias sociaux et de publicité utilisent tout un profil d'informations
-            conçu pour suivre les utilisateurs sur des appareils et des adresses IP.
-            Ces profils utilisent diverses techniques pour identifier les utilisateurs, notamment JavaScript, les cookies, les identifiants de suivi et les
-            <a href="https://panopticlick.eff.org/">empreintes digitales du navigateur</a>.
-            Parce que la grande majorité des sites Web sur Internet téléchargent une annonce publicitaire sur l'un des principaux réseaux ou intègrent
-            des icônes de réseaux sociaux avec leur code JavaScript associé,
-            ces sociétés ont créé des profils pour presque tous les utilisateurs en ligne et peuvent suivre leur activité Internet sur des sites indépendants.</p>
-
-        <p>Ils suivent chaque site visité, tout ce qui est acheté, chaque carte de crédit utilisée pour effectuer un achat, chaque adresse à laquelle les articles sont expédiés,
-            et les métadonnées GPS de chaque image téléchargée sur Internet.
-            Ils établissent un profil de l'âge, du sexe, de l'état matrimonial, de l'adresse, des affiliations politiques, des appartenances religieuses, de la situation de famille,
-            du nombre d'animaux de compagnie, et tout ce qu'ils peuvent mettre la main dessus.
-            Ils achètent même des bases de données de transactions par carte de crédit dans les magasins locaux, afin de pouvoir suivre les habitudes d'achat hors ligne des utilisateurs dans leurs profils.
-            Comme ils disposent déjà d'informations beaucoup plus précises sur l'adresse d'un utilisateur que ne le révèle une adresse IP,
-            Tor ne fournit aucune protection réelle de la confidentialité contre les méga entreprises.</p>
-
-        <p>La meilleure protection contre la confidentialité des grandes entreprises consiste à naviguer sur le Web avec JavaScript désactivé, le suivi du blocage des réseaux publicitaires,
-            la désactivation des cookies et du stockage du DOM et en utilisant un navigateur difficile à identifier.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_dark.png"> Utilisation de Tor</h3>
-
-        <p>Malgré ses limites, Tor peut être utile dans certaines circonstances.
-             Le projet Tor propose une application pour Android appelée Orbot, disponible sur <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-             et partout ailleurs où Privacy Browser est distribué. Privacy Browser a été configuré pour utiliser Orbot en tant que proxy.
-             Lorsque cette option est activée, la barre d'applications de Privacy Browser aura un arrière-plan bleu clair au lieu du gris clair par défaut.
-             Lorsque le paramètre proxy Orbot de Privacy Browser est activé, l'accès Internet ne fonctionnera que si Orbot est en cours d'exécution et connecté à Tor.
-             Le trafic étant acheminé via plusieurs nœuds Tor, son utilisation est souvent beaucoup plus lente que la connexion directe à Internet.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Téléchargement de fichiers via Tor</h3>
-
-        <p>Lorsque Orbot fonctionne en mode proxy, la navigation sur Internet à l'aide de Privacy Browser sera acheminée via le réseau Tor, mais pas les téléchargements de fichiers.
-             En effet, Privacy Browser utilise le gestionnaire de téléchargement intégré d'Android pour télécharger des fichiers, qui ne disposent pas d'une option de proxy.
-             Les utilisateurs souhaitant télécharger des fichiers via Orbot doivent activer le mode VPN.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
diff --git a/app/src/main/assets/fr/guide_tor_light.html b/app/src/main/assets/fr/guide_tor_light.html
deleted file mode 100644 (file)
index bd62419..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--
-  Copyright © 2016-2018 Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2019 Kévin LE FLOHIC <kevinliste@framalistes.org>.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/light_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Tor et ses limites</h3>
-
-        <p>Il existe deux catégories générales de mauvais acteurs qui veulent porter atteinte à la vie privée du Web:
-             des gouvernements malveillants ayant accès à des fournisseurs de services Internet (FAI) et des méga entreprises exploitant des réseaux sociaux et publicitaires.
-             TOR (The Onion Router) est utile pour protéger la vie 
-             privée envers des gouvernements malveillants (qui espionnent le trafic en transit), mais pas des méga-entreprises (qui intègrent du code malveillant sur les serveurs Web).</p>
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Gouvernements Malicieux</h3>
-
-        <p>Les gouvernements malveillants espionnent souvent leurs citoyens pour punir la dissidence ou les activités liées aux droits de l'homme.
-            Ils exploitent généralement les FAI locaux ou peuvent les obliger à divulguer des informations indiquant chaque adresse IP visitée par chaque utilisateur.
-            Tor est conçu pour mettre fin à cette atteinte à la vie privée en chiffrant le trafic depuis le périphérique d'un utilisateur et en le routant via trois serveurs distincts sur Internet.
-            avant de l'envoyer à la destination finale.
-            Cela signifie qu'aucun fournisseur de services Internet, serveur ou site Web ne peut connaître à la fois l'adresse <a href="https://ipleak.net">et le périphérique de l'utilisateur</a>
-            et l'adresse IP du serveur Web final.
-            Les gouvernements malveillants et les fournisseurs de services Internet qu'ils contrôlent ne peuvent pas déterminer les serveurs Web auxquels un utilisateur a accès,
-            bien qu'ils puissent dire que l'utilisateur utilise Tor.
-            Dans certaines régions du monde, l'utilisation de Tor pourrait être interprétée comme une preuve de comportement illégal («si vous n'aviez rien à cacher, vous ne crypteriez pas votre trafic»).
-            et les utilisateurs pourraient être punis parce que les gouvernements supposent qu'ils font quelque chose d'interdit. Ainsi, Tor peut être utile, mais n'est pas une panacée.</p>
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Méga entreprises</h3>
-
-        <p>Lorsqu'un utilisateur se connecte à un serveur Web, celui-ci peut voir l'adresse IP de l'utilisateur.
-            Bien que ce ne soit pas une science parfaite, les adresses IP peuvent être transformées en adresses physiques avec une <a href="https://www.whatismyip.com/">juste précision</a>.
-            Les petits serveurs Web dépendent généralement des adresses IP pour identifier l'emplacement des utilisateurs visitant leur site.
-            Tor est une bonne solution pour masquer l'emplacement de l'utilisateur de ces serveurs.
-            Mais les grandes méga-entreprises propriétaires de réseaux de médias sociaux et de publicité utilisent tout un profil d'informations
-            conçu pour suivre les utilisateurs sur des appareils et des adresses IP.
-            Ces profils utilisent diverses techniques pour identifier les utilisateurs, notamment JavaScript, les cookies, les identifiants de suivi et les
-            <a href="https://panopticlick.eff.org/">empreintes digitales du navigateur</a>.
-            Parce que la grande majorité des sites Web sur Internet téléchargent une annonce publicitaire sur l'un des principaux réseaux ou intègrent
-            des icônes de réseaux sociaux avec leur code JavaScript associé,
-            ces sociétés ont créé des profils pour presque tous les utilisateurs en ligne et peuvent suivre leur activité Internet sur des sites indépendants.</p>
-
-        <p>Ils suivent chaque site visité, tout ce qui est acheté, chaque carte de crédit utilisée pour effectuer un achat, chaque adresse à laquelle les articles sont expédiés,
-            et les métadonnées GPS de chaque image téléchargée sur Internet.
-            Ils établissent un profil de l'âge, du sexe, de l'état matrimonial, de l'adresse, des affiliations politiques, des appartenances religieuses, de la situation de famille,
-            du nombre d'animaux de compagnie, et tout ce qu'ils peuvent mettre la main dessus.
-            Ils achètent même des bases de données de transactions par carte de crédit dans les magasins locaux, afin de pouvoir suivre les habitudes d'achat hors ligne des utilisateurs dans leurs profils.
-            Comme ils disposent déjà d'informations beaucoup plus précises sur l'adresse d'un utilisateur que ne le révèle une adresse IP,
-            Tor ne fournit aucune protection réelle de la confidentialité contre les méga entreprises.</p>
-
-        <p>La meilleure protection contre la confidentialité des grandes entreprises consiste à naviguer sur le Web avec JavaScript désactivé, le suivi du blocage des réseaux publicitaires,
-            la désactivation des cookies et du stockage du DOM et en utilisant un navigateur difficile à identifier.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_light.png"> Utilisation de Tor</h3>
-
-        <p>Malgré ses limites, Tor peut être utile dans certaines circonstances.
-             Le projet Tor propose une application pour Android appelée Orbot, disponible sur <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-             et partout ailleurs où Privacy Browser est distribué. Privacy Browser a été configuré pour utiliser Orbot en tant que proxy.
-             Lorsque cette option est activée, la barre d'applications de Privacy Browser aura un arrière-plan bleu clair au lieu du gris clair par défaut.
-             Lorsque le paramètre proxy Orbot de Privacy Browser est activé, l'accès Internet ne fonctionnera que si Orbot est en cours d'exécution et connecté à Tor.
-             Le trafic étant acheminé via plusieurs nœuds Tor, son utilisation est souvent beaucoup plus lente que la connexion directe à Internet.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Téléchargement de fichiers via Tor</h3>
-
-        <p>Lorsque Orbot fonctionne en mode proxy, la navigation sur Internet à l'aide de Privacy Browser sera acheminée via le réseau Tor, mais pas les téléchargements de fichiers.
-             En effet, Privacy Browser utilise le gestionnaire de téléchargement intégré d'Android pour télécharger des fichiers, qui ne disposent pas d'une option de proxy.
-             Les utilisateurs souhaitant télécharger des fichiers via Orbot doivent activer le mode VPN.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
index b9d9aff3a49ad7a1db058eb0c3ffaf1d3feea616..5824df425a3e33ccae381a7fe75196c4c8780321 100644 (file)
             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>.
             Copyright delle modifiche © 2019 <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/orbot_dark.png"> <code>orbot</code> è una versione modificata della
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">icona di stato del progetto Orbot</a>,
-            il cui copyright è 2009-2010 Nathan Freitas, The Guardian Project.
-            E' rilasciata sotto <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD license</a>. Il testo completo della Licenza è riportato di seguito.
-            Copyright delle modifiche © 2017<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/cookie_dark.png"> <code>cookie</code> è stata creata da Google.
             E' stata rilasciata con <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>
             e può essere scaricata dirattamente dal <a href="https://materialdesignicons.com/icon/cookie">Material Design Icons</a>. Non è stata modificata ad eccezione del colore e della dimensione.</p>
         <p><img class="icon" src="../shared_images/map_dark.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_dark.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_dark.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_dark.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_dark.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_dark.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_dark.png"> refresh.</p>
@@ -1162,40 +1157,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-                notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-                copyright notice, this list of conditions and the following disclaimer
-                in the documentation and/or other materials provided with the
-                distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-                contributors may be used to endorse or promote products derived from
-                this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
index 3bb1b0de2bc3a5c5eff7d5798880372c269743da..84e201c0c7f76931e5af3681b198f9418ef44bc0 100644 (file)
             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>.
             Copyright delle modifiche © 2019 <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/orbot_light.png"> <code>orbot</code> è una versione modificata della
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">icona di stato del progetto Orbot</a>,
-            il cui copyright è 2009-2010 Nathan Freitas, The Guardian Project.
-            E' rilasciata sotto <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD license</a>. Il testo completo della Licenza è riportato di seguito.
-            Copyright delle modifiche © 2017<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/cookie_light.png"> <code>cookie</code> è stata creata da Google.
             E' stata rilasciata con <a href ="https://www.apache.org/licenses/LICENSE-2.0">Licenza Apache 2.0</a>
             e può essere scaricata dirattamente dal <a href="https://materialdesignicons.com/icon/cookie">Material Design Icons</a>.Non è stata modificata ad eccezione del colore e della dimensione.</p>
         <p><img class="icon" src="../shared_images/map_light.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_light.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_light.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_light.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_light.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_light.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_light.png"> refresh.</p>
@@ -1163,40 +1158,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-                notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-                copyright notice, this list of conditions and the following disclaimer
-                in the documentation and/or other materials provided with the
-                distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-                contributors may be used to endorse or promote products derived from
-                this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
diff --git a/app/src/main/assets/it/guide_proxies_dark.html b/app/src/main/assets/it/guide_proxies_dark.html
new file mode 100644 (file)
index 0000000..2ffbb3b
--- /dev/null
@@ -0,0 +1,86 @@
+<!--
+  Copyright © 2017-2019 Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2017,2019 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/dark_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Proxies and Their Limits</h3>
+
+        <p>Esistono due categorie generali di cattivi soggetti che vogliono violare la privacy del web:
+            governi maliziosi con accesso agli ISP (Internet Service Providers) e mega corporations che gestiscono social network e agenzie pubblicitarie.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Governi Maliziosi</h3>
+
+        <p>I governi malizionsi spesso spiano i loro cittadini per punire il dissenso o le attività di difesa dei diritti umani.
+            Solitamente, o gestiscono loro stessi gli ISP locali oppure li obbligano a rivelare informazioni mostrando tutti gli indirizzi IP visitati da ciascun utente.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Mega corporations</h3>
+
+        <p>Quando un utente si connette a un web server, il server può vedere l'indirizzo IP dell'utente.
+            Nonostante non sia una scienza esatta, è possibile convertire l'IP in indirizzi fisici con <a href="https://www.whatismyip.com/">discreta accuratezza</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Le mega corporations proprietarie di social media e agenzie pubblicitarie utilizzano però un intero profilo di informazioni con lo scopo di tracciare gli utenti sui dispositivi e sgli indirizzi IP.
+            Questi profili utilizzano molte tecniche diverse per l'identificazione degli utenti, tra cui JavaScript, cookie, ID traccianti,
+            e <a href="https://panopticlick.eff.org/">impronta digitale dei browser</a>.
+            Siccome la maggior parte dei siti web carica gli annunci da una delle principali agenzie o inserisce le icone dei social media e i relativi javascript,
+            costruiscono profili per quasi tutti gli utenti e possono tracciare la loro attività su internet anche se relativa a altri siti.</p>
+
+        <p>Viene tracciato ogni sito visitato, ogni acquisto effettuato, ogni carta di credito utilizzata, ogni indirizzo di spedizione, i metadati GPS di ogni immagine che viene caricata su internet.
+            Viene costruito il profilo per età, sesso, stato civile, indirizzo, appartenenza politica, religione, situazione familiare, animali domestici, e tutto ciò su cui possono mettere le mani.
+            Le corporations acquistano anche i database delle transazioni con carta di credito effettuate nei negozi, per poter tracciare anche le abitudini di acquisto off-line degli utenti nei loro profili.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>La miglior protezione per la privacy contro le mega corporations è quella di navigare con JavaScript disabilitato, seguita dal bloccare gli annunci pubblicitari,
+            disabilitare i cookie e il DOM storage, e utilizzare un browser di cui è difficile avere l'impronta digitale.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_dark.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Download di File con Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/it/guide_proxies_light.html b/app/src/main/assets/it/guide_proxies_light.html
new file mode 100644 (file)
index 0000000..7a7598a
--- /dev/null
@@ -0,0 +1,86 @@
+<!--
+  Copyright © 2017-2019 Soren Stoutner <soren@stoutner.com>.
+
+  Translation 2017,2019 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/light_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Proxies and Their Limits</h3>
+
+        <p>Esistono due categorie generali di cattivi soggetti che vogliono violare la privacy del web:
+            governi maliziosi con accesso agli ISP (Internet Service Providers) e mega corporations che gestiscono social network e agenzie pubblicitarie.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Governi Maliziosi</h3>
+
+        <p>I governi malizionsi spesso spiano i loro cittadini per punire il dissenso o le attività di difesa dei diritti umani.
+            Solitamente, o gestiscono loro stessi gli ISP locali oppure li obbligano a rivelare informazioni mostrando tutti gli indirizzi IP visitati da ciascun utente.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Mega corporations</h3>
+
+        <p>Quando un utente si connette a un web server, il server può vedere l'indirizzo IP dell'utente.
+            Nonostante non sia una scienza esatta, è possibile convertire l'IP in indirizzi fisici con <a href="https://www.whatismyip.com/">discreta accuratezza</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Le mega corporations proprietarie di social media e agenzie pubblicitarie utilizzano però un intero profilo di informazioni con lo scopo di tracciare gli utenti sui dispositivi e sgli indirizzi IP.
+            Questi profili utilizzano molte tecniche diverse per l'identificazione degli utenti, tra cui JavaScript, cookie, ID traccianti,
+            e <a href="https://panopticlick.eff.org/">impronta digitale dei browser</a>.
+            Siccome la maggior parte dei siti web carica gli annunci da una delle principali agenzie o inserisce le icone dei social media e i relativi javascript,
+            costruiscono profili per quasi tutti gli utenti e possono tracciare la loro attività su internet anche se relativa a altri siti.</p>
+
+        <p>Viene tracciato ogni sito visitato, ogni acquisto effettuato, ogni carta di credito utilizzata, ogni indirizzo di spedizione, i metadati GPS di ogni immagine che viene caricata su internet.
+            Viene costruito il profilo per età, sesso, stato civile, indirizzo, appartenenza politica, religione, situazione familiare, animali domestici, e tutto ciò su cui possono mettere le mani.
+            Le corporations acquistano anche i database delle transazioni con carta di credito effettuate nei negozi, per poter tracciare anche le abitudini di acquisto off-line degli utenti nei loro profili.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>La miglior protezione per la privacy contro le mega corporations è quella di navigare con JavaScript disabilitato, seguita dal bloccare gli annunci pubblicitari,
+            disabilitare i cookie e il DOM storage, e utilizzare un browser di cui è difficile avere l'impronta digitale.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_light.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Download di File con Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/it/guide_tor_dark.html b/app/src/main/assets/it/guide_tor_dark.html
deleted file mode 100644 (file)
index 70245c2..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-  Copyright © 2017-2019 Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2017 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/dark_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Tor e i suoi limiti</h3>
-
-        <p>Esistono due categorie generali di cattivi soggetti che vogliono violare la privacy del web:
-            governi maliziosi con accesso agli ISP (Internet Service Providers) e mega corporations che gestiscono social network e agenzie pubblicitarie.
-            TOR (The Onion Router) è utile per proteggere la privacy dai governi maliziosi (che spiano il traffico in transito) ma non dalle mega corporations (che mettono codice maligno sui web server).</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Governi Maliziosi</h3>
-
-        <p>I governi malizionsi spesso spiano i loro cittadini per punire il dissenso o le attività di difesa dei diritti umani.
-            Solitamente, o gestiscono loro stessi gli ISP locali oppure li obbligano a rivelare informazioni mostrando tutti gli indirizzi IP visitati da ciascun utente.
-            Tor è progettato per combattere questa modalità di violazione della privacy perchè cripta il traffico dei dispositivi e lo indirizza verso tre internet server
-            distinti prima di inviarlo alla destinazione finale.
-            Questo significa che nessun ISP, server, o sito web, può conoscere l'<a href="https://ipleak.net">indirizzo IP dei dispositivi</a> e nemmeno l'indirizzo IP del server di destinazione.
-            I governi malizionsi e gli ISP che essi controllano non possono sapere a quale web server gli utenti stiano accedendo, nonostante sappiano che gli utenti stanno utilizzando Tor.
-            In alcune parti del mondo l'utilizzo di Tor        potrebbe essere visto come prova di un comportamento illegale (se non si avesse nulla da nascondere non sarebbe necessario criptare     il proprio traffico)
-            e gli utenti potrebbero essere perseguiti perchè i governi presumerebbero l'esistenza di qualche azione illegale. Pertanto Tor può essere utile, ma non è la soluzione definitiva.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Mega corporations</h3>
-
-        <p>Quando un utente si connette a un web server, il server può vedere l'indirizzo IP dell'utente.
-            Nonostante non sia una scienza esatta, è possibile convertire l'IP in indirizzi fisici con <a href="https://www.whatismyip.com/">discreta accuratezza</a>.
-            I piccoli web server generalmente si affidano agli indirizzi IP per identificare la posizione degli utenti collegati al sito. Tor è una buona soluzione per nascondere la posizione a questi server.
-            Le mega corporations proprietarie di social media e agenzie pubblicitarie utilizzano però un intero profilo di informazioni con lo scopo di tracciare gli utenti sui dispositivi e sgli indirizzi IP.
-            Questi profili utilizzano molte tecniche diverse per l'identificazione degli utenti, tra cui JavaScript, cookie, ID traccianti,
-            e <a href="https://panopticlick.eff.org/">impronta digitale dei browser</a>.
-            Siccome la maggior parte dei siti web carica gli annunci da una delle principali agenzie o inserisce le icone dei social media e i relativi javascript,
-            costruiscono profili per quasi tutti gli utenti e possono tracciare la loro attività su internet anche se relativa a altri siti.</p>
-
-        <p>Viene tracciato ogni sito visitato, ogni acquisto effettuato, ogni carta di credito utilizzata, ogni indirizzo di spedizione, i metadati GPS di ogni immagine che viene caricata su internet.
-            Viene costruito il profilo per età, sesso, stato civile, indirizzo, appartenenza politica, religione, situazione familiare, animali domestici, e tutto ciò su cui possono mettere le mani.
-            Le corporations acquistano anche i database delle transazioni con carta di credito effettuate nei negozi, per poter tracciare anche le abitudini di acquisto off-line degli utenti nei loro profili.
-            Dal momento che sono già in possesso di informazioni molto più accurate sulla localizzazione di un utente rispetto a quanto ottenibile tramite indirizzo IP,
-            Tor non fornisce alcuna protezione sulla privacy contro le mega corporations.</p>
-
-        <p>La miglior protezione per la privacy contro le mega corporations è quella di navigare con JavaScript disabilitato, seguita dal bloccare gli annunci pubblicitari,
-            disabilitare i cookie e il DOM storage, e utilizzare un browser di cui è difficile avere l'impronta digitale.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_dark.png"> Utilizzo di Tor</h3>
-
-        <p>Nonostante le sue limitazioni, in alcune circostanze Tor può essere utile.
-            Il progetto Tor ha sviluppato una app per Android chiamata Orbot, disponibile su <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-            e ovunque sia distribuito Privacy Browser. Privacy Browser è dotato di una impostazione per utilizzare come proxy Orbot.
-            Quando lo si abilita, la barra principale di Privacy Browser diventa di colore azzurro chiaro al posto del grigio di default.
-            Quando il proxy con Orbot è abilitato nelle impostazioni di Privacy Browser, l'accesso a internet non sarà possibile a meno che Orbot non sia in funzione e connessa a Tor.
-            Dal momento che il traffico transita attraverso diversi nodi Tor la connessione è spesso più lenta di una connessione a internet diretta.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Download di File con Tor</h3>
-
-        <p>Quando Orbot è in funzione come proxy la navigazione su internet con Privacy Browser viene instradata attraverso la rete Tor, ma ciò non avviene per il download dei file.
-            Questo perché Privacy Browser utilizza per scaricare i file il download manager nativo di Android, e questo non ha l'opzione per utilizzare un proxy.
-            Chi volesse scaricare file attraverso Orbot deve abilitare quindi la sua modalità VPN.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
diff --git a/app/src/main/assets/it/guide_tor_light.html b/app/src/main/assets/it/guide_tor_light.html
deleted file mode 100644 (file)
index f097380..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-  Copyright © 2017-2019 Soren Stoutner <soren@stoutner.com>.
-
-  Translation 2017 Francesco Buratti.  Copyright assigned to Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/light_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Tor e i suoi limiti</h3>
-
-        <p>Esistono due categorie generali di cattivi soggetti che vogliono violare la privacy del web:
-            governi maliziosi con accesso agli ISP (Internet Service Providers) e mega corporations che gestiscono social network e agenzie pubblicitarie.
-            TOR (The Onion Router) è utile per proteggere la privacy dai governi maliziosi (che spiano il traffico in transito) ma non dalle mega corporations (che mettono codice maligno sui web server).</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Governi Maliziosi</h3>
-
-        <p>I governi malizionsi spesso spiano i loro cittadini per punire il dissenso o le attività di difesa dei diritti umani.
-            Solitamente, o gestiscono loro stessi gli ISP locali oppure li obbligano a rivelare informazioni mostrando tutti gli indirizzi IP visitati da ciascun utente.
-                       Tor è progettato per combattere questa modalità di violazione della privacy perchè cripta il traffico dei dispositivi e lo indirizza verso tre internet server
-            distinti prima di inviarlo alla destinazione finale.
-            Questo significa che nessun ISP, server, o sito web, può conoscere l'<a href="https://ipleak.net">indirizzo IP dei dispositivi</a> e nemmeno l'indirizzo IP del server di destinazione.
-            I governi malizionsi e gli ISP che essi controllano non possono sapere a quale web server gli utenti stiano accedendo, nonostante sappiano che gli utenti stanno utilizzando Tor.
-            In alcune parti del mondo l'utilizzo di Tor        potrebbe essere visto come prova di un comportamento illegale (se non si avesse nulla da nascondere non sarebbe necessario criptare     il proprio traffico)
-            e gli utenti potrebbero essere perseguiti perchè i governi presumerebbero l'esistenza di qualche azione illegale. Pertanto Tor può essere utile, ma non è la soluzione definitiva.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Mega corporations</h3>
-
-        <p>Quando un utente si connette a un web server, il server può vedere l'indirizzo IP dell'utente.
-            Nonostante non sia una scienza esatta, è possibile convertire l'IP in indirizzi fisici con <a href="https://www.whatismyip.com/">discreta accuratezza</a>.
-            I piccoli web server generalmente si affidano agli indirizzi IP per identificare la posizione degli utenti collegati al sito. Tor è una buona soluzione per nascondere la posizione a questi server.
-            Le mega corporations proprietarie di social media e agenzie pubblicitarie utilizzano però un intero profilo di informazioni con lo scopo di tracciare gli utenti sui dispositivi e sgli indirizzi IP.
-            Questi profili utilizzano molte tecniche diverse per l'identificazione degli utenti, tra cui JavaScript, cookie, ID traccianti,
-            e <a href="https://panopticlick.eff.org/">impronta digitale dei browser</a>.
-            Siccome la maggior parte dei siti web carica gli annunci da una delle principali agenzie o inserisce le icone dei social media e i relativi javascript,
-            costruiscono profili per quasi tutti gli utenti e possono tracciare la loro attività su internet anche se relativa a altri siti.</p>
-
-        <p>Viene tracciato ogni sito visitato, ogni acquisto effettuato, ogni carta di credito utilizzata, ogni indirizzo di spedizione, i metadati GPS di ogni immagine che viene caricata su internet.
-            Viene costruito il profilo per età, sesso, stato civile, indirizzo, appartenenza politica, religione, situazione familiare, animali domestici, e tutto ciò su cui possono mettere le mani.
-            Le corporations acquistano anche i database delle transazioni con carta di credito effettuate nei negozi, per poter tracciare anche le abitudini di acquisto off-line degli utenti nei loro profili.
-            Dal momento che sono già in possesso di informazioni molto più accurate sulla localizzazione di un utente rispetto a quanto ottenibile tramite indirizzo IP,
-            Tor non fornisce alcuna protezione sulla privacy contro le mega corporations.</p>
-
-        <p>La miglior protezione per la privacy contro le mega corporations è quella di navigare con JavaScript disabilitato, seguita dal bloccare gli annunci pubblicitari,
-            disabilitare i cookie e il DOM storage, e utilizzare un browser di cui è difficile avere l'impronta digitale.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_light.png"> Utilizzo di Tor</h3>
-
-        <p>Nonostante le sue limitazioni, in alcune circostanze Tor può essere utile.
-            Il progetto Tor ha sviluppato una app per Android chiamata Orbot, disponibile su <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-            e ovunque sia distribuito Privacy Browser. Privacy Browser è dotato di una impostazione per utilizzare come proxy Orbot.
-            Quando lo si abilita, la barra principale di Privacy Browser diventa di colore azzurro chiaro al posto del grigio di default.
-            Quando il proxy con Orbot è abilitato nelle impostazioni di Privacy Browser, l'accesso a internet non sarà possibile a meno che Orbot non sia in funzione e connessa a Tor.
-            Dal momento che il traffico transita attraverso diversi nodi Tor la connessione è spesso più lenta di una connessione a internet diretta.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Download di File con Tor</h3>
-
-        <p>Quando Orbot è in funzione come proxy la navigazione su internet con Privacy Browser viene instradata attraverso la rete Tor, ma ciò non avviene per il download dei file.
-            Questo perché Privacy Browser utilizza per scaricare i file il download manager nativo di Android, e questo non ha l'opzione per utilizzare un proxy.
-            Chi volesse scaricare file attraverso Orbot deve abilitare quindi la sua modalità VPN.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
index 659f86628af0a5e3dff044b5d71e659c1af902e4..a97ac74789bbbfd60f7f6a4cccd0c6bb6139bb9c 100644 (file)
             которые являются частью <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>.
             Модификации авторских прав © 2019 <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/orbot_dark.png"> <code>orbot</code> - это модифицированная версия
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">значок статуса из проекта Orbot</a>,
-            который защищен авторским правом 2009-2010 Nathan Freitas, The Guardian Project.
-            Он выпущен под <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD license</a>. Полный текст лицензии приведен ниже.
-            Модификации авторских прав © 2017 <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/cookie_dark.png"> <code>cookie</code> были созданы Google. Они выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>
             и могут быть загружены из <a href="https://materialdesignicons.com/icon/cookie">Material Design Icons</a>. Он неизменен, за исключением такой информации, как цвет и размер.</p>
         <p>Следующие значки взяты из<a href="https://material.io/icons/">Android Material icon set</a>,
         <p><img class="icon" src="../shared_images/map_dark.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_dark.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_dark.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_dark.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_dark.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_dark.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_dark.png"> refresh.</p>
@@ -1064,40 +1059,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following disclaimer
-            in the documentation and/or other materials provided with the
-            distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-            contributors may be used to endorse or promote products derived from
-            this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
index d6f953325c9a65d54f7e3c5f8398ac4bc5f0c673..96f048ca1e584ea21fd61cc8fd0716b1251d0270 100644 (file)
             которые являются частью <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>.
             Модификации авторских прав © 2019 <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/orbot_light.png"> <code>orbot</code> - это модифицированная версия
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">значок статуса из проекта Orbot</a>,
-            который защищен авторским правом 2009-2010 Nathan Freitas, The Guardian Project.
-            Он выпущен под <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD license</a>. Полный текст лицензии приведен ниже.
-            Модификации авторских прав © 2017 <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/cookie_light.png"> <code>cookie</code> были созданы Google. Они выпущены под <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>
             и могут быть загружены из <a href="https://materialdesignicons.com/icon/cookie">Material Design Icons</a>. Он неизменен, за исключением такой информации, как цвет и размер.</p>
         <p>Следующие значки взяты из<a href="https://material.io/icons/">Android Material icon set</a>,
         <p><img class="icon" src="../shared_images/map_light.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_light.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_light.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_light.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_light.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_light.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_light.png"> refresh.</p>
@@ -1064,40 +1059,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following disclaimer
-            in the documentation and/or other materials provided with the
-            distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-            contributors may be used to endorse or promote products derived from
-            this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
diff --git a/app/src/main/assets/ru/guide_proxies_dark.html b/app/src/main/assets/ru/guide_proxies_dark.html
new file mode 100644 (file)
index 0000000..94067ab
--- /dev/null
@@ -0,0 +1,86 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/dark_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Proxies and Their Limits</h3>
+
+        <p>Существуют две основные отрицательные категории субъектов, которые нарушают конфиденциальность в интернете: злонамеренные правительства, имеющие доступ к интернет-провайдерам и крупные корпорации,
+            которые управляют социальными и рекламными сетями.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Злонамеренные правительства</h3>
+
+        <p>Злонамеренные правительства часто следят за своими гражданами, чтобы наказать за инакомыслие или правозащитную деятельность.
+            Как правило, они либо работают с локальными интернет-провайдерами, либо могут заставить их раскрыть информацию, содержащую статистику посещений сайтов нужного пользователя.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Крупные корпорации</h3>
+
+        <p>Когда пользователь подключается к веб-серверу, сервер может видеть IP-адрес пользователя.
+            Несмотря на то, что пока это работает не идеально, IP-адреса могут быть превращены в физические адреса с <a href="https://www.whatismyip.com/">достаточным количеством точности</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Но крупные корпорации, которые владеют социальными и рекламными сетями, используют весь профиль информации, который предназначен для отслеживания пользователей через устройства и IP-адреса.
+            В этих профилях используются различные методы идентификации пользователей, включая JavaScript, файлы cookie,
+            идентификаторы отслеживания и <a href="https://panopticlick.eff.org/">отпечаток браузера</a>.
+            Поскольку подавляющее большинство веб-сайтов в интернете загружают рекламу от одной из основных сетей или встраивают значки социальных сетей с ассоциированным с ними JavaScript,
+            эти корпорации имеют встроенные профили почти для каждого пользователя в интернете и могут отслеживать интернет-активность на несвязанных сайтах.</p>
+
+        <p>Они отслеживают каждый посещаемый сайт, все, что приобретается, каждую кредитную карту, используемую для совершения покупки, каждый адрес, куда отправляются товары,
+            метаданные GPS каждого изображения, загружаемого в интернет.
+            Они создают профиль из возраста пользователя, пола, семейного положения, адреса, политических пристрастий, религиозной принадлежности, семейных обстоятельств,
+            количества домашних животных и всего остального, что им удается получить.
+            Они даже скупают базы данных транзакций по кредитным картам в местных магазинах, поэтому они могут отслеживать автономные модели покупок пользователей в своих профилях.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>Единственной и самой лучшей защитой конфиденциальности от крупных корпораций является просмотр веб-сайта с отключенным JavaScript, за которым следует блокирование рекламных сетей,
+            отключение файлов cookie и хранилища DOM, а также использование браузера, отпечаток которого трудно определить.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_dark.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Загрузка файлов через сеть Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/ru/guide_proxies_light.html b/app/src/main/assets/ru/guide_proxies_light.html
new file mode 100644 (file)
index 0000000..0e3946f
--- /dev/null
@@ -0,0 +1,86 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/light_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Proxies and Their Limits</h3>
+
+        <p>Существуют две основные отрицательные категории субъектов, которые нарушают конфиденциальность в интернете: злонамеренные правительства, имеющие доступ к интернет-провайдерам и крупные корпорации,
+            которые управляют социальными и рекламными сетями.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Злонамеренные правительства</h3>
+
+        <p>Злонамеренные правительства часто следят за своими гражданами, чтобы наказать за инакомыслие или правозащитную деятельность.
+            Как правило, они либо работают с локальными интернет-провайдерами, либо могут заставить их раскрыть информацию, содержащую статистику посещений сайтов нужного пользователя.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Крупные корпорации</h3>
+
+        <p>Когда пользователь подключается к веб-серверу, сервер может видеть IP-адрес пользователя.
+            Несмотря на то, что пока это работает не идеально, IP-адреса могут быть превращены в физические адреса с <a href="https://www.whatismyip.com/">достаточным количеством точности</a>.
+            Small web servers typically rely on IP addresses to identify the location of the users visiting their site. Proxies are a good solution to mask the user’s location from these servers.
+            Но крупные корпорации, которые владеют социальными и рекламными сетями, используют весь профиль информации, который предназначен для отслеживания пользователей через устройства и IP-адреса.
+            В этих профилях используются различные методы идентификации пользователей, включая JavaScript, файлы cookie,
+            идентификаторы отслеживания и <a href="https://panopticlick.eff.org/">отпечаток браузера</a>.
+            Поскольку подавляющее большинство веб-сайтов в интернете загружают рекламу от одной из основных сетей или встраивают значки социальных сетей с ассоциированным с ними JavaScript,
+            эти корпорации имеют встроенные профили почти для каждого пользователя в интернете и могут отслеживать интернет-активность на несвязанных сайтах.</p>
+
+        <p>Они отслеживают каждый посещаемый сайт, все, что приобретается, каждую кредитную карту, используемую для совершения покупки, каждый адрес, куда отправляются товары,
+            метаданные GPS каждого изображения, загружаемого в интернет.
+            Они создают профиль из возраста пользователя, пола, семейного положения, адреса, политических пристрастий, религиозной принадлежности, семейных обстоятельств,
+            количества домашних животных и всего остального, что им удается получить.
+            Они даже скупают базы данных транзакций по кредитным картам в местных магазинах, поэтому они могут отслеживать автономные модели покупок пользователей в своих профилях.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>Единственной и самой лучшей защитой конфиденциальности от крупных корпораций является просмотр веб-сайта с отключенным JavaScript, за которым следует блокирование рекламных сетей,
+            отключение файлов cookie и хранилища DOM, а также использование браузера, отпечаток которого трудно определить.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_light.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Загрузка файлов через сеть Tor</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/ru/guide_tor_dark.html b/app/src/main/assets/ru/guide_tor_dark.html
deleted file mode 100644 (file)
index 4c1f13c..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/dark_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Tor и его ограничения</h3>
-
-        <p>Существуют две основные отрицательные категории субъектов, которые нарушают конфиденциальность в интернете: злонамеренные правительства, имеющие доступ к интернет-провайдерам и крупные корпорации,
-            которые управляют социальными и рекламными сетями.
-            TOR (The Onion Router) полезен для защиты конфиденциальности от злонамеренных правительств (которые отслеживают трафик и его маршруты),
-            но не от крупных корпораций (которые внедряют вредоносный код на веб-серверах).</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Злонамеренные правительства</h3>
-
-        <p>Злонамеренные правительства часто следят за своими гражданами, чтобы наказать за инакомыслие или правозащитную деятельность.
-            Как правило, они либо работают с локальными интернет-провайдерами, либо могут заставить их раскрыть информацию, содержащую статистику посещений сайтов нужного пользователя.
-            Tor предназначен для того, чтобы победить это нарушение конфиденциальности,
-            зашифровав трафик с устройства пользователя и обеспечить его маршрутизацию через три разных сервера в интернете перед отправкой его в конечный пункт назначения.
-            Это означает, что ни один провайдер, сервер или сайт не может знать ни <a href="https://ipleak.net">IP-адрес устройства пользователя</a>, ни IP-адрес конечного веб-сервера.
-            Злонамеренные правительства и контролируемые ими интернет-провайдеры не могут определить, к каким веб-серверам обращается пользователь, несмотря на то, что они могут видеть, что он использует Tor.
-            В некоторых странах использование Tor может быть истолковано как свидетельство незаконного поведения ("если вам нечего скрывать, вы не будете шифровать свой трафик"),
-            и пользователи могут быть наказаны, потому что правительства предполагают, что они делают то, что запрещено. Таким образом, Tor может быть полезен, но он не является панацеей.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Крупные корпорации</h3>
-
-        <p>Когда пользователь подключается к веб-серверу, сервер может видеть IP-адрес пользователя.
-            Несмотря на то, что пока это работает не идеально, IP-адреса могут быть превращены в физические адреса с <a href="https://www.whatismyip.com/">достаточным количеством точности</a>.
-            Маленькие веб-серверы обычно используют IP-адреса для определения местоположения пользователей, посещающих их сайт. Tor - хорошее решение для маскировки местоположения пользователя от этих серверов.
-            Но крупные корпорации, которые владеют социальными и рекламными сетями, используют весь профиль информации, который предназначен для отслеживания пользователей через устройства и IP-адреса.
-            В этих профилях используются различные методы идентификации пользователей, включая JavaScript, файлы cookie,
-            идентификаторы отслеживания и <a href="https://panopticlick.eff.org/">отпечаток браузера</a>.
-            Поскольку подавляющее большинство веб-сайтов в интернете загружают рекламу от одной из основных сетей или встраивают значки социальных сетей с ассоциированным с ними JavaScript,
-            эти корпорации имеют встроенные профили почти для каждого пользователя в интернете и могут отслеживать интернет-активность на несвязанных сайтах.</p>
-
-        <p>Они отслеживают каждый посещаемый сайт, все, что приобретается, каждую кредитную карту, используемую для совершения покупки, каждый адрес, куда отправляются товары,
-            метаданные GPS каждого изображения, загружаемого в интернет.
-            Они создают профиль из возраста пользователя, пола, семейного положения, адреса, политических пристрастий, религиозной принадлежности, семейных обстоятельств,
-            количества домашних животных и всего остального, что им удается получить.
-            Они даже скупают базы данных транзакций по кредитным картам в местных магазинах, поэтому они могут отслеживать автономные модели покупок пользователей в своих профилях.
-            Поскольку у них уже имеется гораздо более точная адресная информация о пользователе, чем раскрытый IP-адрес, Tor не обеспечивает реальной защиты конфиденциальности от крупных корпораций.</p>
-
-        <p>Единственной и самой лучшей защитой конфиденциальности от крупных корпораций является просмотр веб-сайта с отключенным JavaScript, за которым следует блокирование рекламных сетей,
-            отключение файлов cookie и хранилища DOM, а также использование браузера, отпечаток которого трудно определить.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_dark.png"> Использование Tor</h3>
-
-        <p>Несмотря на свои ограничения, Tor может быть полезен в некоторых обстоятельствах.
-            У проекта Tor есть приложение для Android под названием Orbot, которое доступно в <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a> и везде,
-            где распространяется Privacy Browser. У Privacy Browser есть параметр для использования Orbot в качестве прокси.
-            Если этот параметр включен, панель приложений Privacy Browser будет иметь светло-синий фон вместо стандартного светло-серого.
-            Когда включен параметр прокси-сервера Orbot Privacy Browser, доступ к интернету работать не будет, если Orbot не запущен и не подключен к Tor.
-            Поскольку трафик маршрутизируется через несколько узлов, доступ к интернету через Tor будет происходить намного медленнее, чем при прямом подключении.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Загрузка файлов через сеть Tor</h3>
-
-        <p>При работе Orbot в режиме проксирования, весь трафик Privacy Browser будет маршрутизироваться через сеть Tor за исключением загружаемых файлов.
-            Это связано с тем, что Privacy Browser использует встроенный менеджер загрузок Android который не имеет возможности проксирования.
-            Пользователи, которые хотят загружать файлы через Orbot, должны включить режим VPN.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
diff --git a/app/src/main/assets/ru/guide_tor_light.html b/app/src/main/assets/ru/guide_tor_light.html
deleted file mode 100644 (file)
index f7b8c6a..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--
-  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/light_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Tor и его ограничения</h3>
-
-        <p>Существуют две основные отрицательные категории субъектов, которые нарушают конфиденциальность в интернете: злонамеренные правительства, имеющие доступ к интернет-провайдерам и крупные корпорации,
-            которые управляют социальными и рекламными сетями.
-            TOR (The Onion Router) полезен для защиты конфиденциальности от злонамеренных правительств (которые отслеживают трафик и его маршруты),
-            но не от крупных корпораций (которые внедряют вредоносный код на веб-серверах).</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Злонамеренные правительства</h3>
-
-        <p>Злонамеренные правительства часто следят за своими гражданами, чтобы наказать за инакомыслие или правозащитную деятельность.
-            Как правило, они либо работают с локальными интернет-провайдерами, либо могут заставить их раскрыть информацию, содержащую статистику посещений сайтов нужного пользователя.
-            Tor предназначен для того, чтобы победить это нарушение конфиденциальности,
-            зашифровав трафик с устройства пользователя и обеспечить его маршрутизацию через три разных сервера в интернете перед отправкой его в конечный пункт назначения.
-            Это означает, что ни один провайдер, сервер или сайт не может знать ни <a href="https://ipleak.net">IP-адрес устройства пользователя</a>, ни IP-адрес конечного веб-сервера.
-            Злонамеренные правительства и контролируемые ими интернет-провайдеры не могут определить, к каким веб-серверам обращается пользователь, несмотря на то, что они могут видеть, что он использует Tor.
-            В некоторых странах использование Tor может быть истолковано как свидетельство незаконного поведения ("если вам нечего скрывать, вы не будете шифровать свой трафик"),
-            и пользователи могут быть наказаны, потому что правительства предполагают, что они делают то, что запрещено. Таким образом, Tor может быть полезен, но он не является панацеей.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Крупные корпорации</h3>
-
-        <p>Когда пользователь подключается к веб-серверу, сервер может видеть IP-адрес пользователя.
-            Несмотря на то, что пока это работает не идеально, IP-адреса могут быть превращены в физические адреса с <a href="https://www.whatismyip.com/">достаточным количеством точности</a>.
-            Маленькие веб-серверы обычно используют IP-адреса для определения местоположения пользователей, посещающих их сайт. Tor - хорошее решение для маскировки местоположения пользователя от этих серверов.
-            Но крупные корпорации, которые владеют социальными и рекламными сетями, используют весь профиль информации, который предназначен для отслеживания пользователей через устройства и IP-адреса.
-            В этих профилях используются различные методы идентификации пользователей, включая JavaScript, файлы cookie,
-            идентификаторы отслеживания и <a href="https://panopticlick.eff.org/">отпечаток браузера</a>.
-            Поскольку подавляющее большинство веб-сайтов в интернете загружают рекламу от одной из основных сетей или встраивают значки социальных сетей с ассоциированным с ними JavaScript,
-            эти корпорации имеют встроенные профили почти для каждого пользователя в интернете и могут отслеживать интернет-активность на несвязанных сайтах.</p>
-
-        <p>Они отслеживают каждый посещаемый сайт, все, что приобретается, каждую кредитную карту, используемую для совершения покупки, каждый адрес, куда отправляются товары,
-            метаданные GPS каждого изображения, загружаемого в интернет.
-            Они создают профиль из возраста пользователя, пола, семейного положения, адреса, политических пристрастий, религиозной принадлежности, семейных обстоятельств,
-            количества домашних животных и всего остального, что им удается получить.
-            Они даже скупают базы данных транзакций по кредитным картам в местных магазинах, поэтому они могут отслеживать автономные модели покупок пользователей в своих профилях.
-            Поскольку у них уже имеется гораздо более точная адресная информация о пользователе, чем раскрытый IP-адрес, Tor не обеспечивает реальной защиты конфиденциальности от крупных корпораций.</p>
-
-        <p>Единственной и самой лучшей защитой конфиденциальности от крупных корпораций является просмотр веб-сайта с отключенным JavaScript, за которым следует блокирование рекламных сетей,
-            отключение файлов cookie и хранилища DOM, а также использование браузера, отпечаток которого трудно определить.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_light.png"> Использование Tor</h3>
-
-        <p>Несмотря на свои ограничения, Tor может быть полезен в некоторых обстоятельствах.
-            У проекта Tor есть приложение для Android под названием Orbot, которое доступно в <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a> и везде,
-            где распространяется Privacy Browser. У Privacy Browser есть параметр для использования Orbot в качестве прокси.
-            Если этот параметр включен, панель приложений Privacy Browser будет иметь светло-синий фон вместо стандартного светло-серого.
-            Когда включен параметр прокси-сервера Orbot Privacy Browser, доступ к интернету работать не будет, если Orbot не запущен и не подключен к Tor.
-            Поскольку трафик маршрутизируется через несколько узлов, доступ к интернету через Tor будет происходить намного медленнее, чем при прямом подключении.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Загрузка файлов через сеть Tor</h3>
-
-        <p>При работе Orbot в режиме проксирования, весь трафик Privacy Browser будет маршрутизироваться через сеть Tor за исключением загружаемых файлов.
-            Это связано с тем, что Privacy Browser использует встроенный менеджер загрузок Android который не имеет возможности проксирования.
-            Пользователи, которые хотят загружать файлы через Orbot, должны включить режим VPN.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
diff --git a/app/src/main/assets/shared_images/open_in_browser_blue_dark.png b/app/src/main/assets/shared_images/open_in_browser_blue_dark.png
new file mode 100644 (file)
index 0000000..46ea5ef
Binary files /dev/null and b/app/src/main/assets/shared_images/open_in_browser_blue_dark.png differ
diff --git a/app/src/main/assets/shared_images/open_in_browser_blue_light.png b/app/src/main/assets/shared_images/open_in_browser_blue_light.png
new file mode 100644 (file)
index 0000000..aaf3edf
Binary files /dev/null and b/app/src/main/assets/shared_images/open_in_browser_blue_light.png differ
diff --git a/app/src/main/assets/shared_images/open_in_browser_dark.png b/app/src/main/assets/shared_images/open_in_browser_dark.png
new file mode 100644 (file)
index 0000000..a52d292
Binary files /dev/null and b/app/src/main/assets/shared_images/open_in_browser_dark.png differ
diff --git a/app/src/main/assets/shared_images/open_in_browser_light.png b/app/src/main/assets/shared_images/open_in_browser_light.png
new file mode 100644 (file)
index 0000000..1aa3a49
Binary files /dev/null and b/app/src/main/assets/shared_images/open_in_browser_light.png differ
diff --git a/app/src/main/assets/shared_images/orbot_blue_dark.png b/app/src/main/assets/shared_images/orbot_blue_dark.png
deleted file mode 100644 (file)
index 91d2fe8..0000000
Binary files a/app/src/main/assets/shared_images/orbot_blue_dark.png and /dev/null differ
diff --git a/app/src/main/assets/shared_images/orbot_blue_light.png b/app/src/main/assets/shared_images/orbot_blue_light.png
deleted file mode 100644 (file)
index 70bc318..0000000
Binary files a/app/src/main/assets/shared_images/orbot_blue_light.png and /dev/null differ
diff --git a/app/src/main/assets/shared_images/orbot_dark.png b/app/src/main/assets/shared_images/orbot_dark.png
deleted file mode 100644 (file)
index 819a95d..0000000
Binary files a/app/src/main/assets/shared_images/orbot_dark.png and /dev/null differ
diff --git a/app/src/main/assets/shared_images/orbot_light.png b/app/src/main/assets/shared_images/orbot_light.png
deleted file mode 100644 (file)
index a85c25b..0000000
Binary files a/app/src/main/assets/shared_images/orbot_light.png and /dev/null differ
index e53a8b817781c0a190386955472d5037906a5fbf..94834d72d69bbc958020478f2956a853eba2f1fe 100644 (file)
             <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>sort</code>'dan elde edilmiştir.
             Değişikliklerin telif hakkı © 2019 <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/orbot_dark.png"> <code>orbot</code>, telif hakkı 2009-2010 Nathan Freitas, The Guardian Project ait olan,
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">Orbot projesi durum simgesi</a>nin modifiye edilmiş bir sürümüdür ve
-            <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD</a> lisansı altında yayınlanmıştır.
-            Lisansın tüm metni aşağıdadır. Değişikliklerin telif hakkı © 2017 <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/cookie_dark.png"> <code>cookie</code> Google tarafından oluşturuldu.
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlandı ve <a href="https://materialdesignicons.com/icon/cookie">Material Design</a>
             simgelerinden indirilebilir. Renk ve ebat gibi düzen bilgileri dışında herhangi bir değişiklik yapılmamıştır.</p>
         <p><img class="icon" src="../shared_images/map_dark.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_dark.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_dark.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_dark.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_dark.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_dark.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_dark.png"> refresh.</p>
@@ -1065,40 +1061,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following disclaimer
-            in the documentation and/or other materials provided with the
-            distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-            contributors may be used to endorse or promote products derived from
-            this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
index 4a97a3844c1bd43ff9c2468d4a1093f9107eae63..90f2364b151087ab908d13cd53f4fc991dca6bd6 100644 (file)
             <a href="https://material.io/icons/">Android Material</a> simge setinin bir parçası olan <code>sort</code>'dan elde edilmiştir.
             Değişikliklerin telif hakkı © 2019 <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/orbot_light.png"> <code>orbot</code>, telif hakkı 2009-2010 Nathan Freitas, The Guardian Project ait olan,
-            <a href="https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png">Orbot projesi durum simgesi</a>nin modifiye edilmiş bir sürümüdür ve
-            <a href="https://gitweb.torproject.org/orbot.git/tree/LICENSE">3-clause BSD</a> lisansı altında yayınlanmıştır.
-            Lisansın tüm metni aşağıdadır. Değişikliklerin telif hakkı © 2017 <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/cookie_light.png"> <code>cookie</code> Google tarafından oluşturuldu.
             <a href ="https://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a> altında yayınlandı ve <a href="https://materialdesignicons.com/icon/cookie">Material Design</a>
             simgelerinden indirilebilir. Renk ve ebat gibi düzen bilgileri dışında herhangi bir değişiklik yapılmamıştır.</p>
         <p><img class="icon" src="../shared_images/map_light.png"> map.</p>
         <p><img class="icon" src="../shared_images/more_light.png"> more.</p>
         <p><img class="icon" src="../shared_images/new_releases_light.png"> new releases.</p>
+        <p><img class="icon" src="../shared_images/open_in_browser_light.png"> open_in_browser.</p>
         <p><img class="icon" src="../shared_images/payment_light.png"> payment.</p>
         <p><img class="icon" src="../shared_images/question_answer_light.png"> question_answer.</p>
         <p><img class="icon" src="../shared_images/refresh_light.png"> refresh.</p>
@@ -1065,40 +1061,4 @@ WITHOUT WARRANTIES OR CONDITIONS
 OF ANY KIND, either express or implied.
 See the License for the specific
 language governing permissions and
-limitations under the License.</pre>
-
-        <hr/>
-
-        <h3>3-Clause BSD License</h3>
-
-        <p>Redistribution and use in source and binary forms, with or without
-            modification, are permitted provided that the following conditions are
-            met:</p>
-
-        <ul>
-            <li>Redistributions of source code must retain the above copyright
-            notice, this list of conditions and the following disclaimer.</li>
-
-            <li>Redistributions in binary form must reproduce the above
-            copyright notice, this list of conditions and the following disclaimer
-            in the documentation and/or other materials provided with the
-            distribution.</li>
-
-            <li>Neither the names of the copyright owners nor the names of its
-            contributors may be used to endorse or promote products derived from
-            this software without specific prior written permission.</li>
-        </ul>
-
-        <p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-            “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-            LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-            A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-            OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-            SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-            LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-            DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-            THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-            (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-            OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
-    </body>
-</html>
\ No newline at end of file
+limitations under the License.</pre>
\ No newline at end of file
diff --git a/app/src/main/assets/tr/guide_proxies_dark.html b/app/src/main/assets/tr/guide_proxies_dark.html
new file mode 100644 (file)
index 0000000..049ed00
--- /dev/null
@@ -0,0 +1,85 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/dark_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Proxies and Their Limits</h3>
+
+        <p>İnternet gizliliğini ihlal etmek isteyen iki genel kötü oyuncu kategorisi vardır:
+            İSS’lere (İnternet Servis Sağlayıcıları) erişimi olan kötü niyetli hükümetler ve sosyal ve reklam ağlarını yöneten mega şirketler.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Kötü Niyetli Hükümetler</h3>
+
+        <p>Kötü niyetli hükümetler, sık sık muhalifleri ve aktivistleri cezalandırmak için kendi vatandaşlarını gözetler.
+            Bunu genellikle yerel İSS’leri kullanarak ve onları, tüm kullanıcıların internet ziyaretlerinde kullandıkları IP adresleri gösteren bilgileri ifşa etmeye zorlayarak yaparlar.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Mega Şirketler</h3>
+
+        <p>Bir kullanıcı bir web sunucusuna bağlandığında, web sunucusu kullanıcının IP adresini görebilir.
+            Mükemmel bir teknik olmasa da, IP adresleri <a href="https://www.whatismyip.com/">makul bir doğrulukla</a> fiziksel adreslere dönüştürülebilir.
+            Küçük web sunucuları, kendilerini ziyaret eden kullanıcılarının konumlarını belirlemek için IP adreslerine genel anlamda güvenirler.
+            Proxies are a good solution to mask the user’s location from these servers.
+            Ancak, sosyal medya ve reklam ağlarına sahip büyük mega kuruluşlar, cihazlar ve IP adresler üzerinden kullanıcıları izlemek için tüm bilgileri kullanır.
+            Bu profiller, JavaScript, çerezler, izleme kimlikleri ve <a href="https://panopticlick.eff.org/">browser fingerprinting (tarayıcı tanılama)</a>
+            dahil olmak üzere kullanıcıları tanımlamak için çeşitli teknikleri kullanır.
+            İnternetteki web sitelerinin büyük çoğunluğu ya ana ağlardan birinden bir reklam yüklediğinden ya da JavaScript ile ilişkilendirilen sosyal medya simgelerini yerleştirdiklerinden dolayı,
+            mega şirketler, hemen hemen her çevrimiçi kullanıcı için profil oluşturup internet aktivitelerini ilgisi olmayan sitelerden bile takip edebilirler.</p>
+
+        <p>Ziyaret edilen her siteyi, satın alınan her şeyi, satın almak için kullanılan her kredi kartını, eşyaların kargolandığı her adresi ve internete yüklenen her fotoğrafın GPS metaverilerini izlerler.
+            Bu sayede, bir kullanıcının yaşı, cinsiyeti, medeni hali, adresi, politik görüşü, dini görüşü, aile çevresi, evcil hayvan sayısı ve elde edebildikleri her şey hakkında bir profil oluştururlar.
+            Hatta yerel mağazalardan kredi kart işlem veri tabanlarını satın alırlar, böylece oluşturdukları profillerdeki kullanıcıların çevrimdışı satın alma modellerini de takip edebilirler.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>Mega şirketlere karşı en iyi gizlilik koruması, reklamları engellemek, JavaScript’i, DOM depolamayı ve çerezleri devre dışı bırakıp web gezintisi yapmak
+            ve fingerprint yapılması zor olan bir tarayıcı kullanmak olacaktır.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_dark.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Tor ile Dosya İndirme</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/tr/guide_proxies_light.html b/app/src/main/assets/tr/guide_proxies_light.html
new file mode 100644 (file)
index 0000000..e491528
--- /dev/null
@@ -0,0 +1,85 @@
+<!--
+  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+
+        <link rel="stylesheet" href="../css/light_theme.css">
+    </head>
+
+    <body>
+        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Proxies and Their Limits</h3>
+
+        <p>İnternet gizliliğini ihlal etmek isteyen iki genel kötü oyuncu kategorisi vardır:
+            İSS’lere (İnternet Servis Sağlayıcıları) erişimi olan kötü niyetli hükümetler ve sosyal ve reklam ağlarını yöneten mega şirketler.
+            Proxies like TOR (The Onion Router) and I2P (the Invisible Internet Project) are useful in protecting privacy from malicious governments (which spy on traffic in transit)
+            but not from mega corporations (which embed malicious code on web servers).</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Kötü Niyetli Hükümetler</h3>
+
+        <p>Kötü niyetli hükümetler, sık sık muhalifleri ve aktivistleri cezalandırmak için kendi vatandaşlarını gözetler.
+            Bunu genellikle yerel İSS’leri kullanarak ve onları, tüm kullanıcıların internet ziyaretlerinde kullandıkları IP adresleri gösteren bilgileri ifşa etmeye zorlayarak yaparlar.
+            Layered proxies are designed to defeat this infringement of privacy by encrypting the traffic from a user’s device and routing it through multiple servers on the internet
+            before sending it on to the final destination.
+            This means that no individual ISP, server, or website, can know both the <a href="https://ipleak.net">IP address of the user’s device</a> and the IP address of the final web server.
+            Malicious governments and the ISPs they control cannot tell which web servers a user is accessing, although they can tell that the user is using a layered proxy service.
+            In some parts of the world, using proxies could be construed as an evidence of illegal behavior (“If you didn’t have anything to hide you wouldn’t be encrypting your traffic”)
+            and users could be punished because governments assume they are doing something that is prohibited. Thus, proxies can be helpful, but they aren’t a panacea.</p>
+
+
+        <h3><img class="title" src="../shared_images/language_blue_light.png"> Mega Şirketler</h3>
+
+        <p>Bir kullanıcı bir web sunucusuna bağlandığında, web sunucusu kullanıcının IP adresini görebilir.
+            Mükemmel bir teknik olmasa da, IP adresleri <a href="https://www.whatismyip.com/">makul bir doğrulukla</a> fiziksel adreslere dönüştürülebilir.
+            Küçük web sunucuları, kendilerini ziyaret eden kullanıcılarının konumlarını belirlemek için IP adreslerine genel anlamda güvenirler.
+            Proxies are a good solution to mask the user’s location from these servers.
+            Ancak, sosyal medya ve reklam ağlarına sahip büyük mega kuruluşlar, cihazlar ve IP adresler üzerinden kullanıcıları izlemek için tüm bilgileri kullanır.
+            Bu profiller, JavaScript, çerezler, izleme kimlikleri ve <a href="https://panopticlick.eff.org/">browser fingerprinting (tarayıcı tanılama)</a>
+            dahil olmak üzere kullanıcıları tanımlamak için çeşitli teknikleri kullanır.
+            İnternetteki web sitelerinin büyük çoğunluğu ya ana ağlardan birinden bir reklam yüklediğinden ya da JavaScript ile ilişkilendirilen sosyal medya simgelerini yerleştirdiklerinden dolayı,
+            mega şirketler, hemen hemen her çevrimiçi kullanıcı için profil oluşturup internet aktivitelerini ilgisi olmayan sitelerden bile takip edebilirler.</p>
+
+        <p>Ziyaret edilen her siteyi, satın alınan her şeyi, satın almak için kullanılan her kredi kartını, eşyaların kargolandığı her adresi ve internete yüklenen her fotoğrafın GPS metaverilerini izlerler.
+            Bu sayede, bir kullanıcının yaşı, cinsiyeti, medeni hali, adresi, politik görüşü, dini görüşü, aile çevresi, evcil hayvan sayısı ve elde edebildikleri her şey hakkında bir profil oluştururlar.
+            Hatta yerel mağazalardan kredi kart işlem veri tabanlarını satın alırlar, böylece oluşturdukları profillerdeki kullanıcıların çevrimdışı satın alma modellerini de takip edebilirler.
+            Because they already have much more accurate address information about a user than an IP address discloses, proxies provides no real privacy protection against mega corporations.</p>
+
+        <p>Mega şirketlere karşı en iyi gizlilik koruması, reklamları engellemek, JavaScript’i, DOM depolamayı ve çerezleri devre dışı bırakıp web gezintisi yapmak
+            ve fingerprint yapılması zor olan bir tarayıcı kullanmak olacaktır.</p>
+
+
+        <h3><img class="title" src="../shared_images/open_in_browser_blue_light.png"> Using Proxies</h3>
+
+        <p>Despite their limitations, proxies can be useful in some circumstances.
+            <a href="https://play.google.com/store/apps/details?id=org.torproject.android">Tor</a> and <a href="https://f-droid.org/en/packages/net.i2p.android.router/">I2p</a>
+            have Android apps that make it easy to use their proxy networks. When proxying is turned on in Privacy Browser, the app bar will have a light blue background instead of the default light grey.
+            Because traffic is being routed through several proxy nodes, using a layered proxy is often much slower than connecting directly to the internet.</p>
+
+        <img class="center" src="images/tor.png">
+
+        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Tor ile Dosya İndirme</h3>
+
+        <p>When Orbot is operating in proxy mode, browsing the internet using Privacy Browser will be routed through the proxy, but file downloads will not.
+            This is because Privacy Browser uses Android’s builtin download manager to download files, which doesn’t have a proxy option.
+            Users who want to download files via Orbot need to enable its VPN mode.  There is currently no way to download files through I2P.</p>
+
+        <img class="center" src="../shared_images/vpn_mode.png">
+    </body>
+</html>
\ No newline at end of file
diff --git a/app/src/main/assets/tr/guide_tor_dark.html b/app/src/main/assets/tr/guide_tor_dark.html
deleted file mode 100644 (file)
index c66c18a..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
-  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/dark_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_dark.png"> Tor ve Limitleri</h3>
-
-        <p>İnternet gizliliğini ihlal etmek isteyen iki genel kötü oyuncu kategorisi vardır:
-            İSS’lere (İnternet Servis Sağlayıcıları) erişimi olan kötü niyetli hükümetler ve sosyal ve reklam ağlarını yöneten mega şirketler.
-            TOR (Soğan Yönlendirme Protokolü), kötü niyetli hükümetlerden (internet trafiğini gözetleyen)
-            gizliliği korumakta kullanışlıdır fakat mega şirketlerden (web sunucularına kötü amaçlı kod yerleştiren) korumaz.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Kötü Niyetli Hükümetler</h3>
-
-        <p>Kötü niyetli hükümetler, sık sık muhalifleri ve aktivistleri cezalandırmak için kendi vatandaşlarını gözetler.
-            Bunu genellikle yerel İSS’leri kullanarak ve onları, tüm kullanıcıların internet ziyaretlerinde kullandıkları IP adresleri gösteren bilgileri ifşa etmeye zorlayarak yaparlar.
-            Tor, bir kullanıcının cihazından çıkan trafiği şifreleyerek ve son hedefe göndermeden önce internette üç ayrı sunucuya yönlendirerek bu gizlilik ihlalinin üstesinden gelmesi için tasarlanmıştır.
-            Bu da, hiçbir İSS, sunucu veya web sitesinin, aynı anda hem <a href="https://ipleak.net">kullanıcı cihazının IP adresini</a> hem de son web sunucusunun IP adresini bilemeyeceği anlamına gelir.
-            Kötücül hükümetler ve kontrolündeki İSS’ler, kullanıcının Tor kullandığını bilmelerine rağmen hangi web sunucularına eriştiğini söyleyemez.
-            Bazı ülkelerde, Tor kullanmak yasadışı davranışların bir kanıtı olarak yorumlanabilir (“saklayacak bir şeyin olmasaydı, internet trafiğini şifrelemezdin.” mantığı) ve bu sebeple,
-            yasadışı eylemlerde bulunduklarını düşündükleri kullanıcılar hükümetlerce cezalandırılabilir. Bu yüzden Tor gizlilik konusunda yardımcı olabilir, fakat her derde deva değildir.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_dark.png"> Mega Şirketler</h3>
-
-        <p>Bir kullanıcı bir web sunucusuna bağlandığında, web sunucusu kullanıcının IP adresini görebilir.
-            Mükemmel bir teknik olmasa da, IP adresleri <a href="https://www.whatismyip.com/">makul bir doğrulukla</a> fiziksel adreslere dönüştürülebilir.
-            Küçük web sunucuları, kendilerini ziyaret eden kullanıcılarının konumlarını belirlemek için IP adreslerine genel anlamda güvenirler.
-            Tor, kullanıcının konumunu bu sunuculardan gizlemek için iyi bir çözümdür.
-            Ancak, sosyal medya ve reklam ağlarına sahip büyük mega kuruluşlar, cihazlar ve IP adresler üzerinden kullanıcıları izlemek için tüm bilgileri kullanır.
-            Bu profiller, JavaScript, çerezler, izleme kimlikleri ve <a href="https://panopticlick.eff.org/">browser fingerprinting (tarayıcı tanılama)</a>
-            dahil olmak üzere kullanıcıları tanımlamak için çeşitli teknikleri kullanır.
-            İnternetteki web sitelerinin büyük çoğunluğu ya ana ağlardan birinden bir reklam yüklediğinden ya da JavaScript ile ilişkilendirilen sosyal medya simgelerini yerleştirdiklerinden dolayı,
-            mega şirketler, hemen hemen her çevrimiçi kullanıcı için profil oluşturup internet aktivitelerini ilgisi olmayan sitelerden bile takip edebilirler.</p>
-
-        <p>Ziyaret edilen her siteyi, satın alınan her şeyi, satın almak için kullanılan her kredi kartını, eşyaların kargolandığı her adresi ve internete yüklenen her fotoğrafın GPS metaverilerini izlerler.
-            Bu sayede, bir kullanıcının yaşı, cinsiyeti, medeni hali, adresi, politik görüşü, dini görüşü, aile çevresi, evcil hayvan sayısı ve elde edebildikleri her şey hakkında bir profil oluştururlar.
-            Hatta yerel mağazalardan kredi kart işlem veri tabanlarını satın alırlar, böylece oluşturdukları profillerdeki kullanıcıların çevrimdışı satın alma modellerini de takip edebilirler.
-            Tor, mega şirketlere karşı, bir kullanıcı hakkında bir IP adresinin gösterebileceğinden daha fazla bilgiye sahip olduklarından dolayı gerçek bir gizlilik koruması sağlamaz.</p>
-
-        <p>Mega şirketlere karşı en iyi gizlilik koruması, reklamları engellemek, JavaScript’i, DOM depolamayı ve çerezleri devre dışı bırakıp web gezintisi yapmak
-            ve fingerprint yapılması zor olan bir tarayıcı kullanmak olacaktır.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_dark.png"> Tor Kullanma</h3>
-
-        <p>Kısıtlamalarına rağmen, Tor bazı koşullarda faydalı olabilir.
-            Tor projesinin, <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-            üzerinde ve Privacy Browser’ın dağıtımı yapılan her yerde erişilebilecek Orbot adlı Android uygulaması vardır. Privacy Browser, Orbot’u proxy olarak kullanmak için bir ayara sahiptir.
-            Bu ayar açıldığında, Privacy Browser’ın uygulama çubuğunun varsayılan rengi açık griden açık mavi bir arkaplana dönecektir.
-            Privacy Browser’in Orbot proxy ayarı etkin olduğunda, internet erişiminin çalışması için Orbot’un çalışması ve Tor’a bağlı olması gereklidir.
-            İnternet trafiği birçok Tor devresi (node) üzerinden yönlendirildiği için, Tor kullanımı normal internet trafiğinden daha yavaş olacaktır.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_dark.png"> Tor ile Dosya İndirme</h3>
-
-        <p>Orbot, proxy modunda çalışırken, Privacy Browser kullanarak internette gezinmek Tor ağı üzerinden yönlendirilir, fakat dosya indirmeleri yönlendirilmez.
-            Bunun nedeni, Privacy Browser’ın dosyaları indirmek için bir proxy ayarı olmayan Android’in yerleşik indirme yöneticisi kullanmasıdır.
-            Orbot aracılığıyla dosya indirmek isteyen kullanıcıların VPN modunu etkinleştirmesi gerekir.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
diff --git a/app/src/main/assets/tr/guide_tor_light.html b/app/src/main/assets/tr/guide_tor_light.html
deleted file mode 100644 (file)
index 4abd6d6..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
-  Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<html>
-    <head>
-        <meta charset="UTF-8">
-
-        <link rel="stylesheet" href="../css/light_theme.css">
-    </head>
-
-    <body>
-        <h3><img class="title" src="../shared_images/vpn_key_blue_light.png"> Tor ve Limitleri</h3>
-
-        <p>İnternet gizliliğini ihlal etmek isteyen iki genel kötü oyuncu kategorisi vardır:
-            İSS’lere (İnternet Servis Sağlayıcıları) erişimi olan kötü niyetli hükümetler ve sosyal ve reklam ağlarını yöneten mega şirketler.
-            TOR (Soğan Yönlendirme Protokolü), kötü niyetli hükümetlerden (internet trafiğini gözetleyen)
-            gizliliği korumakta kullanışlıdır fakat mega şirketlerden (web sunucularına kötü amaçlı kod yerleştiren) korumaz.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Kötü Niyetli Hükümetler</h3>
-
-        <p>Kötü niyetli hükümetler, sık sık muhalifleri ve aktivistleri cezalandırmak için kendi vatandaşlarını gözetler.
-            Bunu genellikle yerel İSS’leri kullanarak ve onları, tüm kullanıcıların internet ziyaretlerinde kullandıkları IP adresleri gösteren bilgileri ifşa etmeye zorlayarak yaparlar.
-            Tor, bir kullanıcının cihazından çıkan trafiği şifreleyerek ve son hedefe göndermeden önce internette üç ayrı sunucuya yönlendirerek bu gizlilik ihlalinin üstesinden gelmesi için tasarlanmıştır.
-            Bu da, hiçbir İSS, sunucu veya web sitesinin, aynı anda hem <a href="https://ipleak.net">kullanıcı cihazının IP adresini</a> hem de son web sunucusunun IP adresini bilemeyeceği anlamına gelir.
-            Kötücül hükümetler ve kontrolündeki İSS’ler, kullanıcının Tor kullandığını bilmelerine rağmen hangi web sunucularına eriştiğini söyleyemez.
-            Bazı ülkelerde, Tor kullanmak yasadışı davranışların bir kanıtı olarak yorumlanabilir (“saklayacak bir şeyin olmasaydı, internet trafiğini şifrelemezdin.” mantığı) ve bu sebeple,
-            yasadışı eylemlerde bulunduklarını düşündükleri kullanıcılar hükümetlerce cezalandırılabilir. Bu yüzden Tor gizlilik konusunda yardımcı olabilir, fakat her derde deva değildir.</p>
-
-
-        <h3><img class="title" src="../shared_images/language_blue_light.png"> Mega Şirketler</h3>
-
-        <p>Bir kullanıcı bir web sunucusuna bağlandığında, web sunucusu kullanıcının IP adresini görebilir.
-            Mükemmel bir teknik olmasa da, IP adresleri <a href="https://www.whatismyip.com/">makul bir doğrulukla</a> fiziksel adreslere dönüştürülebilir.
-            Küçük web sunucuları, kendilerini ziyaret eden kullanıcılarının konumlarını belirlemek için IP adreslerine genel anlamda güvenirler.
-            Tor, kullanıcının konumunu bu sunuculardan gizlemek için iyi bir çözümdür.
-            Ancak, sosyal medya ve reklam ağlarına sahip büyük mega kuruluşlar, cihazlar ve IP adresler üzerinden kullanıcıları izlemek için tüm bilgileri kullanır.
-            Bu profiller, JavaScript, çerezler, izleme kimlikleri ve <a href="https://panopticlick.eff.org/">browser fingerprinting (tarayıcı tanılama)</a>
-            dahil olmak üzere kullanıcıları tanımlamak için çeşitli teknikleri kullanır.
-            İnternetteki web sitelerinin büyük çoğunluğu ya ana ağlardan birinden bir reklam yüklediğinden ya da JavaScript ile ilişkilendirilen sosyal medya simgelerini yerleştirdiklerinden dolayı,
-            mega şirketler, hemen hemen her çevrimiçi kullanıcı için profil oluşturup internet aktivitelerini ilgisi olmayan sitelerden bile takip edebilirler.</p>
-
-        <p>Ziyaret edilen her siteyi, satın alınan her şeyi, satın almak için kullanılan her kredi kartını, eşyaların kargolandığı her adresi ve internete yüklenen her fotoğrafın GPS metaverilerini izlerler.
-            Bu sayede, bir kullanıcının yaşı, cinsiyeti, medeni hali, adresi, politik görüşü, dini görüşü, aile çevresi, evcil hayvan sayısı ve elde edebildikleri her şey hakkında bir profil oluştururlar.
-            Hatta yerel mağazalardan kredi kart işlem veri tabanlarını satın alırlar, böylece oluşturdukları profillerdeki kullanıcıların çevrimdışı satın alma modellerini de takip edebilirler. 
-            Tor, mega şirketlere karşı, bir kullanıcı hakkında bir IP adresinin gösterebileceğinden daha fazla bilgiye sahip olduklarından dolayı gerçek bir gizlilik koruması sağlamaz.</p>
-
-        <p>Mega şirketlere karşı en iyi gizlilik koruması, reklamları engellemek, JavaScript’i, DOM depolamayı ve çerezleri devre dışı bırakıp web gezintisi yapmak
-            ve fingerprint yapılması zor olan bir tarayıcı kullanmak olacaktır.</p>
-
-
-        <h3><img class="title" src="../shared_images/orbot_blue_light.png"> Tor Kullanma</h3>
-
-        <p>Kısıtlamalarına rağmen, Tor bazı koşullarda faydalı olabilir.
-            Tor projesinin, <a href="https://f-droid.org/repository/browse/?fdfilter=orbot&fdid=org.torproject.android">F-Droid</a>
-            üzerinde ve Privacy Browser’ın dağıtımı yapılan her yerde erişilebilecek Orbot adlı Android uygulaması vardır. Privacy Browser, Orbot’u proxy olarak kullanmak için bir ayara sahiptir.
-            Bu ayar açıldığında, Privacy Browser’ın uygulama çubuğunun varsayılan rengi açık griden açık mavi bir arkaplana dönecektir.
-            Privacy Browser’in Orbot proxy ayarı etkin olduğunda, internet erişiminin çalışması için Orbot’un çalışması ve Tor’a bağlı olması gereklidir.
-            İnternet trafiği birçok Tor devresi (node) üzerinden yönlendirildiği için, Tor kullanımı normal internet trafiğinden daha yavaş olacaktır.</p>
-
-        <img class="center" src="images/tor.png">
-
-        <h3><img class="title" src="../shared_images/file_download_blue_light.png"> Tor ile Dosya İndirme</h3>
-
-        <p>Orbot, proxy modunda çalışırken, Privacy Browser kullanarak internette gezinmek Tor ağı üzerinden yönlendirilir, fakat dosya indirmeleri yönlendirilmez.
-            Bunun nedeni, Privacy Browser’ın dosyaları indirmek için bir proxy ayarı olmayan Android’in yerleşik indirme yöneticisi kullanmasıdır.
-            Orbot aracılığıyla dosya indirmek isteyen kullanıcıların VPN modunu etkinleştirmesi gerekir.</p>
-
-        <img class="center" src="../shared_images/vpn_mode.png">
-    </body>
-</html>
\ No newline at end of file
index bd459471876c591dd4f634cae61ed350377848cd..00872252abe550c99e89876503bfcbab0a633133 100644 (file)
@@ -26,15 +26,12 @@ import android.view.WindowManager;
 
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.Toolbar;  // The AndroidX toolbar must be used until the minimum API is >= 21.
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.appcompat.widget.Toolbar;
 import androidx.viewpager.widget.ViewPager;
 
 import com.google.android.material.tabs.TabLayout;
 
-import com.stoutner.privacybrowser.fragments.GuideTabFragment;
+import com.stoutner.privacybrowser.adapters.GuidePagerAdapter;
 import com.stoutner.privacybrowser.R;
 
 public class GuideActivity extends AppCompatActivity {
@@ -81,69 +78,11 @@ public class GuideActivity extends AppCompatActivity {
         //  Setup the ViewPager.
         ViewPager aboutViewPager = findViewById(R.id.guide_viewpager);
         assert aboutViewPager != null; // This assert removes the incorrect warning in Android Studio on the following line that aboutViewPager might be null.
-        aboutViewPager.setAdapter(new guidePagerAdapter(getSupportFragmentManager()));
+        aboutViewPager.setAdapter(new GuidePagerAdapter(getSupportFragmentManager(), getApplicationContext()));
 
         // Setup the TabLayout and connect it to the ViewPager.
         TabLayout aboutTabLayout = findViewById(R.id.guide_tablayout);
         assert aboutTabLayout != null; // This assert removes the incorrect warning in Android Studio on the following line that aboutTabLayout might be null.
         aboutTabLayout.setupWithViewPager(aboutViewPager);
     }
-
-    private class guidePagerAdapter extends FragmentPagerAdapter {
-        private guidePagerAdapter(FragmentManager fragmentManager) {
-            // Run the default commands.
-            super(fragmentManager);
-        }
-
-        @Override
-        // Get the count of the number of tabs.
-        public int getCount() {
-            return 10;
-        }
-
-        @Override
-        // Get the name of each tab.  Tab numbers start at 0.
-        public CharSequence getPageTitle(int tab) {
-            switch (tab) {
-                case 0:
-                    return getString(R.string.overview);
-
-                case 1:
-                    return getString(R.string.javascript);
-
-                case 2:
-                    return getString(R.string.local_storage);
-
-                case 3:
-                    return getString(R.string.user_agent);
-
-                case 4:
-                    return getString(R.string.requests);
-
-                case 5:
-                    return getString(R.string.domain_settings);
-
-                case 6:
-                    return getString(R.string.ssl_certificates);
-
-                case 7:
-                    return getString(R.string.tor);
-
-                case 8:
-                    return getString(R.string.tracking_ids);
-
-                case 9:
-                    return getString(R.string.bookmarks);
-
-                default:
-                    return "";
-            }
-        }
-
-        @Override
-        // Setup each tab.
-        public Fragment getItem(int tab) {
-            return GuideTabFragment.createTab(tab);
-        }
-    }
 }
index 252609212a83251a57f041d7bd437fff1680d09b..32d50e94c2d21d38548104f80287505c0ee5b0dd 100644 (file)
@@ -131,12 +131,14 @@ import com.stoutner.privacybrowser.dialogs.EditBookmarkDialog;
 import com.stoutner.privacybrowser.dialogs.EditBookmarkFolderDialog;
 import com.stoutner.privacybrowser.dialogs.FontSizeDialog;
 import com.stoutner.privacybrowser.dialogs.HttpAuthenticationDialog;
+import com.stoutner.privacybrowser.dialogs.ProxyNotInstalledDialog;
 import com.stoutner.privacybrowser.dialogs.PinnedMismatchDialog;
 import com.stoutner.privacybrowser.dialogs.SaveWebpageImageDialog;
 import com.stoutner.privacybrowser.dialogs.SslCertificateErrorDialog;
 import com.stoutner.privacybrowser.dialogs.StoragePermissionDialog;
 import com.stoutner.privacybrowser.dialogs.UrlHistoryDialog;
 import com.stoutner.privacybrowser.dialogs.ViewSslCertificateDialog;
+import com.stoutner.privacybrowser.dialogs.WaitingForProxyDialog;
 import com.stoutner.privacybrowser.fragments.WebViewTabFragment;
 import com.stoutner.privacybrowser.helpers.AdHelper;
 import com.stoutner.privacybrowser.helpers.BlocklistHelper;
@@ -144,7 +146,7 @@ import com.stoutner.privacybrowser.helpers.BookmarksDatabaseHelper;
 import com.stoutner.privacybrowser.helpers.CheckPinnedMismatchHelper;
 import com.stoutner.privacybrowser.helpers.DomainsDatabaseHelper;
 import com.stoutner.privacybrowser.helpers.FileNameHelper;
-import com.stoutner.privacybrowser.helpers.OrbotProxyHelper;
+import com.stoutner.privacybrowser.helpers.ProxyHelper;
 import com.stoutner.privacybrowser.views.NestedScrollWebView;
 
 import java.io.ByteArrayInputStream;
@@ -172,7 +174,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         StoragePermissionDialog.StoragePermissionDialogListener, UrlHistoryDialog.NavigateHistoryListener, WebViewTabFragment.NewTabListener {
 
     // `orbotStatus` is public static so it can be accessed from `OrbotProxyHelper`.  It is also used in `onCreate()`, `onResume()`, and `applyProxyThroughOrbot()`.
-    public static String orbotStatus;
+    public static String orbotStatus = "unknown";
 
     // The WebView pager adapter is accessed from `HttpAuthenticationDialog`, `PinnedMismatchDialog`, and `SslCertificateErrorDialog`.  It is also used in `onCreate()`, `onResume()`, and `addTab()`.
     public static WebViewPagerAdapter webViewPagerAdapter;
@@ -202,13 +204,13 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
 
     // The current WebView is used in `onCreate()`, `onPrepareOptionsMenu()`, `onOptionsItemSelected()`, `onNavigationItemSelected()`, `onRestart()`, `onCreateContextMenu()`, `findPreviousOnPage()`,
-    // `findNextOnPage()`, `closeFindOnPage()`, `loadUrlFromTextBox()`, `onSslMismatchBack()`, `applyProxyThroughOrbot()`, and `applyDomainSettings()`.
+    // `findNextOnPage()`, `closeFindOnPage()`, `loadUrlFromTextBox()`, `onSslMismatchBack()`, `applyProxy()`, and `applyDomainSettings()`.
     private NestedScrollWebView currentWebView;
 
     // `customHeader` is used in `onCreate()`, `onOptionsItemSelected()`, `onCreateContextMenu()`, and `loadUrl()`.
     private final Map<String, String> customHeaders = new HashMap<>();
 
-    // The search URL is set in `applyProxyThroughOrbot()` and used in `onCreate()`, `onNewIntent()`, `loadURLFromTextBox()`, and `initializeWebView()`.
+    // The search URL is set in `applyAppSettings()` and used in `onNewIntent()`, `loadUrlFromTextBox()`, `initializeApp()`, and `initializeWebView()`.
     private String searchURL;
 
     // The options menu is set in `onCreateOptionsMenu()` and used in `onOptionsItemSelected()`, `updatePrivacyIcons()`, and `initializeWebView()`.
@@ -225,8 +227,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
     // `webViewDefaultUserAgent` is used in `onCreate()` and `onPrepareOptionsMenu()`.
     private String webViewDefaultUserAgent;
 
-    // `proxyThroughOrbot` is used in `onRestart()`, `onOptionsItemSelected()`, `applyAppSettings()`, and `applyProxyThroughOrbot()`.
-    private boolean proxyThroughOrbot;
+    // The proxy mode is used in `onRestart()`, `onPrepareOptionsMenu()`, `onOptionsItemSelected()`, `applyAppSettings()`, and `applyProxy()`.
+    // It will be updated in `applyAppSettings()`, but it needs to be initialized here or the first run of `onPrepareOptionsMenu()` crashes.
+    private String proxyMode = ProxyHelper.NONE;
 
     // The incognito mode is set in `applyAppSettings()` and used in `initializeWebView()`.
     private boolean incognitoModeEnabled;
@@ -256,8 +259,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
     // `orbotStatusBroadcastReceiver` is used in `onCreate()` and `onDestroy()`.
     private BroadcastReceiver orbotStatusBroadcastReceiver;
 
-    // `waitingForOrbot` is used in `onCreate()`, `onResume()`, and `applyProxyThroughOrbot()`.
-    private boolean waitingForOrbot;
+    // The waiting for proxy boolean is used in `onResume()`, `initializeApp()` and `applyProxy()`.
+    private boolean waitingForProxy = false;
 
     // The action bar drawer toggle is initialized in `onCreate()` and used in `onResume()`.
     private ActionBarDrawerToggle actionBarDrawerToggle;
@@ -443,7 +446,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     addNewTab(url, true);
                 } else {  // Load the URL in the current tab.
                     // Make it so.
-                    loadUrl(url);
+                    loadUrl(currentWebView, url);
                 }
 
                 // Get a handle for the drawer layout.
@@ -467,18 +470,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Run the default commands.
         super.onRestart();
 
-        // Make sure Orbot is running if Privacy Browser is proxying through Orbot.
-        if (proxyThroughOrbot) {
-            // Request Orbot to start.  If Orbot is already running no hard will be caused by this request.
-            Intent orbotIntent = new Intent("org.torproject.android.intent.action.START");
-
-            // Send the intent to the Orbot package.
-            orbotIntent.setPackage("org.torproject.android");
-
-            // Make it so.
-            sendBroadcast(orbotIntent);
-        }
-
         // Apply the app settings if returning from the Settings activity.
         if (reapplyAppSettingsOnRestart) {
             // Reset the reapply app settings on restart tracker.
@@ -520,7 +511,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Load the URL on restart (used when loading a bookmark).
         if (loadUrlOnRestart) {
             // Load the specified URL.
-            loadUrl(urlToLoadOnRestart);
+            loadUrl(currentWebView, urlToLoadOnRestart);
 
             // Reset the load on restart tracker.
             loadUrlOnRestart = false;
@@ -551,6 +542,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Run the default commands.
         super.onResume();
 
+        // Resume any WebViews.
         for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
             // Get the WebView tab fragment.
             WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
@@ -571,16 +563,13 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             }
         }
 
-        // Display a message to the user if waiting for Orbot.
-        if (waitingForOrbot && !orbotStatus.equals("ON")) {
-            // Disable the wide view port so that the waiting for Orbot text is displayed correctly.
-            currentWebView.getSettings().setUseWideViewPort(false);
-
-            // Load a waiting page.  `null` specifies no encoding, which defaults to ASCII.
-            currentWebView.loadData("<html><body><br/><center><h1>" + getString(R.string.waiting_for_orbot) + "</h1></center></body></html>", "text/html", null);
+        // Reapply the proxy settings if the system is using a proxy.  This redisplays the appropriate alert dialog.
+        if (!proxyMode.equals(ProxyHelper.NONE)) {
+            applyProxy(false);
         }
 
-        if (displayingFullScreenVideo || inFullScreenBrowsingMode) {
+        // Reapply any system UI flags and the ad in the free flavor.
+        if (displayingFullScreenVideo || inFullScreenBrowsingMode) {  // The system is displaying a website or a video in full screen mode.
             // Get a handle for the root frame layouts.
             FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
 
@@ -595,7 +584,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
              */
             rootFrameLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                     View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
-        } else if (BuildConfig.FLAVOR.contentEquals("free")) {  // Resume the adView for the free flavor.
+        } else if (BuildConfig.FLAVOR.contentEquals("free")) {  // The system in not in full screen mode.
             // Resume the ad.
             AdHelper.resumeAd(findViewById(R.id.adview));
         }
@@ -635,7 +624,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
     @Override
     public void onDestroy() {
-        // Unregister the Orbot status broadcast receiver.
+        // Unregister the orbot status broadcast receiver.
         this.unregisterReceiver(orbotStatusBroadcastReceiver);
 
         // Close the bookmarks cursor and database.
@@ -736,12 +725,13 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         MenuItem ultraListMenuItem = menu.findItem(R.id.ultralist);
         MenuItem ultraPrivacyMenuItem = menu.findItem(R.id.ultraprivacy);
         MenuItem blockAllThirdPartyRequestsMenuItem = menu.findItem(R.id.block_all_third_party_requests);
+        MenuItem proxyMenuItem = menu.findItem(R.id.proxy);
+        MenuItem userAgentMenuItem = menu.findItem(R.id.user_agent);
         MenuItem fontSizeMenuItem = menu.findItem(R.id.font_size);
         MenuItem swipeToRefreshMenuItem = menu.findItem(R.id.swipe_to_refresh);
         MenuItem wideViewportMenuItem = menu.findItem(R.id.wide_viewport);
         MenuItem displayImagesMenuItem = menu.findItem(R.id.display_images);
         MenuItem nightModeMenuItem = menu.findItem(R.id.night_mode);
-        MenuItem proxyThroughOrbotMenuItem = menu.findItem(R.id.proxy_through_orbot);
 
         // Get a handle for the cookie manager.
         CookieManager cookieManager = CookieManager.getInstance();
@@ -803,9 +793,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             domStorageMenuItem.setEnabled(currentWebView.getSettings().getJavaScriptEnabled());
         }
 
-        // Set the status of the menu item checkboxes.
+        // Set the checked status of the first party cookies menu item.
         firstPartyCookiesMenuItem.setChecked(cookieManager.acceptCookie());
-        proxyThroughOrbotMenuItem.setChecked(proxyThroughOrbot);
 
         // Enable Clear Cookies if there are any.
         clearCookiesMenuItem.setEnabled(cookieManager.hasCookies());
@@ -847,32 +836,119 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Disable Fanboy's Social Blocking List menu item if Fanboy's Annoyance List is checked.
         fanboysSocialBlockingListMenuItem.setEnabled(!fanboysAnnoyanceListMenuItem.isChecked());
 
+        // Set the proxy title and check the applied proxy.
+        switch (proxyMode) {
+            case ProxyHelper.NONE:
+                // Set the proxy title.
+                proxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_none));
+
+                // Check the proxy None radio button.
+                menu.findItem(R.id.proxy_none).setChecked(true);
+                break;
+
+            case ProxyHelper.TOR:
+                // Set the proxy title.
+                proxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_tor));
+
+                // Check the proxy Tor radio button.
+                menu.findItem(R.id.proxy_tor).setChecked(true);
+                break;
+
+            case ProxyHelper.I2P:
+                // Set the proxy title.
+                proxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_i2p));
+
+                // Check the proxy I2P radio button.
+                menu.findItem(R.id.proxy_i2p).setChecked(true);
+                break;
+
+            case ProxyHelper.CUSTOM:
+                // Set the proxy title.
+                proxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_custom));
+
+                // Check the proxy Custom radio button.
+                menu.findItem(R.id.proxy_custom).setChecked(true);
+                break;
+        }
+
         // Select the current user agent menu item.  A switch statement cannot be used because the user agents are not compile time constants.
         if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[0])) {  // Privacy Browser.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_privacy_browser));
+
+            // Select the Privacy Browser radio box.
             menu.findItem(R.id.user_agent_privacy_browser).setChecked(true);
         } else if (currentUserAgent.equals(webViewDefaultUserAgent)) {  // WebView Default.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_webview_default));
+
+            // Select the WebView Default radio box.
             menu.findItem(R.id.user_agent_webview_default).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[2])) {  // Firefox on Android.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_firefox_on_android));
+
+            // Select the Firefox on Android radio box.
             menu.findItem(R.id.user_agent_firefox_on_android).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[3])) {  // Chrome on Android.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_chrome_on_android));
+
+            // Select the Chrome on Android radio box.
             menu.findItem(R.id.user_agent_chrome_on_android).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[4])) {  // Safari on iOS.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_safari_on_ios));
+
+            // Select the Safari on iOS radio box.
             menu.findItem(R.id.user_agent_safari_on_ios).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[5])) {  // Firefox on Linux.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_firefox_on_linux));
+
+            // Select the Firefox on Linux radio box.
             menu.findItem(R.id.user_agent_firefox_on_linux).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[6])) {  // Chromium on Linux.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_chromium_on_linux));
+
+            // Select the Chromium on Linux radio box.
             menu.findItem(R.id.user_agent_chromium_on_linux).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[7])) {  // Firefox on Windows.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_firefox_on_windows));
+
+            // Select the Firefox on Windows radio box.
             menu.findItem(R.id.user_agent_firefox_on_windows).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[8])) {  // Chrome on Windows.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_chrome_on_windows));
+
+            // Select the Chrome on Windows radio box.
             menu.findItem(R.id.user_agent_chrome_on_windows).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[9])) {  // Edge on Windows.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_edge_on_windows));
+
+            // Select the Edge on Windows radio box.
             menu.findItem(R.id.user_agent_edge_on_windows).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[10])) {  // Internet Explorer on Windows.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_internet_explorer_on_windows));
+
+            // Select the Internet on Windows radio box.
             menu.findItem(R.id.user_agent_internet_explorer_on_windows).setChecked(true);
         } else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[11])) {  // Safari on macOS.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_safari_on_macos));
+
+            // Select the Safari on macOS radio box.
             menu.findItem(R.id.user_agent_safari_on_macos).setChecked(true);
         } else {  // Custom user agent.
+            // Update the user agent menu item title.
+            userAgentMenuItem.setTitle(getString(R.string.user_agent) + " - " + getString(R.string.user_agent_custom));
+
+            // Select the Custom radio box.
             menu.findItem(R.id.user_agent_custom).setChecked(true);
         }
 
@@ -1326,6 +1402,46 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // Consume the event.
                 return true;
 
+            case R.id.proxy_none:
+                // Update the proxy mode.
+                proxyMode = ProxyHelper.NONE;
+
+                // Apply the proxy mode.
+                applyProxy(true);
+
+                // Consume the event.
+                return true;
+
+            case R.id.proxy_tor:
+                // Update the proxy mode.
+                proxyMode = ProxyHelper.TOR;
+
+                // Apply the proxy mode.
+                applyProxy(true);
+
+                // Consume the event.
+                return true;
+
+            case R.id.proxy_i2p:
+                // Update the proxy mode.
+                proxyMode = ProxyHelper.I2P;
+
+                // Apply the proxy mode.
+                applyProxy(true);
+
+                // Consume the event.
+                return true;
+
+            case R.id.proxy_custom:
+                // Update the proxy mode.
+                proxyMode = ProxyHelper.CUSTOM;
+
+                // Apply the proxy mode.
+                applyProxy(true);
+
+                // Consume the event.
+                return true;
+
             case R.id.user_agent_privacy_browser:
                 // Update the user agent.
                 currentWebView.getSettings().setUserAgentString(getResources().getStringArray(R.array.user_agent_data)[0]);
@@ -1646,16 +1762,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // Consume the event.
                 return true;
 
-            case R.id.proxy_through_orbot:
-                // Toggle the proxy through Orbot variable.
-                proxyThroughOrbot = !proxyThroughOrbot;
-
-                // Apply the proxy through Orbot settings.
-                applyProxyThroughOrbot(true);
-
-                // Consume the event.
-                return true;
-
             case R.id.refresh:
                 if (menuItem.getTitle().equals(getString(R.string.refresh))) {  // The refresh button was pushed.
                     // Reload the current WebView.
@@ -1701,14 +1807,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 break;
 
             case R.id.home:
-                // Select the homepage based on the proxy through Orbot status.
-                if (proxyThroughOrbot) {
-                    // Load the Tor homepage.
-                    loadUrl(sharedPreferences.getString("tor_homepage", getString(R.string.tor_homepage_default_value)));
-                } else {
-                    // Load the normal homepage.
-                    loadUrl(sharedPreferences.getString("homepage", getString(R.string.homepage_default_value)));
-                }
+                // Load the homepage.
+                loadUrl(currentWebView, sharedPreferences.getString("homepage", getString(R.string.homepage_default_value)));
                 break;
 
             case R.id.back:
@@ -2087,7 +2187,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // Add a View Image entry.
                 menu.add(R.string.view_image).setOnMenuItemClickListener(item -> {
                     // Load the image in the current tab.
-                    loadUrl(imageUrl);
+                    loadUrl(currentWebView, imageUrl);
 
                     // Consume the event.
                     return true;
@@ -2212,7 +2312,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // Add a View Image entry.
                 menu.add(R.string.view_image).setOnMenuItemClickListener((MenuItem item) -> {
                    // View the image in the current tab.
-                   loadUrl(imageUrl);
+                   loadUrl(currentWebView, imageUrl);
 
                    // Consume the event.
                    return true;
@@ -2955,18 +3055,18 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         urlEditText.clearFocus();
 
         // Make it so.
-        loadUrl(url);
+        loadUrl(currentWebView, url);
     }
 
-    private void loadUrl(String url) {
+    private void loadUrl(NestedScrollWebView nestedScrollWebView, String url) {
         // Sanitize the URL.
         url = sanitizeUrl(url);
 
         // Apply the domain settings.
-        applyDomainSettings(currentWebView, url, true, false);
+        applyDomainSettings(nestedScrollWebView, url, true, false);
 
         // Load the URL.
-        currentWebView.loadUrl(url, customHeaders);
+        nestedScrollWebView.loadUrl(url, customHeaders);
     }
 
     public void findPreviousOnPage(View view) {
@@ -3103,11 +3203,21 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         sanitizeGoogleAnalytics = sharedPreferences.getBoolean("google_analytics", true);
         sanitizeFacebookClickIds = sharedPreferences.getBoolean("facebook_click_ids", true);
         sanitizeTwitterAmpRedirects = sharedPreferences.getBoolean("twitter_amp_redirects", true);
-        proxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false);
+        proxyMode = sharedPreferences.getString("proxy", getString(R.string.proxy_default_value));
         fullScreenBrowsingModeEnabled = sharedPreferences.getBoolean("full_screen_browsing_mode", false);
         hideAppBar = sharedPreferences.getBoolean("hide_app_bar", true);
         scrollAppBar = sharedPreferences.getBoolean("scroll_app_bar", true);
 
+        // Get the search string.
+        String searchString = sharedPreferences.getString("search", getString(R.string.search_default_value));
+
+        // Set the search string.
+        if (searchString.equals("Custom URL")) {  // A custom search string is used.
+            searchURL = sharedPreferences.getString("search_custom_url", getString(R.string.search_custom_url_default_value));
+        } else {  // A custom search string is not used.
+            searchURL = searchString;
+        }
+
         // Get handles for the views that need to be modified.
         FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
         AppBarLayout appBarLayout = findViewById(R.id.appbar_layout);
@@ -3120,8 +3230,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         // Remove the incorrect lint warning below that the action bar might be null.
         assert actionBar != null;
 
-        // Apply the proxy through Orbot settings.
-        applyProxyThroughOrbot(false);
+        // Apply the proxy.
+        applyProxy(false);
 
         // Set Do Not Track status.
         if (doNotTrackEnabled) {
@@ -3287,61 +3397,57 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             }
         });
 
-        // Initialize the Orbot status and the waiting for Orbot trackers.
-        orbotStatus = "unknown";
-        waitingForOrbot = false;
-
-        // Create an Orbot status `BroadcastReceiver`.
+        // Create an Orbot status broadcast receiver.
         orbotStatusBroadcastReceiver = new BroadcastReceiver() {
             @Override
             public void onReceive(Context context, Intent intent) {
                 // Store the content of the status message in `orbotStatus`.
                 orbotStatus = intent.getStringExtra("org.torproject.android.intent.extra.STATUS");
 
-                // If Privacy Browser is waiting on Orbot, load the website now that Orbot is connected.
-                if ((orbotStatus != null) && orbotStatus.equals("ON") && waitingForOrbot) {
-                    // Reset the waiting for Orbot status.
-                    waitingForOrbot = false;
+                // If Privacy Browser is waiting on the proxy, load the website now that Orbot is connected.
+                if ((orbotStatus != null) && orbotStatus.equals("ON") && waitingForProxy) {
+                    // Reset the waiting for proxy status.
+                    waitingForProxy = false;
 
-                    // Get the intent that started the app.
-                    Intent launchingIntent = getIntent();
+                    // Get a handle for the waiting for proxy dialog.
+                    DialogFragment waitingForProxyDialogFragment = (DialogFragment) getSupportFragmentManager().findFragmentByTag(getString(R.string.waiting_for_proxy_dialog));
 
-                    // Get the information from the intent.
-                    String launchingIntentAction = launchingIntent.getAction();
-                    Uri launchingIntentUriData = launchingIntent.getData();
+                    // Dismiss the waiting for proxy dialog if it is displayed.
+                    if (waitingForProxyDialogFragment != null) {
+                        waitingForProxyDialogFragment.dismiss();
+                    }
 
-                    // If the intent action is a web search, perform the search.
-                    if ((launchingIntentAction != null) && launchingIntentAction.equals(Intent.ACTION_WEB_SEARCH)) {
-                        // Create an encoded URL string.
-                        String encodedUrlString;
+                    // Load any URLs that are waiting for the proxy.
+                    for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
+                        // Get the WebView tab fragment.
+                        WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
 
-                        // Sanitize the search input and convert it to a search.
-                        try {
-                            encodedUrlString = URLEncoder.encode(launchingIntent.getStringExtra(SearchManager.QUERY), "UTF-8");
-                        } catch (UnsupportedEncodingException exception) {
-                            encodedUrlString = "";
-                        }
+                        // Get the fragment view.
+                        View fragmentView = webViewTabFragment.getView();
 
-                        // Load the completed search URL.
-                        loadUrl(searchURL + encodedUrlString);
-                    } else if (launchingIntentUriData != null){  // Check to see if the intent contains a new URL.
-                        // Load the URL from the intent.
-                        loadUrl(launchingIntentUriData.toString());
-                    } else {  // The is no URL in the intent.
-                        // Select the homepage based on the proxy through Orbot status.
-                        if (proxyThroughOrbot) {
-                            // Load the Tor homepage.
-                            loadUrl(sharedPreferences.getString("tor_homepage", getString(R.string.tor_homepage_default_value)));
-                        } else {
-                            // Load the normal homepage.
-                            loadUrl(sharedPreferences.getString("homepage", getString(R.string.homepage_default_value)));
+                        // Only process the WebViews if they exist.
+                        if (fragmentView != null) {
+                            // Get the nested scroll WebView from the tab fragment.
+                            NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
+
+                            // Get the waiting for proxy URL string.
+                            String waitingForProxyUrlString = nestedScrollWebView.getWaitingForProxyUrlString();
+
+                            // Load the pending URL if it exists.
+                            if (!waitingForProxyUrlString.isEmpty()) {
+                                // Load the URL.
+                                loadUrl(nestedScrollWebView, waitingForProxyUrlString);
+
+                                // Reset the waiting for proxy URL string.
+                                nestedScrollWebView.resetWaitingForProxyUrlString();
+                            }
                         }
                     }
                 }
             }
         };
 
-        // Register `orbotStatusBroadcastReceiver` on `this` context.
+        // Register the Orbot status broadcast receiver on `this` context.
         this.registerReceiver(orbotStatusBroadcastReceiver, new IntentFilter("org.torproject.android.intent.action.STATUS"));
 
         // Get handles for views that need to be modified.
@@ -3573,7 +3679,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 loadBookmarksFolder();
             } else {  // The selected bookmark is not a folder.
                 // Load the bookmark URL.
-                loadUrl(bookmarkCursor.getString(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_URL)));
+                loadUrl(currentWebView, bookmarkCursor.getString(bookmarkCursor.getColumnIndex(BookmarksDatabaseHelper.BOOKMARK_URL)));
 
                 // Close the bookmarks drawer.
                 drawerLayout.closeDrawer(GravityCompat.END);
@@ -4199,92 +4305,129 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         return !nestedScrollWebView.getSettings().getUserAgentString().equals(initialUserAgent);
     }
 
-    private void applyProxyThroughOrbot(boolean reloadWebsite) {
+    private void applyProxy(boolean reloadWebViews) {
         // Get a handle for the shared preferences.
         SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
 
-        // Get the search and theme preferences.
-        String torSearchString = sharedPreferences.getString("tor_search", getString(R.string.tor_search_default_value));
-        String torSearchCustomUrlString = sharedPreferences.getString("tor_search_custom_url", getString(R.string.tor_search_custom_url_default_value));
-        String searchString = sharedPreferences.getString("search", getString(R.string.search_default_value));
-        String searchCustomUrlString = sharedPreferences.getString("search_custom_url", getString(R.string.search_custom_url_default_value));
+        // Get the theme preferences.
         boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false);
 
         // Get a handle for the app bar layout.
         AppBarLayout appBarLayout = findViewById(R.id.appbar_layout);
 
-        // Set the homepage, search, and proxy options.
-        if (proxyThroughOrbot) {  // Set the Tor options.
-            // Set the search URL.
-            if (torSearchString.equals("Custom URL")) {  // Get the custom URL string.
-                searchURL = torSearchCustomUrlString;
-            } else {  // Use the string from the pre-built list.
-                searchURL = torSearchString;
-            }
+        // Set the proxy according to the mode.  `this` refers to the current activity where an alert dialog might be displayed.
+        ProxyHelper.setProxy(getApplicationContext(), proxyMode);
 
-            // Set the proxy.  `this` refers to the current activity where an `AlertDialog` might be displayed.
-            OrbotProxyHelper.setProxy(getApplicationContext(), this, "localhost", "8118");
+        // Reset the waiting for proxy tracker.
+        waitingForProxy = false;
 
-            // Set the app bar background to indicate proxying through Orbot is enabled.
-            if (darkTheme) {
-                appBarLayout.setBackgroundResource(R.color.dark_blue_30);
-            } else {
-                appBarLayout.setBackgroundResource(R.color.blue_50);
-            }
+        // Update the user interface and reload the WebViews is requested.
+        switch (proxyMode) {
+            case ProxyHelper.NONE:
+                // Set the default app bar layout background.
+                if (darkTheme) {
+                    appBarLayout.setBackgroundResource(R.color.gray_900);
+                } else {
+                    appBarLayout.setBackgroundResource(R.color.gray_100);
+                }
+                break;
 
-            // Check to see if Orbot is ready.
-            if (!orbotStatus.equals("ON")) {  // Orbot is not ready.
-                // Set `waitingForOrbot`.
-                waitingForOrbot = true;
+            case ProxyHelper.TOR:
+                // Set the app bar background to indicate proxying through Orbot is enabled.
+                if (darkTheme) {
+                    appBarLayout.setBackgroundResource(R.color.dark_blue_30);
+                } else {
+                    appBarLayout.setBackgroundResource(R.color.blue_50);
+                }
 
-                // Disable the wide view port so that the waiting for Orbot text is displayed correctly.
-                currentWebView.getSettings().setUseWideViewPort(false);
+                // Check to see if Orbot is installed.
+                try {
+                    // Get the package manager.
+                    PackageManager packageManager = getPackageManager();
 
-                // Load a waiting page.  `null` specifies no encoding, which defaults to ASCII.
-                currentWebView.loadData("<html><body><br/><center><h1>" + getString(R.string.waiting_for_orbot) + "</h1></center></body></html>", "text/html", null);
-            } else if (reloadWebsite) {  // Orbot is ready and the website should be reloaded.
-                // Reload the website.
-                currentWebView.reload();
-            }
-        } else {  // Set the non-Tor options.
-            // Set the search URL.
-            if (searchString.equals("Custom URL")) {  // Get the custom URL string.
-                searchURL = searchCustomUrlString;
-            } else {  // Use the string from the pre-built list.
-                searchURL = searchString;
-            }
+                    // Check to see if Orbot is in the list.  This will throw an error and drop to the catch section if it isn't installed.
+                    packageManager.getPackageInfo("org.torproject.android", 0);
 
-            // Reset the proxy to default.  The host is `""` and the port is `"0"`.
-            OrbotProxyHelper.setProxy(getApplicationContext(), this, "", "0");
+                    // Check to see if the proxy is ready.
+                    if (!orbotStatus.equals("ON")) {  // Orbot is not ready.
+                        // Set the waiting for proxy status.
+                        waitingForProxy = true;
 
-            // Set the default app bar layout background.
-            if (darkTheme) {
-                appBarLayout.setBackgroundResource(R.color.gray_900);
-            } else {
-                appBarLayout.setBackgroundResource(R.color.gray_100);
-            }
+                        // Show the waiting for proxy dialog if it isn't already displayed.
+                        if (getSupportFragmentManager().findFragmentByTag(getString(R.string.waiting_for_proxy_dialog)) == null) {
+                            // Get a handle for the waiting for proxy alert dialog.
+                            DialogFragment waitingForProxyDialogFragment = new WaitingForProxyDialog();
+
+                            // Display the waiting for proxy alert dialog.
+                            waitingForProxyDialogFragment.show(getSupportFragmentManager(), getString(R.string.waiting_for_proxy_dialog));
+                        }
+                    }
+                } catch (PackageManager.NameNotFoundException exception) {  // Orbot is not installed.
+                    // Show the Orbot not installed dialog if it is not already displayed.
+                    if (getSupportFragmentManager().findFragmentByTag(getString(R.string.proxy_not_installed_dialog)) == null) {
+                        // Get a handle for the Orbot not installed alert dialog.
+                        DialogFragment orbotNotInstalledDialogFragment = ProxyNotInstalledDialog.displayDialog(proxyMode);
+
+                        // Display the Orbot not installed alert dialog.
+                        orbotNotInstalledDialogFragment.show(getSupportFragmentManager(), getString(R.string.proxy_not_installed_dialog));
+                    }
+                }
+                break;
+
+            case ProxyHelper.I2P:
+                // Set the app bar background to indicate proxying through Orbot is enabled.
+                if (darkTheme) {
+                    appBarLayout.setBackgroundResource(R.color.dark_blue_30);
+                } else {
+                    appBarLayout.setBackgroundResource(R.color.blue_50);
+                }
+
+                // Check to see if I2P is installed.
+                try {
+                    // Get the package manager.
+                    PackageManager packageManager = getPackageManager();
+
+                    // Check to see if I2P is in the list.  This will throw an error and drop to the catch section if it isn't installed.
+                    packageManager.getPackageInfo("org.torproject.android", 0);
+                } catch (PackageManager.NameNotFoundException exception) {  // I2P is not installed.
+                    // Sow the I2P not installed dialog if it is not already displayed.
+                    if (getSupportFragmentManager().findFragmentByTag(getString(R.string.proxy_not_installed_dialog)) == null) {
+                        // Get a handle for the waiting for proxy alert dialog.
+                        DialogFragment i2pNotInstalledDialogFragment = ProxyNotInstalledDialog.displayDialog(proxyMode);
+
+                        // Display the I2P not installed alert dialog.
+                        i2pNotInstalledDialogFragment.show(getSupportFragmentManager(), getString(R.string.proxy_not_installed_dialog));
+                    }
+                }
+                break;
 
-            // Reset `waitingForOrbot.
-            waitingForOrbot = false;
+            case ProxyHelper.CUSTOM:
+                // Set the app bar background to indicate proxying through Orbot is enabled.
+                if (darkTheme) {
+                    appBarLayout.setBackgroundResource(R.color.dark_blue_30);
+                } else {
+                    appBarLayout.setBackgroundResource(R.color.blue_50);
+                }
+                break;
+        }
 
-            // Reload the WebViews if requested.
-            if (reloadWebsite) {
-                // Reload the WebViews.
-                for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
-                    // Get the WebView tab fragment.
-                    WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
+        // Reload the WebViews if requested and not waiting for the proxy.
+        if (reloadWebViews && !waitingForProxy) {
+            // Reload the WebViews.
+            for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
+                // Get the WebView tab fragment.
+                WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(i);
 
-                    // Get the fragment view.
-                    View fragmentView = webViewTabFragment.getView();
+                // Get the fragment view.
+                View fragmentView = webViewTabFragment.getView();
 
-                    // Only reload the WebViews if they exist.
-                    if (fragmentView != null) {
-                        // Get the nested scroll WebView from the tab fragment.
-                        NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
+                // Only reload the WebViews if they exist.
+                if (fragmentView != null) {
+                    // Get the nested scroll WebView from the tab fragment.
+                    NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
 
-                        // Reload the WebView.
-                        nestedScrollWebView.reload();
-                    }
+                    // Reload the WebView.
+                    nestedScrollWebView.reload();
                 }
             }
         }
@@ -5916,50 +6059,47 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // Hide the keyboard.
                 inputMethodManager.hideSoftInputFromWindow(nestedScrollWebView.getWindowToken(), 0);
 
-                // Check to see if Privacy Browser is waiting on Orbot.
-                if (!waitingForOrbot) {  // Process the URL.
-                    // Get the current page position.
-                    int currentPagePosition = webViewPagerAdapter.getPositionForId(nestedScrollWebView.getWebViewFragmentId());
+                // Get the current page position.
+                int currentPagePosition = webViewPagerAdapter.getPositionForId(nestedScrollWebView.getWebViewFragmentId());
 
-                    // Update the URL text bar if the page is currently selected.
-                    if (tabLayout.getSelectedTabPosition() == currentPagePosition) {
-                        // Clear the focus from the URL edit text.
-                        urlEditText.clearFocus();
+                // Update the URL text bar if the page is currently selected.
+                if (tabLayout.getSelectedTabPosition() == currentPagePosition) {
+                    // Clear the focus from the URL edit text.
+                    urlEditText.clearFocus();
 
-                        // Display the formatted URL text.
-                        urlEditText.setText(url);
+                    // Display the formatted URL text.
+                    urlEditText.setText(url);
 
-                        // Apply text highlighting to `urlTextBox`.
-                        highlightUrlText();
-                    }
+                    // Apply text highlighting to `urlTextBox`.
+                    highlightUrlText();
+                }
 
-                    // Reset the list of host IP addresses.
-                    nestedScrollWebView.clearCurrentIpAddresses();
+                // Reset the list of host IP addresses.
+                nestedScrollWebView.clearCurrentIpAddresses();
 
-                    // Get a URI for the current URL.
-                    Uri currentUri = Uri.parse(url);
+                // Get a URI for the current URL.
+                Uri currentUri = Uri.parse(url);
 
-                    // Get the IP addresses for the host.
-                    new GetHostIpAddresses(activity, getSupportFragmentManager(), nestedScrollWebView).execute(currentUri.getHost());
+                // Get the IP addresses for the host.
+                new GetHostIpAddresses(activity, getSupportFragmentManager(), nestedScrollWebView).execute(currentUri.getHost());
 
-                    // Replace Refresh with Stop if the options menu has been created.  (The first WebView typically begins loading before the menu items are instantiated.)
-                    if (optionsMenu != null) {
-                        // Get a handle for the refresh menu item.
-                        MenuItem refreshMenuItem = optionsMenu.findItem(R.id.refresh);
+                // Replace Refresh with Stop if the options menu has been created.  (The first WebView typically begins loading before the menu items are instantiated.)
+                if (optionsMenu != null) {
+                    // Get a handle for the refresh menu item.
+                    MenuItem refreshMenuItem = optionsMenu.findItem(R.id.refresh);
 
-                        // Set the title.
-                        refreshMenuItem.setTitle(R.string.stop);
+                    // Set the title.
+                    refreshMenuItem.setTitle(R.string.stop);
 
-                        // Get the app bar and theme preferences.
-                        boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean("display_additional_app_bar_icons", false);
+                    // Get the app bar and theme preferences.
+                    boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean("display_additional_app_bar_icons", false);
 
-                        // If the icon is displayed in the AppBar, set it according to the theme.
-                        if (displayAdditionalAppBarIcons) {
-                            if (darkTheme) {
-                                refreshMenuItem.setIcon(R.drawable.close_dark);
-                            } else {
-                                refreshMenuItem.setIcon(R.drawable.close_light);
-                            }
+                    // If the icon is displayed in the AppBar, set it according to the theme.
+                    if (displayAdditionalAppBarIcons) {
+                        if (darkTheme) {
+                            refreshMenuItem.setIcon(R.drawable.close_dark);
+                        } else {
+                            refreshMenuItem.setIcon(R.drawable.close_light);
                         }
                     }
                 }
@@ -6019,82 +6159,79 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     }
                 }
 
-                // Update the URL text box and apply domain settings if not waiting on Orbot.
-                if (!waitingForOrbot) {
-                    // Get the current page position.
-                    int currentPagePosition = webViewPagerAdapter.getPositionForId(nestedScrollWebView.getWebViewFragmentId());
+                // Get the current page position.
+                int currentPagePosition = webViewPagerAdapter.getPositionForId(nestedScrollWebView.getWebViewFragmentId());
 
-                    // Check the current website information against any pinned domain information if the current IP addresses have been loaded.
-                    if ((nestedScrollWebView.hasPinnedSslCertificate() || nestedScrollWebView.hasPinnedIpAddresses()) && nestedScrollWebView.hasCurrentIpAddresses() &&
-                            !nestedScrollWebView.ignorePinnedDomainInformation()) {
-                        CheckPinnedMismatchHelper.checkPinnedMismatch(getSupportFragmentManager(), nestedScrollWebView);
-                    }
+                // Check the current website information against any pinned domain information if the current IP addresses have been loaded.
+                if ((nestedScrollWebView.hasPinnedSslCertificate() || nestedScrollWebView.hasPinnedIpAddresses()) && nestedScrollWebView.hasCurrentIpAddresses() &&
+                        !nestedScrollWebView.ignorePinnedDomainInformation()) {
+                    CheckPinnedMismatchHelper.checkPinnedMismatch(getSupportFragmentManager(), nestedScrollWebView);
+                }
 
-                    // Get the current URL from the nested scroll WebView.  This is more accurate than using the URL passed into the method, which is sometimes not the final one.
-                    String currentUrl = nestedScrollWebView.getUrl();
+                // Get the current URL from the nested scroll WebView.  This is more accurate than using the URL passed into the method, which is sometimes not the final one.
+                String currentUrl = nestedScrollWebView.getUrl();
 
-                    // Get the current tab.
-                    TabLayout.Tab tab = tabLayout.getTabAt(currentPagePosition);
+                // Get the current tab.
+                TabLayout.Tab tab = tabLayout.getTabAt(currentPagePosition);
 
-                    // Update the URL text bar if the page is currently selected and the user is not currently typing in the URL edit text.
-                    // Crash records show that, in some crazy way, it is possible for the current URL to be blank at this point.
-                    // Probably some sort of race condition when Privacy Browser is being resumed.
-                    if ((tabLayout.getSelectedTabPosition() == currentPagePosition) && !urlEditText.hasFocus() && (currentUrl != null)) {
-                        // Check to see if the URL is `about:blank`.
-                        if (currentUrl.equals("about:blank")) {  // The WebView is blank.
-                            // Display the hint in the URL edit text.
-                            urlEditText.setText("");
+                // Update the URL text bar if the page is currently selected and the user is not currently typing in the URL edit text.
+                // Crash records show that, in some crazy way, it is possible for the current URL to be blank at this point.
+                // Probably some sort of race condition when Privacy Browser is being resumed.
+                if ((tabLayout.getSelectedTabPosition() == currentPagePosition) && !urlEditText.hasFocus() && (currentUrl != null)) {
+                    // Check to see if the URL is `about:blank`.
+                    if (currentUrl.equals("about:blank")) {  // The WebView is blank.
+                        // Display the hint in the URL edit text.
+                        urlEditText.setText("");
 
-                            // Request focus for the URL text box.
-                            urlEditText.requestFocus();
+                        // Request focus for the URL text box.
+                        urlEditText.requestFocus();
 
-                            // Display the keyboard.
-                            inputMethodManager.showSoftInput(urlEditText, 0);
+                        // Display the keyboard.
+                        inputMethodManager.showSoftInput(urlEditText, 0);
 
-                            // Apply the domain settings.  This clears any settings from the previous domain.
-                            applyDomainSettings(nestedScrollWebView, "", true, false);
+                        // Apply the domain settings.  This clears any settings from the previous domain.
+                        applyDomainSettings(nestedScrollWebView, "", true, false);
 
-                            // Only populate the title text view if the tab has been fully created.
-                            if (tab != null) {
-                                // Get the custom view from the tab.
-                                View tabView = tab.getCustomView();
+                        // Only populate the title text view if the tab has been fully created.
+                        if (tab != null) {
+                            // Get the custom view from the tab.
+                            View tabView = tab.getCustomView();
 
-                                // Remove the incorrect warning below that the current tab view might be null.
-                                assert tabView != null;
+                            // Remove the incorrect warning below that the current tab view might be null.
+                            assert tabView != null;
 
-                                // Get the title text view from the tab.
-                                TextView tabTitleTextView = tabView.findViewById(R.id.title_textview);
+                            // Get the title text view from the tab.
+                            TextView tabTitleTextView = tabView.findViewById(R.id.title_textview);
 
-                                // Set the title as the tab text.
-                                tabTitleTextView.setText(R.string.new_tab);
-                            }
-                        } else {  // The WebView has loaded a webpage.
-                            // Update the URL edit text if it is not currently being edited.
-                            if (!urlEditText.hasFocus()) {
-                                // Sanitize the current URL.  This removes unwanted URL elements that were added by redirects, so that they won't be included if the URL is shared.
-                                String sanitizedUrl = sanitizeUrl(currentUrl);
+                            // Set the title as the tab text.
+                            tabTitleTextView.setText(R.string.new_tab);
+                        }
+                    } else {  // The WebView has loaded a webpage.
+                        // Update the URL edit text if it is not currently being edited.
+                        if (!urlEditText.hasFocus()) {
+                            // Sanitize the current URL.  This removes unwanted URL elements that were added by redirects, so that they won't be included if the URL is shared.
+                            String sanitizedUrl = sanitizeUrl(currentUrl);
 
-                                // Display the final URL.  Getting the URL from the WebView instead of using the one provided by `onPageFinished()` makes websites like YouTube function correctly.
-                                urlEditText.setText(sanitizedUrl);
+                            // Display the final URL.  Getting the URL from the WebView instead of using the one provided by `onPageFinished()` makes websites like YouTube function correctly.
+                            urlEditText.setText(sanitizedUrl);
 
-                                // Apply text highlighting to the URL.
-                                highlightUrlText();
-                            }
+                            // Apply text highlighting to the URL.
+                            highlightUrlText();
+                        }
 
-                            // Only populate the title text view if the tab has been fully created.
-                            if (tab != null) {
-                                // Get the custom view from the tab.
-                                View tabView = tab.getCustomView();
+                        // Only populate the title text view if the tab has been fully created.
+                        if (tab != null) {
+                            // Get the custom view from the tab.
+                            View tabView = tab.getCustomView();
 
-                                // Remove the incorrect warning below that the current tab view might be null.
-                                assert tabView != null;
+                            // Remove the incorrect warning below that the current tab view might be null.
+                            assert tabView != null;
 
-                                // Get the title text view from the tab.
-                                TextView tabTitleTextView = tabView.findViewById(R.id.title_textview);
+                            // Get the title text view from the tab.
+                            TextView tabTitleTextView = tabView.findViewById(R.id.title_textview);
 
-                                // Set the title as the tab text.  Sometimes `onReceivedTitle()` is not called, especially when navigating history.
-                                tabTitleTextView.setText(nestedScrollWebView.getTitle());
-                            }
+                            // Set the title as the tab text.  Sometimes `onReceivedTitle()` is not called, especially when navigating history.
+                            tabTitleTextView.setText(nestedScrollWebView.getTitle());
                         }
                     }
                 }
@@ -6155,42 +6292,43 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             // Apply the app settings from the shared preferences.
             applyAppSettings();
 
-            // Load the website if not waiting for Orbot to connect.
-            if (!waitingForOrbot) {
-                // Get the intent that started the app.
-                Intent launchingIntent = getIntent();
+            // Initialize the URL to load string.
+            String urlToLoadString;
 
-                // Get the information from the intent.
-                String launchingIntentAction = launchingIntent.getAction();
-                Uri launchingIntentUriData = launchingIntent.getData();
+            // Get the intent that started the app.
+            Intent launchingIntent = getIntent();
 
-                // If the intent action is a web search, perform the search.
-                if ((launchingIntentAction != null) && launchingIntentAction.equals(Intent.ACTION_WEB_SEARCH)) {
-                    // Create an encoded URL string.
-                    String encodedUrlString;
+            // Get the information from the intent.
+            String launchingIntentAction = launchingIntent.getAction();
+            Uri launchingIntentUriData = launchingIntent.getData();
 
-                    // Sanitize the search input and convert it to a search.
-                    try {
-                        encodedUrlString = URLEncoder.encode(launchingIntent.getStringExtra(SearchManager.QUERY), "UTF-8");
-                    } catch (UnsupportedEncodingException exception) {
-                        encodedUrlString = "";
-                    }
+            // Parse the launching intent URL.
+            if ((launchingIntentAction != null) && launchingIntentAction.equals(Intent.ACTION_WEB_SEARCH)) {  // The intent contains a search string.
+                // Create an encoded URL string.
+                String encodedUrlString;
 
-                    // Load the completed search URL.
-                    loadUrl(searchURL + encodedUrlString);
-                } else if (launchingIntentUriData != null){  // Check to see if the intent contains a new URL.
-                    // Load the URL from the intent.
-                    loadUrl(launchingIntentUriData.toString());
-                } else {  // The is no URL in the intent.
-                    // Select the homepage based on the proxy through Orbot status.
-                    if (proxyThroughOrbot) {
-                        // Load the Tor homepage.
-                        loadUrl(sharedPreferences.getString("tor_homepage", getString(R.string.tor_homepage_default_value)));
-                    } else {
-                        // Load the normal homepage.
-                        loadUrl(sharedPreferences.getString("homepage", getString(R.string.homepage_default_value)));
-                    }
+                // Sanitize the search input and convert it to a search.
+                try {
+                    encodedUrlString = URLEncoder.encode(launchingIntent.getStringExtra(SearchManager.QUERY), "UTF-8");
+                } catch (UnsupportedEncodingException exception) {
+                    encodedUrlString = "";
                 }
+
+                // Store the web search as the URL to load.
+                urlToLoadString = searchURL + encodedUrlString;
+            } else if (launchingIntentUriData != null){  // The intent contains a URL.
+                // Store the URL.
+                urlToLoadString = launchingIntentUriData.toString();
+            } else {  // The is no URL in the intent.
+                // Store the homepage to be loaded.
+                urlToLoadString = sharedPreferences.getString("homepage", getString(R.string.homepage_default_value));
+            }
+
+            // Load the website if not waiting for the proxy.
+            if (waitingForProxy) {  // Store the URL to be loaded in the Nested Scroll WebView.
+                nestedScrollWebView.setWaitingForProxyUrlString(urlToLoadString);
+            } else {  // Load the URL.
+                loadUrl(nestedScrollWebView, urlToLoadString);
             }
         } else {  // This is not the first tab.
             // Apply the domain settings.
index 905e91ee32d33adfdb21e60c9362337aba929fb7..229bcf28ade37a7c7e51beb1ae1d1e7774003a7c 100644 (file)
@@ -35,6 +35,7 @@ import android.view.WindowManager;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.widget.Toolbar;  // The AndroidX toolbar must be used until the minimum API is >= 21.
@@ -197,7 +198,7 @@ public class ViewSourceActivity extends AppCompatActivity {
         }
 
         // Get the source using an AsyncTask if the URL begins with `http`.
-        if (currentUrl.startsWith("http")) {
+        if ((currentUrl != null) && currentUrl.startsWith("http")) {
             new GetSource(this, userAgent).execute(currentUrl);
         }
     }
@@ -212,7 +213,7 @@ public class ViewSourceActivity extends AppCompatActivity {
     }
 
     @Override
-    public boolean onOptionsItemSelected(MenuItem menuItem) {
+    public boolean onOptionsItemSelected(@NonNull MenuItem menuItem) {
         // Get a handle for the about alert dialog.
         DialogFragment aboutDialogFragment = new AboutViewSourceDialog();
 
index 0d9a15867db8a0c2ef436b9a02a5b487758a9863..d1583c2f03eae490bba4e47a32abc7a69b0f572f 100644 (file)
@@ -21,6 +21,7 @@ package com.stoutner.privacybrowser.adapters;
 
 import android.content.Context;
 
+import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentPagerAdapter;
@@ -35,7 +36,7 @@ public class AboutPagerAdapter extends FragmentPagerAdapter {
 
     public AboutPagerAdapter(FragmentManager fragmentManager, Context context, String[] blocklistVersions) {
         // Run the default commands.
-        super(fragmentManager);
+        super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
 
         // Store the context in a class variable.
         this.context = context;
@@ -55,25 +56,25 @@ public class AboutPagerAdapter extends FragmentPagerAdapter {
     public CharSequence getPageTitle(int tab) {
         switch (tab) {
             case 0:
-                return context.getResources().getString(R.string.version);
+                return context.getString(R.string.version);
 
             case 1:
-                return context.getResources().getString(R.string.permissions);
+                return context.getString(R.string.permissions);
 
             case 2:
-                return context.getResources().getString(R.string.privacy_policy);
+                return context.getString(R.string.privacy_policy);
 
             case 3:
-                return context.getResources().getString(R.string.changelog);
+                return context.getString(R.string.changelog);
 
             case 4:
-                return context.getResources().getString(R.string.licenses);
+                return context.getString(R.string.licenses);
 
             case 5:
-                return context.getResources().getString(R.string.contributors);
+                return context.getString(R.string.contributors);
 
             case 6:
-                return context.getResources().getString(R.string.links);
+                return context.getString(R.string.links);
 
             default:
                 return "";
@@ -81,6 +82,7 @@ public class AboutPagerAdapter extends FragmentPagerAdapter {
     }
 
     @Override
+    @NonNull
     // Setup each tab.
     public Fragment getItem(int tabNumber) {
         return AboutTabFragment.createTab(tabNumber, blocklistVersions);
diff --git a/app/src/main/java/com/stoutner/privacybrowser/adapters/GuidePagerAdapter.java b/app/src/main/java/com/stoutner/privacybrowser/adapters/GuidePagerAdapter.java
new file mode 100644 (file)
index 0000000..59ad9f3
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+ *
+ * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ *
+ * Privacy Browser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Privacy Browser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.stoutner.privacybrowser.adapters;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+
+import com.stoutner.privacybrowser.R;
+import com.stoutner.privacybrowser.fragments.GuideTabFragment;
+
+public class GuidePagerAdapter extends FragmentPagerAdapter {
+    // Define the class context variable.
+    private Context context;
+
+    public GuidePagerAdapter(FragmentManager fragmentManager, Context context) {
+        // Run the default commands.
+        super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
+
+        // Store the context in a class variable.
+        this.context = context;
+    }
+
+    @Override
+    // Get the count of the number of tabs.
+    public int getCount() {
+        return 10;
+    }
+
+    @Override
+    // Get the name of each tab.  Tab numbers start at 0.
+    public CharSequence getPageTitle(int tab) {
+        switch (tab) {
+            case 0:
+                return context.getString(R.string.overview);
+
+            case 1:
+                return context.getString(R.string.javascript);
+
+            case 2:
+                return context.getString(R.string.local_storage);
+
+            case 3:
+                return context.getString(R.string.user_agent);
+
+            case 4:
+                return context.getString(R.string.requests);
+
+            case 5:
+                return context.getString(R.string.domain_settings);
+
+            case 6:
+                return context.getString(R.string.ssl_certificates);
+
+            case 7:
+                return context.getString(R.string.proxies);
+
+            case 8:
+                return context.getString(R.string.tracking_ids);
+
+            case 9:
+                return context.getString(R.string.bookmarks);
+
+            default:
+                return "";
+        }
+    }
+
+    @Override
+    @NonNull
+    // Setup each tab.
+    public Fragment getItem(int tabNumber) {
+        return GuideTabFragment.createTab(tabNumber);
+    }
+}
\ No newline at end of file
index e163ac54c1e2ac12e5e13a222a884f26d42d8f03..bc565a656037d8df278caedfd1eba6ae73d34300 100644 (file)
@@ -21,13 +21,14 @@ package com.stoutner.privacybrowser.dialogs;
 
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.content.Context;
 import android.content.SharedPreferences;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.view.WindowManager;
 
 import androidx.annotation.NonNull;
 import androidx.fragment.app.DialogFragment;
+import androidx.preference.PreferenceManager;
 
 import com.stoutner.privacybrowser.R;
 
@@ -35,8 +36,14 @@ public class AboutViewSourceDialog extends DialogFragment {
     @Override
     @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Get the context.
+        Context context = getContext();
+
+        // Remove the incorrect lint warning below that the context might be null.
+        assert context != null;
+
         // Get a handle for the shared preferences.
-        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
+        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
 
         // Get the screenshot and theme preferences.
         boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false);
index 93e0ec86697d23b1263affea30f3441beba5208e..8bb889ed738623744fdd2a396b3472b84b2f554a 100644 (file)
@@ -20,7 +20,6 @@
 package com.stoutner.privacybrowser.dialogs;
 
 import android.annotation.SuppressLint;
-import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -44,11 +43,11 @@ import android.widget.EditText;
 import android.widget.RadioButton;
 
 import androidx.annotation.NonNull;
-// `ShortcutInfoCompat`, `ShortcutManagerCompat`, and `IconCompat` can be switched to the non-compat versions once the minimum API >= 26.
+import androidx.appcompat.app.AlertDialog;
 import androidx.core.content.pm.ShortcutInfoCompat;
 import androidx.core.content.pm.ShortcutManagerCompat;
 import androidx.core.graphics.drawable.IconCompat;
-import androidx.fragment.app.DialogFragment;  // The AndroidX dialog fragment must be used or an error is produced on API <=22.
+import androidx.fragment.app.DialogFragment;
 
 import com.stoutner.privacybrowser.BuildConfig;
 import com.stoutner.privacybrowser.R;
diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ProxyNotInstalledDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ProxyNotInstalledDialog.java
new file mode 100644 (file)
index 0000000..fa17c43
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * Copyright © 2019 Soren Stoutner <soren@stoutner.com>.
+ *
+ * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ *
+ * Privacy Browser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Privacy Browser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.stoutner.privacybrowser.dialogs;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.preference.PreferenceManager;
+
+
+import com.stoutner.privacybrowser.helpers.ProxyHelper;
+import com.stoutner.privacybrowser.R;
+
+public class ProxyNotInstalledDialog extends DialogFragment {
+    public static ProxyNotInstalledDialog displayDialog(String proxyMode) {
+        // Create an arguments bundle.
+        Bundle argumentsBundle = new Bundle();
+
+        // Store the proxy mode in the bundle.
+        argumentsBundle.putString("proxy_mode", proxyMode);
+
+        // Create a new instance of the dialog.
+        ProxyNotInstalledDialog proxyNotInstalledDialog = new ProxyNotInstalledDialog();
+
+        // Add the bundle to the dialog.
+        proxyNotInstalledDialog.setArguments(argumentsBundle);
+
+        // Return the new dialog.
+        return proxyNotInstalledDialog;
+    }
+
+    @Override
+    @NonNull
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Get the context and the activity.
+        Context context = getContext();
+        Activity activity = getActivity();
+
+        // Remove the incorrect lint warnings below that the context or the activity might be null.
+        assert context != null;
+        assert activity != null;
+
+        // Get the arguments.
+        Bundle arguments = getArguments();
+
+        // Remove the incorrect lint warning below that the arguments might be null.
+        assert arguments != null;
+
+        // Get the proxy mode from the arguments.
+        String proxyMode = arguments.getString("proxy_mode");
+
+        // Remove the incorrect lint warning below tha tth eproxy mode migth be null.
+        assert proxyMode != null;
+
+        // Get a handle for the shared preferences.
+        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
+
+        // Get the screenshot and the theme preferences.
+        boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false);
+        boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false);
+
+        // Use a builder to create the alert dialog.
+        AlertDialog.Builder dialogBuilder;
+
+        // Set the style and the icon according to the theme.
+        if (darkTheme) {
+            // Set the style.
+            dialogBuilder = new AlertDialog.Builder(activity, R.style.PrivacyBrowserAlertDialogDark);
+
+            // Set the icon.
+            dialogBuilder.setIcon(R.drawable.proxy_enabled_dark);
+        } else {
+            // Set the style.
+            dialogBuilder = new AlertDialog.Builder(activity, R.style.PrivacyBrowserAlertDialogLight);
+
+            // Set the icon.
+            dialogBuilder.setIcon(R.drawable.proxy_enabled_light);
+        }
+
+        // Set the title and the message according to the proxy mode.
+        switch (proxyMode) {
+            case ProxyHelper.TOR:
+                // Set the title.
+                dialogBuilder.setTitle(R.string.orbot_not_installed_title);
+
+                // Set the message.
+                dialogBuilder.setMessage(R.string.orbot_not_installed_message);
+                break;
+
+            case ProxyHelper.I2P:
+                // Set the title.
+                dialogBuilder.setTitle(R.string.i2p_not_installed_title);
+
+                // Set the message.
+                dialogBuilder.setMessage(R.string.i2p_not_installed_message);
+                break;
+        }
+
+        // Set the positive button.
+        dialogBuilder.setPositiveButton(R.string.close, (DialogInterface dialog, int which) -> {
+            // Do nothing.  The alert dialog will close automatically.
+        });
+
+        // Create an alert dialog from the alert dialog builder.
+        AlertDialog alertDialog = dialogBuilder.create();
+
+        // Disable screenshots if not allowed.
+        if (!allowScreenshots) {
+            // Remove the warning below that `getWindows()` might be null.
+            assert alertDialog.getWindow() != null;
+
+            // Disable screenshots.
+            alertDialog.getWindow().addFlags((WindowManager.LayoutParams.FLAG_SECURE));
+        }
+
+        // Return the alert dialog.
+        return alertDialog;
+    }
+}
\ No newline at end of file
index b88ef7666453932546f93e7a51461ae82a26f578..d687546d9581dc32ba8b135a70b70daed38a6d65 100644 (file)
@@ -51,8 +51,6 @@ import java.text.DateFormat;
 import java.util.Calendar;
 import java.util.Date;
 
-// `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
-@SuppressLint("InflateParams")
 public class ViewSslCertificateDialog extends DialogFragment {
     public static ViewSslCertificateDialog displayDialog(long webViewFragmentId) {
         // Create an arguments bundle.
@@ -71,6 +69,8 @@ public class ViewSslCertificateDialog extends DialogFragment {
         return viewSslCertificateDialog;
     }
 
+    // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
+    @SuppressLint("InflateParams")
     @Override
     @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
@@ -88,7 +88,7 @@ public class ViewSslCertificateDialog extends DialogFragment {
         // Get the arguments.
         Bundle arguments = getArguments();
 
-        // Remove the incorrect lint warning below that `getLong()` might be null.
+        // Remove the incorrect lint warning below that the arguments might be null.
         assert arguments != null;
 
         // Get the current position of this WebView fragment.
@@ -141,8 +141,8 @@ public class ViewSslCertificateDialog extends DialogFragment {
             // Set the title.
             dialogBuilder.setTitle(R.string.unencrypted_website);
 
-            // Set the Layout.  The parent view is `null` because it will be assigned by `AlertDialog`.
-            dialogBuilder.setView(layoutInflater.inflate(R.layout.unencrypted_website, null));
+            // Set the Layout.  The parent view is `null` because it will be assigned by the alert dialog.
+            dialogBuilder.setView(layoutInflater.inflate(R.layout.unencrypted_website_dialog, null));
 
             // Create an alert dialog from the alert dialog builder.
             final AlertDialog alertDialog = dialogBuilder.create();
@@ -163,8 +163,8 @@ public class ViewSslCertificateDialog extends DialogFragment {
             // Set the title.
             dialogBuilder.setTitle(R.string.ssl_certificate);
 
-            // Set the layout.  The parent view is `null` because it will be assigned by `AlertDialog`.
-            dialogBuilder.setView(layoutInflater.inflate(R.layout.view_ssl_certificate, null));
+            // Set the layout.  The parent view is `null` because it will be assigned by the alert dialog.
+            dialogBuilder.setView(layoutInflater.inflate(R.layout.view_ssl_certificate_dialog, null));
 
             // Create an alert dialog from the builder.
             final AlertDialog alertDialog = dialogBuilder.create();
diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/WaitingForProxyDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/WaitingForProxyDialog.java
new file mode 100644 (file)
index 0000000..08e3921
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2019 Soren Stoutner <soren@stoutner.com>.
+ *
+ * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ *
+ * Privacy Browser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Privacy Browser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.stoutner.privacybrowser.dialogs;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.preference.PreferenceManager;
+
+import com.stoutner.privacybrowser.R;
+
+public class WaitingForProxyDialog extends DialogFragment {
+    // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog.
+    @SuppressLint("InflateParams")
+    @Override
+    @NonNull
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Get the context and the activity.
+        Context context = getContext();
+        Activity activity = getActivity();
+
+        // Remove the incorrect lint warnings below that the context or the activity might be null.
+        assert context != null;
+        assert activity != null;
+
+        // Get the activity's layout inflater.
+        LayoutInflater layoutInflater = activity.getLayoutInflater();
+
+        // Get a handle for the shared preferences.
+        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
+
+        // Get the screenshot and theme preferences.
+        boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false);
+        boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false);
+
+        // Use a builder to create the alert dialog.
+        AlertDialog.Builder dialogBuilder;
+
+        // Set the style according to the theme.
+        if (darkTheme) {
+            dialogBuilder = new AlertDialog.Builder(activity, R.style.PrivacyBrowserAlertDialogDark);
+        } else {
+            dialogBuilder = new AlertDialog.Builder(activity, R.style.PrivacyBrowserAlertDialogLight);
+        }
+
+        // Set the layout.  The parent view is `null` because it will be assigned by the alert dialog.
+        dialogBuilder.setView(layoutInflater.inflate(R.layout.waiting_for_proxy_dialog, null));
+
+        // Create an alert dialog from the alert dialog builder.
+        AlertDialog alertDialog = dialogBuilder.create();
+
+        // Disable screenshots if not allowed.
+        if (!allowScreenshots) {
+            // Remove the warning below that `getWindow()` might be null.
+            assert alertDialog.getWindow() != null;
+
+            // Disable screenshots.
+            alertDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
+        }
+
+        // The alert dialog must be shown before items in the layout can be modified.
+        alertDialog.show();
+
+        // Return the alert dialog.
+        return alertDialog;
+    }
+}
\ No newline at end of file
index 8496d00fdf1b94f995878a65ea35d1b1f7fc1ec5..486f593ceee79706cf0e160d8eed7c8c2a2cdbad 100644 (file)
@@ -126,6 +126,7 @@ public class AboutTabFragment extends Fragment {
             TextView webViewProviderTextView = tabLayout.findViewById(R.id.webview_provider);
             TextView webViewVersionTextView = tabLayout.findViewById(R.id.webview_version);
             TextView orbotTextView = tabLayout.findViewById(R.id.orbot);
+            TextView i2pTextView = tabLayout.findViewById(R.id.i2p);
             TextView openKeychainTextView = tabLayout.findViewById(R.id.open_keychain);
             TextView easyListTextView = tabLayout.findViewById(R.id.easylist);
             TextView easyPrivacyTextView = tabLayout.findViewById(R.id.easyprivacy);
@@ -192,6 +193,15 @@ public class AboutTabFragment extends Fragment {
                 orbot = "";
             }
 
+            // Get the I2P version name if I2P is installed.
+            String i2p;
+            try {
+                // Store the version name.
+                i2p = context.getPackageManager().getPackageInfo("net.i2p.android.router", 0).versionName;
+            } catch (PackageManager.NameNotFoundException exception) {  // I2P is not installed.
+                i2p = "";
+            }
+
             // Get the OpenKeychain version name if it is installed.
             String openKeychain;
             try {
@@ -319,6 +329,16 @@ public class AboutTabFragment extends Fragment {
                 orbotTextView.setVisibility(View.GONE);
             }
 
+            // Only populate the I2P text view if it is installed.
+            if (!i2p.isEmpty()) {
+                String i2pLabel = getString(R.string.i2p)  + "  ";
+                SpannableStringBuilder i2pStringBuilder = new SpannableStringBuilder(i2pLabel + i2p);
+                i2pStringBuilder.setSpan(blueColorSpan, i2pLabel.length(), i2pStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
+                i2pTextView.setText(i2pStringBuilder);
+            } else {  // I2P is not installed.
+                i2pTextView.setVisibility(View.GONE);
+            }
+
             // Only populate the OpenKeychain text view if it is installed.
             if (!openKeychain.isEmpty()) {
                 String openKeychainLabel = getString(R.string.openkeychain) + "  ";
index 3f1988ed6c6fe3923c022b7daae45ce40aa8132a..6564e0acc28c7a4c514a84aedcd6ff2adcae9055 100644 (file)
@@ -82,8 +82,6 @@ public class GuideTabFragment extends Fragment {
 
         // Load the tabs according to the theme.
         if (darkTheme) {  // The dark theme is applied.
-            // Set the background color.  The deprecated `.getColor()` must be used until API >= 23.
-            //noinspection deprecation
             tabWebView.setBackgroundColor(getResources().getColor(R.color.gray_850));
 
             // Tab numbers start at 0.
@@ -117,7 +115,7 @@ public class GuideTabFragment extends Fragment {
                     break;
 
                 case 7:
-                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_tor_dark.html");
+                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_proxies_dark.html");
                     break;
 
                 case 8:
@@ -160,7 +158,7 @@ public class GuideTabFragment extends Fragment {
                     break;
 
                 case 7:
-                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_tor_light.html");
+                    tabWebView.loadUrl("file:///android_asset/" + getString(R.string.android_asset_path) + "/guide_proxies_light.html");
                     break;
 
                 case 8:
index 2ffcd187da0e9bfc08eaae8bd6486eb0de41c795..04e0d2d5ed20ccab3fc221b71399a114a9a7740a 100644 (file)
@@ -38,6 +38,7 @@ import androidx.preference.PreferenceFragmentCompat;
 
 import com.stoutner.privacybrowser.R;
 import com.stoutner.privacybrowser.activities.MainWebViewActivity;
+import com.stoutner.privacybrowser.helpers.ProxyHelper;
 
 public class SettingsFragment extends PreferenceFragmentCompat {
     // Define the class variables.
@@ -82,12 +83,11 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         Preference googleAnalyticsPreference = findPreference("google_analytics");
         Preference facebookClickIdsPreference = findPreference("facebook_click_ids");
         Preference twitterAmpRedirectsPreference = findPreference("twitter_amp_redirects");
-        Preference proxyThroughOrbotPreference = findPreference("proxy_through_orbot");
-        Preference torHomepagePreference = findPreference("tor_homepage");
-        Preference torSearchPreference = findPreference("tor_search");
-        Preference torSearchCustomURLPreference = findPreference("tor_search_custom_url");
         Preference searchPreference = findPreference("search");
         Preference searchCustomURLPreference = findPreference("search_custom_url");
+        Preference proxyPreference = findPreference("proxy");
+        Preference proxyCustomHostPreference = findPreference("proxy_custom_host");
+        Preference proxyCustomPortPreference = findPreference("proxy_custom_port");
         Preference fullScreenBrowsingModePreference = findPreference("full_screen_browsing_mode");
         Preference hideAppBarPreference = findPreference("hide_app_bar");
         Preference clearEverythingPreference = findPreference("clear_everything");
@@ -128,12 +128,11 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         assert googleAnalyticsPreference != null;
         assert facebookClickIdsPreference != null;
         assert twitterAmpRedirectsPreference != null;
-        assert proxyThroughOrbotPreference != null;
-        assert torHomepagePreference != null;
-        assert torSearchPreference != null;
-        assert torSearchCustomURLPreference != null;
         assert searchPreference != null;
         assert searchCustomURLPreference != null;
+        assert proxyPreference != null;
+        assert proxyCustomHostPreference != null;
+        assert proxyCustomPortPreference != null;
         assert fullScreenBrowsingModePreference != null;
         assert hideAppBarPreference != null;
         assert clearEverythingPreference != null;
@@ -153,14 +152,12 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         assert wideViewportPreference != null;
         assert displayWebpageImagesPreference != null;
 
-        // Set dependencies.
-        torHomepagePreference.setDependency("proxy_through_orbot");
-        torSearchPreference.setDependency("proxy_through_orbot");
+        // Set the hide app bar preference dependency.
         hideAppBarPreference.setDependency("full_screen_browsing_mode");
 
         // Get strings from the preferences.
-        String torSearchString = savedPreferences.getString("tor_search", getString(R.string.tor_search_default_value));
         String searchString = savedPreferences.getString("search", getString(R.string.search_default_value));
+        String proxyString = savedPreferences.getString("proxy", getString(R.string.proxy_default_value));
 
         // Get booleans that are used in multiple places from the preferences.
         boolean javaScriptEnabled = savedPreferences.getBoolean("javascript", false);
@@ -168,7 +165,6 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         boolean thirdPartyCookiesEnabled = savedPreferences.getBoolean("third_party_cookies", false);
         boolean fanboyAnnoyanceListEnabled = savedPreferences.getBoolean("fanboys_annoyance_list", true);
         boolean fanboySocialBlockingEnabled = savedPreferences.getBoolean("fanboys_social_blocking_list", true);
-        boolean proxyThroughOrbot = savedPreferences.getBoolean("proxy_through_orbot", false);
         boolean fullScreenBrowsingMode = savedPreferences.getBoolean("full_screen_browsing_mode", false);
         boolean clearEverything = savedPreferences.getBoolean("clear_everything", true);
         boolean darkTheme = savedPreferences.getBoolean("dark_theme", false);
@@ -241,27 +237,6 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         customUserAgentPreference.setSummary(savedPreferences.getString("custom_user_agent", getString(R.string.custom_user_agent_default_value)));
         customUserAgentPreference.setEnabled(userAgentPreference.getSummary().equals(getString(R.string.custom_user_agent)));
 
-
-        // Set the Tor homepage URL as the summary text for the `tor_homepage` preference when the preference screen is loaded.  The default is Searx: `http://ulrn6sryqaifefld.onion/`.
-        torHomepagePreference.setSummary(savedPreferences.getString("tor_homepage", getString(R.string.tor_homepage_default_value)));
-
-
-        // Set the Tor search URL as the summary text for the Tor preference when the preference screen is loaded.
-        if (torSearchString.equals("Custom URL")) {
-            // Use R.string.custom_url, which will be translated, instead of the array value, which will not.
-            torSearchPreference.setSummary(R.string.custom_url);
-        } else {
-            // Set the array value as the summary text.
-            torSearchPreference.setSummary(torSearchString);
-        }
-
-        // Set the summary text for `tor_search_custom_url`.  The default is `""`.
-        torSearchCustomURLPreference.setSummary(savedPreferences.getString("tor_search_custom_url", getString(R.string.tor_search_custom_url_default_value)));
-
-        // Enable the Tor custom URL search options only if proxying through Orbot and the search is set to `Custom URL`.
-        torSearchCustomURLPreference.setEnabled(proxyThroughOrbot && torSearchString.equals("Custom URL"));
-
-
         // Set the search URL as the summary text for the search preference when the preference screen is loaded.
         if (searchString.equals("Custom URL")) {
             // Use R.string.custom_url, which will be translated, instead of the array value, which will not.
@@ -275,6 +250,33 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         searchCustomURLPreference.setSummary(savedPreferences.getString("search_custom_url", getString(R.string.search_custom_url_default_value)));
         searchCustomURLPreference.setEnabled(searchString.equals("Custom URL"));
 
+        // Set the summary text for the proxy preference when the preference screen is loaded.
+        switch (proxyString) {
+            case ProxyHelper.NONE:
+                proxyPreference.setSummary(getString(R.string.no_proxy_enabled));
+                break;
+
+            case ProxyHelper.TOR:
+                proxyPreference.setSummary(getString(R.string.tor_enabled));
+                break;
+
+            case ProxyHelper.I2P:
+                proxyPreference.setSummary(getString(R.string.i2p_enabled));
+                break;
+
+            case ProxyHelper.CUSTOM:
+                proxyPreference.setSummary(getString(R.string.custom_proxy));
+                break;
+        }
+
+        // Only enable the custom proxy options if a custom proxy is selected.
+        proxyCustomHostPreference.setEnabled(proxyString.equals("Custom"));
+        proxyCustomPortPreference.setEnabled(proxyString.equals("Custom"));
+
+        // Set the summary text for the custom proxy options.
+        proxyCustomHostPreference.setSummary(savedPreferences.getString("proxy_custom_host", getString(R.string.proxy_custom_host_default_value)));
+        proxyCustomPortPreference.setSummary(savedPreferences.getString("proxy_custom_port", getString(R.string.proxy_custom_port_default_value)));
+
         // Set the status of the Clear and Exit preferences.
         clearCookiesPreference.setEnabled(!clearEverything);
         clearDomStoragePreference.setEnabled(!clearEverything);
@@ -578,45 +580,6 @@ public class SettingsFragment extends PreferenceFragmentCompat {
             }
         }
 
-        // Set the Tor icons according to the theme.
-        if (proxyThroughOrbot) {  // Proxying is enabled.
-            if (darkTheme) {
-                proxyThroughOrbotPreference.setIcon(R.drawable.orbot_enabled_dark);
-                torHomepagePreference.setIcon(R.drawable.home_enabled_dark);
-                torSearchPreference.setIcon(R.drawable.search_enabled_dark);
-
-                // Set the custom search icon.
-                if (torSearchCustomURLPreference.isEnabled()) {
-                    torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_dark);
-                } else {
-                    torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark);
-                }
-            } else {
-                proxyThroughOrbotPreference.setIcon(R.drawable.orbot_enabled_light);
-                torHomepagePreference.setIcon(R.drawable.home_enabled_light);
-                torSearchPreference.setIcon(R.drawable.search_enabled_light);
-
-                // Set the custom search icon.
-                if (torSearchCustomURLPreference.isEnabled()) {
-                    torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_light);
-                } else {
-                    torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light);
-                }
-            }
-        } else {  // Proxying is disabled.
-            if (darkTheme) {
-                proxyThroughOrbotPreference.setIcon(R.drawable.orbot_disabled_dark);
-                torHomepagePreference.setIcon(R.drawable.home_ghosted_dark);
-                torSearchPreference.setIcon(R.drawable.search_ghosted_dark);
-                torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark);
-            } else {
-                proxyThroughOrbotPreference.setIcon(R.drawable.orbot_disabled_light);
-                torHomepagePreference.setIcon(R.drawable.home_ghosted_light);
-                torSearchPreference.setIcon(R.drawable.search_ghosted_light);
-                torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light);
-            }
-        }
-
         // Set the search custom URL icon.
         if (searchCustomURLPreference.isEnabled()) {
             if (darkTheme) {
@@ -632,6 +595,51 @@ public class SettingsFragment extends PreferenceFragmentCompat {
             }
         }
 
+        // Set the Proxy icons according to the theme and status.
+        if (proxyString.equals("None")) {  // Proxying is disabled.
+            if (darkTheme) {  // Dark theme.
+                // Set the main proxy icon to be disabled.
+                proxyPreference.setIcon(R.drawable.proxy_disabled_dark);
+
+                // Set the custom proxy icons to be ghosted.
+                proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_dark);
+                proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_dark);
+            } else {  // Light theme.
+                // Set the main proxy icon to be disabled.
+                proxyPreference.setIcon(R.drawable.proxy_disabled_light);
+
+                // Set the custom proxy icons to be ghosted.
+                proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_light);
+                proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_light);
+            }
+        } else {  // Proxying is enabled.
+            if (darkTheme) {  // Dark theme.
+                // Set the main proxy icon to be enabled.
+                proxyPreference.setIcon(R.drawable.proxy_enabled_dark);
+
+                // Set the custom proxy icons according to their status.
+                if (proxyCustomHostPreference.isEnabled()) {  // Custom proxy is enabled.
+                    proxyCustomHostPreference.setIcon(R.drawable.proxy_enabled_dark);
+                    proxyCustomPortPreference.setIcon(R.drawable.proxy_enabled_dark);
+                } else {  // Custom proxy is disabled.
+                    proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_dark);
+                    proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_dark);
+                }
+            } else {  // Light theme.
+                // Set the main proxy icon to be enabled.
+                proxyPreference.setIcon(R.drawable.proxy_enabled_light);
+
+                // Set the custom proxy icons according to their status.
+                if (proxyCustomHostPreference.isEnabled()) {  // Custom proxy is enabled.
+                    proxyCustomHostPreference.setIcon(R.drawable.proxy_enabled_light);
+                    proxyCustomPortPreference.setIcon(R.drawable.proxy_enabled_light);
+                } else {  // Custom proxy is disabled.
+                    proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_light);
+                    proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_light);
+                }
+            }
+        }
+
         // Set the full screen browsing mode icons.
         if (fullScreenBrowsingMode) {  // Full screen browsing mode is enabled.
             // Set the `fullScreenBrowsingModePreference` icon according to the theme.
@@ -1314,99 +1322,6 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                     }
                     break;
 
-                case "proxy_through_orbot":
-                    // Get current settings.
-                    boolean currentProxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false);
-                    String currentTorSearchString = sharedPreferences.getString("tor_search", getString(R.string.tor_search_default_value));
-
-                    // Enable the Tor custom URL search option only if `currentProxyThroughOrbot` is true and the search is set to `Custom URL`.
-                    torSearchCustomURLPreference.setEnabled(currentProxyThroughOrbot && currentTorSearchString.equals("Custom URL"));
-
-                    // Update the icons.
-                    if (currentProxyThroughOrbot) {
-                        // Set the Tor icons according to the theme.
-                        if (darkTheme) {
-                            proxyThroughOrbotPreference.setIcon(R.drawable.orbot_enabled_dark);
-                            torHomepagePreference.setIcon(R.drawable.home_enabled_dark);
-                            torSearchPreference.setIcon(R.drawable.search_enabled_dark);
-
-                            // Set the `torSearchCustomURLPreference` icon.
-                            if (torSearchCustomURLPreference.isEnabled()) {
-                                torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_dark);
-                            } else {
-                                torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark);
-                            }
-                        } else {
-                            proxyThroughOrbotPreference.setIcon(R.drawable.orbot_enabled_light);
-                            torHomepagePreference.setIcon(R.drawable.home_enabled_light);
-                            torSearchPreference.setIcon(R.drawable.search_enabled_light);
-
-                            // Set the `torSearchCustomURLPreference` icon.
-                            if (torSearchCustomURLPreference.isEnabled()) {
-                                torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_light);
-                            } else {
-                                torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light);
-                            }
-                        }
-                    } else {  // Proxy through Orbot is disabled.
-                        if (darkTheme) {
-                            proxyThroughOrbotPreference.setIcon(R.drawable.orbot_disabled_dark);
-                            torHomepagePreference.setIcon(R.drawable.home_ghosted_dark);
-                            torSearchPreference.setIcon(R.drawable.search_ghosted_dark);
-                            torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark);
-                        } else {
-                            proxyThroughOrbotPreference.setIcon(R.drawable.orbot_disabled_light);
-                            torHomepagePreference.setIcon(R.drawable.home_ghosted_light);
-                            torSearchPreference.setIcon(R.drawable.search_ghosted_light);
-                            torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light);
-                        }
-                    }
-                    break;
-
-                case "tor_homepage":
-                    // Set the new tor homepage URL as the summary text for the `tor_homepage` preference.  The default is Searx:  `http://ulrn6sryqaifefld.onion/`.
-                    torHomepagePreference.setSummary(sharedPreferences.getString("tor_homepage", getString(R.string.tor_homepage_default_value)));
-                    break;
-
-                case "tor_search":
-                    // Get the present search string.
-                    String presentTorSearchString = sharedPreferences.getString("tor_search", getString(R.string.tor_search_default_value));
-
-                    // Update the preferences.
-                    if (presentTorSearchString.equals("Custom URL")) {
-                        // Use `R.string.custom_url`, which is translated, as the summary instead of the array value, which isn't.
-                        torSearchPreference.setSummary(R.string.custom_url);
-
-                        // Enable `torSearchCustomURLPreference`.
-                        torSearchCustomURLPreference.setEnabled(true);
-
-                        // Update the `torSearchCustomURLPreference` icon.
-                        if (darkTheme) {
-                            torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_dark);
-                        } else {
-                            torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_light);
-                        }
-                    } else {
-                        // Set the array value as the summary text.
-                        torSearchPreference.setSummary(presentTorSearchString);
-
-                        // Disable `torSearchCustomURLPreference`.
-                        torSearchCustomURLPreference.setEnabled(false);
-
-                        // Update the `torSearchCustomURLPreference` icon.
-                        if (darkTheme) {
-                            torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark);
-                        } else {
-                            torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light);
-                        }
-                    }
-                    break;
-
-                case "tor_search_custom_url":
-                    // Set the summary text for `tor_search_custom_url`.
-                    torSearchCustomURLPreference.setSummary(sharedPreferences.getString("tor_search_custom_url", getString(R.string.tor_search_custom_url_default_value)));
-                    break;
-
                 case "search":
                     // Store the new search string.
                     String newSearchString = sharedPreferences.getString("search", getString(R.string.search_default_value));
@@ -1446,6 +1361,88 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                     searchCustomURLPreference.setSummary(sharedPreferences.getString("search_custom_url", getString(R.string.search_custom_url_default_value)));
                     break;
 
+                case "proxy":
+                    // Get current proxy string.
+                    String currentProxyString = sharedPreferences.getString("proxy", getString(R.string.proxy_default_value));
+
+                    // Update the summary text for the proxy preference.
+                    switch (currentProxyString) {
+                        case ProxyHelper.NONE:
+                            proxyPreference.setSummary(getString(R.string.no_proxy_enabled));
+                            break;
+
+                        case ProxyHelper.TOR:
+                            proxyPreference.setSummary(getString(R.string.tor_enabled));
+                            break;
+
+                        case ProxyHelper.I2P:
+                            proxyPreference.setSummary(getString(R.string.i2p_enabled));
+                            break;
+
+                        case ProxyHelper.CUSTOM:
+                            proxyPreference.setSummary(getString(R.string.custom_proxy));
+                            break;
+                    }
+
+                    // Update the status of the custom proxy options.
+                    proxyCustomHostPreference.setEnabled(currentProxyString.equals("Custom"));
+                    proxyCustomPortPreference.setEnabled(currentProxyString.equals("Custom"));
+
+                    // Update the icons.
+                    if (currentProxyString.equals("None")) {  // Proxying is disabled.
+                        if (darkTheme) {  // Dark theme.
+                            // Set the main proxy icon to be disabled
+                            proxyPreference.setIcon(R.drawable.proxy_disabled_dark);
+
+                            // Set the custom proxy icons to be ghosted.
+                            proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_dark);
+                            proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_dark);
+                        } else {  // Light theme.
+                            // Set the main proxy icon to be disabled.
+                            proxyPreference.setIcon(R.drawable.proxy_disabled_light);
+
+                            // Set the custom proxy icons to be ghosted.
+                            proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_light);
+                            proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_light);
+                        }
+                    } else {  // Proxying is enabled.
+                        if (darkTheme) {  // Dark theme.
+                            // Set the main proxy icon to be enabled.
+                            proxyPreference.setIcon(R.drawable.proxy_enabled_dark);
+
+                            /// Set the custom proxy icons according to their status.
+                            if (proxyCustomHostPreference.isEnabled()) {  // Custom proxy is enabled.
+                                proxyCustomHostPreference.setIcon(R.drawable.proxy_enabled_dark);
+                                proxyCustomPortPreference.setIcon(R.drawable.proxy_enabled_dark);
+                            } else {  // Custom proxy is disabled.
+                                proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_dark);
+                                proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_dark);
+                            }
+                        } else {  // Light theme.
+                            // Set the main proxy icon to be enabled.
+                            proxyPreference.setIcon(R.drawable.proxy_enabled_light);
+
+                            // Set the custom proxy icons according to their status.
+                            if (proxyCustomHostPreference.isEnabled()) {  // Custom proxy is enabled.
+                                proxyCustomHostPreference.setIcon(R.drawable.proxy_enabled_light);
+                                proxyCustomPortPreference.setIcon(R.drawable.proxy_enabled_light);
+                            } else {  // Custom proxy is disabled.
+                                proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_light);
+                                proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_light);
+                            }
+                        }
+                    }
+                    break;
+
+                case "proxy_custom_host":
+                    // Set the summary text for the proxy custom host.
+                    proxyCustomHostPreference.setSummary(sharedPreferences.getString("proxy_custom_host", getString(R.string.proxy_custom_host_default_value)));
+                    break;
+
+                case "proxy_custom_port":
+                    // Set the summary text for the proxy custom port.
+                    proxyCustomPortPreference.setSummary(sharedPreferences.getString("proxy_custom_port", getString(R.string.proxy_custom_port_default_value)));
+
                 case "full_screen_browsing_mode":
                     if (sharedPreferences.getBoolean("full_screen_browsing_mode", false)) {  // Full screen browsing is enabled.
                         // Set the full screen browsing mode preference icon according to the theme.
index 35d8fe87f0b304eb087bc950c0665f5a9f49f013..3aa0ba0f21a7653f318e40f7909be975f2639e2a 100644 (file)
@@ -38,7 +38,7 @@ public class ImportExportDatabaseHelper {
     public static final String EXPORT_SUCCESSFUL = "Export Successful";
     public static final String IMPORT_SUCCESSFUL = "Import Successful";
 
-    private static final int SCHEMA_VERSION = 8;
+    private static final int SCHEMA_VERSION = 9;
     private static final String PREFERENCES_TABLE = "preferences";
 
     // The preferences constants.
@@ -63,12 +63,11 @@ public class ImportExportDatabaseHelper {
     private static final String GOOGLE_ANALYTICS = "google_analytics";
     private static final String FACEBOOK_CLICK_IDS = "facebook_click_ids";
     private static final String TWITTER_AMP_REDIRECTS = "twitter_amp_redirects";
-    private static final String PROXY_THROUGH_ORBOT = "proxy_through_orbot";
-    private static final String TOR_HOMEPAGE = "tor_homepage";
-    private static final String TOR_SEARCH = "tor_search";
-    private static final String TOR_SEARCH_CUSTOM_URL = "tor_search_custom_url";
     private static final String SEARCH = "search";
     private static final String SEARCH_CUSTOM_URL = "search_custom_url";
+    private static final String PROXY = "proxy";
+    private static final String PROXY_CUSTOM_HOST = "proxy_custom_host";
+    private static final String PROXY_CUSTOM_PORT = "proxy_custom_port";
     private static final String FULL_SCREEN_BROWSING_MODE = "full_screen_browsing_mode";
     private static final String HIDE_APP_BAR = "hide_app_bar";
     private static final String CLEAR_EVERYTHING = "clear_everything";
@@ -219,12 +218,11 @@ public class ImportExportDatabaseHelper {
                     GOOGLE_ANALYTICS + " BOOLEAN, " +
                     FACEBOOK_CLICK_IDS + " BOOLEAN, " +
                     TWITTER_AMP_REDIRECTS + " BOOLEAN, " +
-                    PROXY_THROUGH_ORBOT + " BOOLEAN, " +
-                    TOR_HOMEPAGE + " TEXT, " +
-                    TOR_SEARCH + " TEXT, " +
-                    TOR_SEARCH_CUSTOM_URL + " TEXT, " +
                     SEARCH + " TEXT, " +
                     SEARCH_CUSTOM_URL + " TEXT, " +
+                    PROXY + " TEXT, " +
+                    PROXY_CUSTOM_HOST + " TEXT, " +
+                    PROXY_CUSTOM_PORT + " TEXT, " +
                     FULL_SCREEN_BROWSING_MODE + " BOOLEAN, " +
                     HIDE_APP_BAR + " BOOLEAN, " +
                     CLEAR_EVERYTHING + " BOOLEAN, " +
@@ -272,12 +270,11 @@ public class ImportExportDatabaseHelper {
             preferencesContentValues.put(GOOGLE_ANALYTICS, sharedPreferences.getBoolean(GOOGLE_ANALYTICS, true));
             preferencesContentValues.put(FACEBOOK_CLICK_IDS, sharedPreferences.getBoolean(FACEBOOK_CLICK_IDS, true));
             preferencesContentValues.put(TWITTER_AMP_REDIRECTS, sharedPreferences.getBoolean(TWITTER_AMP_REDIRECTS, true));
-            preferencesContentValues.put(PROXY_THROUGH_ORBOT, sharedPreferences.getBoolean(PROXY_THROUGH_ORBOT, false));
-            preferencesContentValues.put(TOR_HOMEPAGE, sharedPreferences.getString(TOR_HOMEPAGE, context.getString(R.string.tor_homepage_default_value)));
-            preferencesContentValues.put(TOR_SEARCH, sharedPreferences.getString(TOR_SEARCH, context.getString(R.string.tor_search_default_value)));
-            preferencesContentValues.put(TOR_SEARCH_CUSTOM_URL, sharedPreferences.getString(TOR_SEARCH_CUSTOM_URL, context.getString(R.string.tor_search_custom_url_default_value)));
             preferencesContentValues.put(SEARCH, sharedPreferences.getString(SEARCH, context.getString(R.string.search_default_value)));
             preferencesContentValues.put(SEARCH_CUSTOM_URL, sharedPreferences.getString(SEARCH_CUSTOM_URL, context.getString(R.string.search_custom_url_default_value)));
+            preferencesContentValues.put(PROXY, sharedPreferences.getString(PROXY, context.getString(R.string.proxy_default_value)));
+            preferencesContentValues.put(PROXY_CUSTOM_HOST, sharedPreferences.getString(PROXY_CUSTOM_HOST, context.getString(R.string.proxy_custom_host_default_value)));
+            preferencesContentValues.put(PROXY_CUSTOM_PORT, sharedPreferences.getString(PROXY_CUSTOM_PORT, context.getString(R.string.proxy_custom_port_default_value)));
             preferencesContentValues.put(FULL_SCREEN_BROWSING_MODE, sharedPreferences.getBoolean(FULL_SCREEN_BROWSING_MODE, false));
             preferencesContentValues.put(HIDE_APP_BAR, sharedPreferences.getBoolean(HIDE_APP_BAR, true));
             preferencesContentValues.put(CLEAR_EVERYTHING, sharedPreferences.getBoolean(CLEAR_EVERYTHING, true));
@@ -405,11 +402,11 @@ public class ImportExportDatabaseHelper {
                         // Close the cursor.
                         importDatabasePreferenceCursor.close();
 
-                        // Create a new column named `font_size`.
+                        // Create the new font size column.
                         importDatabase.execSQL("ALTER TABLE " + PREFERENCES_TABLE + " ADD COLUMN " + FONT_SIZE + " TEXT");
 
                         // Place the font size string in the new column.
-                        importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + FONT_SIZE + " = " + fontSize);
+                        importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + FONT_SIZE + " = '" + fontSize + "'");
 
                     // Upgrade from schema version 3.
                     case 3:
@@ -519,6 +516,23 @@ public class ImportExportDatabaseHelper {
                             importDatabase.execSQL("UPDATE " + DomainsDatabaseHelper.DOMAINS_TABLE + " SET " + DomainsDatabaseHelper.ULTRALIST + " = " + 0);
                             importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + ULTRALIST + " = " + 0);
                         }
+
+                    // Upgrade from schema version 8.
+                    case 8:
+                        // Add the new proxy columns to the preferences table.
+                        importDatabase.execSQL("ALTER TABLE " + PREFERENCES_TABLE + " ADD COLUMN " + PROXY + " TEXT");
+                        importDatabase.execSQL("ALTER TABLE " + PREFERENCES_TABLE + " ADD COLUMN " + PROXY_CUSTOM_HOST + " TEXT");
+                        importDatabase.execSQL("ALTER TABLE " + PREFERENCES_TABLE + " ADD COLUMN " + PROXY_CUSTOM_PORT + " TEXT");
+
+                        // Get the current proxy values.
+                        String proxy = sharedPreferences.getString(PROXY, context.getString(R.string.proxy_default_value));
+                        String proxyCustomHost = sharedPreferences.getString(PROXY_CUSTOM_HOST, context.getString(R.string.proxy_custom_host_default_value));
+                        String proxyCustomPort = sharedPreferences.getString(PROXY_CUSTOM_PORT, context.getString(R.string.proxy_custom_port_default_value));
+
+                        // Populate the table with the current proxy values.
+                        importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + PROXY + " = '" + proxy + "'");
+                        importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + PROXY_CUSTOM_HOST + " = '" + proxyCustomHost + "'");
+                        importDatabase.execSQL("UPDATE " + PREFERENCES_TABLE + " SET " + PROXY_CUSTOM_PORT + " = '" + proxyCustomPort +"'");
                 }
             }
 
@@ -654,12 +668,11 @@ public class ImportExportDatabaseHelper {
                     .putBoolean(GOOGLE_ANALYTICS, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(GOOGLE_ANALYTICS)) == 1)
                     .putBoolean(FACEBOOK_CLICK_IDS, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(FACEBOOK_CLICK_IDS)) == 1)
                     .putBoolean(TWITTER_AMP_REDIRECTS, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(TWITTER_AMP_REDIRECTS)) == 1)
-                    .putBoolean(PROXY_THROUGH_ORBOT, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(PROXY_THROUGH_ORBOT)) == 1)
-                    .putString(TOR_HOMEPAGE, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndex(TOR_HOMEPAGE)))
-                    .putString(TOR_SEARCH, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndex(TOR_SEARCH)))
-                    .putString(TOR_SEARCH_CUSTOM_URL, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndex(TOR_SEARCH_CUSTOM_URL)))
                     .putString(SEARCH, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndex(SEARCH)))
                     .putString(SEARCH_CUSTOM_URL, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndex(SEARCH_CUSTOM_URL)))
+                    .putString(PROXY, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndex(PROXY)))
+                    .putString(PROXY_CUSTOM_HOST, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndex(PROXY_CUSTOM_HOST)))
+                    .putString(PROXY_CUSTOM_PORT, importPreferencesCursor.getString(importPreferencesCursor.getColumnIndex(PROXY_CUSTOM_PORT)))
                     .putBoolean(FULL_SCREEN_BROWSING_MODE, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(FULL_SCREEN_BROWSING_MODE)) == 1)
                     .putBoolean(HIDE_APP_BAR, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(HIDE_APP_BAR)) == 1)
                     .putBoolean(CLEAR_EVERYTHING, importPreferencesCursor.getInt(importPreferencesCursor.getColumnIndex(CLEAR_EVERYTHING)) == 1)
diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java b/app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java
deleted file mode 100644 (file)
index 2a55d61..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
- *
- * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
- *
- * Privacy Browser is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Privacy Browser is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.stoutner.privacybrowser.helpers;
-
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
-import android.net.Proxy;
-import android.os.Build;
-import android.os.Parcelable;
-import android.preference.PreferenceManager;
-import android.util.ArrayMap;
-import android.util.Log;
-
-import androidx.appcompat.app.AlertDialog;
-
-import com.stoutner.privacybrowser.activities.MainWebViewActivity;
-import com.stoutner.privacybrowser.R;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-public class OrbotProxyHelper {
-    public static void setProxy(Context privacyBrowserContext, Activity parentActivity, String proxyHost, String proxyPort) {
-        if (proxyPort.equals("0")) {
-            // Clear the proxy values.
-            System.clearProperty("proxyHost");
-            System.clearProperty("proxyPort");
-        } else {
-            // Set the proxy values
-            System.setProperty("proxyHost", proxyHost);
-            System.setProperty("proxyPort", proxyPort);
-        }
-
-        // These entries shouldn't be needed if the above general settings are applied.  They are here for troubleshooting just in case.
-        // System.setProperty("http.proxyHost", proxyHost);
-        // System.setProperty("http.proxyPort", proxyPort);
-        // System.setProperty("https.proxyHost", proxyHost);
-        // System.setProperty("https.proxyPort", proxyPort);
-
-        // The SOCKS entries do not appear to do anything.  But maybe someday they will.
-        // System.setProperty("socksProxyHost", proxyHost);
-        // System.setProperty("socksProxyPort", "9050");
-        // System.setProperty("socks.ProxyHost", proxyHost);
-        // System.setProperty("socks.ProxyPort", "9050");
-
-        // Use reflection to apply the new proxy values.
-        try {
-            // Get the application and APK classes.  Suppress the lint warning that reflection may not always work in the future and on all devices.
-            Class applicationClass = Class.forName("android.app.Application");
-            @SuppressLint("PrivateApi") Class loadedApkClass = Class.forName("android.app.LoadedApk");
-
-            // Get the declared fields.  Suppress the lint warning that `mLoadedApk` cannot be resolved.
-            @SuppressWarnings("JavaReflectionMemberAccess") Field methodLoadedApkField = applicationClass.getDeclaredField("mLoadedApk");
-            Field methodReceiversField = loadedApkClass.getDeclaredField("mReceivers");
-
-            // Allow the values to be changed.
-            methodLoadedApkField.setAccessible(true);
-            methodReceiversField.setAccessible(true);
-
-            // Get the APK object.
-            Object methodLoadedApkObject = methodLoadedApkField.get(privacyBrowserContext);
-
-            // Get an array map of the receivers.
-            ArrayMap receivers = (ArrayMap) methodReceiversField.get(methodLoadedApkObject);
-
-            // Set the proxy.
-            for (Object receiverMap : receivers.values()) {
-                for (Object receiver : ((ArrayMap) receiverMap).keySet()) {
-                    // Get the receiver class.
-                    // `Class<?>`, which is an `unbounded wildcard parameterized type`, must be used instead of `Class`, which is a `raw type`.  Otherwise, `receiveClass.getDeclaredMethod()` is unhappy.
-                    Class<?> receiverClass = receiver.getClass();
-
-                    // Apply the new proxy settings to any classes whose names contain `ProxyChangeListener`.
-                    if (receiverClass.getName().contains("ProxyChangeListener")) {
-                        // Get the `onReceive` method from the class.
-                        Method onReceiveMethod = receiverClass.getDeclaredMethod("onReceive", Context.class, Intent.class);
-
-                        // Create a proxy change intent.
-                        Intent proxyChangeIntent = new Intent(Proxy.PROXY_CHANGE_ACTION);
-
-                        if (Build.VERSION.SDK_INT >= 21) {
-                            // Get a proxy info class.
-                            // `Class<?>`, which is an `unbounded wildcard parameterized type`, must be used instead of `Class`, which is a `raw type`.  Otherwise, `proxyInfoClass.getMethod()` is unhappy.
-                            Class<?> proxyInfoClass = Class.forName("android.net.ProxyInfo");
-
-                            // Get the build direct proxy method from the proxy info class.
-                            Method buildDirectProxyMethod = proxyInfoClass.getMethod("buildDirectProxy", String.class, Integer.TYPE);
-
-                            // Populate a proxy info object with the new proxy information.
-                            Object proxyInfoObject = buildDirectProxyMethod.invoke(proxyInfoClass, proxyHost, Integer.valueOf(proxyPort));
-
-                            // Add the proxy info object into the proxy change intent.
-                            proxyChangeIntent.putExtra("proxy", (Parcelable) proxyInfoObject);
-                        }
-
-                        // Pass the proxy change intent to the `onReceive` method of the receiver class.
-                        onReceiveMethod.invoke(receiver, privacyBrowserContext, proxyChangeIntent);
-                    }
-                }
-            }
-        } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException exception) {
-            Log.d("enableProxyThroughOrbot", "Exception: " + exception);
-        }
-
-        if (proxyPort.equals("8118")) {  // Orbot proxy was turned on.
-            try {  // Check to see if Orbot is installed.
-                PackageManager packageManager = privacyBrowserContext.getPackageManager();
-                packageManager.getPackageInfo("org.torproject.android", 0);
-
-                // Ask Orbot to connect if its current status is not "ON".
-                if (!MainWebViewActivity.orbotStatus.equals("ON")) {
-                    // Request Orbot to start.
-                    Intent orbotIntent = new Intent("org.torproject.android.intent.action.START");
-
-                    // Send the intent to the Orbot package.
-                    orbotIntent.setPackage("org.torproject.android");
-
-                    // Request a status response be sent back to this package.
-                    orbotIntent.putExtra("org.torproject.android.intent.extra.PACKAGE_NAME", privacyBrowserContext.getPackageName());
-
-                    // Make it so.
-                    privacyBrowserContext.sendBroadcast(orbotIntent);
-                }
-            } catch (PackageManager.NameNotFoundException exception){  // If an exception is thrown, Orbot is not installed.
-                // Use `AlertDialog.Builder` to create the `AlertDialog`.
-                AlertDialog.Builder dialogBuilder;
-
-                // Get a handle for the shared preferences.
-                SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(privacyBrowserContext);
-
-                // Get the theme preference.
-                boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false);
-
-                // Set the style according to the theme.
-                if (darkTheme) {
-                    dialogBuilder = new AlertDialog.Builder(parentActivity, R.style.PrivacyBrowserAlertDialogDark);
-                } else {
-                    dialogBuilder = new AlertDialog.Builder(parentActivity, R.style.PrivacyBrowserAlertDialogLight);
-                }
-
-                // Set the message.
-                dialogBuilder.setMessage(R.string.orbot_proxy_not_installed);
-
-                // Set the positive button.
-                dialogBuilder.setPositiveButton(R.string.close, (DialogInterface dialog, int which) -> {
-                    // Do nothing.  The `AlertDialog` will close automatically.
-                });
-
-                // Convert `dialogBuilder` to `alertDialog`.
-                AlertDialog alertDialog = dialogBuilder.create();
-
-                // Make it so.
-                alertDialog.show();
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/ProxyHelper.java b/app/src/main/java/com/stoutner/privacybrowser/helpers/ProxyHelper.java
new file mode 100644 (file)
index 0000000..a666208
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+ *
+ * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+ *
+ * Privacy Browser is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Privacy Browser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.stoutner.privacybrowser.helpers;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Proxy;
+import android.os.Build;
+import android.os.Parcelable;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import com.stoutner.privacybrowser.activities.MainWebViewActivity;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class ProxyHelper {
+    public static final String NONE = "None";
+    public static final String TOR = "Tor";
+    public static final String I2P = "I2P";
+    public static final String CUSTOM = "Custom";
+
+    public static void setProxy(Context context, String mode) {
+        // Initialize the proxy host and port strings.
+        String proxyHost = "0";
+        String proxyPort = "0";
+
+        // Run the commands that correlate to the proxy mode.
+        switch (mode) {
+            case NONE:
+                // Clear the proxy values.
+                System.clearProperty("proxyHost");
+                System.clearProperty("proxyHost");
+                break;
+
+            case TOR:
+                // Update the proxy host and port strings.
+                proxyHost = "localhost";
+                proxyPort = "8118";
+
+                // Set the proxy values
+                System.setProperty("proxyHost", proxyHost);
+                System.setProperty("proxyPort", proxyPort);
+
+                // Ask Orbot to connect if its current status is not `"ON"`.
+                if (!MainWebViewActivity.orbotStatus.equals("ON")) {
+                    // Request Orbot to start.
+                    Intent orbotIntent = new Intent("org.torproject.android.intent.action.START");
+
+                    // Send the intent to the Orbot package.
+                    orbotIntent.setPackage("org.torproject.android");
+
+                    // Request a status response be sent back to this package.
+                    orbotIntent.putExtra("org.torproject.android.intent.extra.PACKAGE_NAME", context.getPackageName());
+
+                    // Make it so.
+                    context.sendBroadcast(orbotIntent);
+                }
+                break;
+
+            case I2P:
+                // Update the proxy host and port strings.
+                proxyHost = "localhost";
+                proxyPort = "4444";
+
+                // Set the proxy values
+                System.setProperty("proxyHost", proxyHost);
+                System.setProperty("proxyPort", proxyPort);
+                break;
+
+            case CUSTOM:
+                // Update the proxy host and port strings.
+                proxyHost = "0";
+                proxyPort = "0";
+
+                // Set the proxy values
+                System.setProperty("proxyHost", proxyHost);
+                System.setProperty("proxyPort", proxyPort);
+                break;
+        }
+
+        // Use reflection to apply the new proxy values.
+        try {
+            // Get the application and APK classes.  Suppress the lint warning that reflection may not always work in the future and on all devices.
+            Class applicationClass = Class.forName("android.app.Application");
+            @SuppressLint("PrivateApi") Class loadedApkClass = Class.forName("android.app.LoadedApk");
+
+            // Get the declared fields.  Suppress the lint warning that `mLoadedApk` cannot be resolved.
+            @SuppressWarnings("JavaReflectionMemberAccess") Field methodLoadedApkField = applicationClass.getDeclaredField("mLoadedApk");
+            Field methodReceiversField = loadedApkClass.getDeclaredField("mReceivers");
+
+            // Allow the values to be changed.
+            methodLoadedApkField.setAccessible(true);
+            methodReceiversField.setAccessible(true);
+
+            // Get the APK object.
+            Object methodLoadedApkObject = methodLoadedApkField.get(context);
+
+            // Get an array map of the receivers.
+            ArrayMap receivers = (ArrayMap) methodReceiversField.get(methodLoadedApkObject);
+
+            // Set the proxy if the receivers has at least one entry.
+            if (receivers != null) {
+                for (Object receiverMap : receivers.values()) {
+                    for (Object receiver : ((ArrayMap) receiverMap).keySet()) {
+                        // Get the receiver class.
+                        // `Class<?>`, which is an `unbounded wildcard parameterized type`, must be used instead of `Class`, which is a `raw type`.  Otherwise, `receiveClass.getDeclaredMethod()` is unhappy.
+                        Class<?> receiverClass = receiver.getClass();
+
+                        // Apply the new proxy settings to any classes whose names contain `ProxyChangeListener`.
+                        if (receiverClass.getName().contains("ProxyChangeListener")) {
+                            // Get the `onReceive` method from the class.
+                            Method onReceiveMethod = receiverClass.getDeclaredMethod("onReceive", Context.class, Intent.class);
+
+                            // Create a proxy change intent.
+                            Intent proxyChangeIntent = new Intent(Proxy.PROXY_CHANGE_ACTION);
+
+                            if (Build.VERSION.SDK_INT >= 21) {
+                                // Get a proxy info class.
+                                // `Class<?>`, which is an `unbounded wildcard parameterized type`, must be used instead of `Class`, which is a `raw type`.  Otherwise, `proxyInfoClass.getMethod()` is unhappy.
+                                Class<?> proxyInfoClass = Class.forName("android.net.ProxyInfo");
+
+                                // Get the build direct proxy method from the proxy info class.
+                                Method buildDirectProxyMethod = proxyInfoClass.getMethod("buildDirectProxy", String.class, Integer.TYPE);
+
+                                // Populate a proxy info object with the new proxy information.
+                                Object proxyInfoObject = buildDirectProxyMethod.invoke(proxyInfoClass, proxyHost, Integer.valueOf(proxyPort));
+
+                                // Add the proxy info object into the proxy change intent.
+                                proxyChangeIntent.putExtra("proxy", (Parcelable) proxyInfoObject);
+                            }
+
+                            // Pass the proxy change intent to the `onReceive` method of the receiver class.
+                            onReceiveMethod.invoke(receiver, context, proxyChangeIntent);
+                        }
+                    }
+                }
+            }
+        } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException exception) {
+            Log.d("enableProxyThroughOrbot", "Exception: " + exception);
+        }
+    }
+}
\ No newline at end of file
index f877745580097b4054484118f16db0eb54859ca3..21ab2c64b19504f4169e4358b5bdebe73b0c7db2 100644 (file)
@@ -126,6 +126,9 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     // Track swipe to refresh.
     private boolean swipeToRefresh;
 
+    // Track a URL waiting for a proxy.
+    private String waitingForProxyUrlString = "";
+
     // The nested scrolling child helper is used throughout the class.
     private NestedScrollingChildHelper nestedScrollingChildHelper;
 
@@ -659,6 +662,22 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     }
 
 
+    // Waiting for proxy.
+    public void setWaitingForProxyUrlString(String urlString) {
+        // Store the waiting for proxy URL string.
+        waitingForProxyUrlString = urlString;
+    }
+
+    public String getWaitingForProxyUrlString() {
+        // Return the waiting for proxy URL string.
+        return waitingForProxyUrlString;
+    }
+
+    public void resetWaitingForProxyUrlString() {
+        // Clear the waiting for proxy URL string.
+        waitingForProxyUrlString = "";
+    }
+
     // Scroll range.
     public int getHorizontalScrollRange() {
         // Return the horizontal scroll range.
diff --git a/app/src/main/res/drawable/.idea/codeStyles/Project.xml b/app/src/main/res/drawable/.idea/codeStyles/Project.xml
new file mode 100644 (file)
index 0000000..ae78c11
--- /dev/null
@@ -0,0 +1,113 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <codeStyleSettings language="XML">
+      <arrangement>
+        <rules>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>xmlns:android</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>xmlns:.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*:id</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*:name</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>name</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>style</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>ANDROID_ATTRIBUTE_ORDER</order>
+            </rule>
+          </section>
+          <section>
+            <rule>
+              <match>
+                <AND>
+                  <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
+                  <XML_NAMESPACE>.*</XML_NAMESPACE>
+                </AND>
+              </match>
+              <order>BY_NAME</order>
+            </rule>
+          </section>
+        </rules>
+      </arrangement>
+    </codeStyleSettings>
+  </code_scheme>
+</component>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/.idea/misc.xml b/app/src/main/res/drawable/.idea/misc.xml
new file mode 100644 (file)
index 0000000..fcfc828
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CMakeSettings">
+    <configurations>
+      <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
+    </configurations>
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/.idea/modules.xml b/app/src/main/res/drawable/.idea/modules.xml
new file mode 100644 (file)
index 0000000..1b04628
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/drawable.iml" filepath="$PROJECT_DIR$/.idea/drawable.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/.idea/vcs.xml b/app/src/main/res/drawable/.idea/vcs.xml
new file mode 100644 (file)
index 0000000..bc59970
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../../../../.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/.idea/workspace.xml b/app/src/main/res/drawable/.idea/workspace.xml
new file mode 100644 (file)
index 0000000..7fe933f
--- /dev/null
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="300aa3b2-5467-4b77-b970-a3e70210d389" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/../../assets/shared_images/open_in_browser_dark.png" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../../assets/shared_images/open_in_browser_light.png" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/ProxyNotInstalledDialog.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/WaitingForProxyDialog.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/proxy_disabled_dark.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/proxy_disabled_light.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/proxy_enabled_dark.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/proxy_enabled_light.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/proxy_ghosted_dark.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/proxy_ghosted_light.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../layout/waiting_for_proxy_dialog.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../../../../.idea/assetWizardSettings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../../../../.idea/assetWizardSettings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../../../../.idea/dictionaries/soren.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../../../../../.idea/dictionaries/soren.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../../../build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/../../../../build.gradle" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/de/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/de/about_licenses_dark.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/de/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/de/about_licenses_light.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/en/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/en/about_licenses_dark.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/en/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/en/about_licenses_light.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/es/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/es/about_licenses_dark.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/es/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/es/about_licenses_light.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/fr/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/fr/about_licenses_dark.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/fr/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/fr/about_licenses_light.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/it/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/it/about_licenses_dark.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/it/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/it/about_licenses_light.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/ru/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/ru/about_licenses_dark.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/ru/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/ru/about_licenses_light.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/tr/about_licenses_dark.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/tr/about_licenses_dark.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../assets/tr/about_licenses_light.html" beforeDir="false" afterPath="$PROJECT_DIR$/../../assets/tr/about_licenses_light.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/GuideActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/GuideActivity.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/fragments/SettingsFragment.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/fragments/SettingsFragment.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java" beforeDir="false" afterPath="$PROJECT_DIR$/../../java/com/stoutner/privacybrowser/helpers/ProxyHelper.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app_bar_disabled_dark.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_disabled_dark.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app_bar_disabled_light.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_disabled_light.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app_bar_enabled_dark.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_enabled_dark.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app_bar_enabled_light.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_enabled_light.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app_bar_ghosted_dark.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_ghosted_dark.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app_bar_ghosted_light.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app_bar_ghosted_light.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../layout/about_tab_version.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../layout/about_tab_version.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../layout/unencrypted_website.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../layout/unencrypted_website_dialog.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../layout/view_ssl_certificate.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../layout/view_ssl_certificate_dialog.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../menu/webview_options_menu.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../menu/webview_options_menu.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../values-de/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-de/strings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../values-es/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-es/strings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../values-fr/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-fr/strings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../values-it/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-it/strings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../values-ru/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-ru/strings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../values-tr/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values-tr/strings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../values/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../values/strings.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../xml/preferences.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../xml/preferences.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../../../../../build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/../../../../../build.gradle" afterDir="false" />
+    </list>
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../../../.." />
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="1213" />
+    <option name="y" value="595" />
+    <option name="width" value="2289" />
+    <option name="height" value="1457" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane" />
+      <pane id="Scope" />
+      <pane id="PackagesPane" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="android.sdk.path" value="$USER_HOME$/Android/Sdk" />
+    <property name="last_opened_file_path" value="$USER_HOME$/Lightning-Browser" />
+    <property name="settings.editor.selected.configurable" value="AndroidSdkUpdater" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager">
+    <configuration default="true" type="JUnit" factoryName="JUnit">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" value="-ea" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <envs />
+      <patterns />
+      <method />
+    </configuration>
+    <configuration name="&lt;template&gt;" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" default="true" selected="false">
+      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
+    </configuration>
+    <configuration default="true" type="Applet">
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="Application" factoryName="Application">
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="TestNG">
+      <option name="TEST_OBJECT" value="CLASS" />
+      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
+      <properties />
+      <listeners />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="300aa3b2-5467-4b77-b970-a3e70210d389" name="Default Changelist" comment="" />
+      <created>1576705464689</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1576705464689</updated>
+    </task>
+    <servers />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-8" y="0" width="3668" height="2068" extended-state="6" />
+    <layout>
+      <window_info active="true" content_ui="combo" id="Project" visible="true" weight="0.3297402" />
+      <window_info id="Structure" side_tool="true" />
+      <window_info id="Image Layers" />
+      <window_info id="Designer" />
+      <window_info id="Resources Explorer" />
+      <window_info id="Capture Tool" />
+      <window_info id="Favorites" side_tool="true" />
+      <window_info id="Captures" order="0" weight="0.25" />
+      <window_info anchor="bottom" id="Version Control" />
+      <window_info anchor="bottom" id="TODO" />
+      <window_info anchor="bottom" id="Terminal" />
+      <window_info anchor="bottom" id="Event Log" side_tool="true" />
+      <window_info anchor="right" id="Capture Analysis" />
+      <window_info anchor="right" id="Theme Preview" />
+      <window_info anchor="right" id="Palette&#9;" />
+    </layout>
+  </component>
+</project>
\ No newline at end of file
index a4f01a9766b78267c6688f0e2e071e020a807362..33a6f07259befc0c9ec8569aa37dd5d70220aede 100644 (file)
@@ -1,4 +1,4 @@
-<!-- `app_bar_disabled_dark.xml` comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
+<!-- This icon comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:width="24dp"
index 2f23e4f3c0cce87e9f561d4df71bca90195dc369..aefbca92f7b586488c343354fb1df1902d7f7c42 100644 (file)
@@ -1,4 +1,4 @@
-<!-- `app_bar_disabled_light.xml` comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
+<!-- This icon comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:width="24dp"
index efca7b215d7f00e744ec0d3607e8f6b75696082e..6d037b41101f02bac05f8872e831ed6d65d25794 100644 (file)
@@ -1,4 +1,4 @@
-<!-- `app_bar_enabled_dark.xml` comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
+<!-- This icon comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:width="24dp"
index c0751cdad1f63140ca62b4458eeaf259bc6f2e81..88b81f82ff077d0604316644e25d6f7043750e34 100644 (file)
@@ -1,4 +1,4 @@
-<!-- `app_bar_enabled_light.xml` comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
+<!-- This icon comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:width="24dp"
index a854f04ee12eceac5b79915cbeaa85482d100737..dce17b04806d85646ebcf4bc668d0bac80bb6cd2 100644 (file)
@@ -1,10 +1,10 @@
-<!-- `app_bar_ghosted_dark.xml` comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
+<!-- This icon comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
     android:height="24dp"
-    android:viewportWidth="24.0"
-    android:viewportHeight="24.0" >
+    android:width="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0" >
 
     <!-- A hard coded color must be used until the minimum API >= 21.  Then `@color` may be used instead. -->
     <path
index fba36f51974eb5e2ba4735a0dd65eaee4d225238..163c9e1f48bf5631bd8230450d7ad7e800451e32 100644 (file)
@@ -1,10 +1,10 @@
-<!-- `app_bar_ghosted_light.xml` comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
+<!-- This icon comes from the Android Material icon set, where it is called `payment`.  It is released under the Apache License 2.0. -->
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
     android:height="24dp"
-    android:viewportWidth="24.0"
-    android:viewportHeight="24.0" >
+    android:width="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0" >
 
     <!-- A hard coded color must be used until the minimum API >= 21.  Then `@color` may be used instead. -->
     <path
diff --git a/app/src/main/res/drawable/orbot_disabled_dark.xml b/app/src/main/res/drawable/orbot_disabled_dark.xml
deleted file mode 100644 (file)
index 8569ed1..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- `orbot_disabled_dark.xml` comes from the Orbot project.  It is a modified version of <https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png>,
-    which is released under the 3-clause BSD license.  Modifications copyright Soren Stoutner <soren@stoutner.com> 2017.  The resulting image is released under the GPLv3+ license. -->
-
-<!-- `tools:ignore="VectorRaster"` removes the lint warning about `android:autoMirrored="true"` not applying to API < 21. -->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:autoMirrored="true"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportHeight="33.86667"
-    android:viewportWidth="33.866665"
-    tools:ignore="VectorRaster" >
-
-    <!-- We have to use a hard coded color until API >= 21.  Then we can use `@color`. -->
-    <path
-        android:fillColor="#FF9E9E9E"
-        android:pathData="m12.18,32.04c-4.14,-1.92 -6.77,-6.03 -6.77,-10.58 0,-4.35 1.64,-7.16 5.91,-10.12 1.46,-1.01 2.25,-1.97 2.45,-2.98 0.21,-1.03 0.52,-1.41 1.02,-1.22 0.4,0.15 1.72,0.28 2.93,0.28 1.94,0 2.24,0.15 2.52,1.27 0.18,0.7 1.25,1.92 2.39,2.7 4.22,2.92 5.84,5.75 5.82,10.17 -0.02,4.59 -2.89,8.88 -7.12,10.64 -2.51,1.05 -6.7,0.97 -9.17,-0.18zM14.95,5.83c-1.05,-1.13 -1.48,-4.92 -0.56,-4.92 0.96,0 2.54,2.69 2.54,4.33 0,1.96 -0.56,2.13 -1.99,0.59zM17.44,6.25c0,-0.68 1.54,-2.33 2.17,-2.33 0.68,0 0.31,1.37 -0.58,2.18 -1.11,1.01 -1.59,1.05 -1.59,0.16z" android:strokeWidth="0.50134861"/>
-</vector>
diff --git a/app/src/main/res/drawable/orbot_disabled_light.xml b/app/src/main/res/drawable/orbot_disabled_light.xml
deleted file mode 100644 (file)
index 0713b72..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- `orbot_disabled_light.xml` comes from the Orbot project.  It is a modified version of <https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png>,
-    which is released under the 3-clause BSD license.  Modifications copyright Soren Stoutner <soren@stoutner.com> 2017.  The resulting image is released under the GPLv3+ license. -->
-
-<!-- `tools:ignore="VectorRaster"` removes the lint warning about `android:autoMirrored="true"` not applying to API < 21. -->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:autoMirrored="true"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportHeight="33.86667"
-    android:viewportWidth="33.866665"
-    tools:ignore="VectorRaster" >
-
-    <!-- We have to use a hard coded color until API >= 21.  Then we can use `@color`. -->
-    <path
-        android:fillColor="#FF757575"
-        android:pathData="m12.18,32.04c-4.14,-1.92 -6.77,-6.03 -6.77,-10.58 0,-4.35 1.64,-7.16 5.91,-10.12 1.46,-1.01 2.25,-1.97 2.45,-2.98 0.21,-1.03 0.52,-1.41 1.02,-1.22 0.4,0.15 1.72,0.28 2.93,0.28 1.94,0 2.24,0.15 2.52,1.27 0.18,0.7 1.25,1.92 2.39,2.7 4.22,2.92 5.84,5.75 5.82,10.17 -0.02,4.59 -2.89,8.88 -7.12,10.64 -2.51,1.05 -6.7,0.97 -9.17,-0.18zM14.95,5.83c-1.05,-1.13 -1.48,-4.92 -0.56,-4.92 0.96,0 2.54,2.69 2.54,4.33 0,1.96 -0.56,2.13 -1.99,0.59zM17.44,6.25c0,-0.68 1.54,-2.33 2.17,-2.33 0.68,0 0.31,1.37 -0.58,2.18 -1.11,1.01 -1.59,1.05 -1.59,0.16z" android:strokeWidth="0.50134861"/>
-</vector>
diff --git a/app/src/main/res/drawable/orbot_enabled_dark.xml b/app/src/main/res/drawable/orbot_enabled_dark.xml
deleted file mode 100644 (file)
index be951fc..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- `orbot_enabled_dark.xml` comes from the Orbot project.  It is a modified version of <https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png>,
-    which is released under the 3-clause BSD license.  Modifications copyright Soren Stoutner <soren@stoutner.com> 2017.  The resulting image is released under the GPLv3+ license. -->
-
-<!-- `tools:ignore="VectorRaster"` removes the lint warning about `android:autoMirrored="true"` not applying to API < 21. -->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:autoMirrored="true"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportHeight="33.86667"
-    android:viewportWidth="33.866665"
-    tools:ignore="VectorRaster" >
-
-    <!-- We have to use a hard coded color until API >= 21.  Then we can use `@color`. -->
-    <path
-        android:fillColor="#FF1E88E5"
-        android:pathData="m12.18,32.04c-4.14,-1.92 -6.77,-6.03 -6.77,-10.58 0,-4.35 1.64,-7.16 5.91,-10.12 1.46,-1.01 2.25,-1.97 2.45,-2.98 0.21,-1.03 0.52,-1.41 1.02,-1.22 0.4,0.15 1.72,0.28 2.93,0.28 1.94,0 2.24,0.15 2.52,1.27 0.18,0.7 1.25,1.92 2.39,2.7 4.22,2.92 5.84,5.75 5.82,10.17 -0.02,4.59 -2.89,8.88 -7.12,10.64 -2.51,1.05 -6.7,0.97 -9.17,-0.18zM14.95,5.83c-1.05,-1.13 -1.48,-4.92 -0.56,-4.92 0.96,0 2.54,2.69 2.54,4.33 0,1.96 -0.56,2.13 -1.99,0.59zM17.44,6.25c0,-0.68 1.54,-2.33 2.17,-2.33 0.68,0 0.31,1.37 -0.58,2.18 -1.11,1.01 -1.59,1.05 -1.59,0.16z" android:strokeWidth="0.50134861"/>
-</vector>
diff --git a/app/src/main/res/drawable/orbot_enabled_light.xml b/app/src/main/res/drawable/orbot_enabled_light.xml
deleted file mode 100644 (file)
index 9b28c71..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- `orbot_enabled_light.xml` comes from the Orbot project.  It is a modified version of <https://gitweb.torproject.org/orbot.git/tree/app/src/main/res/drawable-xxxhdpi/ic_stat_tor.png>,
-    which is released under the 3-clause BSD license.  Modifications copyright Soren Stoutner <soren@stoutner.com> 2017.  The resulting image is released under the GPLv3+ license. -->
-
-<!-- `tools:ignore="VectorRaster"` removes the lint warning about `android:autoMirrored="true"` not applying to API < 21. -->
-<vector
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:autoMirrored="true"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportHeight="33.86667"
-    android:viewportWidth="33.866665"
-    tools:ignore="VectorRaster" >
-
-    <!-- We have to use a hard coded color until API >= 21.  Then we can use `@color`. -->
-    <path
-        android:fillColor="#FF1565C0"
-        android:pathData="m12.18,32.04c-4.14,-1.92 -6.77,-6.03 -6.77,-10.58 0,-4.35 1.64,-7.16 5.91,-10.12 1.46,-1.01 2.25,-1.97 2.45,-2.98 0.21,-1.03 0.52,-1.41 1.02,-1.22 0.4,0.15 1.72,0.28 2.93,0.28 1.94,0 2.24,0.15 2.52,1.27 0.18,0.7 1.25,1.92 2.39,2.7 4.22,2.92 5.84,5.75 5.82,10.17 -0.02,4.59 -2.89,8.88 -7.12,10.64 -2.51,1.05 -6.7,0.97 -9.17,-0.18zM14.95,5.83c-1.05,-1.13 -1.48,-4.92 -0.56,-4.92 0.96,0 2.54,2.69 2.54,4.33 0,1.96 -0.56,2.13 -1.99,0.59zM17.44,6.25c0,-0.68 1.54,-2.33 2.17,-2.33 0.68,0 0.31,1.37 -0.58,2.18 -1.11,1.01 -1.59,1.05 -1.59,0.16z" android:strokeWidth="0.50134861"/>
-</vector>
diff --git a/app/src/main/res/drawable/proxy_disabled_dark.xml b/app/src/main/res/drawable/proxy_disabled_dark.xml
new file mode 100644 (file)
index 0000000..4cffb07
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- This icon comes from the Android Material icon set, where it is called `open_in_browser`.  It is released under the Apache License 2.0. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0" >
+
+    <!-- A hard coded color must be used until the minimum API >= 21.  Then `@color` may be used instead. -->
+    <path
+        android:fillColor="#FF9E9E9E"
+        android:pathData="M19,4L5,4c-1.11,0 -2,0.9 -2,2v12c0,1.1 0.89,2 2,2h4v-2L5,18L5,8h14v10h-4v2h4c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.89,-2 -2,-2zM12,10l-4,4h3v6h2v-6h3l-4,-4z" />
+</vector>
diff --git a/app/src/main/res/drawable/proxy_disabled_light.xml b/app/src/main/res/drawable/proxy_disabled_light.xml
new file mode 100644 (file)
index 0000000..00a2eba
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- This icon comes from the Android Material icon set, where it is called `open_in_browser`.  It is released under the Apache License 2.0. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0" >
+
+    <!-- A hard coded color must be used until the minimum API >= 21.  Then `@color` may be used instead. -->
+    <path
+        android:fillColor="#FF757575"
+        android:pathData="M19,4L5,4c-1.11,0 -2,0.9 -2,2v12c0,1.1 0.89,2 2,2h4v-2L5,18L5,8h14v10h-4v2h4c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.89,-2 -2,-2zM12,10l-4,4h3v6h2v-6h3l-4,-4z" />
+</vector>
diff --git a/app/src/main/res/drawable/proxy_enabled_dark.xml b/app/src/main/res/drawable/proxy_enabled_dark.xml
new file mode 100644 (file)
index 0000000..597d97f
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- This icon comes from the Android Material icon set, where it is called `open_in_browser`.  It is released under the Apache License 2.0. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0" >
+
+    <!-- A hard coded color must be used until the minimum API >= 21.  Then `@color` may be used instead. -->
+    <path
+        android:fillColor="#FF1E88E5"
+        android:pathData="M19,4L5,4c-1.11,0 -2,0.9 -2,2v12c0,1.1 0.89,2 2,2h4v-2L5,18L5,8h14v10h-4v2h4c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.89,-2 -2,-2zM12,10l-4,4h3v6h2v-6h3l-4,-4z" />
+</vector>
diff --git a/app/src/main/res/drawable/proxy_enabled_light.xml b/app/src/main/res/drawable/proxy_enabled_light.xml
new file mode 100644 (file)
index 0000000..f67235c
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- This icon comes from the Android Material icon set, where it is called `open_in_browser`.  It is released under the Apache License 2.0. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0" >
+
+    <!-- A hard coded color must be used until the minimum API >= 21.  Then `@color` may be used instead. -->
+    <path
+        android:fillColor="#FF1565C0"
+        android:pathData="M19,4L5,4c-1.11,0 -2,0.9 -2,2v12c0,1.1 0.89,2 2,2h4v-2L5,18L5,8h14v10h-4v2h4c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.89,-2 -2,-2zM12,10l-4,4h3v6h2v-6h3l-4,-4z" />
+</vector>
diff --git a/app/src/main/res/drawable/proxy_ghosted_dark.xml b/app/src/main/res/drawable/proxy_ghosted_dark.xml
new file mode 100644 (file)
index 0000000..ccc948b
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- This icon comes from the Android Material icon set, where it is called `open_in_browser`.  It is released under the Apache License 2.0. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0" >
+
+    <!-- A hard coded color must be used until the minimum API >= 21.  Then `@color` may be used instead. -->
+    <path
+        android:fillColor="#FF616161"
+        android:pathData="M19,4L5,4c-1.11,0 -2,0.9 -2,2v12c0,1.1 0.89,2 2,2h4v-2L5,18L5,8h14v10h-4v2h4c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.89,-2 -2,-2zM12,10l-4,4h3v6h2v-6h3l-4,-4z" />
+</vector>
diff --git a/app/src/main/res/drawable/proxy_ghosted_light.xml b/app/src/main/res/drawable/proxy_ghosted_light.xml
new file mode 100644 (file)
index 0000000..5bf8795
--- /dev/null
@@ -0,0 +1,13 @@
+<!-- This icon comes from the Android Material icon set, where it is called `open_in_browser`.  It is released under the Apache License 2.0. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0" >
+
+    <!-- A hard coded color must be used until the minimum API >= 21.  Then `@color` may be used instead. -->
+    <path
+        android:fillColor="#FFB7B7B7"
+        android:pathData="M19,4L5,4c-1.11,0 -2,0.9 -2,2v12c0,1.1 0.89,2 2,2h4v-2L5,18L5,8h14v10h-4v2h4c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.89,-2 -2,-2zM12,10l-4,4h3v6h2v-6h3l-4,-4z" />
+</vector>
index df489fedeef704638414f5e7b2df2891563840c0..f386bb5a369880b73351e755a3a775f66df7e364 100644 (file)
                 android:layout_width="wrap_content"
                 android:textIsSelectable="true" />
 
+            <TextView
+                android:id="@+id/i2p"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:textIsSelectable="true" />
+
             <TextView
                 android:id="@+id/open_keychain"
                 android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/unencrypted_website.xml b/app/src/main/res/layout/unencrypted_website.xml
deleted file mode 100644 (file)
index 59b6cd6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2017 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="match_parent"
-    android:layout_width="match_parent"
-    android:padding="10dp"
-    android:textColor="?attr/redText"
-    android:text="@string/no_ssl_certificate" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/unencrypted_website_dialog.xml b/app/src/main/res/layout/unencrypted_website_dialog.xml
new file mode 100644 (file)
index 0000000..59b6cd6
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2017 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent"
+    android:padding="10dp"
+    android:textColor="?attr/redText"
+    android:text="@string/no_ssl_certificate" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_ssl_certificate.xml b/app/src/main/res/layout/view_ssl_certificate.xml
deleted file mode 100644 (file)
index 89da39c..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright © 2016-2017,2019 Soren Stoutner <soren@stoutner.com>.
-
-  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
-
-  Privacy Browser is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation, either version 3 of the License, or
-  (at your option) any later version.
-
-  Privacy Browser is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
-
-<ScrollView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="wrap_content"
-    android:layout_width="wrap_content" >
-
-    <LinearLayout
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:padding="10dp"
-        android:orientation="vertical" >
-
-        <!-- Domain. -->
-        <TextView
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:layout_marginTop="5dp"
-            android:text="@string/domain"
-            android:textAllCaps="true"
-            android:textStyle="bold"
-            android:textColor="?attr/sslTitle" />
-
-        <TextView
-            android:id="@+id/domain"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-
-        <TextView
-            android:id="@+id/ip_addresses"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"/>
-
-        <!-- Issued To. -->
-        <TextView
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:layout_marginTop="15dp"
-            android:text="@string/issued_to"
-            android:textAllCaps="true"
-            android:textStyle="bold"
-            android:textColor="?attr/sslTitle" />
-
-        <TextView
-            android:id="@+id/issued_to_cname"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-
-        <TextView
-            android:id="@+id/issued_to_oname"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-
-        <TextView
-            android:id="@+id/issued_to_uname"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-
-
-        <!-- Issued By. -->
-        <TextView
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:layout_marginTop="15dp"
-            android:text="@string/issued_by"
-            android:textAllCaps="true"
-            android:textStyle="bold"
-            android:textColor="?attr/sslTitle" />
-
-        <TextView
-            android:id="@+id/issued_by_cname"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-
-        <TextView
-            android:id="@+id/issued_by_oname"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-
-        <TextView
-            android:id="@+id/issued_by_uname"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-
-
-        <!-- Valid Dates. -->
-        <TextView
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:layout_marginTop="15dp"
-            android:text="@string/valid_dates"
-            android:textAllCaps="true"
-            android:textStyle="bold"
-            android:textColor="?attr/sslTitle" />
-
-        <TextView
-            android:id="@+id/start_date"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-
-        <TextView
-            android:id="@+id/end_date"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content" />
-    </LinearLayout>
-</ScrollView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_ssl_certificate_dialog.xml b/app/src/main/res/layout/view_ssl_certificate_dialog.xml
new file mode 100644 (file)
index 0000000..89da39c
--- /dev/null
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2016-2017,2019 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<ScrollView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="wrap_content"
+    android:layout_width="wrap_content" >
+
+    <LinearLayout
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:padding="10dp"
+        android:orientation="vertical" >
+
+        <!-- Domain. -->
+        <TextView
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginTop="5dp"
+            android:text="@string/domain"
+            android:textAllCaps="true"
+            android:textStyle="bold"
+            android:textColor="?attr/sslTitle" />
+
+        <TextView
+            android:id="@+id/domain"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+
+        <TextView
+            android:id="@+id/ip_addresses"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"/>
+
+        <!-- Issued To. -->
+        <TextView
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="@string/issued_to"
+            android:textAllCaps="true"
+            android:textStyle="bold"
+            android:textColor="?attr/sslTitle" />
+
+        <TextView
+            android:id="@+id/issued_to_cname"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+
+        <TextView
+            android:id="@+id/issued_to_oname"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+
+        <TextView
+            android:id="@+id/issued_to_uname"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+
+
+        <!-- Issued By. -->
+        <TextView
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="@string/issued_by"
+            android:textAllCaps="true"
+            android:textStyle="bold"
+            android:textColor="?attr/sslTitle" />
+
+        <TextView
+            android:id="@+id/issued_by_cname"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+
+        <TextView
+            android:id="@+id/issued_by_oname"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+
+        <TextView
+            android:id="@+id/issued_by_uname"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+
+
+        <!-- Valid Dates. -->
+        <TextView
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="@string/valid_dates"
+            android:textAllCaps="true"
+            android:textStyle="bold"
+            android:textColor="?attr/sslTitle" />
+
+        <TextView
+            android:id="@+id/start_date"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+
+        <TextView
+            android:id="@+id/end_date"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content" />
+    </LinearLayout>
+</ScrollView>
\ No newline at end of file
diff --git a/app/src/main/res/layout/waiting_for_proxy_dialog.xml b/app/src/main/res/layout/waiting_for_proxy_dialog.xml
new file mode 100644 (file)
index 0000000..4a2b6c8
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  Copyright © 2019 Soren Stoutner <soren@stoutner.com>.
+
+  This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
+
+  Privacy Browser is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Privacy Browser is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Privacy Browser.  If not, see <http://www.gnu.org/licenses/>. -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="wrap_content"
+    android:layout_width="wrap_content"
+    android:orientation="vertical" >
+
+    <ProgressBar
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:layout_marginTop="20dp"
+        android:layout_marginBottom="5dp" />
+
+    <TextView
+        android:id="@+id/waiting_for_proxy_textview"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:textAlignment="center"
+        android:layout_marginTop="5dp"
+        android:layout_marginBottom="20dp"
+        android:text="@string/waiting_for_orbot"
+        android:textSize="22sp"
+        android:textStyle="bold"
+        android:textColor="?android:textColorPrimary" />
+</LinearLayout>
\ No newline at end of file
index f3d810545ea653efec1662d41dab56a029f79b26..744873fc92d9bea4e95e01f75faa8837e97e291d 100644 (file)
         </menu>
     </item>
 
+    <item
+        android:id="@+id/proxy"
+        android:title="@string/proxy"
+        android:orderInCategory="900"
+        app:showAsAction="never" >
+
+        <menu>
+            <group android:checkableBehavior="single" >
+                <item
+                    android:id="@+id/proxy_none"
+                    android:title="@string/proxy_none"
+                    android:orderInCategory="910"
+                    app:showAsAction="never" />
+
+                <item
+                    android:id="@+id/proxy_tor"
+                    android:title="@string/proxy_tor"
+                    android:orderInCategory="920"
+                    app:showAsAction="never" />
+
+                <item
+                    android:id="@+id/proxy_i2p"
+                    android:title="@string/proxy_i2p"
+                    android:orderInCategory="930"
+                    app:showAsAction="never" />
+
+                <item
+                    android:id="@+id/proxy_custom"
+                    android:title="@string/proxy_custom"
+                    android:orderInCategory="940"
+                    app:showAsAction="never" />
+            </group>
+        </menu>
+    </item>
+
     <item
         android:id="@+id/page"
         android:title="@string/page"
-        android:orderInCategory="900"
+        android:orderInCategory="1000"
         app:showAsAction="never" >
 
         <menu>
             <item
                 android:id="@+id/user_agent"
                 android:title="@string/options_user_agent"
-                android:orderInCategory="910"
+                android:orderInCategory="1010"
                 app:showAsAction="never" >
 
                 <menu>
-                    <group android:checkableBehavior ="single">
+                    <group android:checkableBehavior="single">
                         <item
                             android:id="@+id/user_agent_privacy_browser"
                             android:title="@string/user_agent_privacy_browser"
-                            android:orderInCategory="911"
+                            android:orderInCategory="1011"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_webview_default"
                             android:title="@string/user_agent_webview_default"
-                            android:orderInCategory="912"
+                            android:orderInCategory="1012"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_firefox_on_android"
                             android:title="@string/user_agent_firefox_on_android"
-                            android:orderInCategory="913"
+                            android:orderInCategory="1013"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_chrome_on_android"
                             android:title="@string/user_agent_chrome_on_android"
-                            android:orderInCategory="914"
+                            android:orderInCategory="1014"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_safari_on_ios"
                             android:title="@string/user_agent_safari_on_ios"
-                            android:orderInCategory="915"
+                            android:orderInCategory="1015"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_firefox_on_linux"
                             android:title="@string/user_agent_firefox_on_linux"
-                            android:orderInCategory="916"
+                            android:orderInCategory="1016"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_chromium_on_linux"
                             android:title="@string/user_agent_chromium_on_linux"
-                            android:orderInCategory="917"
+                            android:orderInCategory="1017"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_firefox_on_windows"
                             android:title="@string/user_agent_firefox_on_windows"
-                            android:orderInCategory="918"
+                            android:orderInCategory="1018"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_chrome_on_windows"
                             android:title="@string/user_agent_chrome_on_windows"
-                            android:orderInCategory="919"
+                            android:orderInCategory="1019"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_edge_on_windows"
                             android:title="@string/user_agent_edge_on_windows"
-                            android:orderInCategory="920"
+                            android:orderInCategory="1020"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_internet_explorer_on_windows"
                             android:title="@string/user_agent_internet_explorer_on_windows"
-                            android:orderInCategory="921"
+                            android:orderInCategory="1021"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_safari_on_macos"
                             android:title="@string/user_agent_safari_on_macos"
-                            android:orderInCategory="922"
+                            android:orderInCategory="1022"
                             app:showAsAction="never" />
 
                         <item
                             android:id="@+id/user_agent_custom"
                             android:title="@string/user_agent_custom"
-                            android:orderInCategory="923"
+                            android:orderInCategory="1023"
                             app:showAsAction="never" />
                     </group>
                 </menu>
             <item
                 android:id="@+id/swipe_to_refresh"
                 android:title="@string/swipe_to_refresh_options_menu"
-                android:orderInCategory="930"
+                android:orderInCategory="1030"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/wide_viewport"
                 android:title="@string/wide_viewport"
-                android:orderInCategory="940"
+                android:orderInCategory="1040"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/display_images"
                 android:title="@string/display_images"
-                android:orderInCategory="950"
+                android:orderInCategory="1050"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/night_mode"
                 android:title="@string/options_night_mode"
-                android:orderInCategory="960"
+                android:orderInCategory="1060"
                 android:checkable="true"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/font_size"
                 android:title="@string/font_size"
-                android:orderInCategory="970"
+                android:orderInCategory="1070"
                 app:showAsAction="never" >
             </item>
 
             <item
                 android:id="@+id/find_on_page"
                 android:title="@string/find_on_page"
-                android:orderInCategory="980"
+                android:orderInCategory="1080"
                 app:showAsAction="never|collapseActionView" />
 
             <item
                 android:id="@+id/print"
                 android:title="@string/print"
-                android:orderInCategory="990"
+                android:orderInCategory="1090"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/save_as_image"
                 android:title="@string/save_as_image"
-                android:orderInCategory="1000"
+                android:orderInCategory="1100"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/add_to_homescreen"
                 android:title="@string/add_to_home_screen"
-                android:orderInCategory="1010"
+                android:orderInCategory="1110"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/view_source"
                 android:title="@string/view_source"
-                android:orderInCategory="1020"
+                android:orderInCategory="1120"
                 app:showAsAction="never" />
         </menu>
     </item>
     <item
         android:id="@+id/share"
         android:title="@string/share"
-        android:orderInCategory="1100"
+        android:orderInCategory="1200"
         app:showAsAction="never" >
 
         <menu>
             <item
                 android:id="@+id/share_url"
                 android:title="@string/share_url"
-                android:orderInCategory="1110"
+                android:orderInCategory="1210"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/open_with_app"
                 android:title="@string/open_with_app"
-                android:orderInCategory="1120"
+                android:orderInCategory="1220"
                 app:showAsAction="never" />
 
             <item
                 android:id="@+id/open_with_browser"
                 android:title="@string/open_with_browser"
-                android:orderInCategory="1130"
+                android:orderInCategory="1230"
                 app:showAsAction="never" />
         </menu>
     </item>
 
-    <item
-        android:id="@+id/proxy_through_orbot"
-        android:title="@string/proxy_through_orbot"
-        android:orderInCategory="1200"
-        android:checkable="true"
-        app:showAsAction="never" />
-
     <item
         android:id="@+id/refresh"
         android:title="@string/refresh"
index f4bb825537321360e45f620078752c1ff9d9dcbb..b1d58f21aeab559be50a03d9ee2bff1ecc6f4b73 100644 (file)
@@ -56,6 +56,7 @@
     <string name="new_tab">Neuer Tab</string>
     <string name="loading">Laden…</string>
     <string name="error">Fehler:</string>
+    <string name="apply">Anwenden</string>
 
     <!-- Loading Blocklists. -->
     <string name="loading_easylist">Lade EasyList</string>
     <string name="domain_name_instructions">*. kann als Wildcard-Subdomain verwendet werden (z.B. *.stoutner.com)</string>
     <string-array name="font_size_array">
         <item>Standardeinstellung</item>
-        <item>Custom font size</item>
+        <item>Benutzerdefinierte Schriftgröße</item>
     </string-array>
     <string-array name="swipe_to_refresh_array">
         <item>Standardeinstellung</item>
     <string name="ok">OK</string>
 
     <!-- Orbot. -->
-    <string name="orbot_proxy_not_installed">Orbot-Proxy wird nicht funktionieren, solange Orbot nicht installiert ist.</string>
-    <string name="waiting_for_orbot">Warte, bis sich Orbot verbindet...</string>  <!-- The WebView in API 19 does not like the ellipse character. -->
+    <string name="waiting_for_orbot">Warte, bis sich Orbot verbindet.</string>
 
     <!-- About Activity. -->
     <string name="about_privacy_browser">Über Privacy Browser</string>
         <string name="facebook_click_ids_summary">Entfernt “?fbclid=”, “&amp;fbclid=”, “?fbadid=” und “&amp;fbadid=” sowie alles danach aus URLs.</string>
         <string name="twitter_amp_redirects">Twitter AMP-Umleitungen</string>
         <string name="twitter_amp_redirects_summary">Entfernt “?amp=1” sowie alles danach URLs.</string>
-    <string name="tor">Tor</string>
-        <string name="proxy_through_orbot">Proxy durch Orbot</string>
-        <string name="proxy_through_orbot_summary">Sämtlichen Web-Verkehr durch Orbot mittels localhost:8118 leiten.</string>
-        <string name="tor_homepage">TOR-Homepage</string>
-        <string name="tor_search">TOR-Suche</string>
-        <string-array name="tor_search_entries">
-            <item>Searx</item>
-            <item>DuckDuckGo - JavaScript deaktiviert</item>
-            <item>DuckDuckGo - JavaScript aktiviert</item>
-            <item>Eigene</item>
-        </string-array>
-        <string name="tor_search_custom_url">eigene TOR-Such-URL</string>
     <string name="search">Suche</string>
         <string-array name="search_entries">
             <item>Startpage</item>
index c45b247754b43c99cec6d48ccc40a02a420ed213..71be98a55e1187109f8bedf72b4592f4f27dcb94 100644 (file)
@@ -52,6 +52,7 @@
     <string name="new_tab">Nueva pestaña</string>
     <string name="loading">Cargando…</string>
     <string name="error">Error:</string>
+    <string name="apply">Apply</string>
 
     <!-- Loading Blocklists. -->
     <string name="loading_easylist">Cargando EasyList</string>
     <string name="domain_name_instructions">*. puede ser añadido a un dominio para incluir todos los subdominios (p.ej. *.stoutner.com)</string>
     <string-array name="font_size_array">
         <item>Por defecto del sistema</item>
-        <item>Custom font size</item>
+        <item>Tamaño de letra personalizado</item>
     </string-array>
     <string-array name="swipe_to_refresh_array">
         <item>Por defecto del sistema</item>
     <string name="ok">OK</string>
 
     <!-- Orbot. -->
-    <string name="orbot_proxy_not_installed">Enviar a través de Orbot no funcionará a menos que se instale Orbot.</string>
-    <string name="waiting_for_orbot">Esperando a Orbot para conectar...</string>  <!-- The WebView in API 19 does not like the ellipse character. -->
+    <string name="waiting_for_orbot">Esperando a Orbot para conectar.</string>
 
     <!-- About Activity. -->
     <string name="about_privacy_browser">Acerca de Navegador Privado</string>
         <string name="facebook_click_ids_summary">Eliminar “?fbclid=”, “&amp;fbclid=”, “?fbadid=”, “&amp;fbadid=” y cualquier cosa tras ello de las URLs.</string>
         <string name="twitter_amp_redirects">Redirecciones de Twitter AMP</string>
         <string name="twitter_amp_redirects_summary">Eliminar “?amp=1” y cualquier cosa después de esto de las URLs.</string>
-    <string name="tor">Tor</string>
-        <string name="proxy_through_orbot">Enviar a través de Orbot</string>
-        <string name="proxy_through_orbot_summary">Enviar todo el tráfico web a través de Orbot en localhost:8118.</string>
-        <string name="tor_homepage">Página de inicio de Tor</string>
-        <string name="tor_search">Búsqueda en Tor</string>
-        <string-array name="tor_search_entries">
-            <item>Searx</item>
-            <item>DuckDuckGo - Javascript deshabilitado</item>
-            <item>DuckDuckGo - Javascript habilitado</item>
-            <item>Personalizado</item>
-        </string-array>
-        <string name="tor_search_custom_url">URL personalizada de búsqueda en Tor</string>
     <string name="search">Búsqueda</string>
         <string-array name="search_entries">
             <item>Startpage</item>
index bfae370c0a1158a1eafb5d971311d53a2485377b..b875be3b238b4d1e5b311f41fe4f0725e8989591 100644 (file)
@@ -53,6 +53,7 @@
     <string name="new_tab">Nouvel onglet</string>
     <string name="loading">Chargement…</string>
     <string name="error">Erreur :</string>
+    <string name="apply">Appliquer</string>
 
     <!-- Loading Blocklists. -->
     <string name="loading_easylist">Chargement EasyList</string>
     <string name="domain_name_instructions">Faire précéder par *. pour inclure l\'ensemble des sous-domaines (ex. *.stoutner.com)</string>
     <string-array name="font_size_array">
         <item>Réglages systèmes</item>
-        <item>Custom font size</item>
+        <item>Taille de police personnalisée</item>
     </string-array>
     <string-array name="swipe_to_refresh_array">
         <item>Réglages systèmes</item>
     <string name="ok">OK</string>
 
     <!-- Orbot. -->
-    <string name="orbot_proxy_not_installed">Le proxy Orbot ne fonctionnera pas à moins qu\'Orbot soit installé.</string>
-    <string name="waiting_for_orbot">En attente de connection d\'Orbot...</string>  <!-- The WebView in API 19 does not like the ellipse character. -->
+    <string name="waiting_for_orbot">En attente de connection d\'Orbot.</string>
 
     <!-- About Activity. -->
     <string name="about_privacy_browser">À propos</string>
         <string name="facebook_click_ids_summary">Supprime “?fbclid=”, “&amp;fbclid=”, “?fbadid=” et “&amp;fbadid=” et tout ce qui suit après ces URLs.</string>
         <string name="twitter_amp_redirects">Twitter AMP</string>
         <string name="twitter_amp_redirects_summary">Supprimer “?amp=1” et tout ce qui suit après cette URL.</string>
-    <string name="tor">Tor</string>
-        <string name="proxy_through_orbot">Proxy au travers d\'Orbot</string>
-        <string name="proxy_through_orbot_summary">Proxifier tout le trafic web au travers d\'Orbot via localhost:8118.</string>
-        <string name="tor_homepage">Tor - Accueil</string>
-        <string name="tor_search">Tor - Recherche</string>
-        <string-array name="tor_search_entries">
-            <item>Searx</item>
-            <item>DuckDuckGo - JavaScript désactivé</item>
-            <item>DuckDuckGo - JavaScript activé</item>
-            <item>Custom</item>
-        </string-array>
-        <string name="tor_search_custom_url">Tor - URL personnalisée de recherche</string>
     <string name="search">Moteur de Recherche</string>
         <string-array name="search_entries">
             <item>Startpage</item>
index a07d6f318057b2abd39483508c32cdd54452f477..fdb966231478bc335e6a9b7497a7c3b352bd3004 100644 (file)
@@ -52,6 +52,7 @@
     <string name="new_tab">Nuova Scheda</string>
     <string name="loading">Caricamento…</string>
     <string name="error">Errore:</string>
+    <string name="apply">Applica</string>
 
     <!-- Loading Blocklists. -->
     <string name="loading_easylist">Caricamento EasyList</string>
     <string name="domain_name_instructions">è possibile anteporre *. a un dominio per includere tutti i sottodomini (es. *.stoutner.com)</string>
     <string-array name="font_size_array">
         <item>Impostazioni di default</item>
-        <item>Custom font size</item>
+        <item>Dimensione carattere personalizzata</item>
     </string-array>
     <string-array name="swipe_to_refresh_array">
         <item>Impostazioni di default</item>
     <string name="ok">OK</string>
 
     <!-- Orbot. -->
-    <string name="orbot_proxy_not_installed">Il Proxy con Orbot funziona solo se è installato Orbot.</string>
-    <string name="waiting_for_orbot">In attesa della connessione di Orbot...</string>  <!-- The WebView in API 19 does not like the ellipse character. -->
+    <string name="waiting_for_orbot">In attesa della connessione di Orbot.</string>
 
     <!-- About Activity. -->
     <string name="about_privacy_browser">Informazioni su Privacy Browser</string>
         <string name="facebook_click_ids_summary">Rimuovi “?fbclid=”, “&amp;fbclid=”, “?fbadid=”, e “&amp;fbadid=” e tutto quello che segue dalle URL.</string>
         <string name="twitter_amp_redirects">Reindirizzamenti Twitter AMP</string>
         <string name="twitter_amp_redirects_summary">Rimuovi “?amp=1”  e tutto quello che segue dalle URL.</string>
-    <string name="tor">Tor</string>
-        <string name="proxy_through_orbot">Utilizza Proxy con Orbot</string>
-        <string name="proxy_through_orbot_summary">Utilizza Proxy attraverso Orbot su localhost:8118.</string>
-        <string name="tor_homepage">Tor Homepage</string>
-        <string name="tor_search">Tor - Ricerca</string>
-        <string-array name="tor_search_entries">
-            <item>Searx</item>
-            <item>DuckDuckGo - JavaScript disabilitato</item>
-            <item>DuckDuckGo - JavaScript abilitato</item>
-            <item>Personalizzata</item>
-        </string-array>
-        <string name="tor_search_custom_url">Tor - Ricerca personalizzata</string>
     <string name="search">Ricerca</string>
         <string-array name="search_entries">
             <item>Startpage</item>
index 018a3c7f37faafd5e9cc32d0f1335387195d461f..3d9066a8ebdab2cedd8e3e0ea2518cc968e0804a 100644 (file)
@@ -50,6 +50,7 @@
     <string name="new_tab">Новая вкладка</string>
     <string name="loading">Загрузка…</string>
     <string name="error">Ошибка:</string>
+    <string name="apply">Применить</string>
 
     <!-- Loading Blocklists. -->
     <string name="loading_easylist">Загрузка EasyList</string>
     <string name="domain_name_instructions">добавьте *. для включения всех поддоменов (напр. *.stoutner.com)</string>
     <string-array name="font_size_array">
         <item>Настройки по умолчанию</item>
-        <item>Custom font size</item>
+        <item>Пользовательский размер шрифта</item>
     </string-array>
     <string-array name="swipe_to_refresh_array">
         <item>Настройки по умолчанию</item>
     <string name="ok">OK</string>
 
     <!-- Orbot. -->
-    <string name="orbot_proxy_not_installed">Проксирование Orbot работает только с установленным Orbot.</string>
-    <string name="waiting_for_orbot">Ожидание Orbot для подключения...</string>  <!-- The WebView in API 19 does not like the ellipse character. -->
+    <string name="waiting_for_orbot">Ожидание Orbot для подключения.</string>
 
     <!-- About Activity. -->
     <string name="about_privacy_browser">О Privacy Browser</string>
         <string name="facebook_click_ids_summary">Удалять из URL “?fbclid=”, “&amp;fbclid=”, “?fbadid=”, и “&amp;fbadid=” и все что будет после.</string>
         <string name="twitter_amp_redirects">AMP-перенаправления в Twitter</string>
         <string name="twitter_amp_redirects_summary">Удалять из URL “?amp=1” и все что будет после.</string>
-    <string name="tor">Tor</string>
-        <string name="proxy_through_orbot">Прокси через Orbot</string>
-        <string name="proxy_through_orbot_summary">Проксировать весь веб-трафик через Orbot на localhost:8118.</string>
-        <string name="tor_homepage">Домашняя страница Tor</string>
-        <string name="tor_search">Поиск Tor</string>
-        <string-array name="tor_search_entries">
-            <item>Searx</item>
-            <item>DuckDuckGo - JavaScript выключен</item>
-            <item>DuckDuckGo - JavaScript включен</item>
-            <item>Настраиваемый</item>
-        </string-array>
-        <string name="tor_search_custom_url">Настраиваемый URL поиска Tor</string>
     <string name="search">Поиск</string>
         <string-array name="search_entries">
             <item>Startpage</item>
index 21806ca18f9d9035cae28f36ce8448365e2034eb..73416b7672f206ae01e721866ec04e4e24507f24 100644 (file)
     <string name="ok">OK</string>
 
     <!-- Orbot. -->
-    <string name="orbot_proxy_not_installed">Orbot yüklenmeden Orbot vekil sunucusu çalışmayacaktır.</string>
-    <string name="waiting_for_orbot">Orbot\'un bağlanması bekleniyor...</string>  <!-- The WebView in API 19 does not like the ellipse character. -->
+    <string name="waiting_for_orbot">Orbot\'un bağlanması bekleniyor.</string>
 
     <!-- About Activity. -->
     <string name="about_privacy_browser">Privacy Browser Hakkında</string>
         <string name="facebook_click_ids_summary">URL\'lerde “?fbclid=”, “&amp;fbclid=”, “?fbadid=”, ve “&amp;fbadid=” ve onlardan sonra gelen her şey kaldırıldı.</string>
         <string name="twitter_amp_redirects">Twitter AMP yönlendirmeleri</string>
         <string name="twitter_amp_redirects_summary">URL\'den sonra gelen “?amp=1” ve diğer şeyleri kaldırır.</string>
-    <string name="tor">Tor</string>
-        <string name="proxy_through_orbot">Orbot vekil sunucusu</string>
-        <string name="proxy_through_orbot_summary">localhost:8118 üzerinden tüm web trafiği için vekil sunucusunu Orbot yapar.</string>
-        <string name="tor_homepage">Tor anasayfa</string>
-        <string name="tor_search">Tor arama</string>
-        <string-array name="tor_search_entries">
-            <item>Searx</item>
-            <item>DuckDuckGo - JavaScript devre dışı</item>
-            <item>DuckDuckGo - JavaScript etkin</item>
-            <item>Özel</item>
-        </string-array>
-        <string name="tor_search_custom_url">Tor özel sayfa arama</string>
     <string name="search">Arama</string>
         <string-array name="search_entries">
             <item>Startpage</item>
index 58ebf52c8d4817822131c96abf0de762eb32f112..5428730c49cc24a7baa2b8aa425438dd8384f2e6 100644 (file)
     <string name="download_location_message">Privacy Browser needs the storage permission to use the public download directory. If it is denied, the app’s download directory will be used instead.</string>
     <string name="ok">OK</string>
 
-    <!-- Orbot. -->
-    <string name="orbot_proxy_not_installed">Orbot proxy will not work unless Orbot is installed.</string>
-    <string name="waiting_for_orbot">Waiting for Orbot to connect...</string>  <!-- The WebView in API 19 does not like the ellipse character. -->
+    <!-- Proxy. -->
+    <string name="proxy_not_installed_dialog" translatable="false">Proxy not installed dialog</string>  <!-- This string is used to tag the proxy not installed dialog.  It is never displayed to the user. -->
+    <string name="waiting_for_proxy_dialog" translatable="false">Waiting for proxy dialog</string>  <!-- This string is used to tag the waiting for proxy dialog.  It is never displayed to the user. -->
+    <string name="proxies">Proxies</string>
+    <string name="orbot_not_installed_title">Orbot Not Installed</string>
+    <string name="orbot_not_installed_message">Proxying through Orbot will not work unless the Orbot app is installed.</string>
+    <string name="i2p_not_installed_title">I2P Not Installed</string>
+    <string name="i2p_not_installed_message">Proxying through I2P will not work unless the I2P app is installed</string>
+    <string name="waiting_for_orbot">Waiting for Orbot to connect.</string>
 
     <!-- About Activity. -->
     <string name="about_privacy_browser">About Privacy Browser</string>
     <string name="webview_provider">WebView Provider:</string>
     <string name="webview_version">WebView Version:</string>
     <string name="orbot">Orbot:</string>
+    <string name="i2p">I2P:</string>
     <string name="openkeychain">OpenKeychain:</string>
     <string name="easylist_label">EasyList:</string>
     <string name="easyprivacy_label">EasyPrivacy:</string>
         <string name="facebook_click_ids_summary">Remove “?fbclid=”, “&amp;fbclid=”, “?fbadid=”, and “&amp;fbadid=” and anything after them from URLs.</string>
         <string name="twitter_amp_redirects">Twitter AMP redirects</string>
         <string name="twitter_amp_redirects_summary">Remove “?amp=1” and anything after it from URLs.</string>
-    <string name="tor">Tor</string>
-        <string name="proxy_through_orbot">Proxy through Orbot</string>
-        <string name="proxy_through_orbot_summary">Proxy all web traffic through Orbot on localhost:8118.</string>
-        <string name="tor_homepage">Tor homepage</string>
-        <string name="tor_search">Tor search</string>
-        <string-array name="tor_search_entries">
-            <item>Searx</item>
-            <item>DuckDuckGo - JavaScript disabled</item>
-            <item>DuckDuckGo - JavaScript enabled</item>
-            <item>Custom</item>
-        </string-array>
-        <string-array name="tor_search_entry_values" translatable="false">  <!-- None of the items in this `string-array` should be translated. -->
-            <item>http://ulrn6sryqaifefld.onion/?q=</item>
-            <item>https://3g2upl4pq6kufc4m.onion/html/?q=</item>
-            <item>https://3g2upl4pq6kufc4m.onion/?q=</item>
-            <item>Custom URL</item><!-- This item must not be translated into other languages because it is referenced in code.  It is never displayed on the screen. -->
-        </string-array>
-        <string name="tor_search_custom_url">Tor search custom URL</string>
     <string name="search">Search</string>
         <string-array name="search_entries">
             <item>Startpage</item>
             <item>Yahoo - JavaScript enabled</item>
             <item>Custom</item>
         </string-array>
-        <string-array name="search_entry_values" translatable="false">  <!-- None of the items in this `string-array` should be translated. -->
+        <string-array name="search_entry_values" translatable="false">  <!-- None of the items in this string array should be translated. -->
             <item>https://www.startpage.com/do/search?query=</item>
             <item>https://searx.me/?q=</item>
             <item>https://duckduckgo.com/html/?q=</item>
         </string-array>
         <string name="search_custom_url">Search custom URL</string>
         <string name="custom_url">Custom URL</string>
+    <string name="proxy">Proxy</string>
+        <string name="proxy_none">None</string>
+        <string name="proxy_tor">Tor</string>
+        <string name="proxy_i2p">I2P</string>
+        <string name="proxy_custom">Custom</string>
+        <string-array name="proxy_entries">
+            <item>None</item>
+            <item>Tor</item>
+            <item>I2P</item>
+            <item>Custom</item>
+        </string-array>
+        <string-array name="proxy_entry_values" translatable="false">  <!-- None of the items in this string array should be translated. They are referenced in the code and are never displayed on the screen.-->
+            <item>None</item>
+            <item>Tor</item>
+            <item>I2P</item>
+            <item>Custom</item>
+        </string-array>
+        <string name="no_proxy_enabled">No proxy enabled.  Connect directly to the internet.</string>
+        <string name="tor_enabled">Tor - proxy through localhost on port 8118.</string>
+        <string name="i2p_enabled">I2P - proxy through localhost on port 4444.</string>
+        <string name="custom_proxy">Custom proxy</string>
+        <string name="proxy_custom_host">Proxy custom host</string>
+        <string name="proxy_custom_port">Proxy custom port</string>
     <string name="full_screen">Full Screen</string>
         <string name="full_screen_browsing_mode">Full screen browsing mode</string>
         <string name="full_screen_browsing_mode_summary">Double-tap to toggle full screen browsing mode.</string>
     <!-- Non-translatable preference default values. -->
     <string name="user_agent_default_value" translatable="false">Privacy Browser</string>
     <string name="custom_user_agent_default_value" translatable="false">PrivacyBrowser/1.0</string>
-    <string name="tor_homepage_default_value" translatable="false">https://3g2upl4pq6kufc4m.onion/</string>
-    <string name="tor_search_default_value" translatable="false">https://3g2upl4pq6kufc4m.onion/html?q=</string>
-    <string name="tor_search_custom_url_default_value" translatable="false" />
     <string name="search_default_value" translatable="false">https://www.startpage.com/do/search?query=</string>
     <string name="search_custom_url_default_value" translatable="false" />
+    <string name="proxy_default_value" translatable="false">None</string>
+    <string name="proxy_custom_host_default_value" translatable="false" />
+    <string name="proxy_custom_port_default_value" translatable="false" />
     <string name="homepage_default_value" translatable="false">https://www.startpage.com/</string>
     <string name="font_size_default_value" translatable="false">100</string>
 
index 500fcb86658e2e43c55fa1623beee1c848d1b651..9b7d8135dfa236095fd49547bf455e07d4b2347b 100644 (file)
             android:defaultValue="true" />
     </PreferenceCategory>
 
-    <PreferenceCategory
-        android:key="tor"
-        android:title="@string/tor" >
-
-        <SwitchPreference
-            android:key="proxy_through_orbot"
-            android:title="@string/proxy_through_orbot"
-            android:summary="@string/proxy_through_orbot_summary"
-            android:defaultValue="false" />
-
-        <EditTextPreference
-            android:key="tor_homepage"
-            android:title="@string/tor_homepage"
-            android:defaultValue="@string/tor_homepage_default_value"
-            android:inputType="textUri" />
-
-        <ListPreference
-            android:key="tor_search"
-            android:title="@string/tor_search"
-            android:entries="@array/tor_search_entries"
-            android:entryValues="@array/tor_search_entry_values"
-            android:defaultValue="@string/tor_search_default_value" />
-
-        <!-- `android:inputType` currently doesn't work with AndroidX. -->
-        <EditTextPreference
-            android:key="tor_search_custom_url"
-            android:title="@string/tor_search_custom_url"
-            android:defaultValue="@string/tor_search_custom_url_default_value"
-            android:inputType="textUri" />
-    </PreferenceCategory>
-
     <PreferenceCategory
         android:key="search_category"
         android:title="@string/search" >
             android:inputType="textUri" />
     </PreferenceCategory>
 
+    <PreferenceCategory
+        android:key="proxy_category"
+        android:title="@string/proxy" >
+
+        <ListPreference
+            android:key="proxy"
+            android:title="@string/proxy"
+            android:entries="@array/proxy_entries"
+            android:entryValues="@array/proxy_entry_values"
+            android:defaultValue="@string/proxy_default_value" />
+
+        <EditTextPreference
+            android:key="proxy_custom_host"
+            android:title="@string/proxy_custom_host"
+            android:defaultValue="@string/proxy_custom_host_default_value"
+            android:inputType="textUri" />
+
+        <!-- `android:inputType="number"` currently doesn't work with AndroidX. -->
+        <EditTextPreference
+            android:key="proxy_custom_port"
+            android:title="@string/proxy_custom_port"
+            android:defaultValue="@string/proxy_custom_port_default_value"
+            android:inputType="number" />
+    </PreferenceCategory>
+
     <PreferenceCategory
         android:key="full_screen"
         android:title="@string/full_screen" >
index f5dea9581f6b5436e301b6d1048c348230871953..3286a50cab68f3c2a701dd65fcc8840f4ea5365f 100644 (file)
@@ -25,7 +25,7 @@ buildscript {
         google()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.2'
+        classpath 'com.android.tools.build:gradle:3.5.3'
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
diff --git a/fastlane/metadata/android/fr-FR/full_description.txt b/fastlane/metadata/android/fr-FR/full_description.txt
new file mode 100644 (file)
index 0000000..e81eba4
--- /dev/null
@@ -0,0 +1,19 @@
+Privacy Browser a deux objectifs principaux.
+
+1. Réduire au minimum la quantité d'informations envoyées sur Internet.
+
+2. Réduire au minimum la quantité d'informations stockées sur le périphérique.
+
+La plupart des navigateurs donnent silencieusement aux sites Web des quantités énormes d'informations leur permettant de vous suivre et de compromettre votre confidentialité. Les sites Web et les réseaux publicitaires utilisent des technologies telles que JavaScript, les cookies, le stockage DOM, les agents utilisateur et bien d'autres choses pour identifier chaque utilisateur de manière unique et le suivre entre chaque visite et au travers du Web.      
+
+A l'inverse, les fonctionnalités sensibles sont désactivées par défaut dans Privacy Browser. Si l'une de ces technologies est nécessaire au bon fonctionnement d'un site Web, l'utilisateur peut choisir de l'activer uniquement pour une visite. Il peut également utiliser des paramètres de domaine pour activer automatiquement certaines fonctionnalités lors de l'arrivée sun site Web spécifique et les désactiver à nouveau lors de son départ.
+
+Privacy Browser utilise actuellement WebView intégré à Android pour le rendu des pages Web. En tant que tel, cela fonctionne mieux lorsque la dernière version de WebView est installée (voir https://www.stoutner.com/privacy-browser/common-settings/webview/). Dans la série 4.x, Privacy Browser basculera vers une version de WebView d’Android appelée Privacy WebView, qui permettra des fonctionnalités de confidentialité avancées.
+
+Avertissement: Android KitKat (version 4.4.x, API 19) fournit une version ancienne d’OpenSSL, exposée aux attaques de MITM (Man In The Middle) lors de la navigation sur des sites Web utilisant des suites de protocoles et de chiffrement obsolètes. Plus d'informations sur ce problème sont disponibles sur https://www.stoutner.com/kitkat-security-problems/.
+
+Fonctionnalités:
+• Blocage intégré des publicités EasyList.
+• Prise en charge du proxy Tor Orbot.
+• Épinglage de certificat SSL.
+• Importation / exportation des paramètres et des favoris.
\ No newline at end of file
diff --git a/fastlane/metadata/android/fr-FR/short_description.txt b/fastlane/metadata/android/fr-FR/short_description.txt
new file mode 100644 (file)
index 0000000..05f5e06
--- /dev/null
@@ -0,0 +1 @@
+Un navigateur Web qui respecte votre vie privée.
\ No newline at end of file
diff --git a/fastlane/metadata/android/fr-FR/title.txt b/fastlane/metadata/android/fr-FR/title.txt
new file mode 100644 (file)
index 0000000..ca458fe
--- /dev/null
@@ -0,0 +1 @@
+Privacy Browser
\ No newline at end of file