From: Soren Stoutner Date: Thu, 19 Dec 2019 23:30:09 +0000 (-0700) Subject: Add support for I2P and custom proxies. https://redmine.stoutner.com/issues/355 X-Git-Tag: v3.3~4 X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=commitdiff_plain;h=81179d84ced6b43360d42a4b44eb8fb329532ff4;hp=ca7516a7edb9e06d0f9fe9186513986cd82be716 Add support for I2P and custom proxies. https://redmine.stoutner.com/issues/355 --- diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 69358445..12947148 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -68,7 +68,7 @@ @@ -78,7 +78,7 @@ diff --git a/.idea/dictionaries/soren.xml b/.idea/dictionaries/soren.xml index 05389849..c71e3926 100644 --- a/.idea/dictionaries/soren.xml +++ b/.idea/dictionaries/soren.xml @@ -130,6 +130,7 @@ radiobutton radiogroup rbga + redisplays redmine referer refreshlayout @@ -157,6 +158,7 @@ sslissuedtoorganization sslissuedtoorganizationalunit sslstartdate + startpage stoutner subdocument subdomain diff --git a/app/build.gradle b/app/build.gradle index a7d278bb..d9b91dae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' diff --git a/app/src/main/assets/de/about_licenses_dark.html b/app/src/main/assets/de/about_licenses_dark.html index a85852b2..374ae106 100644 --- a/app/src/main/assets/de/about_licenses_dark.html +++ b/app/src/main/assets/de/about_licenses_dark.html @@ -86,11 +86,6 @@

is derived from sort, which is part of the Android Material icon set and is released under the Apache License 2.0. Modifications copyright © 2019 Soren Stoutner. The resulting image is released under the GPLv3+ license.

-

orbot is a modified version of - the status icon from the Orbot project, - which is copyright 2009-2010 Nathan Freitas, The Guardian Project. It is released under the 3-clause BSD license. - The full text of the license is below. Modifications copyright © 2017 Soren Stoutner. - The resulting image is released under the GPLv3+ license.

cookie was created by Google. It is released under the Apache License 2.0 and can be downloaded from Material Design Icons. It is unchanged except for layout information like color and size.

@@ -132,6 +127,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ No newline at end of file diff --git a/app/src/main/assets/de/about_licenses_light.html b/app/src/main/assets/de/about_licenses_light.html index dc90edea..503d12a3 100644 --- a/app/src/main/assets/de/about_licenses_light.html +++ b/app/src/main/assets/de/about_licenses_light.html @@ -86,11 +86,6 @@

is derived from sort, which is part of the Android Material icon set and is released under the Apache License 2.0. Modifications copyright © 2019 Soren Stoutner. The resulting image is released under the GPLv3+ license.

-

orbot is a modified version of - the status icon from the Orbot project, - which is copyright 2009-2010 Nathan Freitas, The Guardian Project. It is released under the 3-clause BSD license. - The full text of the license is below. Modifications copyright © 2017 Soren Stoutner. - The resulting image is released under the GPLv3+ license.

cookie was created by Google. It is released under the Apache License 2.0 and can be downloaded from Material Design Icons. It is unchanged except for layout information like color and size.

@@ -132,6 +127,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ 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 index 00000000..ca09549f --- /dev/null +++ b/app/src/main/assets/de/guide_proxies_dark.html @@ -0,0 +1,91 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ + +

Neugierige Behörden

+ +

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 IP address of the user’s device 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.

+ + +

Megafirmen

+ +

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 - mit erstaunlicher Genauigkeit. + 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 + "Browser-Fingerabdruck" (fingerprinting). + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + + +

Herunterladen von Dateien mittels TOR

+ +

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.

+ + + + \ 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 index 00000000..34d72117 --- /dev/null +++ b/app/src/main/assets/de/guide_proxies_light.html @@ -0,0 +1,91 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ + +

Neugierige Behörden

+ +

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 IP address of the user’s device 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.

+ + +

Megafirmen

+ +

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 - mit erstaunlicher Genauigkeit. + 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 + "Browser-Fingerabdruck" (fingerprinting). + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + + +

Herunterladen von Dateien mittels TOR

+ +

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.

+ + + + \ 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 index af88032e..00000000 --- a/app/src/main/assets/de/guide_tor_dark.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - -

Tor und seine Grenzen

- -

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.

- - -

Neugierige Behörden

- -

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 IP-Adresse des Nutzers - 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.

- - -

Megafirmen

- -

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 - mit erstaunlicher Genauigkeit. - 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 - "Browser-Fingerabdruck" (fingerprinting). - 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.

- -

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.

- -

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.

- - -

Benutzen von TOR

- -

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 F-Droid - 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.

- - - - -

Herunterladen von Dateien mittels TOR

- -

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.

- - - - \ 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 index 8eca5334..00000000 --- a/app/src/main/assets/de/guide_tor_light.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - -

Tor und seine Grenzen

- -

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.

- - -

Neugierige Behörden

- -

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 IP-Adresse des Nutzers - 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.

- - -

Megafirmen

- -

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 - mit erstaunlicher Genauigkeit. - 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 - "Browser-Fingerabdruck" (fingerprinting). - 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.

- -

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.

- -

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.

- - -

Benutzen von TOR

- -

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 F-Droid - 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.

- - - - -

Herunterladen von Dateien mittels TOR

- -

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.

- - - - \ No newline at end of file diff --git a/app/src/main/assets/en/about_licenses_dark.html b/app/src/main/assets/en/about_licenses_dark.html index a336be22..3bf34f6f 100644 --- a/app/src/main/assets/en/about_licenses_dark.html +++ b/app/src/main/assets/en/about_licenses_dark.html @@ -84,11 +84,6 @@

is derived from sort, which is part of the Android Material icon set and is released under the Apache License 2.0. Modifications copyright © 2019 Soren Stoutner. The resulting image is released under the GPLv3+ license.

-

orbot is a modified version of - the status icon from the Orbot project, - which is copyright 2009-2010 Nathan Freitas, The Guardian Project. It is released under the 3-clause BSD license. - The full text of the license is below. Modifications copyright © 2017 Soren Stoutner. - The resulting image is released under the GPLv3+ license.

cookie was created by Google. It is released under the Apache License 2.0 and can be downloaded from Material Design Icons. It is unchanged except for layout information like color and size.

@@ -130,6 +125,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ No newline at end of file diff --git a/app/src/main/assets/en/about_licenses_light.html b/app/src/main/assets/en/about_licenses_light.html index de4abd56..87e3895d 100644 --- a/app/src/main/assets/en/about_licenses_light.html +++ b/app/src/main/assets/en/about_licenses_light.html @@ -85,11 +85,6 @@

is derived from sort, which is part of the Android Material icon set and is released under the Apache License 2.0. Modifications copyright © 2019 Soren Stoutner. The resulting image is released under the GPLv3+ license.

-

orbot is a modified version of - the status icon from the Orbot project, - which is copyright 2009-2010 Nathan Freitas, The Guardian Project. It is released under the 3-clause BSD license. - The full text of the license is below. Modifications copyright © 2017 Soren Stoutner. - The resulting image is released under the GPLv3+ license.

cookie was created by Google. It is released under the Apache License 2.0 and can be downloaded from Material Design Icons. It is unchanged except for layout information like color and size.

@@ -131,6 +126,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ 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 index 00000000..cc723eab --- /dev/null +++ b/app/src/main/assets/en/guide_proxies_dark.html @@ -0,0 +1,85 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ + +

Malicious Governments

+ +

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 IP address of the user’s device 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.

+ + +

Mega Corporations

+ +

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 fair amount of accuracy. + 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 browser fingerprinting. + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Downloading Files Via Tor

+ +

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.

+ + + + \ 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 index 00000000..26da4f90 --- /dev/null +++ b/app/src/main/assets/en/guide_proxies_light.html @@ -0,0 +1,85 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ + +

Malicious Governments

+ +

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 IP address of the user’s device 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.

+ + +

Mega Corporations

+ +

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 fair amount of accuracy. + 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 browser fingerprinting. + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Downloading Files Via Tor

+ +

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.

+ + + + \ 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 index cc7c47bf..00000000 --- a/app/src/main/assets/en/guide_tor_dark.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - -

Tor and Its Limits

- -

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).

- - -

Malicious Governments

- -

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 IP address the user’s device 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.

- - -

Mega Corporations

- -

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 fair amount of accuracy. - 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 browser fingerprinting. - 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.

- -

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.

- -

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.

- - -

Using Tor

- -

Despite its limitations, Tor can be useful in some circumstances. - The Tor project has an app for Android called Orbot, which is available on F-Droid - 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.

- - - -

Downloading Files Via Tor

- -

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.

- - - - \ 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 index 6e3d48e3..00000000 --- a/app/src/main/assets/en/guide_tor_light.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - -

Tor and Its Limits

- -

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).

- - -

Malicious Governments

- -

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 IP address the user’s device 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.

- - -

Mega Corporations

- -

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 fair amount of accuracy. - 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 browser fingerprinting. - 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.

- -

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.

- -

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.

- - -

Using Tor

- -

Despite its limitations, Tor can be useful in some circumstances. - The Tor project has an app for Android called Orbot, which is available on F-Droid - 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.

- - - -

Downloading Files Via Tor

- -

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.

- - - - \ No newline at end of file diff --git a/app/src/main/assets/es/about_licenses_dark.html b/app/src/main/assets/es/about_licenses_dark.html index b01fd2cb..73cd0f46 100644 --- a/app/src/main/assets/es/about_licenses_dark.html +++ b/app/src/main/assets/es/about_licenses_dark.html @@ -87,12 +87,6 @@

deriva de sort, que es parte del conjunto de iconos Android Material y es liberado bajo la Licencia Apache 2.0. Copyright de modificaciones © 2019 Soren Stoutner. La imagen resultante se libera bajo la licencia GPLv3+.

-

orbot es una versión modificada del - icono de estado del proyecto Orbot, - que tiene copyright 2009-2010 por Nathan Freitas, The Guardian Project. - Es liberado bajo la licencia BSD modificada (de 3 cláusulas). - El texto completo de la licencia se encuentra debajo. Copyright de modificaciones © 2017 Soren Stoutner. - La imagen resultante se libera bajo la licencia GPLv3+.

cookie fue creado por Google. Es liberado bajo la licencia Apache 2.0 y puede ser descargado desde Material Design Icons. Está sin cambios, excepto por la información de diseño como el color y el tamaño.

@@ -135,6 +129,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

Licencia BSD modificada (de 3 cláusulas)

- -

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:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ No newline at end of file diff --git a/app/src/main/assets/es/about_licenses_light.html b/app/src/main/assets/es/about_licenses_light.html index 757d058d..deb7a040 100644 --- a/app/src/main/assets/es/about_licenses_light.html +++ b/app/src/main/assets/es/about_licenses_light.html @@ -87,12 +87,6 @@

deriva de sort, que es parte del conjunto de iconos Android Material y es liberado bajo la Licencia Apache 2.0. Copyright de modificaciones © 2019 Soren Stoutner. La imagen resultante se libera bajo la licencia GPLv3+.

-

orbot es una versión modificada del - icono de estado del proyecto Orbot, - que tiene copyright 2009-2010 por Nathan Freitas, The Guardian Project. - Es liberado bajo la licencia BSD modificada (de 3 cláusulas). - El texto completo de la licencia se encuentra debajo. Copyright de modificaciones © 2017 Soren Stoutner. - La imagen resultante se libera bajo la licencia GPLv3+.

cookie fue creado por Google. Es liberado bajo la licencia Apache 2.0 y puede ser descargado desde Material Design Icons. @@ -136,6 +130,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

Licencia BSD modificada (de 3 cláusulas)

- -

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:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ 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 index 00000000..fae7b7bd --- /dev/null +++ b/app/src/main/assets/es/guide_proxies_dark.html @@ -0,0 +1,90 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ + +

Gobiernos maliciosos

+ +

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 IP address of the user’s device 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.

+ + +

Grandes corporaciones

+ +

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 bastante precisión. + 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 huellas del navegador. + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Descarga de archivos a través de Tor

+ +

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.

+ + + + \ 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 index 00000000..97dc8ff2 --- /dev/null +++ b/app/src/main/assets/es/guide_proxies_light.html @@ -0,0 +1,90 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ + +

Gobiernos maliciosos

+ +

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 IP address of the user’s device 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.

+ + +

Grandes corporaciones

+ +

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 bastante precisión. + 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 huellas del navegador. + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Descarga de archivos a través de Tor

+ +

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.

+ + + + \ 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 index 2c60e81e..00000000 --- a/app/src/main/assets/es/guide_tor_dark.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - -

Tor y sus límites

- -

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).

- - -

Gobiernos maliciosos

- -

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.

- - -

Grandes corporaciones

- -

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 bastante precisión. - 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 huellas del navegador. - 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.

- -

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.

- -

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.

- - -

Usando Tor

- -

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.

- - - -

Descarga de archivos a través de Tor

- -

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.

- - - - \ 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 index b33ecb17..00000000 --- a/app/src/main/assets/es/guide_tor_light.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - -

Tor y sus límites

- -

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).

- - -

Gobiernos maliciosos

- -

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.

- - -

Grandes corporaciones

- -

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 bastante precisión. - 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 huellas del navegador. - 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.

- -

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.

- -

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.

- - -

Usando Tor

- -

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.

- - - -

Descarga de archivos a través de Tor

- -

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.

- - - - \ No newline at end of file diff --git a/app/src/main/assets/fr/about_licenses_dark.html b/app/src/main/assets/fr/about_licenses_dark.html index 08859740..becbb455 100644 --- a/app/src/main/assets/fr/about_licenses_dark.html +++ b/app/src/main/assets/fr/about_licenses_dark.html @@ -91,11 +91,6 @@ qui fait partie de l'ensemble d'icônes Matériel Android et sont publiés sous Licence Apache 2.0. Modifications copyright © 2019 Soren Stoutner. L'image résultante est publiée sous la licence GPLv3+.

-

orbot est une version modifiée de - l'icône de statut du projet Orbot, - qui est copyright 2009-2010 de Nathan Freitas, The Guardian Project. Elle est publiée sous la licence BSD à 3 clauses. - Le texte complet de la licence est ci-dessous. Modifications copyright © 2017 Soren Stoutner. - L'image résultante est publiée sous la licence GPLv3+.

cookie a été créé par Google. Il est publié sous la Licence Apache 2.0 et peut être téléchargé à partir des Icônes Material Design. @@ -139,6 +134,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ No newline at end of file diff --git a/app/src/main/assets/fr/about_licenses_light.html b/app/src/main/assets/fr/about_licenses_light.html index a905b913..7640e9fe 100644 --- a/app/src/main/assets/fr/about_licenses_light.html +++ b/app/src/main/assets/fr/about_licenses_light.html @@ -91,11 +91,6 @@ qui fait partie de l'ensemble d'icônes Matériel Android et sont publiés sous Licence Apache 2.0. Modifications copyright © 2019 Soren Stoutner. L'image résultante est publiée sous la licence GPLv3+.

-

orbot est une version modifiée de - l'icône de statut du projet Orbot, - qui est copyright 2009-2010 de Nathan Freitas, The Guardian Project. Elle est publiée sous la licence BSD à 3 clauses. - Le texte complet de la licence est ci-dessous. Modifications copyright © 2017 Soren Stoutner. - L'image résultante est publiée sous la licence GPLv3+.

cookie a été créé par Google. Il est publié sous la Licence Apache 2.0 et peut être téléchargé à partir des Icônes Material Design. @@ -139,6 +134,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ 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 index 00000000..04a87664 --- /dev/null +++ b/app/src/main/assets/fr/guide_proxies_dark.html @@ -0,0 +1,88 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ +

Gouvernements Malicieux

+ +

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 IP address of the user’s device 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.

+ +

Méga entreprises

+ +

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 juste précision. + 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 + empreintes digitales du navigateur. + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Téléchargement de fichiers via Tor

+ +

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.

+ + + + \ 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 index 00000000..c2b61176 --- /dev/null +++ b/app/src/main/assets/fr/guide_proxies_light.html @@ -0,0 +1,88 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ +

Gouvernements Malicieux

+ +

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 IP address of the user’s device 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.

+ +

Méga entreprises

+ +

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 juste précision. + 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 + empreintes digitales du navigateur. + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Téléchargement de fichiers via Tor

+ +

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.

+ + + + \ 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 index f47be236..00000000 --- a/app/src/main/assets/fr/guide_tor_dark.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - -

Tor et ses limites

- -

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).

- -

Gouvernements Malicieux

- -

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 et le périphérique de l'utilisateur - 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.

- -

Méga entreprises

- -

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 juste précision. - 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 - empreintes digitales du navigateur. - 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.

- -

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.

- -

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.

- - -

Utilisation de Tor

- -

Malgré ses limites, Tor peut être utile dans certaines circonstances. - Le projet Tor propose une application pour Android appelée Orbot, disponible sur F-Droid - 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.

- - - -

Téléchargement de fichiers via Tor

- -

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.

- - - - \ 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 index bd624192..00000000 --- a/app/src/main/assets/fr/guide_tor_light.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - -

Tor et ses limites

- -

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).

- -

Gouvernements Malicieux

- -

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 et le périphérique de l'utilisateur - 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.

- -

Méga entreprises

- -

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 juste précision. - 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 - empreintes digitales du navigateur. - 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.

- -

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.

- -

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.

- - -

Utilisation de Tor

- -

Malgré ses limites, Tor peut être utile dans certaines circonstances. - Le projet Tor propose une application pour Android appelée Orbot, disponible sur F-Droid - 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.

- - - -

Téléchargement de fichiers via Tor

- -

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.

- - - - \ No newline at end of file diff --git a/app/src/main/assets/it/about_licenses_dark.html b/app/src/main/assets/it/about_licenses_dark.html index b9d9aff3..5824df42 100644 --- a/app/src/main/assets/it/about_licenses_dark.html +++ b/app/src/main/assets/it/about_licenses_dark.html @@ -91,12 +91,6 @@ che fa parte dell'Android Material icon set ed è stata rilasciata sotto Licenza Apache 2.0. Copyright delle modifiche © 2019 Soren Stoutner. L'immagine risultante è rilasciata sotto Licenza GPLv3+.

-

orbot è una versione modificata della - icona di stato del progetto Orbot, - il cui copyright è 2009-2010 Nathan Freitas, The Guardian Project. - E' rilasciata sotto 3-clause BSD license. Il testo completo della Licenza è riportato di seguito. - Copyright delle modifiche © 2017Soren Stoutner. - L'immagine risultante è rilasciata sotto Licenza GPLv3+.

cookie è stata creata da Google. E' stata rilasciata con Licenza Apache 2.0 e può essere scaricata dirattamente dal Material Design Icons. Non è stata modificata ad eccezione del colore e della dimensione.

@@ -139,6 +133,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ No newline at end of file diff --git a/app/src/main/assets/it/about_licenses_light.html b/app/src/main/assets/it/about_licenses_light.html index 3bb1b0de..84e201c0 100644 --- a/app/src/main/assets/it/about_licenses_light.html +++ b/app/src/main/assets/it/about_licenses_light.html @@ -92,12 +92,6 @@ che fa parte dell'Android Material icon set ed è stata rilasciata sotto Licenza Apache 2.0. Copyright delle modifiche © 2019 Soren Stoutner. L'immagine risultante è rilasciata sotto Licenza GPLv3+.

-

orbot è una versione modificata della - icona di stato del progetto Orbot, - il cui copyright è 2009-2010 Nathan Freitas, The Guardian Project. - E' rilasciata sotto 3-clause BSD license. Il testo completo della Licenza è riportato di seguito. - Copyright delle modifiche © 2017Soren Stoutner. - L'immagine risultante è rilasciata sotto Licenza GPLv3+.

cookie è stata creata da Google. E' stata rilasciata con Licenza Apache 2.0 e può essere scaricata dirattamente dal Material Design Icons.Non è stata modificata ad eccezione del colore e della dimensione.

@@ -140,6 +134,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ 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 index 00000000..2ffbb3bd --- /dev/null +++ b/app/src/main/assets/it/guide_proxies_dark.html @@ -0,0 +1,86 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ + +

Governi Maliziosi

+ +

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 IP address of the user’s device 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.

+ + +

Mega corporations

+ +

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 discreta accuratezza. + 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 impronta digitale dei browser. + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Download di File con Tor

+ +

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.

+ + + + \ 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 index 00000000..7a7598ac --- /dev/null +++ b/app/src/main/assets/it/guide_proxies_light.html @@ -0,0 +1,86 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

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).

+ + +

Governi Maliziosi

+ +

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 IP address of the user’s device 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.

+ + +

Mega corporations

+ +

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 discreta accuratezza. + 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 impronta digitale dei browser. + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Download di File con Tor

+ +

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.

+ + + + \ 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 index 70245c21..00000000 --- a/app/src/main/assets/it/guide_tor_dark.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - -

Tor e i suoi limiti

- -

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).

- - -

Governi Maliziosi

- -

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'indirizzo IP dei dispositivi 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.

- - -

Mega corporations

- -

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 discreta accuratezza. - 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 impronta digitale dei browser. - 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.

- -

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.

- -

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.

- - -

Utilizzo di Tor

- -

Nonostante le sue limitazioni, in alcune circostanze Tor può essere utile. - Il progetto Tor ha sviluppato una app per Android chiamata Orbot, disponibile su F-Droid - 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.

- - - -

Download di File con Tor

- -

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.

- - - - \ 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 index f097380a..00000000 --- a/app/src/main/assets/it/guide_tor_light.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - -

Tor e i suoi limiti

- -

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).

- - -

Governi Maliziosi

- -

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'indirizzo IP dei dispositivi 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.

- - -

Mega corporations

- -

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 discreta accuratezza. - 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 impronta digitale dei browser. - 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.

- -

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.

- -

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.

- - -

Utilizzo di Tor

- -

Nonostante le sue limitazioni, in alcune circostanze Tor può essere utile. - Il progetto Tor ha sviluppato una app per Android chiamata Orbot, disponibile su F-Droid - 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.

- - - -

Download di File con Tor

- -

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.

- - - - \ No newline at end of file diff --git a/app/src/main/assets/ru/about_licenses_dark.html b/app/src/main/assets/ru/about_licenses_dark.html index 659f8662..a97ac747 100644 --- a/app/src/main/assets/ru/about_licenses_dark.html +++ b/app/src/main/assets/ru/about_licenses_dark.html @@ -87,12 +87,6 @@ которые являются частью Android Material icon set и выпущены под Apache License 2.0. Модификации авторских прав © 2019 Soren Stoutner. Полученные изображения выпущены под лицензией GPLv3+.

-

orbot - это модифицированная версия - значок статуса из проекта Orbot, - который защищен авторским правом 2009-2010 Nathan Freitas, The Guardian Project. - Он выпущен под 3-clause BSD license. Полный текст лицензии приведен ниже. - Модификации авторских прав © 2017 Soren Stoutner. - Полученные изображения выпущены под лицензией GPLv3+.

cookie были созданы Google. Они выпущены под Apache License 2.0 и могут быть загружены из Material Design Icons. Он неизменен, за исключением такой информации, как цвет и размер.

Следующие значки взяты изAndroid Material icon set, @@ -133,6 +127,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ No newline at end of file diff --git a/app/src/main/assets/ru/about_licenses_light.html b/app/src/main/assets/ru/about_licenses_light.html index d6f95332..96f048ca 100644 --- a/app/src/main/assets/ru/about_licenses_light.html +++ b/app/src/main/assets/ru/about_licenses_light.html @@ -87,12 +87,6 @@ которые являются частью Android Material icon set и выпущены под Apache License 2.0. Модификации авторских прав © 2019 Soren Stoutner. Полученные изображения выпущены под лицензией GPLv3+.

-

orbot - это модифицированная версия - значок статуса из проекта Orbot, - который защищен авторским правом 2009-2010 Nathan Freitas, The Guardian Project. - Он выпущен под 3-clause BSD license. Полный текст лицензии приведен ниже. - Модификации авторских прав © 2017 Soren Stoutner. - Полученные изображения выпущены под лицензией GPLv3+.

cookie были созданы Google. Они выпущены под Apache License 2.0 и могут быть загружены из Material Design Icons. Он неизменен, за исключением такой информации, как цвет и размер.

Следующие значки взяты изAndroid Material icon set, @@ -133,6 +127,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ 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 index 00000000..94067ab7 --- /dev/null +++ b/app/src/main/assets/ru/guide_proxies_dark.html @@ -0,0 +1,86 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

Существуют две основные отрицательные категории субъектов, которые нарушают конфиденциальность в интернете: злонамеренные правительства, имеющие доступ к интернет-провайдерам и крупные корпорации, + которые управляют социальными и рекламными сетями. + 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).

+ + +

Злонамеренные правительства

+ +

Злонамеренные правительства часто следят за своими гражданами, чтобы наказать за инакомыслие или правозащитную деятельность. + Как правило, они либо работают с локальными интернет-провайдерами, либо могут заставить их раскрыть информацию, содержащую статистику посещений сайтов нужного пользователя. + 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 IP address of the user’s device 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.

+ + +

Крупные корпорации

+ +

Когда пользователь подключается к веб-серверу, сервер может видеть IP-адрес пользователя. + Несмотря на то, что пока это работает не идеально, IP-адреса могут быть превращены в физические адреса с достаточным количеством точности. + 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, + идентификаторы отслеживания и отпечаток браузера. + Поскольку подавляющее большинство веб-сайтов в интернете загружают рекламу от одной из основных сетей или встраивают значки социальных сетей с ассоциированным с ними JavaScript, + эти корпорации имеют встроенные профили почти для каждого пользователя в интернете и могут отслеживать интернет-активность на несвязанных сайтах.

+ +

Они отслеживают каждый посещаемый сайт, все, что приобретается, каждую кредитную карту, используемую для совершения покупки, каждый адрес, куда отправляются товары, + метаданные 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.

+ +

Единственной и самой лучшей защитой конфиденциальности от крупных корпораций является просмотр веб-сайта с отключенным JavaScript, за которым следует блокирование рекламных сетей, + отключение файлов cookie и хранилища DOM, а также использование браузера, отпечаток которого трудно определить.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Загрузка файлов через сеть Tor

+ +

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.

+ + + + \ 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 index 00000000..0e3946f4 --- /dev/null +++ b/app/src/main/assets/ru/guide_proxies_light.html @@ -0,0 +1,86 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

Существуют две основные отрицательные категории субъектов, которые нарушают конфиденциальность в интернете: злонамеренные правительства, имеющие доступ к интернет-провайдерам и крупные корпорации, + которые управляют социальными и рекламными сетями. + 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).

+ + +

Злонамеренные правительства

+ +

Злонамеренные правительства часто следят за своими гражданами, чтобы наказать за инакомыслие или правозащитную деятельность. + Как правило, они либо работают с локальными интернет-провайдерами, либо могут заставить их раскрыть информацию, содержащую статистику посещений сайтов нужного пользователя. + 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 IP address of the user’s device 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.

+ + +

Крупные корпорации

+ +

Когда пользователь подключается к веб-серверу, сервер может видеть IP-адрес пользователя. + Несмотря на то, что пока это работает не идеально, IP-адреса могут быть превращены в физические адреса с достаточным количеством точности. + 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, + идентификаторы отслеживания и отпечаток браузера. + Поскольку подавляющее большинство веб-сайтов в интернете загружают рекламу от одной из основных сетей или встраивают значки социальных сетей с ассоциированным с ними JavaScript, + эти корпорации имеют встроенные профили почти для каждого пользователя в интернете и могут отслеживать интернет-активность на несвязанных сайтах.

+ +

Они отслеживают каждый посещаемый сайт, все, что приобретается, каждую кредитную карту, используемую для совершения покупки, каждый адрес, куда отправляются товары, + метаданные 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.

+ +

Единственной и самой лучшей защитой конфиденциальности от крупных корпораций является просмотр веб-сайта с отключенным JavaScript, за которым следует блокирование рекламных сетей, + отключение файлов cookie и хранилища DOM, а также использование браузера, отпечаток которого трудно определить.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Загрузка файлов через сеть Tor

+ +

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.

+ + + + \ 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 index 4c1f13ca..00000000 --- a/app/src/main/assets/ru/guide_tor_dark.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - -

Tor и его ограничения

- -

Существуют две основные отрицательные категории субъектов, которые нарушают конфиденциальность в интернете: злонамеренные правительства, имеющие доступ к интернет-провайдерам и крупные корпорации, - которые управляют социальными и рекламными сетями. - TOR (The Onion Router) полезен для защиты конфиденциальности от злонамеренных правительств (которые отслеживают трафик и его маршруты), - но не от крупных корпораций (которые внедряют вредоносный код на веб-серверах).

- - -

Злонамеренные правительства

- -

Злонамеренные правительства часто следят за своими гражданами, чтобы наказать за инакомыслие или правозащитную деятельность. - Как правило, они либо работают с локальными интернет-провайдерами, либо могут заставить их раскрыть информацию, содержащую статистику посещений сайтов нужного пользователя. - Tor предназначен для того, чтобы победить это нарушение конфиденциальности, - зашифровав трафик с устройства пользователя и обеспечить его маршрутизацию через три разных сервера в интернете перед отправкой его в конечный пункт назначения. - Это означает, что ни один провайдер, сервер или сайт не может знать ни IP-адрес устройства пользователя, ни IP-адрес конечного веб-сервера. - Злонамеренные правительства и контролируемые ими интернет-провайдеры не могут определить, к каким веб-серверам обращается пользователь, несмотря на то, что они могут видеть, что он использует Tor. - В некоторых странах использование Tor может быть истолковано как свидетельство незаконного поведения ("если вам нечего скрывать, вы не будете шифровать свой трафик"), - и пользователи могут быть наказаны, потому что правительства предполагают, что они делают то, что запрещено. Таким образом, Tor может быть полезен, но он не является панацеей.

- - -

Крупные корпорации

- -

Когда пользователь подключается к веб-серверу, сервер может видеть IP-адрес пользователя. - Несмотря на то, что пока это работает не идеально, IP-адреса могут быть превращены в физические адреса с достаточным количеством точности. - Маленькие веб-серверы обычно используют IP-адреса для определения местоположения пользователей, посещающих их сайт. Tor - хорошее решение для маскировки местоположения пользователя от этих серверов. - Но крупные корпорации, которые владеют социальными и рекламными сетями, используют весь профиль информации, который предназначен для отслеживания пользователей через устройства и IP-адреса. - В этих профилях используются различные методы идентификации пользователей, включая JavaScript, файлы cookie, - идентификаторы отслеживания и отпечаток браузера. - Поскольку подавляющее большинство веб-сайтов в интернете загружают рекламу от одной из основных сетей или встраивают значки социальных сетей с ассоциированным с ними JavaScript, - эти корпорации имеют встроенные профили почти для каждого пользователя в интернете и могут отслеживать интернет-активность на несвязанных сайтах.

- -

Они отслеживают каждый посещаемый сайт, все, что приобретается, каждую кредитную карту, используемую для совершения покупки, каждый адрес, куда отправляются товары, - метаданные GPS каждого изображения, загружаемого в интернет. - Они создают профиль из возраста пользователя, пола, семейного положения, адреса, политических пристрастий, религиозной принадлежности, семейных обстоятельств, - количества домашних животных и всего остального, что им удается получить. - Они даже скупают базы данных транзакций по кредитным картам в местных магазинах, поэтому они могут отслеживать автономные модели покупок пользователей в своих профилях. - Поскольку у них уже имеется гораздо более точная адресная информация о пользователе, чем раскрытый IP-адрес, Tor не обеспечивает реальной защиты конфиденциальности от крупных корпораций.

- -

Единственной и самой лучшей защитой конфиденциальности от крупных корпораций является просмотр веб-сайта с отключенным JavaScript, за которым следует блокирование рекламных сетей, - отключение файлов cookie и хранилища DOM, а также использование браузера, отпечаток которого трудно определить.

- - -

Использование Tor

- -

Несмотря на свои ограничения, Tor может быть полезен в некоторых обстоятельствах. - У проекта Tor есть приложение для Android под названием Orbot, которое доступно в F-Droid и везде, - где распространяется Privacy Browser. У Privacy Browser есть параметр для использования Orbot в качестве прокси. - Если этот параметр включен, панель приложений Privacy Browser будет иметь светло-синий фон вместо стандартного светло-серого. - Когда включен параметр прокси-сервера Orbot Privacy Browser, доступ к интернету работать не будет, если Orbot не запущен и не подключен к Tor. - Поскольку трафик маршрутизируется через несколько узлов, доступ к интернету через Tor будет происходить намного медленнее, чем при прямом подключении.

- - - -

Загрузка файлов через сеть Tor

- -

При работе Orbot в режиме проксирования, весь трафик Privacy Browser будет маршрутизироваться через сеть Tor за исключением загружаемых файлов. - Это связано с тем, что Privacy Browser использует встроенный менеджер загрузок Android который не имеет возможности проксирования. - Пользователи, которые хотят загружать файлы через Orbot, должны включить режим VPN.

- - - - \ 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 index f7b8c6a3..00000000 --- a/app/src/main/assets/ru/guide_tor_light.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - -

Tor и его ограничения

- -

Существуют две основные отрицательные категории субъектов, которые нарушают конфиденциальность в интернете: злонамеренные правительства, имеющие доступ к интернет-провайдерам и крупные корпорации, - которые управляют социальными и рекламными сетями. - TOR (The Onion Router) полезен для защиты конфиденциальности от злонамеренных правительств (которые отслеживают трафик и его маршруты), - но не от крупных корпораций (которые внедряют вредоносный код на веб-серверах).

- - -

Злонамеренные правительства

- -

Злонамеренные правительства часто следят за своими гражданами, чтобы наказать за инакомыслие или правозащитную деятельность. - Как правило, они либо работают с локальными интернет-провайдерами, либо могут заставить их раскрыть информацию, содержащую статистику посещений сайтов нужного пользователя. - Tor предназначен для того, чтобы победить это нарушение конфиденциальности, - зашифровав трафик с устройства пользователя и обеспечить его маршрутизацию через три разных сервера в интернете перед отправкой его в конечный пункт назначения. - Это означает, что ни один провайдер, сервер или сайт не может знать ни IP-адрес устройства пользователя, ни IP-адрес конечного веб-сервера. - Злонамеренные правительства и контролируемые ими интернет-провайдеры не могут определить, к каким веб-серверам обращается пользователь, несмотря на то, что они могут видеть, что он использует Tor. - В некоторых странах использование Tor может быть истолковано как свидетельство незаконного поведения ("если вам нечего скрывать, вы не будете шифровать свой трафик"), - и пользователи могут быть наказаны, потому что правительства предполагают, что они делают то, что запрещено. Таким образом, Tor может быть полезен, но он не является панацеей.

- - -

Крупные корпорации

- -

Когда пользователь подключается к веб-серверу, сервер может видеть IP-адрес пользователя. - Несмотря на то, что пока это работает не идеально, IP-адреса могут быть превращены в физические адреса с достаточным количеством точности. - Маленькие веб-серверы обычно используют IP-адреса для определения местоположения пользователей, посещающих их сайт. Tor - хорошее решение для маскировки местоположения пользователя от этих серверов. - Но крупные корпорации, которые владеют социальными и рекламными сетями, используют весь профиль информации, который предназначен для отслеживания пользователей через устройства и IP-адреса. - В этих профилях используются различные методы идентификации пользователей, включая JavaScript, файлы cookie, - идентификаторы отслеживания и отпечаток браузера. - Поскольку подавляющее большинство веб-сайтов в интернете загружают рекламу от одной из основных сетей или встраивают значки социальных сетей с ассоциированным с ними JavaScript, - эти корпорации имеют встроенные профили почти для каждого пользователя в интернете и могут отслеживать интернет-активность на несвязанных сайтах.

- -

Они отслеживают каждый посещаемый сайт, все, что приобретается, каждую кредитную карту, используемую для совершения покупки, каждый адрес, куда отправляются товары, - метаданные GPS каждого изображения, загружаемого в интернет. - Они создают профиль из возраста пользователя, пола, семейного положения, адреса, политических пристрастий, религиозной принадлежности, семейных обстоятельств, - количества домашних животных и всего остального, что им удается получить. - Они даже скупают базы данных транзакций по кредитным картам в местных магазинах, поэтому они могут отслеживать автономные модели покупок пользователей в своих профилях. - Поскольку у них уже имеется гораздо более точная адресная информация о пользователе, чем раскрытый IP-адрес, Tor не обеспечивает реальной защиты конфиденциальности от крупных корпораций.

- -

Единственной и самой лучшей защитой конфиденциальности от крупных корпораций является просмотр веб-сайта с отключенным JavaScript, за которым следует блокирование рекламных сетей, - отключение файлов cookie и хранилища DOM, а также использование браузера, отпечаток которого трудно определить.

- - -

Использование Tor

- -

Несмотря на свои ограничения, Tor может быть полезен в некоторых обстоятельствах. - У проекта Tor есть приложение для Android под названием Orbot, которое доступно в F-Droid и везде, - где распространяется Privacy Browser. У Privacy Browser есть параметр для использования Orbot в качестве прокси. - Если этот параметр включен, панель приложений Privacy Browser будет иметь светло-синий фон вместо стандартного светло-серого. - Когда включен параметр прокси-сервера Orbot Privacy Browser, доступ к интернету работать не будет, если Orbot не запущен и не подключен к Tor. - Поскольку трафик маршрутизируется через несколько узлов, доступ к интернету через Tor будет происходить намного медленнее, чем при прямом подключении.

- - - -

Загрузка файлов через сеть Tor

- -

При работе Orbot в режиме проксирования, весь трафик Privacy Browser будет маршрутизироваться через сеть Tor за исключением загружаемых файлов. - Это связано с тем, что Privacy Browser использует встроенный менеджер загрузок Android который не имеет возможности проксирования. - Пользователи, которые хотят загружать файлы через Orbot, должны включить режим VPN.

- - - - \ 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 index 00000000..46ea5ef1 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 index 00000000..aaf3edf9 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 index 00000000..a52d292c 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 index 00000000..1aa3a499 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 index 91d2fe8e..00000000 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 index 70bc318f..00000000 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 index 819a95da..00000000 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 index a85c25b5..00000000 Binary files a/app/src/main/assets/shared_images/orbot_light.png and /dev/null differ diff --git a/app/src/main/assets/tr/about_licenses_dark.html b/app/src/main/assets/tr/about_licenses_dark.html index e53a8b81..94834d72 100644 --- a/app/src/main/assets/tr/about_licenses_dark.html +++ b/app/src/main/assets/tr/about_licenses_dark.html @@ -88,11 +88,6 @@ Android Material simge setinin bir parçası olan sort'dan elde edilmiştir. Değişikliklerin telif hakkı © 2019 Soren Stoutner. Ortaya çıkan görüntü GPLv3+ lisansı altında yayınlandı.

-

orbot, telif hakkı 2009-2010 Nathan Freitas, The Guardian Project ait olan, - Orbot projesi durum simgesinin modifiye edilmiş bir sürümüdür ve - 3-clause BSD lisansı altında yayınlanmıştır. - Lisansın tüm metni aşağıdadır. Değişikliklerin telif hakkı © 2017 Soren Stoutner. - Ortaya çıkan görüntü GPLv3+ lisansı altında yayınlandı.

cookie Google tarafından oluşturuldu. Apache License 2.0 altında yayınlandı ve Material Design simgelerinden indirilebilir. Renk ve ebat gibi düzen bilgileri dışında herhangi bir değişiklik yapılmamıştır.

@@ -134,6 +129,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ No newline at end of file diff --git a/app/src/main/assets/tr/about_licenses_light.html b/app/src/main/assets/tr/about_licenses_light.html index 4a97a384..90f2364b 100644 --- a/app/src/main/assets/tr/about_licenses_light.html +++ b/app/src/main/assets/tr/about_licenses_light.html @@ -88,11 +88,6 @@ Android Material simge setinin bir parçası olan sort'dan elde edilmiştir. Değişikliklerin telif hakkı © 2019 Soren Stoutner. Ortaya çıkan görüntü GPLv3+ lisansı altında yayınlandı.

-

orbot, telif hakkı 2009-2010 Nathan Freitas, The Guardian Project ait olan, - Orbot projesi durum simgesinin modifiye edilmiş bir sürümüdür ve - 3-clause BSD lisansı altında yayınlanmıştır. - Lisansın tüm metni aşağıdadır. Değişikliklerin telif hakkı © 2017 Soren Stoutner. - Ortaya çıkan görüntü GPLv3+ lisansı altında yayınlandı.

cookie Google tarafından oluşturuldu. Apache License 2.0 altında yayınlandı ve Material Design simgelerinden indirilebilir. Renk ve ebat gibi düzen bilgileri dışında herhangi bir değişiklik yapılmamıştır.

@@ -134,6 +129,7 @@

map.

more.

new releases.

+

open_in_browser.

payment.

question_answer.

refresh.

@@ -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. - -
- -

3-Clause BSD License

- -

Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met:

- - - -

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.

- - \ No newline at end of file +limitations under the License. \ 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 index 00000000..049ed008 --- /dev/null +++ b/app/src/main/assets/tr/guide_proxies_dark.html @@ -0,0 +1,85 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

İ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).

+ + +

Kötü Niyetli Hükümetler

+ +

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 IP address of the user’s device 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.

+ + +

Mega Şirketler

+ +

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 makul bir doğrulukla 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 browser fingerprinting (tarayıcı tanılama) + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Tor ile Dosya Ä°ndirme

+ +

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.

+ + + + \ 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 index 00000000..e4915281 --- /dev/null +++ b/app/src/main/assets/tr/guide_proxies_light.html @@ -0,0 +1,85 @@ + + + + + + + + + + +

Proxies and Their Limits

+ +

İ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).

+ + +

Kötü Niyetli Hükümetler

+ +

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 IP address of the user’s device 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.

+ + +

Mega Şirketler

+ +

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 makul bir doğrulukla 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 browser fingerprinting (tarayıcı tanılama) + 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.

+ +

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.

+ +

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.

+ + +

Using Proxies

+ +

Despite their limitations, proxies can be useful in some circumstances. + Tor and I2p + 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.

+ + + +

Tor ile Dosya Ä°ndirme

+ +

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.

+ + + + \ 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 index c66c18a4..00000000 --- a/app/src/main/assets/tr/guide_tor_dark.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - -

Tor ve Limitleri

- -

İ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.

- - -

Kötü Niyetli Hükümetler

- -

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 kullanıcı cihazının IP adresini 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.

- - -

Mega Şirketler

- -

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 makul bir doğrulukla 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 browser fingerprinting (tarayıcı tanılama) - 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.

- -

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.

- -

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.

- - -

Tor Kullanma

- -

Kısıtlamalarına rağmen, Tor bazı koşullarda faydalı olabilir. - Tor projesinin, F-Droid - ü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.

- - - -

Tor ile Dosya Ä°ndirme

- -

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.

- - - - \ 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 index 4abd6d63..00000000 --- a/app/src/main/assets/tr/guide_tor_light.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - -

Tor ve Limitleri

- -

İ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.

- - -

Kötü Niyetli Hükümetler

- -

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 kullanıcı cihazının IP adresini 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.

- - -

Mega Şirketler

- -

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 makul bir doğrulukla 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 browser fingerprinting (tarayıcı tanılama) - 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.

- -

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.

- -

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.

- - -

Tor Kullanma

- -

Kısıtlamalarına rağmen, Tor bazı koşullarda faydalı olabilir. - Tor projesinin, F-Droid - ü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.

- - - -

Tor ile Dosya Ä°ndirme

- -

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.

- - - - \ No newline at end of file diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/GuideActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/GuideActivity.java index bd459471..00872252 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/GuideActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/GuideActivity.java @@ -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); - } - } } diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java index 25260921..32d50e94 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java @@ -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 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("

" + getString(R.string.waiting_for_orbot) + "

", "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("

" + getString(R.string.waiting_for_orbot) + "

", "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. diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java index 905e91ee..229bcf28 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/ViewSourceActivity.java @@ -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(); diff --git a/app/src/main/java/com/stoutner/privacybrowser/adapters/AboutPagerAdapter.java b/app/src/main/java/com/stoutner/privacybrowser/adapters/AboutPagerAdapter.java index 0d9a1586..d1583c2f 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/adapters/AboutPagerAdapter.java +++ b/app/src/main/java/com/stoutner/privacybrowser/adapters/AboutPagerAdapter.java @@ -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 index 00000000..59ad9f31 --- /dev/null +++ b/app/src/main/java/com/stoutner/privacybrowser/adapters/GuidePagerAdapter.java @@ -0,0 +1,95 @@ +/* + * Copyright © 2016-2019 Soren Stoutner . + * + * This file is part of 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 . + */ + +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 diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java index e163ac54..bc565a65 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/AboutViewSourceDialog.java @@ -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); diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java index 93e0ec86..8bb889ed 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/CreateHomeScreenShortcutDialog.java @@ -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 index 00000000..fa17c439 --- /dev/null +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ProxyNotInstalledDialog.java @@ -0,0 +1,144 @@ +/* + * Copyright © 2019 Soren Stoutner . + * + * This file is part of 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 . + */ + +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 diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java index b88ef766..d687546d 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java @@ -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 index 00000000..08e39212 --- /dev/null +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/WaitingForProxyDialog.java @@ -0,0 +1,93 @@ +/* + * Copyright © 2019 Soren Stoutner . + * + * This file is part of 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 . + */ + +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 diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java b/app/src/main/java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java index 8496d00f..486f593c 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/AboutTabFragment.java @@ -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) + " "; diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/GuideTabFragment.java b/app/src/main/java/com/stoutner/privacybrowser/fragments/GuideTabFragment.java index 3f1988ed..6564e0ac 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/GuideTabFragment.java +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/GuideTabFragment.java @@ -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: diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java index 2ffcd187..04e0d2d5 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java @@ -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. diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java b/app/src/main/java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java index 35d8fe87..3aa0ba0f 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java +++ b/app/src/main/java/com/stoutner/privacybrowser/helpers/ImportExportDatabaseHelper.java @@ -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 index 2a55d619..00000000 --- a/app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright © 2016-2019 Soren Stoutner . - * - * This file is part of 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 . - */ - -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 index 00000000..a6662086 --- /dev/null +++ b/app/src/main/java/com/stoutner/privacybrowser/helpers/ProxyHelper.java @@ -0,0 +1,163 @@ +/* + * Copyright © 2016-2019 Soren Stoutner . + * + * This file is part of 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 . + */ + +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 diff --git a/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java b/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java index f8777455..21ab2c64 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java +++ b/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java @@ -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 index 00000000..ae78c113 --- /dev/null +++ b/app/src/main/res/drawable/.idea/codeStyles/Project.xml @@ -0,0 +1,113 @@ + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ 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 index 00000000..fcfc8284 --- /dev/null +++ b/app/src/main/res/drawable/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + + + + \ 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 index 00000000..1b046284 --- /dev/null +++ b/app/src/main/res/drawable/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ 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 index 00000000..bc599707 --- /dev/null +++ b/app/src/main/res/drawable/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ 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 index 00000000..7fe933f2 --- /dev/null +++ b/app/src/main/res/drawable/.idea/workspace.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1576705464689 + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/app_bar_disabled_dark.xml b/app/src/main/res/drawable/app_bar_disabled_dark.xml index a4f01a97..33a6f072 100644 --- a/app/src/main/res/drawable/app_bar_disabled_dark.xml +++ b/app/src/main/res/drawable/app_bar_disabled_dark.xml @@ -1,4 +1,4 @@ - + + + + + + android:width="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" > + + android:width="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" > , - which is released under the 3-clause BSD license. Modifications copyright Soren Stoutner 2017. The resulting image is released under the GPLv3+ license. --> - - - - - - - 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 index 0713b724..00000000 --- a/app/src/main/res/drawable/orbot_disabled_light.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - 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 index be951fc4..00000000 --- a/app/src/main/res/drawable/orbot_enabled_dark.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - 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 index 9b28c715..00000000 --- a/app/src/main/res/drawable/orbot_enabled_light.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - 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 index 00000000..4cffb070 --- /dev/null +++ b/app/src/main/res/drawable/proxy_disabled_dark.xml @@ -0,0 +1,13 @@ + + + + + + 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 index 00000000..00a2ebab --- /dev/null +++ b/app/src/main/res/drawable/proxy_disabled_light.xml @@ -0,0 +1,13 @@ + + + + + + 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 index 00000000..597d97f8 --- /dev/null +++ b/app/src/main/res/drawable/proxy_enabled_dark.xml @@ -0,0 +1,13 @@ + + + + + + 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 index 00000000..f67235cc --- /dev/null +++ b/app/src/main/res/drawable/proxy_enabled_light.xml @@ -0,0 +1,13 @@ + + + + + + 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 index 00000000..ccc948bf --- /dev/null +++ b/app/src/main/res/drawable/proxy_ghosted_dark.xml @@ -0,0 +1,13 @@ + + + + + + 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 index 00000000..5bf8795f --- /dev/null +++ b/app/src/main/res/drawable/proxy_ghosted_light.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/layout/about_tab_version.xml b/app/src/main/res/layout/about_tab_version.xml index df489fed..f386bb5a 100644 --- a/app/src/main/res/layout/about_tab_version.xml +++ b/app/src/main/res/layout/about_tab_version.xml @@ -171,6 +171,12 @@ android:layout_width="wrap_content" android:textIsSelectable="true" /> + + - - - - \ 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 index 00000000..59b6cd63 --- /dev/null +++ b/app/src/main/res/layout/unencrypted_website_dialog.xml @@ -0,0 +1,27 @@ + + + + + \ 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 index 89da39cc..00000000 --- a/app/src/main/res/layout/view_ssl_certificate.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ 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 index 00000000..89da39cc --- /dev/null +++ b/app/src/main/res/layout/view_ssl_certificate_dialog.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index 00000000..4a2b6c80 --- /dev/null +++ b/app/src/main/res/layout/waiting_for_proxy_dialog.xml @@ -0,0 +1,46 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/webview_options_menu.xml b/app/src/main/res/menu/webview_options_menu.xml index f3d81054..744873fc 100644 --- a/app/src/main/res/menu/webview_options_menu.xml +++ b/app/src/main/res/menu/webview_options_menu.xml @@ -152,97 +152,132 @@ + + + + + + + + + + + + + + + - + @@ -251,66 +286,66 @@ @@ -318,37 +353,30 @@ - - Neuer Tab Laden… Fehler: + Anwenden Lade EasyList @@ -320,7 +321,7 @@ *. kann als Wildcard-Subdomain verwendet werden (z.B. *.stoutner.com) Standardeinstellung - Custom font size + Benutzerdefinierte Schriftgröße Standardeinstellung @@ -396,8 +397,7 @@ OK - Orbot-Proxy wird nicht funktionieren, solange Orbot nicht installiert ist. - Warte, bis sich Orbot verbindet... + Warte, bis sich Orbot verbindet. Über Privacy Browser @@ -514,18 +514,6 @@ Entfernt “?fbclid=”, “&fbclid=”, “?fbadid=” und “&fbadid=” sowie alles danach aus URLs. Twitter AMP-Umleitungen Entfernt “?amp=1” sowie alles danach URLs. - Tor - Proxy durch Orbot - Sämtlichen Web-Verkehr durch Orbot mittels localhost:8118 leiten. - TOR-Homepage - TOR-Suche - - Searx - DuckDuckGo - JavaScript deaktiviert - DuckDuckGo - JavaScript aktiviert - Eigene - - eigene TOR-Such-URL Suche Startpage diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c45b2477..71be98a5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -52,6 +52,7 @@ Nueva pestaña Cargando… Error: + Apply Cargando EasyList @@ -318,7 +319,7 @@ *. puede ser añadido a un dominio para incluir todos los subdominios (p.ej. *.stoutner.com) Por defecto del sistema - Custom font size + Tamaño de letra personalizado Por defecto del sistema @@ -396,8 +397,7 @@ OK - Enviar a través de Orbot no funcionará a menos que se instale Orbot. - Esperando a Orbot para conectar... + Esperando a Orbot para conectar. Acerca de Navegador Privado @@ -513,18 +513,6 @@ Eliminar “?fbclid=”, “&fbclid=”, “?fbadid=”, “&fbadid=” y cualquier cosa tras ello de las URLs. Redirecciones de Twitter AMP Eliminar “?amp=1” y cualquier cosa después de esto de las URLs. - Tor - Enviar a través de Orbot - Enviar todo el tráfico web a través de Orbot en localhost:8118. - Página de inicio de Tor - Búsqueda en Tor - - Searx - DuckDuckGo - Javascript deshabilitado - DuckDuckGo - Javascript habilitado - Personalizado - - URL personalizada de búsqueda en Tor Búsqueda Startpage diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bfae370c..b875be3b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -53,6 +53,7 @@ Nouvel onglet Chargement… Erreur : + Appliquer Chargement EasyList @@ -318,7 +319,7 @@ Faire précéder par *. pour inclure l\'ensemble des sous-domaines (ex. *.stoutner.com) Réglages systèmes - Custom font size + Taille de police personnalisée Réglages systèmes @@ -396,8 +397,7 @@ OK - Le proxy Orbot ne fonctionnera pas à moins qu\'Orbot soit installé. - En attente de connection d\'Orbot... + En attente de connection d\'Orbot. À propos @@ -513,18 +513,6 @@ Supprime “?fbclid=”, “&fbclid=”, “?fbadid=” et “&fbadid=” et tout ce qui suit après ces URLs. Twitter AMP Supprimer “?amp=1” et tout ce qui suit après cette URL. - Tor - Proxy au travers d\'Orbot - Proxifier tout le trafic web au travers d\'Orbot via localhost:8118. - Tor - Accueil - Tor - Recherche - - Searx - DuckDuckGo - JavaScript désactivé - DuckDuckGo - JavaScript activé - Custom - - Tor - URL personnalisée de recherche Moteur de Recherche Startpage diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a07d6f31..fdb96623 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -52,6 +52,7 @@ Nuova Scheda Caricamento… Errore: + Applica Caricamento EasyList @@ -317,7 +318,7 @@ è possibile anteporre *. a un dominio per includere tutti i sottodomini (es. *.stoutner.com) Impostazioni di default - Custom font size + Dimensione carattere personalizzata Impostazioni di default @@ -395,8 +396,7 @@ OK - Il Proxy con Orbot funziona solo se è installato Orbot. - In attesa della connessione di Orbot... + In attesa della connessione di Orbot. Informazioni su Privacy Browser @@ -513,18 +513,6 @@ Rimuovi “?fbclid=”, “&fbclid=”, “?fbadid=”, e “&fbadid=” e tutto quello che segue dalle URL. Reindirizzamenti Twitter AMP Rimuovi “?amp=1” e tutto quello che segue dalle URL. - Tor - Utilizza Proxy con Orbot - Utilizza Proxy attraverso Orbot su localhost:8118. - Tor Homepage - Tor - Ricerca - - Searx - DuckDuckGo - JavaScript disabilitato - DuckDuckGo - JavaScript abilitato - Personalizzata - - Tor - Ricerca personalizzata Ricerca Startpage diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 018a3c7f..3d9066a8 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -50,6 +50,7 @@ Новая вкладка Загрузка… Ошибка: + Применить Загрузка EasyList @@ -314,7 +315,7 @@ добавьте *. для включения всех поддоменов (напр. *.stoutner.com) Настройки по умолчанию - Custom font size + Пользовательский размер шрифта Настройки по умолчанию @@ -390,8 +391,7 @@ OK - Проксирование Orbot работает только с установленным Orbot. - Ожидание Orbot для подключения... + Ожидание Orbot для подключения. О Privacy Browser @@ -507,18 +507,6 @@ Удалять из URL “?fbclid=”, “&fbclid=”, “?fbadid=”, и “&fbadid=” и все что будет после. AMP-перенаправления в Twitter Удалять из URL “?amp=1” и все что будет после. - Tor - Прокси через Orbot - Проксировать весь веб-трафик через Orbot на localhost:8118. - Домашняя страница Tor - Поиск Tor - - Searx - DuckDuckGo - JavaScript выключен - DuckDuckGo - JavaScript включен - Настраиваемый - - Настраиваемый URL поиска Tor Поиск Startpage diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 21806ca1..73416b76 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -389,8 +389,7 @@ OK - Orbot yüklenmeden Orbot vekil sunucusu çalışmayacaktır. - Orbot\'un bağlanması bekleniyor... + Orbot\'un bağlanması bekleniyor. Privacy Browser Hakkında @@ -508,18 +507,6 @@ URL\'lerde “?fbclid=”, “&fbclid=”, “?fbadid=”, ve “&fbadid=” ve onlardan sonra gelen her şey kaldırıldı. Twitter AMP yönlendirmeleri URL\'den sonra gelen “?amp=1” ve diğer şeyleri kaldırır. - Tor - Orbot vekil sunucusu - localhost:8118 üzerinden tüm web trafiği için vekil sunucusunu Orbot yapar. - Tor anasayfa - Tor arama - - Searx - DuckDuckGo - JavaScript devre dışı - DuckDuckGo - JavaScript etkin - Özel - - Tor özel sayfa arama Arama Startpage diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 58ebf52c..5428730c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -397,9 +397,15 @@ 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. OK - - Orbot proxy will not work unless Orbot is installed. - Waiting for Orbot to connect... + + Proxy not installed dialog + Waiting for proxy dialog + Proxies + Orbot Not Installed + Proxying through Orbot will not work unless the Orbot app is installed. + I2P Not Installed + Proxying through I2P will not work unless the I2P app is installed + Waiting for Orbot to connect. About Privacy Browser @@ -420,6 +426,7 @@ WebView Provider: WebView Version: Orbot: + I2P: OpenKeychain: EasyList: EasyPrivacy: @@ -546,24 +553,6 @@ Remove “?fbclid=”, “&fbclid=”, “?fbadid=”, and “&fbadid=” and anything after them from URLs. Twitter AMP redirects Remove “?amp=1” and anything after it from URLs. - Tor - Proxy through Orbot - Proxy all web traffic through Orbot on localhost:8118. - Tor homepage - Tor search - - Searx - DuckDuckGo - JavaScript disabled - DuckDuckGo - JavaScript enabled - Custom - - - http://ulrn6sryqaifefld.onion/?q= - https://3g2upl4pq6kufc4m.onion/html/?q= - https://3g2upl4pq6kufc4m.onion/?q= - Custom URL - - Tor search custom URL Search Startpage @@ -578,7 +567,7 @@ Yahoo - JavaScript enabled Custom - + https://www.startpage.com/do/search?query= https://searx.me/?q= https://duckduckgo.com/html/?q= @@ -593,6 +582,29 @@ Search custom URL Custom URL + Proxy + None + Tor + I2P + Custom + + None + Tor + I2P + Custom + + + None + Tor + I2P + Custom + + No proxy enabled. Connect directly to the internet. + Tor - proxy through localhost on port 8118. + I2P - proxy through localhost on port 4444. + Custom proxy + Proxy custom host + Proxy custom port Full Screen Full screen browsing mode Double-tap to toggle full screen browsing mode. @@ -634,11 +646,11 @@ Privacy Browser PrivacyBrowser/1.0 - https://3g2upl4pq6kufc4m.onion/ - https://3g2upl4pq6kufc4m.onion/html?q= - https://www.startpage.com/do/search?query= + None + + https://www.startpage.com/ 100 diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 500fcb86..9b7d8135 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -158,37 +158,6 @@ android:defaultValue="true" /> - - - - - - - - - - - - @@ -208,6 +177,31 @@ android:inputType="textUri" /> + + + + + + + + + + diff --git a/build.gradle b/build.gradle index f5dea958..3286a50c 100644 --- a/build.gradle +++ b/build.gradle @@ -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 index 00000000..e81eba47 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/full_description.txt @@ -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 index 00000000..05f5e06a --- /dev/null +++ b/fastlane/metadata/android/fr-FR/short_description.txt @@ -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 index 00000000..ca458fec --- /dev/null +++ b/fastlane/metadata/android/fr-FR/title.txt @@ -0,0 +1 @@ +Privacy Browser \ No newline at end of file