From: Soren Stoutner <soren@stoutner.com> Date: Tue, 29 May 2018 18:39:39 +0000 (-0700) Subject: Add swipe to refresh to domain and on-the-fly settings. https://redmine.stoutner... X-Git-Tag: v2.11~9 X-Git-Url: https://gitweb.stoutner.com/?a=commitdiff_plain;h=6ccecb3374c1988aef2650a87dac20923ce3aa2f;p=PrivacyBrowserAndroid.git Add swipe to refresh to domain and on-the-fly settings. https://redmine.stoutner.com/issues/191 --- diff --git a/.idea/dictionaries/soren.xml b/.idea/dictionaries/soren.xml index 57f65499..50e8c8b0 100644 --- a/.idea/dictionaries/soren.xml +++ b/.idea/dictionaries/soren.xml @@ -67,6 +67,7 @@ <w>gerlach</w> <w>gitweb</w> <w>googleplay</w> + <w>homescreen</w> <w>huawei</w> <w>imageview</w> <w>intl</w> @@ -132,6 +133,7 @@ <w>subdomain</w> <w>subdomains</w> <w>subfolders</w> + <w>swipetorefresh</w> <w>tablayout</w> <w>techrepublic</w> <w>textarea</w> diff --git a/app/src/free/assets/de/about_permissions_dark.html b/app/src/free/assets/de/about_permissions_dark.html index e5664bc8..61a437c7 100644 --- a/app/src/free/assets/de/about_permissions_dark.html +++ b/app/src/free/assets/de/about_permissions_dark.html @@ -48,6 +48,12 @@ <p>In addition, Privacy Browser Free displays ads from Googleâs AdMob network using the Firebase backend. For the free flavor, Firebase adds the following permissions even though they are not listed in the manifest file.</p> + <h3>Read phone status and identity</h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>Allows the ads to access to phone state, including the phone number of the device, current cellular network information, the status of any ongoing calls, + and a list of any PhoneAccounts registered on the device. This is a dangerous permission and requires the user to explicitly allow it on Android Marshmallow (API 23) or newer. + In my testing I have not seen ads attempt to request or use this permission.</p> + <h3>View network connections</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>Allows the ads to tell when you are connected to the internet and when you arenât (presumably so they donât try to reload an ad when you are disconnected). diff --git a/app/src/free/assets/de/about_permissions_light.html b/app/src/free/assets/de/about_permissions_light.html index 51801b71..22ea5121 100644 --- a/app/src/free/assets/de/about_permissions_light.html +++ b/app/src/free/assets/de/about_permissions_light.html @@ -48,6 +48,12 @@ <p>In addition, Privacy Browser Free displays ads from Googleâs AdMob network using the Firebase backend. For the free flavor, Firebase adds the following permissions even though they are not listed in the manifest file.</p> + <h3>Read phone status and identity</h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>Allows the ads to access to phone state, including the phone number of the device, current cellular network information, the status of any ongoing calls, + and a list of any PhoneAccounts registered on the device. This is a dangerous permission and requires the user to explicitly allow it on Android Marshmallow (API 23) or newer. + In my testing I have not seen ads attempt to request or use this permission.</p> + <h3>View network connections</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>Allows the ads to tell when you are connected to the internet and when you arenât (presumably so they donât try to reload an ad when you are disconnected). diff --git a/app/src/free/assets/en/about_permissions_dark.html b/app/src/free/assets/en/about_permissions_dark.html index 7e6c4c0d..3dd5af58 100644 --- a/app/src/free/assets/en/about_permissions_dark.html +++ b/app/src/free/assets/en/about_permissions_dark.html @@ -44,6 +44,12 @@ <p>In addition, Privacy Browser Free displays ads from Googleâs AdMob network using the Firebase backend. For the free flavor, Firebase adds the following permissions even though they are not listed in the manifest file.</p> + <h3>Read phone status and identity</h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>Allows the ads to access to phone state, including the phone number of the device, current cellular network information, the status of any ongoing calls, + and a list of any PhoneAccounts registered on the device. This is a dangerous permission and requires the user to explicitly allow it on Android Marshmallow (API 23) or newer. + In my testing I have not seen ads attempt to request or use this permission.</p> + <h3>View network connections</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>Allows the ads to tell when you are connected to the internet and when you arenât (presumably so they donât try to reload an ad when you are disconnected). diff --git a/app/src/free/assets/en/about_permissions_light.html b/app/src/free/assets/en/about_permissions_light.html index f080c069..6cafabac 100644 --- a/app/src/free/assets/en/about_permissions_light.html +++ b/app/src/free/assets/en/about_permissions_light.html @@ -44,6 +44,12 @@ <p>In addition, Privacy Browser Free displays ads from Googleâs AdMob network using the Firebase backend. For the free flavor, Firebase adds the following permissions even though they are not listed in the manifest file.</p> + <h3>Read phone status and identity</h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>Allows the ads to access to phone state, including the phone number of the device, current cellular network information, the status of any ongoing calls, + and a list of any PhoneAccounts registered on the device. This is a dangerous permission and requires the user to explicitly allow it on Android Marshmallow (API 23) or newer. + In my testing I have not seen ads attempt to request or use this permission.</p> + <h3>View network connections</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>Allows the ads to tell when you are connected to the internet and when you arenât (presumably so they donât try to reload an ad when you are disconnected). diff --git a/app/src/free/assets/es/about_permissions_dark.html b/app/src/free/assets/es/about_permissions_dark.html index 0617985f..9041dd81 100644 --- a/app/src/free/assets/es/about_permissions_dark.html +++ b/app/src/free/assets/es/about_permissions_dark.html @@ -46,6 +46,13 @@ <p>Además, Navegador Privado Gratuito muestra anuncios de Google AdMob usando el proveedor Firebase. En el sabor gratuito, Firebase añade los siguientes permisos aunque no aparecen en el archivo de manifiesto.</p> + <h3>Leer el estado y la identidad del teléfono</h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>Permite que los anuncios accedan al estado del teléfono, incluyendo el número de teléfono del dispositivo, la información actual de la red celular, + el estado de las llamadas en curso y una lista de las cuentas telefónicas registradas en el dispositivo. + Este es un permiso peligroso y requiere que el usuario lo permita explÃcitamente en Android Marshmallow (API 23) o posterior. + En mis pruebas no he visto anuncios que intenten solicitar o usar este permiso.</p> + <h3>Ver conexiones de red</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>Permite a los anuncios saber si el dispositivo está conectado a internet y cuando no (probablemente para no tratar de recargar un anuncio cuando está desconectado). diff --git a/app/src/free/assets/es/about_permissions_light.html b/app/src/free/assets/es/about_permissions_light.html index 45011194..f9553b65 100644 --- a/app/src/free/assets/es/about_permissions_light.html +++ b/app/src/free/assets/es/about_permissions_light.html @@ -46,6 +46,13 @@ <p>Además, Navegador Privado Gratuito muestra anuncios de Google AdMob usando el proveedor Firebase. En el sabor gratuito, Firebase añade los siguientes permisos aunque no aparecen en el archivo de manifiesto.</p> + <h3>Leer el estado y la identidad del teléfono</h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>Permite que los anuncios accedan al estado del teléfono, incluyendo el número de teléfono del dispositivo, la información actual de la red celular, + el estado de las llamadas en curso y una lista de las cuentas telefónicas registradas en el dispositivo. + Este es un permiso peligroso y requiere que el usuario lo permita explÃcitamente en Android Marshmallow (API 23) o posterior. + En mis pruebas no he visto anuncios que intenten solicitar o usar este permiso.</p> + <h3>Ver conexiones de red</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>Permite a los anuncios saber si el dispositivo está conectado a internet y cuando no (probablemente para no tratar de recargar un anuncio cuando está desconectado). diff --git a/app/src/free/assets/it/about_permissions_dark.html b/app/src/free/assets/it/about_permissions_dark.html index 5054f874..2604326c 100644 --- a/app/src/free/assets/it/about_permissions_dark.html +++ b/app/src/free/assets/it/about_permissions_dark.html @@ -46,6 +46,13 @@ <p>Oltre ai permessi sopraelencati, Privacy Browser Free mostra gli annunci provenienti dalla Google's AdMob network utilizzando il Firebase backend. Se si utilizza la versione Free, Firebase aggiunge i seguenti permessi anche se non sono elencati nel file âmanifestâ.</p> + <h3>Lettura dello stato del telefono e dell'identità </h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>Permette agli annunci di accedere allo stato del telefono, compreso il numero di telefono del dispositivo, l'informazione sulla rete telefonica in uso, + lo status delle chiamate in uscita e una lista degli account telefonici registrati sul dispositivo. + Si tratta di un permesso pericoloso per cui è richiesto che l'utente ne dia esplicito consenso su Android Marshmallow (API 23) o successivo. + Test effettuati non hanno peraltro evidenziato alcun tentativo da parte di annunci di richiedere o utilizzare questo permesso.</p> + <h3>Visualizzare connessioni di rete</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>Permette agli annunci di dire quando si è o non si è connessi a internet (presumibilmente per evitare il tentativo di ricaricare un annuncio quando non si è connessi). diff --git a/app/src/free/assets/it/about_permissions_light.html b/app/src/free/assets/it/about_permissions_light.html index 6f5fd19a..62ee6abe 100644 --- a/app/src/free/assets/it/about_permissions_light.html +++ b/app/src/free/assets/it/about_permissions_light.html @@ -46,6 +46,13 @@ <p>Oltre ai permessi sopraelencati, Privacy Browser Free mostra gli annunci provenienti dalla Google's AdMob network utilizzando il Firebase backend. Se si utilizza la versione Free, Firebase aggiunge i seguenti permessi anche se non sono elencati nel file âmanifestâ.</p> + <h3>Lettura dello stato del telefono e dell'identità </h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>Permette agli annunci di accedere allo stato del telefono, compreso il numero di telefono del dispositivo, l'informazione sulla rete telefonica in uso, + lo status delle chiamate in uscita e una lista degli account telefonici registrati sul dispositivo. + Si tratta di un permesso pericoloso per cui è richiesto che l'utente ne dia esplicito consenso su Android Marshmallow (API 23) o successivo. + Test effettuati non hanno peraltro evidenziato alcun tentativo da parte di annunci di richiedere o utilizzare questo permesso.</p> + <h3>Visualizzare connessioni di rete</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>Permette agli annunci di dire quando si è o non si è connessi a internet (presumibilmente per evitare il tentativo di ricaricare un annuncio quando non si è connessi). diff --git a/app/src/free/assets/ru/about_permissions_dark.html b/app/src/free/assets/ru/about_permissions_dark.html index 2d4c025a..372303f9 100644 --- a/app/src/free/assets/ru/about_permissions_dark.html +++ b/app/src/free/assets/ru/about_permissions_dark.html @@ -44,6 +44,12 @@ <p>ÐÑоме Ñого, Privacy Browser Free оÑобÑÐ°Ð¶Ð°ÐµÑ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð· ÑеÑи Google AdMob Ñ Ð¸ÑполÑзованием бÑкенда Firebase. ÐÐ»Ñ Ð±ÐµÑплаÑной веÑÑии Firebase добавлÑÐµÑ ÑледÑÑÑие ÑазÑеÑениÑ, даже еÑли они не пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² Ñайле маниÑеÑÑа.</p> + <h3>ЧÑение ÑÑаÑÑÑа ÑелеÑона и иденÑиÑикаÑии</h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>ÐозволÑÐµÑ Ñекламе полÑÑаÑÑ Ð´Ð¾ÑÑÑп к ÑоÑÑоÑÐ½Ð¸Ñ ÑелеÑона, вклÑÑÐ°Ñ Ð½Ð¾Ð¼ÐµÑ ÑелеÑона ÑÑÑÑойÑÑва, ÑекÑÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑоÑовой ÑеÑи, ÑÑаÑÑÑ Ð»ÑбÑÑ ÑекÑÑÐ¸Ñ Ð²Ñзовов и ÑпиÑок лÑбÑÑ Ð°ÐºÐºÐ°ÑнÑов, + заÑегиÑÑÑиÑованнÑÑ Ð½Ð° ÑÑÑÑойÑÑве. ÐÑо опаÑное ÑазÑеÑение и оно ÑÑебÑÐµÑ Ñвного ÑазÑеÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð½Ð° Android Marshmallow (API 23) или новее. + Ð Ð¼Ð¾Ð¸Ñ ÑеÑÑÐ°Ñ Ñ Ð½Ðµ ÑÑалкивалÑÑ Ñ Ñем, ÑÑÐ¾Ð±Ñ Ñеклама пÑÑалаÑÑ Ð·Ð°Ð¿ÑоÑиÑÑ Ð¸Ð»Ð¸ иÑполÑзоваÑÑ ÑÑо ÑазÑеÑение.</p> + <h3>ÐÑоÑмоÑÑ ÑеÑевÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑений</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>ÐозволÑÐµÑ Ñекламе ÑзнаваÑÑ Ð½Ð°Ð»Ð¸Ñие подклÑÑÐµÐ½Ð¸Ñ Ðº инÑеÑнеÑÑ (возможно, Ñаким обÑазом пÑедоÑвÑаÑаÑÑÑÑ Ð¿Ð¾Ð¿ÑÑки загÑÑзки ÑÐµÐºÐ»Ð°Ð¼Ñ Ð¿Ñи оÑÑÑÑÑÑвии акÑивного ÑоединениÑ). diff --git a/app/src/free/assets/ru/about_permissions_light.html b/app/src/free/assets/ru/about_permissions_light.html index 389d2c03..90eaaf08 100644 --- a/app/src/free/assets/ru/about_permissions_light.html +++ b/app/src/free/assets/ru/about_permissions_light.html @@ -44,6 +44,12 @@ <p>ÐÑоме Ñого, Privacy Browser Free оÑобÑÐ°Ð¶Ð°ÐµÑ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð· ÑеÑи Google AdMob Ñ Ð¸ÑполÑзованием бÑкенда Firebase. ÐÐ»Ñ Ð±ÐµÑплаÑной веÑÑии Firebase добавлÑÐµÑ ÑледÑÑÑие ÑазÑеÑениÑ, даже еÑли они не пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² Ñайле маниÑеÑÑа.</p> + <h3>ЧÑение ÑÑаÑÑÑа ÑелеÑона и иденÑиÑикаÑии</h3> + <p><a href="https://developer.android.com/reference/android/Manifest.permission#read_phone_state">android.permission.READ_PHONE_STATE</a></p> + <p>ÐозволÑÐµÑ Ñекламе полÑÑаÑÑ Ð´Ð¾ÑÑÑп к ÑоÑÑоÑÐ½Ð¸Ñ ÑелеÑона, вклÑÑÐ°Ñ Ð½Ð¾Ð¼ÐµÑ ÑелеÑона ÑÑÑÑойÑÑва, ÑекÑÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑоÑовой ÑеÑи, ÑÑаÑÑÑ Ð»ÑбÑÑ ÑекÑÑÐ¸Ñ Ð²Ñзовов и ÑпиÑок лÑбÑÑ Ð°ÐºÐºÐ°ÑнÑов, + заÑегиÑÑÑиÑованнÑÑ Ð½Ð° ÑÑÑÑойÑÑве. ÐÑо опаÑное ÑазÑеÑение и оно ÑÑебÑÐµÑ Ñвного ÑазÑеÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð½Ð° Android Marshmallow (API 23) или новее. + Ð Ð¼Ð¾Ð¸Ñ ÑеÑÑÐ°Ñ Ñ Ð½Ðµ ÑÑалкивалÑÑ Ñ Ñем, ÑÑÐ¾Ð±Ñ Ñеклама пÑÑалаÑÑ Ð·Ð°Ð¿ÑоÑиÑÑ Ð¸Ð»Ð¸ иÑполÑзоваÑÑ ÑÑо ÑазÑеÑение.</p> + <h3>ÐÑоÑмоÑÑ ÑеÑевÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑений</h3> <p><a href="https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_NETWORK_STATE">android.permission.ACCESS_NETWORK_STATE</a></p> <p>ÐозволÑÐµÑ Ñекламе ÑзнаваÑÑ Ð½Ð°Ð»Ð¸Ñие подклÑÑÐµÐ½Ð¸Ñ Ðº инÑеÑнеÑÑ (возможно, Ñаким обÑазом пÑедоÑвÑаÑаÑÑÑÑ Ð¿Ð¾Ð¿ÑÑки загÑÑзки ÑÐµÐºÐ»Ð°Ð¼Ñ Ð¿Ñи оÑÑÑÑÑÑвии акÑивного ÑоединениÑ). diff --git a/app/src/main/assets/de/about_changelog_dark.html b/app/src/main/assets/de/about_changelog_dark.html index 48d856de..91fdef8d 100644 --- a/app/src/main/assets/de/about_changelog_dark.html +++ b/app/src/main/assets/de/about_changelog_dark.html @@ -29,7 +29,7 @@ <body> <h3>2.10 (version code 33)</h3> - <p>24. Mai 2018 - Mindest-API 19, Ziel-API 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24. Mai 2018</a> - Mindest-API 19, Ziel-API 27</p> <ul> <li>Enable <a href="https://redmine.stoutner.com/issues/1">uploading of files</a> to websites on Lollipop and newer.</li> <li>Allow <a href="https://redmine.stoutner.com/issues/216">applied user agents to be auto-updated</a> with new releases.</li> diff --git a/app/src/main/assets/de/about_changelog_light.html b/app/src/main/assets/de/about_changelog_light.html index b5e8a07f..709ef8b3 100644 --- a/app/src/main/assets/de/about_changelog_light.html +++ b/app/src/main/assets/de/about_changelog_light.html @@ -29,7 +29,7 @@ <body> <h3>2.10 (version code 33)</h3> - <p>24. Mai 2018 - Mindest-API 19, Ziel-API 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24. Mai 2018</a> - Mindest-API 19, Ziel-API 27</p> <ul> <li>Enable <a href="https://redmine.stoutner.com/issues/1">uploading of files</a> to websites on Lollipop and newer.</li> <li>Allow <a href="https://redmine.stoutner.com/issues/216">applied user agents to be auto-updated</a> with new releases.</li> diff --git a/app/src/main/assets/en/about_changelog_dark.html b/app/src/main/assets/en/about_changelog_dark.html index c275aa46..0f45bd8b 100644 --- a/app/src/main/assets/en/about_changelog_dark.html +++ b/app/src/main/assets/en/about_changelog_dark.html @@ -25,7 +25,7 @@ <body> <h3>2.10 (version code 33)</h3> - <p>24 May 2018 - minimum API 19, target API 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 May 2018</a> - minimum API 19, target API 27</p> <ul> <li>Enable <a href="https://redmine.stoutner.com/issues/1">uploading of files</a> to websites on Lollipop and newer.</li> <li>Allow <a href="https://redmine.stoutner.com/issues/216">applied user agents to be auto-updated</a> with new releases.</li> diff --git a/app/src/main/assets/en/about_changelog_light.html b/app/src/main/assets/en/about_changelog_light.html index 0bd45747..92c0c9e3 100644 --- a/app/src/main/assets/en/about_changelog_light.html +++ b/app/src/main/assets/en/about_changelog_light.html @@ -25,7 +25,7 @@ <body> <h3>2.10 (version code 33)</h3> - <p>24 May 2018 - minimum API 19, target API 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 May 2018</a> - minimum API 19, target API 27</p> <ul> <li>Enable <a href="https://redmine.stoutner.com/issues/1">uploading of files</a> to websites on Lollipop and newer.</li> <li>Allow <a href="https://redmine.stoutner.com/issues/216">applied user agents to be auto-updated</a> with new releases.</li> diff --git a/app/src/main/assets/es/about_changelog_dark.html b/app/src/main/assets/es/about_changelog_dark.html index 5ada0c2f..8c3d357a 100644 --- a/app/src/main/assets/es/about_changelog_dark.html +++ b/app/src/main/assets/es/about_changelog_dark.html @@ -27,7 +27,7 @@ <body> <h3>2.10 (código de versión)</h3> - <p>24 de mayo de 2018 - API mÃnimo 19, API dirigido 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 de mayo de 2018</a> - API mÃnimo 19, API dirigido 27</p> <ul> <li>Habilitar <a href="https://redmine.stoutner.com/issues/1">la subida de archivos</a> a páginas web en Lollipop y más recientes.</li> <li>Permitir <a href="https://redmine.stoutner.com/issues/216">que los agentes de usuario aplicados puedan actualizarse automáticamente</a> con nuevas versiones.</li> diff --git a/app/src/main/assets/es/about_changelog_light.html b/app/src/main/assets/es/about_changelog_light.html index 93fd2917..a4d18bb6 100644 --- a/app/src/main/assets/es/about_changelog_light.html +++ b/app/src/main/assets/es/about_changelog_light.html @@ -27,7 +27,7 @@ <body> <h3>2.10 (código de versión)</h3> - <p>24 de mayo de 2018 - API mÃnimo 19, API dirigido 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 de mayo de 2018</a> - API mÃnimo 19, API dirigido 27</p> <ul> <li>Habilitar <a href="https://redmine.stoutner.com/issues/1">la subida de archivos</a> a páginas web en Lollipop y más recientes.</li> <li>Permitir <a href="https://redmine.stoutner.com/issues/216">que los agentes de usuario aplicados puedan actualizarse automáticamente</a> con nuevas versiones.</li> diff --git a/app/src/main/assets/it/about_changelog_dark.html b/app/src/main/assets/it/about_changelog_dark.html index f09b264e..d8decb54 100644 --- a/app/src/main/assets/it/about_changelog_dark.html +++ b/app/src/main/assets/it/about_changelog_dark.html @@ -27,7 +27,7 @@ <body> <h3>2.10 (versione codice 33)</h3> - <p>24 Maggio 2018 - minima API 19, target API 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 Maggio 2018</a> - minima API 19, target API 27</p> <ul> <li>Abilitazione dell'<a href="https://redmine.stoutner.com/issues/1">upload di file</a> sui siti web per Android Lollipop e seguenti.</li> <li>Possibilità per <a href="https://redmine.stoutner.com/issues/216">gli user agent applicati di essere auto-aggiornati</a> con le nuove release.</li> diff --git a/app/src/main/assets/it/about_changelog_light.html b/app/src/main/assets/it/about_changelog_light.html index 9cdec7df..b23aa9ae 100644 --- a/app/src/main/assets/it/about_changelog_light.html +++ b/app/src/main/assets/it/about_changelog_light.html @@ -27,7 +27,7 @@ <body> <h3>2.10 (versione codice 33)</h3> - <p>24 Maggio 2018 - minima API 19, target API 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 Maggio 2018</a> - minima API 19, target API 27</p> <ul> <li>Abilitazione dell'<a href="https://redmine.stoutner.com/issues/1">upload di file</a> sui siti web per Android Lollipop e seguenti.</li> <li>Possibilità per <a href="https://redmine.stoutner.com/issues/216">gli user agent applicati di essere auto-aggiornati</a> con le nuove release.</li> diff --git a/app/src/main/assets/ru/about_changelog_dark.html b/app/src/main/assets/ru/about_changelog_dark.html index 505a3aa3..e1f07cff 100644 --- a/app/src/main/assets/ru/about_changelog_dark.html +++ b/app/src/main/assets/ru/about_changelog_dark.html @@ -25,7 +25,7 @@ <body> <h3>2.10 (код веÑÑии 33)</h3> - <p>24 Ð¼Ð°Ñ 2018 года - minimum API 19, target API 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 Ð¼Ð°Ñ 2018 года</a> - minimum API 19, target API 27</p> <ul> <li>Ðобавлена <a href="https://redmine.stoutner.com/issues/1">возможноÑÑÑ Ð·Ð°Ð³ÑÑзки Ñайлов</a> на веб-ÑайÑÑ Ð´Ð»Ñ Ð²ÐµÑÑии Android Lollipop и новее.</li> <li>Ðобавлено <a href="https://redmine.stoutner.com/issues/216">авÑомаÑиÑеÑкое обновление полÑзоваÑелÑÑÐºÐ¸Ñ Ð°Ð³ÐµÐ½Ñов</a> вмеÑÑе Ñ Ð½Ð¾Ð²Ñми веÑÑиÑми бÑаÑзеÑа.</li> diff --git a/app/src/main/assets/ru/about_changelog_light.html b/app/src/main/assets/ru/about_changelog_light.html index 4cd30757..56b3f76e 100644 --- a/app/src/main/assets/ru/about_changelog_light.html +++ b/app/src/main/assets/ru/about_changelog_light.html @@ -25,7 +25,7 @@ <body> <h3>2.10 (код веÑÑии 33)</h3> - <p>24 Ð¼Ð°Ñ 2018 года - minimum API 19, target API 27</p> + <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=29e6b7b467e6987d6aa42429b03e3b5498acbae3">24 Ð¼Ð°Ñ 2018 года</a> - minimum API 19, target API 27</p> <ul> <li>Ðобавлена <a href="https://redmine.stoutner.com/issues/1">возможноÑÑÑ Ð·Ð°Ð³ÑÑзки Ñайлов</a> на веб-ÑайÑÑ Ð´Ð»Ñ Ð²ÐµÑÑии Android Lollipop и новее.</li> <li>Ðобавлено <a href="https://redmine.stoutner.com/issues/216">авÑомаÑиÑеÑкое обновление полÑзоваÑелÑÑÐºÐ¸Ñ Ð°Ð³ÐµÐ½Ñов</a> вмеÑÑе Ñ Ð½Ð¾Ð²Ñми веÑÑиÑми бÑаÑзеÑа.</li> diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java index 05df4abc..430bf90e 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java @@ -641,6 +641,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo Spinner userAgentSpinner = view.findViewById(R.id.domain_settings_user_agent_spinner); EditText customUserAgentEditText = view.findViewById(R.id.domain_settings_custom_user_agent_edittext); Spinner fontSizeSpinner = view.findViewById(R.id.domain_settings_font_size_spinner); + Spinner swipeToRefreshSpinner = view.findViewById(R.id.domain_settings_swipe_to_refresh_spinner); Spinner displayWebpageImagesSpinner = view.findViewById(R.id.domain_settings_display_webpage_images_spinner); Spinner nightModeSpinner = view.findViewById(R.id.domain_settings_night_mode_spinner); Switch pinnedSslCertificateSwitch = view.findViewById(R.id.domain_settings_pinned_ssl_certificate_switch); @@ -660,6 +661,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo boolean fanboysSocialBlockingEnabled = fanboysSocialBlockingSwitch.isChecked(); int userAgentPosition = userAgentSpinner.getSelectedItemPosition(); int fontSizePosition = fontSizeSpinner.getSelectedItemPosition(); + int swipeToRefreshInt = swipeToRefreshSpinner.getSelectedItemPosition(); int displayWebpageImagesInt = displayWebpageImagesSpinner.getSelectedItemPosition(); int nightModeInt = nightModeSpinner.getSelectedItemPosition(); boolean pinnedSslCertificate = pinnedSslCertificateSwitch.isChecked(); @@ -694,8 +696,8 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo if (savedSslCertificateRadioButton.isChecked()) { // The current certificate is being used. // Update the database except for the certificate. domainsDatabaseHelper.updateDomainExceptCertificate(DomainsActivity.currentDomainDatabaseId, domainNameString, javaScriptEnabled, firstPartyCookiesEnabled, thirdPartyCookiesEnabled, - domStorageEnabled, formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, displayWebpageImagesInt, - nightModeInt, pinnedSslCertificate); + domStorageEnabled, formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, swipeToRefreshInt, nightModeInt, + displayWebpageImagesInt, pinnedSslCertificate); } else if (currentWebsiteCertificateRadioButton.isChecked()) { // The certificate is being updated with the current website certificate. // Get the current website SSL certificate. SslCertificate currentWebsiteSslCertificate = MainWebViewActivity.sslCertificate; @@ -712,14 +714,15 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo // Update the database. domainsDatabaseHelper.updateDomainWithCertificate(currentDomainDatabaseId, domainNameString, javaScriptEnabled, firstPartyCookiesEnabled, thirdPartyCookiesEnabled, domStorageEnabled, - formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, displayWebpageImagesInt, nightModeInt, - pinnedSslCertificate, issuedToCommonName, issuedToOrganization, issuedToOrganizationalUnit, issuedByCommonName, issuedByOrganization, issuedByOrganizationalUnit, startDateLong, endDateLong); + formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, swipeToRefreshInt, nightModeInt, + displayWebpageImagesInt, pinnedSslCertificate, issuedToCommonName, issuedToOrganization, issuedToOrganizationalUnit, issuedByCommonName, issuedByOrganization, issuedByOrganizationalUnit, + startDateLong, endDateLong); } else { // No certificate is selected. // Update the database, with PINNED_SSL_CERTIFICATE set to false. domainsDatabaseHelper.updateDomainExceptCertificate(currentDomainDatabaseId, domainNameString, javaScriptEnabled, firstPartyCookiesEnabled, thirdPartyCookiesEnabled, domStorageEnabled, - formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, displayWebpageImagesInt, nightModeInt, - false); + formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, swipeToRefreshInt, nightModeInt, + displayWebpageImagesInt,false); } } 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 6e296677..02b70255 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java @@ -245,7 +245,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // `fullScreenVideoFrameLayout` is used in `onCreate()` and `onConfigurationChanged()`. private FrameLayout fullScreenVideoFrameLayout; - // `swipeRefreshLayout` is used in `onCreate()`, `onPrepareOptionsMenu`, and `onRestart()`. + // `swipeRefreshLayout` is used in `onCreate()`, `onPrepareOptionsMenu()`, `onOptionsMenuSelected()`, and `onRestart()`. private SwipeRefreshLayout swipeRefreshLayout; // `urlAppBarRelativeLayout` is used in `onCreate()` and `applyDomainSettings()`. @@ -278,9 +278,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // `nightMode` is used in `onCreate()` and `applyDomainSettings()`. private boolean nightMode; - // `swipeToRefreshEnabled` is used in `onPrepareOptionsMenu()` and `applyAppSettings()`. - private boolean swipeToRefreshEnabled; - // `displayWebpageImagesBoolean` is used in `applyAppSettings()` and `applyDomainSettings()`. private boolean displayWebpageImagesBoolean; @@ -894,7 +891,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook mainWebView.setVisibility(View.VISIBLE); } - //Stop the `SwipeToRefresh` indicator if it is running + //Stop the swipe to refresh indicator if it is running swipeRefreshLayout.setRefreshing(false); } } @@ -1612,8 +1609,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook MenuItem clearDOMStorageMenuItem = menu.findItem(R.id.clear_dom_storage); MenuItem clearFormDataMenuItem = menu.findItem(R.id.clear_form_data); MenuItem fontSizeMenuItem = menu.findItem(R.id.font_size); + MenuItem swipeToRefreshMenuItem = menu.findItem(R.id.swipe_to_refresh); MenuItem displayImagesMenuItem = menu.findItem(R.id.display_images); - MenuItem refreshMenuItem = menu.findItem(R.id.refresh); MenuItem adConsentMenuItem = menu.findItem(R.id.ad_consent); // Set the text for the domain menu item. @@ -1628,6 +1625,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook toggleThirdPartyCookiesMenuItem.setChecked(thirdPartyCookiesEnabled); toggleDomStorageMenuItem.setChecked(domStorageEnabled); toggleSaveFormDataMenuItem.setChecked(saveFormDataEnabled); + swipeToRefreshMenuItem.setChecked(swipeRefreshLayout.isEnabled()); displayImagesMenuItem.setChecked(mainWebView.getSettings().getLoadsImagesAutomatically()); // Enable third-party cookies if first-party cookies are enabled. @@ -1720,9 +1718,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook fontSizeMenuItem.setTitle(fontSizeTitle); selectedFontSizeMenuItem.setChecked(true); - // Only show Refresh if `swipeToRefresh` is disabled. - refreshMenuItem.setVisible(!swipeToRefreshEnabled); - // Only show Ad Consent if this is the free flavor. adConsentMenuItem.setVisible(BuildConfig.FLAVOR.contentEquals("free")); @@ -1744,6 +1739,29 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Set the commands that relate to the menu entries. switch (menuItemId) { + case R.id.toggle_javascript: + // Switch the status of javaScriptEnabled. + javaScriptEnabled = !javaScriptEnabled; + + // Apply the new JavaScript status. + mainWebView.getSettings().setJavaScriptEnabled(javaScriptEnabled); + + // Update the privacy icon. `true` runs `invalidateOptionsMenu` as the last step. + updatePrivacyIcons(true); + + // Display a `Snackbar`. + if (javaScriptEnabled) { // JavaScrip is enabled. + Snackbar.make(findViewById(R.id.main_webview), R.string.javascript_enabled, Snackbar.LENGTH_SHORT).show(); + } else if (firstPartyCookiesEnabled) { // JavaScript is disabled, but first-party cookies are enabled. + Snackbar.make(findViewById(R.id.main_webview), R.string.javascript_disabled, Snackbar.LENGTH_SHORT).show(); + } else { // Privacy mode. + Snackbar.make(findViewById(R.id.main_webview), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show(); + } + + // Reload the WebView. + mainWebView.reload(); + return true; + case R.id.add_or_edit_domain: if (domainSettingsApplied) { // Edit the current domain settings. // Reapply the domain settings on returning to `MainWebViewActivity`. @@ -1786,29 +1804,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook } return true; - case R.id.toggle_javascript: - // Switch the status of javaScriptEnabled. - javaScriptEnabled = !javaScriptEnabled; - - // Apply the new JavaScript status. - mainWebView.getSettings().setJavaScriptEnabled(javaScriptEnabled); - - // Update the privacy icon. `true` runs `invalidateOptionsMenu` as the last step. - updatePrivacyIcons(true); - - // Display a `Snackbar`. - if (javaScriptEnabled) { // JavaScrip is enabled. - Snackbar.make(findViewById(R.id.main_webview), R.string.javascript_enabled, Snackbar.LENGTH_SHORT).show(); - } else if (firstPartyCookiesEnabled) { // JavaScript is disabled, but first-party cookies are enabled. - Snackbar.make(findViewById(R.id.main_webview), R.string.javascript_disabled, Snackbar.LENGTH_SHORT).show(); - } else { // Privacy mode. - Snackbar.make(findViewById(R.id.main_webview), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show(); - } - - // Reload the WebView. - mainWebView.reload(); - return true; - case R.id.toggle_first_party_cookies: // Switch the status of firstPartyCookiesEnabled. firstPartyCookiesEnabled = !firstPartyCookiesEnabled; @@ -2031,6 +2026,11 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook mainWebView.getSettings().setTextZoom(200); return true; + case R.id.swipe_to_refresh: + // Toggle swipe to refresh. + swipeRefreshLayout.setEnabled(!swipeRefreshLayout.isEnabled()); + return true; + case R.id.display_images: if (mainWebView.getSettings().getLoadsImagesAutomatically()) { // Images are currently loaded automatically. mainWebView.getSettings().setLoadsImagesAutomatically(false); @@ -2043,6 +2043,12 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook onTheFlyDisplayImagesSet = true; return true; + case R.id.view_source: + // Launch the View Source activity. + Intent viewSourceIntent = new Intent(this, ViewSourceActivity.class); + startActivity(viewSourceIntent); + return true; + case R.id.share: // Setup the share string. String shareString = webViewTitle + " â " + urlTextBox.getText().toString(); @@ -2089,12 +2095,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook printManager.print(getString(R.string.privacy_browser_web_page), printDocumentAdapter, null); return true; - case R.id.view_source: - // Launch the Vew Source activity. - Intent viewSourceIntent = new Intent(this, ViewSourceActivity.class); - startActivity(viewSourceIntent); - return true; - case R.id.add_to_homescreen: // Show the `CreateHomeScreenShortcutDialog` `AlertDialog` and name this instance `R.string.create_shortcut`. AppCompatDialogFragment createHomeScreenShortcutDialogFragment = new CreateHomeScreenShortcutDialog(); @@ -3145,7 +3145,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook fullScreenBrowsingModeEnabled = sharedPreferences.getBoolean("full_screen_browsing_mode", false); hideSystemBarsOnFullscreen = sharedPreferences.getBoolean("hide_system_bars", false); translucentNavigationBarOnFullscreen = sharedPreferences.getBoolean("translucent_navigation_bar", true); - swipeToRefreshEnabled = sharedPreferences.getBoolean("swipe_to_refresh", false); displayWebpageImagesBoolean = sharedPreferences.getBoolean("display_webpage_images", true); // Set the homepage, search, and proxy options. @@ -3213,9 +3212,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook waitingForOrbot = false; } - // Set swipe to refresh. - swipeRefreshLayout.setEnabled(swipeToRefreshEnabled); - // Set Do Not Track status. if (doNotTrackEnabled) { customHeaders.put("DNT", "1"); @@ -3375,6 +3371,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook String defaultFontSizeString = sharedPreferences.getString("default_font_size", "100"); String defaultUserAgentName = sharedPreferences.getString("user_agent", "Privacy Browser"); String defaultCustomUserAgentString = sharedPreferences.getString("custom_user_agent", "PrivacyBrowser/1.0"); + boolean defaultSwipeToRefresh = sharedPreferences.getBoolean("swipe_to_refresh", true); nightMode = sharedPreferences.getBoolean("night_mode", false); if (domainSettingsApplied) { // The url we are loading has custom domain settings. @@ -3395,8 +3392,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook fanboysSocialBlockingListEnabled = (currentHostDomainSettingsCursor.getInt(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST)) == 1); String userAgentName = currentHostDomainSettingsCursor.getString(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.USER_AGENT)); int fontSize = currentHostDomainSettingsCursor.getInt(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.FONT_SIZE)); - displayWebpageImagesInt = currentHostDomainSettingsCursor.getInt(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.DISPLAY_IMAGES)); + int swipeToRefreshInt = currentHostDomainSettingsCursor.getInt(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.SWIPE_TO_REFRESH)); int nightModeInt = currentHostDomainSettingsCursor.getInt(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.NIGHT_MODE)); + displayWebpageImagesInt = currentHostDomainSettingsCursor.getInt(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.DISPLAY_IMAGES)); pinnedDomainSslCertificate = (currentHostDomainSettingsCursor.getInt(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.PINNED_SSL_CERTIFICATE)) == 1); pinnedDomainSslIssuedToCNameString = currentHostDomainSettingsCursor.getString(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.SSL_ISSUED_TO_COMMON_NAME)); pinnedDomainSslIssuedToONameString = currentHostDomainSettingsCursor.getString(currentHostDomainSettingsCursor.getColumnIndex(DomainsDatabaseHelper.SSL_ISSUED_TO_ORGANIZATION)); @@ -3505,6 +3503,23 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook } } + // Set swipe to refresh. + switch (swipeToRefreshInt) { + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_SYSTEM_DEFAULT: + // Set swipe to refresh according to the default. + swipeRefreshLayout.setEnabled(defaultSwipeToRefresh); + break; + + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_ENABLED: + // Enable swipe to refresh. + swipeRefreshLayout.setEnabled(true); + break; + + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_DISABLED: + // Disable swipe to refresh. + swipeRefreshLayout.setEnabled(false); + } + // Store the applied user agent string, which is used in the View Source activity. appliedUserAgentString = mainWebView.getSettings().getUserAgentString(); } @@ -3538,6 +3553,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook mainWebView.getSettings().setDomStorageEnabled(domStorageEnabled); mainWebView.getSettings().setSaveFormData(saveFormDataEnabled); mainWebView.getSettings().setTextZoom(Integer.valueOf(defaultFontSizeString)); + swipeRefreshLayout.setEnabled(defaultSwipeToRefresh); // Reset the pinned SSL certificate information. domainSettingsDatabaseId = -1; diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.java b/app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.java index dd138595..ea57bc35 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.java +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.java @@ -95,8 +95,9 @@ public class DomainSettingsFragment extends Fragment { final String defaultUserAgentName = sharedPreferences.getString("user_agent", "Privacy Browser"); final String defaultCustomUserAgentString = sharedPreferences.getString("custom_user_agent", "PrivacyBrowser/1.0"); String defaultFontSizeString = sharedPreferences.getString("default_font_size", "100"); - final boolean defaultDisplayWebpageImagesBoolean = sharedPreferences.getBoolean("display_website_images", true); + boolean defaultSwipeToRefreshBoolean = sharedPreferences.getBoolean("swipe_to_refresh", true); final boolean defaultNightModeBoolean = sharedPreferences.getBoolean("night_mode", false); + final boolean defaultDisplayWebpageImagesBoolean = sharedPreferences.getBoolean("display_website_images", true); // Get handles for the views in the fragment. final EditText domainNameEditText = domainSettingsView.findViewById(R.id.domain_settings_name_edittext); @@ -124,12 +125,15 @@ public class DomainSettingsFragment extends Fragment { final EditText customUserAgentEditText = domainSettingsView.findViewById(R.id.domain_settings_custom_user_agent_edittext); final Spinner fontSizeSpinner = domainSettingsView.findViewById(R.id.domain_settings_font_size_spinner); final TextView fontSizeTextView = domainSettingsView.findViewById(R.id.domain_settings_font_size_textview); - final ImageView displayWebpageImagesImageView = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_imageview); - final Spinner displayWebpageImagesSpinner = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_spinner); - final TextView displayImagesTextView = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_textview); + final ImageView swipeToRefreshImageView = domainSettingsView.findViewById(R.id.domain_settings_swipe_to_refresh_imageview); + final Spinner swipeToRefreshSpinner = domainSettingsView.findViewById(R.id.domain_settings_swipe_to_refresh_spinner); + final TextView swipeToRefreshTextView = domainSettingsView.findViewById(R.id.domain_settings_swipe_to_refresh_textview); final ImageView nightModeImageView = domainSettingsView.findViewById(R.id.domain_settings_night_mode_imageview); final Spinner nightModeSpinner = domainSettingsView.findViewById(R.id.domain_settings_night_mode_spinner); final TextView nightModeTextView = domainSettingsView.findViewById(R.id.domain_settings_night_mode_textview); + final ImageView displayWebpageImagesImageView = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_imageview); + final Spinner displayWebpageImagesSpinner = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_spinner); + final TextView displayImagesTextView = domainSettingsView.findViewById(R.id.domain_settings_display_webpage_images_textview); final ImageView pinnedSslCertificateImageView = domainSettingsView.findViewById(R.id.domain_settings_pinned_ssl_certificate_imageview); Switch pinnedSslCertificateSwitch = domainSettingsView.findViewById(R.id.domain_settings_pinned_ssl_certificate_switch); final LinearLayout savedSslCertificateLinearLayout = domainSettingsView.findViewById(R.id.saved_ssl_certificate_linearlayout); @@ -184,8 +188,9 @@ public class DomainSettingsFragment extends Fragment { int fanboysSocialBlockingListInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST)); final String currentUserAgentName = domainCursor.getString(domainCursor.getColumnIndex(DomainsDatabaseHelper.USER_AGENT)); int fontSizeInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.FONT_SIZE)); - int displayImagesInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.DISPLAY_IMAGES)); + int swipeToRefreshInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.SWIPE_TO_REFRESH)); int nightModeInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.NIGHT_MODE)); + int displayImagesInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.DISPLAY_IMAGES)); int pinnedSslCertificateInt = domainCursor.getInt(domainCursor.getColumnIndex(DomainsDatabaseHelper.PINNED_SSL_CERTIFICATE)); final String savedSslCertificateIssuedToCNameString = domainCursor.getString(domainCursor.getColumnIndex(DomainsDatabaseHelper.SSL_ISSUED_TO_COMMON_NAME)); String savedSslCertificateIssuedToONameString = domainCursor.getString(domainCursor.getColumnIndex(DomainsDatabaseHelper.SSL_ISSUED_TO_ORGANIZATION)); @@ -211,20 +216,23 @@ public class DomainSettingsFragment extends Fragment { ArrayAdapter<CharSequence> translatedUserAgentArrayAdapter = ArrayAdapter.createFromResource(context, R.array.translated_domain_settings_user_agent_names, R.layout.domain_settings_spinner_item); ArrayAdapter<CharSequence> fontSizeArrayAdapter = ArrayAdapter.createFromResource(context, R.array.domain_settings_font_size_entries, R.layout.domain_settings_spinner_item); ArrayAdapter<CharSequence> fontSizeEntryValuesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.domain_settings_font_size_entry_values, R.layout.domain_settings_spinner_item); - final ArrayAdapter<CharSequence> displayImagesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.display_webpage_images_array, R.layout.domain_settings_spinner_item); + ArrayAdapter<CharSequence> swipeToRefreshArrayAdapter = ArrayAdapter.createFromResource(context, R.array.swipe_to_refresh_array, R.layout.domain_settings_spinner_item); ArrayAdapter<CharSequence> nightModeArrayAdapter = ArrayAdapter.createFromResource(context, R.array.night_mode_array, R.layout.domain_settings_spinner_item); + ArrayAdapter<CharSequence> displayImagesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.display_webpage_images_array, R.layout.domain_settings_spinner_item); // Set the `DropDownViewResource` on the `Spinners`. - translatedUserAgentArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_item); - fontSizeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_item); - displayImagesArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_item); - nightModeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_item); + translatedUserAgentArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items); + fontSizeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items); + swipeToRefreshArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items); + nightModeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items); + displayImagesArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items); // Set the `ArrayAdapters` for the `Spinners`. userAgentSpinner.setAdapter(translatedUserAgentArrayAdapter); fontSizeSpinner.setAdapter(fontSizeArrayAdapter); - displayWebpageImagesSpinner.setAdapter(displayImagesArrayAdapter); + swipeToRefreshSpinner.setAdapter(swipeToRefreshArrayAdapter); nightModeSpinner.setAdapter(nightModeArrayAdapter); + displayWebpageImagesSpinner.setAdapter(displayImagesArrayAdapter); // Create a `SpannableStringBuilder` for each `TextView` that needs multiple colors of text. SpannableStringBuilder savedSslCertificateIssuedToCNameStringBuilder = new SpannableStringBuilder(cNameLabel + savedSslCertificateIssuedToCNameString); @@ -329,7 +337,7 @@ public class DomainSettingsFragment extends Fragment { // Create a `boolean` to track if night mode is enabled. boolean nightModeEnabled = (nightModeInt == DomainsDatabaseHelper.NIGHT_MODE_ENABLED) || ((nightModeInt == DomainsDatabaseHelper.NIGHT_MODE_SYSTEM_DEFAULT) && defaultNightModeBoolean); - // Disable the JavaScript `Switch` if night mode is enabled. + // Disable the JavaScript switch if night mode is enabled. if (nightModeEnabled) { javaScriptEnabledSwitch.setEnabled(false); } else { @@ -343,7 +351,7 @@ public class DomainSettingsFragment extends Fragment { javaScriptImageView.setImageDrawable(resources.getDrawable(R.drawable.privacy_mode)); } - // Set the JavaScript `Switch` status. + // Set the JavaScript switch status. if (javaScriptEnabledInt == 1) { // JavaScript is enabled. javaScriptEnabledSwitch.setChecked(true); } else { // JavaScript is disabled. @@ -402,7 +410,7 @@ public class DomainSettingsFragment extends Fragment { } } } else { // Third-party cookies cannot be configured for API <= 21. - // Hide the `LinearLayout` for third-party cookies. + // Hide the LinearLayout for third-party cookies. thirdPartyCookiesLinearLayout.setVisibility(View.GONE); } @@ -648,7 +656,7 @@ public class DomainSettingsFragment extends Fragment { } } - // Open the user agent spinner when the `TextView` is clicked. + // Open the user agent spinner when the TextView is clicked. userAgentTextView.setOnClickListener((View v) -> { // Open the user agent spinner. userAgentSpinner.performClick(); @@ -662,81 +670,80 @@ public class DomainSettingsFragment extends Fragment { int defaultFontSizeArrayPosition = fontSizeEntryValuesArrayAdapter.getPosition(defaultFontSizeString); fontSizeTextView.setText(fontSizeArrayAdapter.getItem(defaultFontSizeArrayPosition)); - // Set the display options for `fontSizeTextView`. + // Set the display options for the font size TextView. if (fontSizeArrayPosition == 0) { // System default font size is selected. Display `fontSizeTextView`. fontSizeTextView.setVisibility(View.VISIBLE); } else { // A custom font size is specified. Hide `fontSizeTextView`. fontSizeTextView.setVisibility(View.GONE); } - // Open the font size spinner when the `TextView` is clicked. + // Open the font size spinner when the TextView is clicked. fontSizeTextView.setOnClickListener((View v) -> { // Open the user agent spinner. fontSizeSpinner.performClick(); }); - // Display the website images mode in the spinner. - displayWebpageImagesSpinner.setSelection(displayImagesInt); + // Display the swipe to refresh selection in the spinner. + swipeToRefreshSpinner.setSelection(swipeToRefreshInt); - // Set the default display images text. - if (defaultDisplayWebpageImagesBoolean) { - displayImagesTextView.setText(displayImagesArrayAdapter.getItem(DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED)); + // Set the swipe to refresh text. + if (defaultSwipeToRefreshBoolean) { + swipeToRefreshTextView.setText(swipeToRefreshArrayAdapter.getItem(DomainsDatabaseHelper.SWIPE_TO_REFRESH_ENABLED)); } else { - displayImagesTextView.setText(displayImagesArrayAdapter.getItem(DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED)); + swipeToRefreshTextView.setText(swipeToRefreshArrayAdapter.getItem(DomainsDatabaseHelper.SWIPE_TO_REFRESH_DISABLED)); } - // Set the display website images icon and `TextView` settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons. - switch (displayImagesInt) { - case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT: - if (defaultDisplayWebpageImagesBoolean) { // Display webpage images enabled by default. + // Set the swipe to refresh icon and TextView settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons. + switch (swipeToRefreshInt) { + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_SYSTEM_DEFAULT: + if (defaultSwipeToRefreshBoolean) { // Swipe to refresh is enabled by default. // Set the icon according to the theme. if (MainWebViewActivity.darkTheme) { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_dark)); } else { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_light)); } - } else { // Display webpage images disabled by default. + } else { // Swipe to refresh is disabled by default // Set the icon according to the theme. if (MainWebViewActivity.darkTheme) { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_dark)); } else { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_light)); } } - // Show `displayImagesTextView`. - displayImagesTextView.setVisibility(View.VISIBLE); + // Show the swipe to refresh TextView. + swipeToRefreshTextView.setVisibility(View.VISIBLE); break; - case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED: + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_ENABLED: // Set the icon according to the theme. if (MainWebViewActivity.darkTheme) { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_dark)); } else { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_light)); } - // Hide `displayImagesTextView`. - displayImagesTextView.setVisibility(View.GONE); + // Hide the swipe to refresh TextView.` + swipeToRefreshTextView.setVisibility(View.GONE); break; - case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED: + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_DISABLED: // Set the icon according to the theme. if (MainWebViewActivity.darkTheme) { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_dark)); } else { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_light)); } - // Hide `displayImagesTextView`. - displayImagesTextView.setVisibility(View.GONE); - break; + // Hide the swipe to refresh TextView. + swipeToRefreshTextView.setVisibility(View.GONE); } - // Open the display images spinner when the `TextView` is clicked. - displayImagesTextView.setOnClickListener((View v) -> { - // Open the user agent spinner. - displayWebpageImagesSpinner.performClick(); + // Open the swipe to refresh spinner when the TextView is clicked. + swipeToRefreshTextView.setOnClickListener((View v) -> { + // Open the swipe to refresh spinner. + swipeToRefreshSpinner.performClick(); }); // Display the night mode in the spinner. @@ -749,8 +756,8 @@ public class DomainSettingsFragment extends Fragment { nightModeTextView.setText(nightModeArrayAdapter.getItem(DomainsDatabaseHelper.NIGHT_MODE_DISABLED)); } - // Set the night mode icon and `TextView` settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons. - switch (displayImagesInt) { + // Set the night mode icon and TextView settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons. + switch (nightModeInt) { case DomainsDatabaseHelper.NIGHT_MODE_SYSTEM_DEFAULT: if (defaultNightModeBoolean) { // Night mode enabled by default. // Set the icon according to the theme. @@ -768,7 +775,7 @@ public class DomainSettingsFragment extends Fragment { } } - // Show `nightModeTextView`. + // Show night mode TextView. nightModeTextView.setVisibility(View.VISIBLE); break; @@ -780,7 +787,7 @@ public class DomainSettingsFragment extends Fragment { nightModeImageView.setImageDrawable(resources.getDrawable(R.drawable.night_mode_enabled_light)); } - // Hide `nightModeTextView`. + // Hide the night mode TextView. nightModeTextView.setVisibility(View.GONE); break; @@ -792,16 +799,80 @@ public class DomainSettingsFragment extends Fragment { nightModeImageView.setImageDrawable(resources.getDrawable(R.drawable.night_mode_disabled_light)); } - // Hide `nightModeTextView`. + // Hide the night mode TextView. nightModeTextView.setVisibility(View.GONE); break; } - // Open the night mode spinner when the `TextView` is clicked. + // Open the night mode spinner when the TextView is clicked. nightModeTextView.setOnClickListener((View v) -> { - // Open the user agent spinner. + // Open the night mode spinner. nightModeSpinner.performClick(); }); + + // Display the website images mode in the spinner. + displayWebpageImagesSpinner.setSelection(displayImagesInt); + + // Set the default display images text. + if (defaultDisplayWebpageImagesBoolean) { + displayImagesTextView.setText(displayImagesArrayAdapter.getItem(DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED)); + } else { + displayImagesTextView.setText(displayImagesArrayAdapter.getItem(DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED)); + } + + // Set the display website images icon and TextView settings. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons. + switch (displayImagesInt) { + case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT: + if (defaultDisplayWebpageImagesBoolean) { // Display webpage images enabled by default. + // Set the icon according to the theme. + if (MainWebViewActivity.darkTheme) { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark)); + } else { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light)); + } + } else { // Display webpage images disabled by default. + // Set the icon according to the theme. + if (MainWebViewActivity.darkTheme) { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark)); + } else { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light)); + } + } + + // Show the display images TextView. + displayImagesTextView.setVisibility(View.VISIBLE); + break; + + case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED: + // Set the icon according to the theme. + if (MainWebViewActivity.darkTheme) { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark)); + } else { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light)); + } + + // Hide the display images TextView. + displayImagesTextView.setVisibility(View.GONE); + break; + + case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED: + // Set the icon according to the theme. + if (MainWebViewActivity.darkTheme) { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark)); + } else { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light)); + } + + // Hide the display images TextView. + displayImagesTextView.setVisibility(View.GONE); + break; + } + + // Open the display images spinner when the TextView is clicked. + displayImagesTextView.setOnClickListener((View v) -> { + // Open the user agent spinner. + displayWebpageImagesSpinner.performClick(); + }); // Set the pinned SSL certificate icon. if (pinnedSslCertificateInt == 1) { // Pinned SSL certificate is enabled. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons. @@ -1303,56 +1374,55 @@ public class DomainSettingsFragment extends Fragment { } }); - // Set the display webpage images spinner listener. - displayWebpageImagesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + // Set the swipe to refresh spinner listener. + swipeToRefreshSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { - // Update the icon and the visibility of `displayImagesTextView`. + // Update the icon and the visibility of `nightModeTextView`. Once the minimum API >= 21 a selector can be used as the tint mode instead of specifying different icons. switch (position) { - case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT: - if (defaultDisplayWebpageImagesBoolean) { + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_SYSTEM_DEFAULT: + if (defaultSwipeToRefreshBoolean) { // Swipe to refresh enabled by default. // Set the icon according to the theme. if (MainWebViewActivity.darkTheme) { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_dark)); } else { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_light)); } - } else { + } else { // Swipe to refresh disabled by default. // Set the icon according to the theme. if (MainWebViewActivity.darkTheme) { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_dark)); } else { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_light)); } } - // Show `displayImagesTextView`. - displayImagesTextView.setVisibility(View.VISIBLE); + // Show the swipe to refresh TextView. + swipeToRefreshTextView.setVisibility(View.VISIBLE); break; - case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED: + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_ENABLED: // Set the icon according to the theme. if (MainWebViewActivity.darkTheme) { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_dark)); } else { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_enabled_light)); } - // Hide `displayImagesTextView`. - displayImagesTextView.setVisibility(View.GONE); + // Hide the swipe to refresh TextView. + swipeToRefreshTextView.setVisibility(View.GONE); break; - case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED: + case DomainsDatabaseHelper.SWIPE_TO_REFRESH_DISABLED: // Set the icon according to the theme. if (MainWebViewActivity.darkTheme) { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_dark)); } else { - displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light)); + swipeToRefreshImageView.setImageDrawable(resources.getDrawable(R.drawable.refresh_disabled_light)); } - // Hide `displayImagesTextView`. - displayImagesTextView.setVisibility(View.GONE); - break; + // Hide the swipe to refresh TextView. + swipeToRefreshTextView.setVisibility(View.GONE); } } @@ -1385,7 +1455,7 @@ public class DomainSettingsFragment extends Fragment { } } - // Show `nightModeTextView`. + // Show the night mode TextView. nightModeTextView.setVisibility(View.VISIBLE); break; @@ -1476,6 +1546,65 @@ public class DomainSettingsFragment extends Fragment { // Do nothing. } }); + + // Set the display webpage images spinner listener. + displayWebpageImagesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { + // Update the icon and the visibility of `displayImagesTextView`. + switch (position) { + case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT: + if (defaultDisplayWebpageImagesBoolean) { + // Set the icon according to the theme. + if (MainWebViewActivity.darkTheme) { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark)); + } else { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light)); + } + } else { + // Set the icon according to the theme. + if (MainWebViewActivity.darkTheme) { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark)); + } else { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light)); + } + } + + // Show `displayImagesTextView`. + displayImagesTextView.setVisibility(View.VISIBLE); + break; + + case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_ENABLED: + // Set the icon according to the theme. + if (MainWebViewActivity.darkTheme) { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_dark)); + } else { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_enabled_light)); + } + + // Hide `displayImagesTextView`. + displayImagesTextView.setVisibility(View.GONE); + break; + + case DomainsDatabaseHelper.DISPLAY_WEBPAGE_IMAGES_DISABLED: + // Set the icon according to the theme. + if (MainWebViewActivity.darkTheme) { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_dark)); + } else { + displayWebpageImagesImageView.setImageDrawable(resources.getDrawable(R.drawable.images_disabled_light)); + } + + // Hide `displayImagesTextView`. + displayImagesTextView.setVisibility(View.GONE); + break; + } + } + + @Override + public void onNothingSelected(AdapterView<?> parent) { + // Do nothing. + } + }); // Set the pinned SSL certificate switch listener. pinnedSslCertificateSwitch.setOnCheckedChangeListener((CompoundButton buttonView, boolean isChecked) -> { 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 55b852e1..88d57994 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java @@ -194,7 +194,7 @@ public class SettingsFragment extends PreferenceFragment { searchCustomURLPreference.setEnabled(searchString.equals("Custom URL")); - // Enable `translucentNavigationBarPreference` only if full screen browsing mode is enabled and `hide_system_bars` is disabled. + // Enable the translucent navigation bar preference only if full screen browsing mode is enabled and `hide_system_bars` is disabled. translucentNavigationBarPreference.setEnabled(fullScreenBrowsingMode && !hideSystemBars); // Set the status of the `Clear and Exit` preferences. @@ -203,10 +203,10 @@ public class SettingsFragment extends PreferenceFragment { clearFormDataPreference.setEnabled(!clearEverything); clearCachePreference.setEnabled(!clearEverything); - // Set the homepage URL as the summary text for the `Homepage` preference when the preference screen is loaded. The default is `https://duckduckgo.com`. - homepagePreference.setSummary(savedPreferences.getString("homepage", "https://duckduckgo.com")); + // Set the homepage URL as the summary text for the homepage preference. + homepagePreference.setSummary(savedPreferences.getString("homepage", "https://duckduckgo.com/?kao=-1&kak=-1")); - // Set the default font size as the summary text for the `Default Font Size` preference when the preference screen is loaded. The default is `100`. + // Set the default font size as the summary text for the preference. defaultFontSizePreference.setSummary(savedPreferences.getString("default_font_size", "100") + "%%"); // Disable `javaScriptPreference` if `nightModeBoolean` is true. JavaScript will be enabled for all web pages. @@ -448,7 +448,7 @@ public class SettingsFragment extends PreferenceFragment { } // Set the full screen browsing mode icons. - if (fullScreenBrowsingMode) { // `fullScreenBrowsingModeBoolean` is `true`. + if (fullScreenBrowsingMode) { // Full screen browsing mode is enabled. // Set the `fullScreenBrowsingModePreference` icon according to the theme. if (MainWebViewActivity.darkTheme) { fullScreenBrowsingModePreference.setIcon(R.drawable.full_screen_enabled_dark); @@ -489,7 +489,7 @@ public class SettingsFragment extends PreferenceFragment { } } } - } else { // `fullScreenBrowsingModeBoolean` is `false`. + } else { // Full screen browsing mode is disabled. // Set the icons according to the theme. if (MainWebViewActivity.darkTheme) { fullScreenBrowsingModePreference.setIcon(R.drawable.full_screen_disabled_dark); @@ -502,7 +502,7 @@ public class SettingsFragment extends PreferenceFragment { } } - // Set the `clearEverythingPreference` icon. + // Set the clear everything preference icon. if (clearEverything) { if (MainWebViewActivity.darkTheme) { clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_dark); @@ -513,7 +513,7 @@ public class SettingsFragment extends PreferenceFragment { clearEverythingPreference.setIcon(R.drawable.clear_everything_disabled); } - // Set the `clearCookiesPreference` icon. + // Set the clear cookies preference icon. if (clearEverything || savedPreferences.getBoolean("clear_cookies", true)) { if (MainWebViewActivity.darkTheme) { clearCookiesPreference.setIcon(R.drawable.cookies_cleared_dark); @@ -524,7 +524,7 @@ public class SettingsFragment extends PreferenceFragment { clearCookiesPreference.setIcon(R.drawable.cookies_warning); } - // Set the `clearDomStoragePreference` icon. + // Set the clear DOM storage preference icon. if (clearEverything || savedPreferences.getBoolean("clear_dom_storage", true)) { if (MainWebViewActivity.darkTheme) { clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_dark); @@ -535,7 +535,7 @@ public class SettingsFragment extends PreferenceFragment { clearDomStoragePreference.setIcon(R.drawable.dom_storage_warning); } - // Set the `clearFormDataPreference` icon. + // Set the clear form data preference icon. if (clearEverything || savedPreferences.getBoolean("clear_form_data", true)) { if (MainWebViewActivity.darkTheme) { clearFormDataPreference.setIcon(R.drawable.form_data_cleared_dark); @@ -546,7 +546,7 @@ public class SettingsFragment extends PreferenceFragment { clearFormDataPreference.setIcon(R.drawable.form_data_warning); } - // Set the `clearCachePreference` icon. + // Set the clear cache preference icon. if (clearEverything || savedPreferences.getBoolean("clear_cache", true)) { if (MainWebViewActivity.darkTheme) { clearCachePreference.setIcon(R.drawable.cache_cleared_dark); @@ -557,8 +557,8 @@ public class SettingsFragment extends PreferenceFragment { clearCachePreference.setIcon(R.drawable.cache_warning); } - // Set the `swipeToRefreshPreference` icon. - if (savedPreferences.getBoolean("swipe_to_refresh", false)) { + // Set the swipe to refresh preference icon. + if (savedPreferences.getBoolean("swipe_to_refresh", true)) { if (MainWebViewActivity.darkTheme) { swipeToRefreshPreference.setIcon(R.drawable.refresh_enabled_dark); } else { @@ -572,7 +572,7 @@ public class SettingsFragment extends PreferenceFragment { } } - // Set the `displayAdditionalAppBarIconsPreference` icon. + // Set the display additional app bar icons preference icon. if (savedPreferences.getBoolean("display_additional_app_bar_icons", false)) { if (MainWebViewActivity.darkTheme) { displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_enabled_dark); @@ -587,14 +587,14 @@ public class SettingsFragment extends PreferenceFragment { } } - // Set the `darkThemePreference` icon. + // Set the dark theme preference icon. if (savedPreferences.getBoolean("dark_theme", false)) { darkThemePreference.setIcon(R.drawable.theme_dark); } else { darkThemePreference.setIcon(R.drawable.theme_light); } - // Set the `nightModePreference` icon. + // Set the night mode preference icon. if (nightMode) { if (MainWebViewActivity.darkTheme) { nightModePreference.setIcon(R.drawable.night_mode_enabled_dark); @@ -609,7 +609,7 @@ public class SettingsFragment extends PreferenceFragment { } } - // Set the `displayWebpageImagesPreference` icon. + // Set the display webpage images preference icon. if (savedPreferences.getBoolean("display_webpage_images", true)) { if (MainWebViewActivity.darkTheme) { displayWebpageImagesPreference.setIcon(R.drawable.images_enabled_dark); @@ -1327,7 +1327,7 @@ public class SettingsFragment extends PreferenceFragment { case "swipe_to_refresh": // Update the icon. - if (sharedPreferences.getBoolean("swipe_to_refresh", false)) { + if (sharedPreferences.getBoolean("swipe_to_refresh", true)) { if (MainWebViewActivity.darkTheme) { swipeToRefreshPreference.setIcon(R.drawable.refresh_enabled_dark); } else { diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.java b/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.java index 350b33b9..563040a3 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.java +++ b/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.java @@ -28,7 +28,7 @@ import android.database.sqlite.SQLiteOpenHelper; import android.preference.PreferenceManager; public class DomainsDatabaseHelper extends SQLiteOpenHelper { - private static final int SCHEMA_VERSION = 5; + private static final int SCHEMA_VERSION = 6; private static final String DOMAINS_DATABASE = "domains.db"; private static final String DOMAINS_TABLE = "domains"; @@ -45,8 +45,9 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { public static final String ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST = "enablefanboyssocialblockinglist"; public static final String USER_AGENT = "useragent"; public static final String FONT_SIZE = "fontsize"; - public static final String DISPLAY_IMAGES = "displayimages"; + public static final String SWIPE_TO_REFRESH = "swipetorefresh"; public static final String NIGHT_MODE = "nightmode"; + public static final String DISPLAY_IMAGES = "displayimages"; public static final String PINNED_SSL_CERTIFICATE = "pinnedsslcertificate"; public static final String SSL_ISSUED_TO_COMMON_NAME = "sslissuedtocommonname"; public static final String SSL_ISSUED_TO_ORGANIZATION = "sslissuedtoorganization"; @@ -57,16 +58,21 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { public static final String SSL_START_DATE = "sslstartdate"; public static final String SSL_END_DATE = "sslenddate"; - // Display webpage images constants. - public static final int DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT = 0; - public static final int DISPLAY_WEBPAGE_IMAGES_ENABLED = 1; - public static final int DISPLAY_WEBPAGE_IMAGES_DISABLED = 2; + // Swipe to refresh constants. + public static final int SWIPE_TO_REFRESH_SYSTEM_DEFAULT = 0; + public static final int SWIPE_TO_REFRESH_ENABLED = 1; + public static final int SWIPE_TO_REFRESH_DISABLED = 2; // Night mode constants. public static final int NIGHT_MODE_SYSTEM_DEFAULT = 0; public static final int NIGHT_MODE_ENABLED = 1; public static final int NIGHT_MODE_DISABLED = 2; + // Display webpage images constants. + public static final int DISPLAY_WEBPAGE_IMAGES_SYSTEM_DEFAULT = 0; + public static final int DISPLAY_WEBPAGE_IMAGES_ENABLED = 1; + public static final int DISPLAY_WEBPAGE_IMAGES_DISABLED = 2; + private Context appContext; // Initialize the database. The lint warnings for the unused parameters are suppressed. @@ -94,8 +100,9 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST + " BOOLEAN, " + USER_AGENT + " TEXT, " + FONT_SIZE + " INTEGER, " + - DISPLAY_IMAGES + " INTEGER, " + + SWIPE_TO_REFRESH + " INTEGER, " + NIGHT_MODE + " INTEGER, " + + DISPLAY_IMAGES + " INTEGER, " + PINNED_SSL_CERTIFICATE + " BOOLEAN, " + SSL_ISSUED_TO_COMMON_NAME + " TEXT, " + SSL_ISSUED_TO_ORGANIZATION + " TEXT, " + @@ -134,7 +141,7 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { // Upgrade from schema version 3. case 3: - // Add the `NIGHT_MODE` column. + // Add the Night Mode column. domainsDatabase.execSQL("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + NIGHT_MODE + " INTEGER"); // Upgrade from schema version 4. @@ -181,6 +188,11 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { } else { domainsDatabase.execSQL("UPDATE " + DOMAINS_TABLE + " SET " + ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST + " = " + 0); } + + // Upgrade from schema version 5. + case 5: + // Add the swipe to refresh column. + domainsDatabase.execSQL("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + SWIPE_TO_REFRESH + " INTEGER"); } } @@ -266,8 +278,9 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { domainContentValues.put(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST, fanboySocialBlockingListEnabled); domainContentValues.put(USER_AGENT, "System default user agent"); domainContentValues.put(FONT_SIZE, 0); - domainContentValues.put(DISPLAY_IMAGES, 0); + domainContentValues.put(SWIPE_TO_REFRESH, 0); domainContentValues.put(NIGHT_MODE, 0); + domainContentValues.put(DISPLAY_IMAGES, 0); // Get a writable database handle. SQLiteDatabase domainsDatabase = this.getWritableDatabase(); @@ -284,7 +297,7 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { public void updateDomainExceptCertificate(int databaseId, String domainName, boolean javaScriptEnabled, boolean firstPartyCookiesEnabled, boolean thirdPartyCookiesEnabled, boolean domStorageEnabled, boolean formDataEnabled, boolean easyListEnabled, boolean easyPrivacyEnabled, boolean fanboysAnnoyanceEnabled, boolean fanboysSocialBlockingEnabled, - String userAgent, int fontSize, int displayImages, int nightMode, boolean pinnedSslCertificate) { + String userAgent, int fontSize, int swipeToRefresh, int nightMode, int displayImages, boolean pinnedSslCertificate) { // Store the domain data in a `ContentValues`. ContentValues domainContentValues = new ContentValues(); @@ -302,8 +315,9 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { domainContentValues.put(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST, fanboysSocialBlockingEnabled); domainContentValues.put(USER_AGENT, userAgent); domainContentValues.put(FONT_SIZE, fontSize); - domainContentValues.put(DISPLAY_IMAGES, displayImages); + domainContentValues.put(SWIPE_TO_REFRESH, swipeToRefresh); domainContentValues.put(NIGHT_MODE, nightMode); + domainContentValues.put(DISPLAY_IMAGES, displayImages); domainContentValues.put(PINNED_SSL_CERTIFICATE, pinnedSslCertificate); // Get a writable database handle. @@ -318,7 +332,7 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { public void updateDomainWithCertificate(int databaseId, String domainName, boolean javaScriptEnabled, boolean firstPartyCookiesEnabled, boolean thirdPartyCookiesEnabled, boolean domStorageEnabled, boolean formDataEnabled, boolean easyListEnabled, boolean easyPrivacyEnabled, boolean fanboysAnnoyanceEnabled, boolean fanboysSocialBlockingEnabled, String userAgent, - int fontSize, int displayImages, int nightMode, boolean pinnedSslCertificate, String sslIssuedToCommonName, String sslIssuedToOrganization, + int fontSize, int swipeToRefresh, int nightMode, int displayImages, boolean pinnedSslCertificate, String sslIssuedToCommonName, String sslIssuedToOrganization, String sslIssuedToOrganizationalUnit, String sslIssuedByCommonName, String sslIssuedByOrganization, String sslIssuedByOrganizationalUnit, long sslStartDate, long sslEndDate) { @@ -338,8 +352,9 @@ public class DomainsDatabaseHelper extends SQLiteOpenHelper { domainContentValues.put(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST, fanboysSocialBlockingEnabled); domainContentValues.put(USER_AGENT, userAgent); domainContentValues.put(FONT_SIZE, fontSize); - domainContentValues.put(DISPLAY_IMAGES, displayImages); + domainContentValues.put(SWIPE_TO_REFRESH, swipeToRefresh); domainContentValues.put(NIGHT_MODE, nightMode); + domainContentValues.put(DISPLAY_IMAGES, displayImages); domainContentValues.put(PINNED_SSL_CERTIFICATE, pinnedSslCertificate); domainContentValues.put(SSL_ISSUED_TO_COMMON_NAME, sslIssuedToCommonName); domainContentValues.put(SSL_ISSUED_TO_ORGANIZATION, sslIssuedToOrganization); diff --git a/app/src/main/res/layout/domain_settings_fragment.xml b/app/src/main/res/layout/domain_settings_fragment.xml index 769072a7..64d3747f 100644 --- a/app/src/main/res/layout/domain_settings_fragment.xml +++ b/app/src/main/res/layout/domain_settings_fragment.xml @@ -413,7 +413,7 @@ </LinearLayout> - <!-- Display Images. --> + <!-- Swipe to Refresh. --> <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" @@ -427,22 +427,22 @@ android:orientation="horizontal" > <ImageView - android:id="@+id/domain_settings_display_webpage_images_imageview" + android:id="@+id/domain_settings_swipe_to_refresh_imageview" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginTop="1dp" android:layout_marginEnd="10dp" android:layout_gravity="center_vertical" - android:contentDescription="@string/display_webpage_images" /> + android:contentDescription="@string/swipe_to_refresh_preference" /> <Spinner - android:id="@+id/domain_settings_display_webpage_images_spinner" + android:id="@+id/domain_settings_swipe_to_refresh_spinner" android:layout_height="wrap_content" android:layout_width="match_parent" /> </LinearLayout> <TextView - android:id="@+id/domain_settings_display_webpage_images_textview" + android:id="@+id/domain_settings_swipe_to_refresh_textview" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_marginStart="45dp" @@ -487,6 +487,43 @@ android:textSize="13sp" /> </LinearLayout> + <!-- Display Images. --> + <LinearLayout + android:layout_height="wrap_content" + android:layout_width="match_parent" + android:orientation="vertical" + android:layout_marginTop="14dp" + android:layout_marginBottom="14dp" > + + <LinearLayout + android:layout_height="wrap_content" + android:layout_width="match_parent" + android:orientation="horizontal" > + + <ImageView + android:id="@+id/domain_settings_display_webpage_images_imageview" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:layout_marginTop="1dp" + android:layout_marginEnd="10dp" + android:layout_gravity="center_vertical" + android:contentDescription="@string/display_webpage_images" /> + + <Spinner + android:id="@+id/domain_settings_display_webpage_images_spinner" + android:layout_height="wrap_content" + android:layout_width="match_parent" /> + </LinearLayout> + + <TextView + android:id="@+id/domain_settings_display_webpage_images_textview" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:layout_marginStart="45dp" + android:layout_marginEnd="36dp" + android:textSize="13sp" /> + </LinearLayout> + <!-- Pinned SSL Certificate --> <LinearLayout android:layout_height="wrap_content" diff --git a/app/src/main/res/layout/domain_settings_spinner_dropdown_item.xml b/app/src/main/res/layout/domain_settings_spinner_dropdown_item.xml deleted file mode 100644 index 6d746b6b..00000000 --- a/app/src/main/res/layout/domain_settings_spinner_dropdown_item.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - -<!-- - Copyright © 2017 Soren Stoutner <soren@stoutner.com>. - - This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>. - - Privacy Browser is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Privacy Browser is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>. --> - -<CheckedTextView - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/spinner_dropdown_item_textview" - android:layout_height="wrap_content" - android:layout_width="match_parent" - android:maxLines="1" - android:ellipsize="end" - android:gravity="center_vertical" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:paddingTop="8dp" - android:paddingBottom="8dp" - android:textSize="18sp" - android:checkMark="?android:attr/listChoiceIndicatorSingle" /> \ No newline at end of file diff --git a/app/src/main/res/layout/domain_settings_spinner_dropdown_items.xml b/app/src/main/res/layout/domain_settings_spinner_dropdown_items.xml new file mode 100644 index 00000000..6d746b6b --- /dev/null +++ b/app/src/main/res/layout/domain_settings_spinner_dropdown_items.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + Copyright © 2017 Soren Stoutner <soren@stoutner.com>. + + This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>. + + Privacy Browser is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Privacy Browser is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>. --> + +<CheckedTextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/spinner_dropdown_item_textview" + android:layout_height="wrap_content" + android:layout_width="match_parent" + android:maxLines="1" + android:ellipsize="end" + android:gravity="center_vertical" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:paddingTop="8dp" + android:paddingBottom="8dp" + android:textSize="18sp" + android:checkMark="?android:attr/listChoiceIndicatorSingle" /> \ 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 72b9fd6c..0a239ee7 100644 --- a/app/src/main/res/menu/webview_options_menu.xml +++ b/app/src/main/res/menu/webview_options_menu.xml @@ -27,174 +27,190 @@ <item android:id="@+id/toggle_javascript" android:title="@string/javascript" - android:orderInCategory="10" + android:orderInCategory="100" app:showAsAction="ifRoom" /> <item android:id="@+id/add_or_edit_domain" android:title="@string/add_domain_settings" - android:orderInCategory="20" + android:orderInCategory="200" app:showAsAction="never" /> <item android:id="@+id/toggle_first_party_cookies" android:title="@string/first_party_cookies" - android:orderInCategory="30" + android:orderInCategory="300" android:checkable="true" app:showAsAction="never" /> <item android:id="@+id/toggle_third_party_cookies" android:title="@string/third_party_cookies" - android:orderInCategory="40" + android:orderInCategory="400" android:checkable="true" app:showAsAction="never" /> <item android:id="@+id/toggle_dom_storage" android:title="@string/dom_storage" - android:orderInCategory="50" + android:orderInCategory="500" android:checkable="true" app:showAsAction="never" /> <item android:id="@+id/toggle_save_form_data" android:title="@string/form_data" - android:orderInCategory="60" + android:orderInCategory="600" android:checkable="true" app:showAsAction="never" /> <item android:id="@+id/clear_data" android:title="@string/clear_data" - android:orderInCategory="70" + android:orderInCategory="700" app:showAsAction="never" > <menu> <item android:id="@+id/clear_cookies" android:title="@string/clear_cookies" - android:orderInCategory="71" + android:orderInCategory="710" app:showAsAction="never" /> <item android:id="@+id/clear_dom_storage" android:title="@string/clear_dom_storage" - android:orderInCategory="72" + android:orderInCategory="720" app:showAsAction="never" /> <item android:id="@+id/clear_form_data" android:title="@string/clear_form_data" - android:orderInCategory="73" + android:orderInCategory="730" app:showAsAction="never" /> </menu> </item> <item - android:id="@+id/font_size" - android:title="@string/font_size" - android:orderInCategory="80" + android:id="@+id/layout" + android:title="@string/layout" + android:orderInCategory="800" app:showAsAction="never" > <menu> - <group android:checkableBehavior="single"> - <item - android:id="@+id/font_size_twenty_five_percent" - android:title="@string/twenty_five_percent" - android:orderInCategory="81" - app:showAsAction="never" /> - - <item - android:id="@+id/font_size_fifty_percent" - android:title="@string/fifty_percent" - android:orderInCategory="82" - app:showAsAction="never" /> - - <item - android:id="@+id/font_size_seventy_five_percent" - android:title="@string/seventy_five_percent" - android:orderInCategory="83" - app:showAsAction="never" /> - - <item - android:id="@+id/font_size_one_hundred_percent" - android:title="@string/one_hundred_percent" - android:orderInCategory="84" - app:showAsAction="never" /> - - <item - android:id="@+id/font_size_one_hundred_twenty_five_percent" - android:title="@string/one_hundred_twenty_five_percent" - android:orderInCategory="85" - app:showAsAction="never" /> - - <item - android:id="@+id/font_size_one_hundred_fifty_percent" - android:title="@string/one_hundred_fifty_percent" - android:orderInCategory="86" - app:showAsAction="never" /> - - <item - android:id="@+id/font_size_one_hundred_seventy_five_percent" - android:title="@string/one_hundred_seventy_five_percent" - android:orderInCategory="87" - app:showAsAction="never" /> - - <item - android:id="@+id/font_size_two_hundred_percent" - android:title="@string/two_hundred_percent" - android:orderInCategory="88" - app:showAsAction="never" /> - </group> + <item + android:id="@+id/font_size" + android:title="@string/font_size" + android:orderInCategory="810" + app:showAsAction="never" > + + <menu> + <group android:checkableBehavior="single"> + <item + android:id="@+id/font_size_twenty_five_percent" + android:title="@string/twenty_five_percent" + android:orderInCategory="811" + app:showAsAction="never" /> + + <item + android:id="@+id/font_size_fifty_percent" + android:title="@string/fifty_percent" + android:orderInCategory="812" + app:showAsAction="never" /> + + <item + android:id="@+id/font_size_seventy_five_percent" + android:title="@string/seventy_five_percent" + android:orderInCategory="813" + app:showAsAction="never" /> + + <item + android:id="@+id/font_size_one_hundred_percent" + android:title="@string/one_hundred_percent" + android:orderInCategory="814" + app:showAsAction="never" /> + + <item + android:id="@+id/font_size_one_hundred_twenty_five_percent" + android:title="@string/one_hundred_twenty_five_percent" + android:orderInCategory="815" + app:showAsAction="never" /> + + <item + android:id="@+id/font_size_one_hundred_fifty_percent" + android:title="@string/one_hundred_fifty_percent" + android:orderInCategory="816" + app:showAsAction="never" /> + + <item + android:id="@+id/font_size_one_hundred_seventy_five_percent" + android:title="@string/one_hundred_seventy_five_percent" + android:orderInCategory="817" + app:showAsAction="never" /> + + <item + android:id="@+id/font_size_two_hundred_percent" + android:title="@string/two_hundred_percent" + android:orderInCategory="818" + app:showAsAction="never" /> + </group> + </menu> + </item> + + <item + android:id="@+id/swipe_to_refresh" + android:title="@string/swipe_to_refresh_options_menu" + android:orderInCategory="820" + android:checkable="true" + app:showAsAction="never" /> + + <item + android:id="@+id/display_images" + android:title="@string/display_images" + android:orderInCategory="830" + android:checkable="true" + app:showAsAction="never" /> + + <item + android:id="@+id/view_source" + android:title="@string/view_source" + android:orderInCategory="840" + app:showAsAction="never" /> </menu> </item> - <item - android:id="@+id/display_images" - android:title="@string/display_images" - android:orderInCategory="90" - android:checkable="true" - app:showAsAction="never" /> - <item android:id="@+id/share" android:title="@string/share" - android:orderInCategory="100" + android:orderInCategory="900" app:showAsAction="never" /> <item android:id="@+id/find_on_page" android:title="@string/find_on_page" - android:orderInCategory="110" + android:orderInCategory="1000" app:showAsAction="never|collapseActionView" /> <item android:id="@+id/print" android:title="@string/print" - android:orderInCategory="120" - app:showAsAction="never" /> - - <item - android:id="@+id/view_source" - android:title="@string/view_source" - android:orderInCategory="130" + android:orderInCategory="1100" app:showAsAction="never" /> <item android:id="@+id/add_to_homescreen" android:title="@string/add_to_home_screen" - android:orderInCategory="140" + android:orderInCategory="1200" app:showAsAction="never" /> <item android:id="@+id/refresh" android:title="@string/refresh" - android:orderInCategory="150" + android:orderInCategory="1300" app:showAsAction="never" /> <item android:id="@+id/ad_consent" android:title="@string/ad_consent" - android:orderInCategory="160" + android:orderInCategory="1400" app:showAsAction="never" /> </menu> \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7fe51aaa..59abd866 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -131,21 +131,22 @@ <string name="clear_cookies">Cookies löschen</string> <string name="clear_dom_storage">DOM-Speicher löschen</string> <string name="clear_form_data">Formulardaten löschen</string> - <string name="font_size">SchriftgröÃe</string> - <string name="twenty_five_percent">25%</string> - <string name="fifty_percent">50%</string> - <string name="seventy_five_percent">75%</string> - <string name="one_hundred_percent">100%</string> - <string name="one_hundred_twenty_five_percent">125%</string> - <string name="one_hundred_fifty_percent">150%</string> - <string name="one_hundred_seventy_five_percent">175%</string> - <string name="two_hundred_percent">200%</string> - <string name="display_images">Bilder anzeigen</string> + <string name="font_size">SchriftgröÃe</string> + <string name="twenty_five_percent">25%</string> + <string name="fifty_percent">50%</string> + <string name="seventy_five_percent">75%</string> + <string name="one_hundred_percent">100%</string> + <string name="one_hundred_twenty_five_percent">125%</string> + <string name="one_hundred_fifty_percent">150%</string> + <string name="one_hundred_seventy_five_percent">175%</string> + <string name="two_hundred_percent">200%</string> + <string name="swipe_to_refresh_options_menu">Herunterziehen zum aktualisieren</string> + <string name="display_images">Bilder anzeigen</string> + <string name="view_source">Quelltext anzeigen</string> <string name="share">Teilen</string> <string name="find_on_page">Auf Seite finden</string> <string name="print">Drucken</string> <string name="privacy_browser_web_page">Privacy Browser-Website</string> - <string name="view_source">Quelltext anzeigen</string> <string name="add_to_home_screen">Zur Startseite hinzufügen</string> <string name="refresh">Aktualisieren</string> @@ -199,7 +200,7 @@ <!-- Bookmarks Contextual App Bar. --> <string name="one_selected">1 Ausgewählt</string> - <string name="selected">Ausgewählt</string> + <string name="selected">Ausgewählt</string> <!--This is a plural adjective.--> <string name="move_up">Nach oben verschieben</string> <string name="move_down">Nach unten verschieben</string> <string name="edit">Bearbeiten</string> @@ -227,16 +228,21 @@ <string name="domain_name">Domainname</string> <string name="domain_deleted">Domain gelöscht</string> <string name="domain_name_instructions">*. kann als Wildcard-Subdomain verwendet werden (z.B. *.stoutner.com)</string> - <string-array name="display_webpage_images_array"> + <string-array name="swipe_to_refresh_array"> <item>Standardeinstellung</item> - <item>Grafiken aktiviert</item> - <item>Grafiken deaktiviert</item> + <item>Herunterziehen zum aktualisieren aktiviert</item> + <item>Herunterziehen zum aktualisieren deaktiviert</item> </string-array> <string-array name="night_mode_array"> <item>Standardeinstellung</item> <item>Nachtmodus aktiviert</item> <item>Nachtmodus deaktiviert</item> </string-array> + <string-array name="display_webpage_images_array"> + <item>Standardeinstellung</item> + <item>Grafiken aktiviert</item> + <item>Grafiken deaktiviert</item> + </string-array> <string name="pinned_ssl_certificate">SSL-Zertifikat verankern</string> <string name="saved_ssl_certificate">Gespeicherte SSL-Zertifikate</string> <string name="current_website_ssl_certificate">SSL-Zertifikat der aktuellen Webseite</string> @@ -331,8 +337,8 @@ <item>175%</item> <item>200%</item> </string-array> - <string name="swipe_to_refresh_enabled">Herunterziehen zum Aktualisieren</string> - <string name="swipe_to_refresh_enabled_summary">Einige Websites funktionieren nicht, wenn "Herunterziehen zum Aktualisieren" eingeschaltet ist.</string> + <string name="swipe_to_refresh_preference">Herunterziehen zum Aktualisieren</string> + <string name="swipe_to_refresh_summary">Einige Websites funktionieren nicht, wenn "Herunterziehen zum Aktualisieren" eingeschaltet ist.</string> <string name="display_additional_app_bar_icons">Weitere Icons in der Titelleiste</string> <string name="display_additional_app_bar_icons_summary">Icons zum Umschalten von Cookies, DOM-Speicher und Formulardaten neben der Adresszeile anzeigen, wenn noch Platz dafür da ist.</string> diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index e3f0bcfc..b997e808 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -130,21 +130,22 @@ <string name="clear_cookies">Borrar cookies</string> <string name="clear_dom_storage">Borrar almacenamiento DOM</string> <string name="clear_form_data">Borrar datos de formulario</string> - <string name="font_size">Tamaño de fuente</string> - <string name="twenty_five_percent">25%</string> - <string name="fifty_percent">50%</string> - <string name="seventy_five_percent">75%</string> - <string name="one_hundred_percent">100%</string> - <string name="one_hundred_twenty_five_percent">125%</string> - <string name="one_hundred_fifty_percent">150%</string> - <string name="one_hundred_seventy_five_percent">175%</string> - <string name="two_hundred_percent">200%</string> - <string name="display_images">Mostrar imágenes</string> + <string name="font_size">Tamaño de fuente</string> + <string name="twenty_five_percent">25%</string> + <string name="fifty_percent">50%</string> + <string name="seventy_five_percent">75%</string> + <string name="one_hundred_percent">100%</string> + <string name="one_hundred_twenty_five_percent">125%</string> + <string name="one_hundred_fifty_percent">150%</string> + <string name="one_hundred_seventy_five_percent">175%</string> + <string name="two_hundred_percent">200%</string> + <string name="swipe_to_refresh_options_menu">Deslizar para actualizar</string> + <string name="display_images">Mostrar imágenes</string> + <string name="view_source">Ver la fuente</string> <string name="share">Compartir</string> <string name="find_on_page">Buscar en página</string> <string name="print">Imprimir</string> <string name="privacy_browser_web_page">Página web de Navegador Privado</string> - <string name="view_source">Ver la fuente</string> <string name="add_to_home_screen">Añadir a la ventana de inicio</string> <string name="refresh">Actualizar</string> @@ -200,7 +201,7 @@ <!-- Bookmarks Contextual App Bar. --> <string name="one_selected">1 seleccionado</string> - <string name="selected">seleccionados</string> + <string name="selected">seleccionados</string> <!--This is a plural adjective.--> <string name="move_up">Subir</string> <string name="move_down">Bajar</string> <string name="edit">Editar</string> @@ -228,16 +229,21 @@ <string name="domain_name">Nombre de dominio</string> <string name="domain_deleted">Dominio borrado</string> <string name="domain_name_instructions">*. puede ser añadido a un dominio para incluir todos los subdominios (p.ej. *.stoutner.com)</string> - <string-array name="display_webpage_images_array"> + <string-array name="swipe_to_refresh_array"> <item>Por defecto del sistema</item> - <item>Imágenes habilitadas</item> - <item>Imágenes deshabilitadas</item> + <item>Deslizar para actualizar habilitado</item> + <item>Deslizar para actualizar deshabilitado</item> </string-array> <string-array name="night_mode_array"> <item>Por defecto del sistema</item> <item>Modo noche habilitado</item> <item>Modo noche deshabilitado</item> </string-array> + <string-array name="display_webpage_images_array"> + <item>Por defecto del sistema</item> + <item>Imágenes habilitadas</item> + <item>Imágenes deshabilitadas</item> + </string-array> <string name="pinned_ssl_certificate">Certificado SSL fijado</string> <string name="saved_ssl_certificate">Certificado SSL guardado</string> <string name="current_website_ssl_certificate">Certificado SSL actual de la web</string> @@ -379,8 +385,8 @@ <item>175%</item> <item>200%</item> </string-array> - <string name="swipe_to_refresh_enabled">Deslizar para actualizar</string> - <string name="swipe_to_refresh_enabled_summary">Algunas webs no funcionan bien si la opción deslizar para actualizar está habilitada.</string> + <string name="swipe_to_refresh_preference">Deslizar para actualizar</string> + <string name="swipe_to_refresh_summary">Algunas webs no funcionan bien si la opción deslizar para actualizar está habilitada.</string> <string name="display_additional_app_bar_icons">Mostrar iconos adicionales en la barra de aplicación</string> <string name="display_additional_app_bar_icons_summary">Mostrar iconos para alternar entre cookies, almacenamiento DOM, y datos de formulario en la barra de aplicación, si hay espacio.</string> <string name="dark_theme">Tema oscuro</string> diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 4d085757..4748157d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -130,21 +130,22 @@ <string name="clear_cookies">Elimina cookies</string> <string name="clear_dom_storage">Elimina DOM storage</string> <string name="clear_form_data">Elimina dati dei moduli</string> - <string name="font_size">Dimensione font</string> - <string name="twenty_five_percent">25%</string> - <string name="fifty_percent">50%</string> - <string name="seventy_five_percent">75%</string> - <string name="one_hundred_percent">100%</string> - <string name="one_hundred_twenty_five_percent">125%</string> - <string name="one_hundred_fifty_percent">150%</string> - <string name="one_hundred_seventy_five_percent">175%</string> - <string name="two_hundred_percent">200%</string> - <string name="display_images">Mostra immagini</string> + <string name="font_size">Dimensione font</string> + <string name="twenty_five_percent">25%</string> + <string name="fifty_percent">50%</string> + <string name="seventy_five_percent">75%</string> + <string name="one_hundred_percent">100%</string> + <string name="one_hundred_twenty_five_percent">125%</string> + <string name="one_hundred_fifty_percent">150%</string> + <string name="one_hundred_seventy_five_percent">175%</string> + <string name="two_hundred_percent">200%</string> + <string name="swipe_to_refresh_options_menu">Swipe per aggiornare</string> + <string name="display_images">Mostra immagini</string> + <string name="view_source">Visualizza sorgente</string> <string name="share">Condividi</string> <string name="find_on_page">Cerca nella pagina</string> <string name="print">Stampa</string> <string name="privacy_browser_web_page">Pagina web di Privacy Browser</string> - <string name="view_source">Visualizza sorgente</string> <string name="add_to_home_screen">Aggiungi collegamento</string> <string name="refresh">Aggiorna</string> @@ -199,7 +200,7 @@ <!-- Bookmarks Contextual App Bar. --> <string name="one_selected">1 Selezionato</string> - <string name="selected">Selezionato</string> + <string name="selected">Selezionato</string> <!--This is a plural adjective.--> <string name="move_up">Sposta sopra</string> <string name="move_down">Sposta sotto</string> <string name="edit">Modifica</string> @@ -227,16 +228,21 @@ <string name="domain_name">Nome del Dominio</string> <string name="domain_deleted">Dominio Eliminato</string> <string name="domain_name_instructions">è possibile anteporre *. a un dominio per includere tutti i sottodomini (es. *.stoutner.com)</string> - <string-array name="display_webpage_images_array"> + <string-array name="swipe_to_refresh_array"> <item>Impostazioni di default</item> - <item>Abilita Immagini</item> - <item>Disabilita Immagini</item> + <item>Swipe per aggiornare abilitata</item> + <item>Swipe per aggiornare disabilitata</item> </string-array> <string-array name="night_mode_array"> <item>Impostazioni di default</item> <item>Modalità Notte abilitata</item> <item>Modalità Notte disabilitata</item> </string-array> + <string-array name="display_webpage_images_array"> + <item>Impostazioni di default</item> + <item>Abilita Immagini</item> + <item>Disabilita Immagini</item> + </string-array> <string name="pinned_ssl_certificate">Certificato SSL appuntato</string> <string name="saved_ssl_certificate">Certificato SSL salvato</string> <string name="current_website_ssl_certificate">Certificato SSL di questo sito</string> @@ -376,8 +382,8 @@ <item>175%</item> <item>200%</item> </string-array> - <string name="swipe_to_refresh_enabled">Swipe per aggiornare</string> - <string name="swipe_to_refresh_enabled_summary">Alcuni siti non funzionano correttamente se questa opzione è abilitata.</string> + <string name="swipe_to_refresh_preference">Swipe per aggiornare</string> + <string name="swipe_to_refresh_summary">Alcuni siti non funzionano correttamente se questa opzione è abilitata.</string> <string name="display_additional_app_bar_icons">Mostra icone addizionali nella barra dell\'applicazione</string> <string name="display_additional_app_bar_icons_summary">Mostra le icone per l\'abilitazione dei cookies, del DOM storage, e dei dati dei moduli nella barra dell\'applicazione se c\'è spazio disponibile.</string> diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b1f3b206..5f0c473f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -131,21 +131,22 @@ <string name="clear_cookies">ÐÑиÑÑиÑÑ cookie</string> <string name="clear_dom_storage"> ÐÑиÑÑиÑÑ Ñ ÑанилиÑе DOM</string> <string name="clear_form_data">ÐÑиÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе ÑоÑмÑ</string> - <string name="font_size">Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа</string> - <string name="twenty_five_percent">25%</string> - <string name="fifty_percent">50%</string> - <string name="seventy_five_percent">75%</string> - <string name="one_hundred_percent">100%</string> - <string name="one_hundred_twenty_five_percent">125%</string> - <string name="one_hundred_fifty_percent">150%</string> - <string name="one_hundred_seventy_five_percent">175%</string> - <string name="two_hundred_percent">200%</string> - <string name="display_images">ÐоказÑваÑÑ Ð¸Ð·Ð¾Ð±ÑажениÑ</string> + <string name="font_size">Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа</string> + <string name="twenty_five_percent">25%</string> + <string name="fifty_percent">50%</string> + <string name="seventy_five_percent">75%</string> + <string name="one_hundred_percent">100%</string> + <string name="one_hundred_twenty_five_percent">125%</string> + <string name="one_hundred_fifty_percent">150%</string> + <string name="one_hundred_seventy_five_percent">175%</string> + <string name="two_hundred_percent">200%</string> + <string name="swipe_to_refresh_options_menu">ÐоÑÑнÑÑÑ Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ</string> + <string name="display_images">ÐоказÑваÑÑ Ð¸Ð·Ð¾Ð±ÑажениÑ</string> + <string name="view_source">ÐÑоÑмоÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода</string> <string name="share">ÐоделиÑÑÑÑ</string> <string name="find_on_page">ÐайÑи на ÑÑÑаниÑе</string> <string name="print">ÐеÑаÑÑ</string> <string name="privacy_browser_web_page">Privacy Browser веб-ÑÑÑаниÑа</string> - <string name="view_source">ÐÑоÑмоÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода</string> <string name="add_to_home_screen">ÐобавиÑÑ Ð½Ð° домаÑний ÑкÑан</string> <string name="refresh">ÐбновиÑÑ</string> @@ -228,16 +229,21 @@ <string name="domain_name">ÐÐ¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°</string> <string name="domain_deleted">Ðомен Ñдален</string> <string name="domain_name_instructions">добавÑÑе *. Ð´Ð»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð¿Ð¾Ð´Ð´Ð¾Ð¼ÐµÐ½Ð¾Ð² (напÑ. * .yandex.ru)</string> - <string-array name="display_webpage_images_array"> + <string-array name="swipe_to_refresh_array"> <item>ÐаÑÑÑойки по ÑмолÑаниÑ</item> - <item>ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑÑенÑ</item> - <item>ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑклÑÑенÑ</item> + <item>ÐоÑÑнÑÑÑ Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ enabled</item> + <item>ÐоÑÑнÑÑÑ Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ disabled</item> </string-array> <string-array name="night_mode_array"> <item>ÐаÑÑÑойки по ÑмолÑаниÑ</item> <item>ÐоÑной Ñежим вклÑÑен</item> <item>ÐоÑной Ñежим вÑклÑÑен</item> </string-array> + <string-array name="display_webpage_images_array"> + <item>ÐаÑÑÑойки по ÑмолÑаниÑ</item> + <item>ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑÑенÑ</item> + <item>ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑклÑÑенÑ</item> + </string-array> <string name="pinned_ssl_certificate">ÐакÑепленнÑй ÑеÑÑиÑÐ¸ÐºÐ°Ñ SSL</string> <string name="saved_ssl_certificate">Ð¡Ð¾Ñ ÑаненнÑй ÑеÑÑиÑÐ¸ÐºÐ°Ñ SSL</string> <string name="current_website_ssl_certificate">ТекÑÑий ÑеÑÑиÑÐ¸ÐºÐ°Ñ SSL ÑайÑа</string> @@ -376,8 +382,8 @@ <item>175%</item> <item>200%</item> </string-array> - <string name="swipe_to_refresh_enabled">ÐоÑÑнÑÑÑ Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ</string> - <string name="swipe_to_refresh_enabled_summary">ÐекоÑоÑÑе веб-ÑайÑÑ Ð¼Ð¾Ð³ÑÑ ÑабоÑаÑÑ Ð½ÐµÐºÐ¾ÑÑекÑно пÑи вклÑÑении данной опÑии.</string> + <string name="swipe_to_refresh_preference">ÐоÑÑнÑÑÑ Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ</string> + <string name="swipe_to_refresh_summary">ÐекоÑоÑÑе веб-ÑайÑÑ Ð¼Ð¾Ð³ÑÑ ÑабоÑаÑÑ Ð½ÐµÐºÐ¾ÑÑекÑно пÑи вклÑÑении данной опÑии.</string> <string name="display_additional_app_bar_icons">ÐÑобÑажаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе знаÑки на панели пÑиложениÑ</string> <string name="display_additional_app_bar_icons_summary">ÐÑобÑажение знаÑков Ð´Ð»Ñ Ð¿ÐµÑеклÑÑÐµÐ½Ð¸Ñ Ñайлов cookie, Ñ ÑанилиÑа DOM и даннÑÑ ÑоÑÐ¼Ñ Ð½Ð° панели пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñи налиÑии меÑÑа.</string> <string name="dark_theme">Ð¢ÐµÐ¼Ð½Ð°Ñ Ñема</string> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 235f9be7..f77ab2d7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -131,21 +131,23 @@ <string name="clear_cookies">Clear Cookies</string> <string name="clear_dom_storage">Clear DOM Storage</string> <string name="clear_form_data">Clear Form Data</string> - <string name="font_size">Font Size</string> - <string name="twenty_five_percent">25%</string> - <string name="fifty_percent">50%</string> - <string name="seventy_five_percent">75%</string> - <string name="one_hundred_percent">100%</string> - <string name="one_hundred_twenty_five_percent">125%</string> - <string name="one_hundred_fifty_percent">150%</string> - <string name="one_hundred_seventy_five_percent">175%</string> - <string name="two_hundred_percent">200%</string> - <string name="display_images">Display Images</string> + <string name="layout">Layout</string> + <string name="font_size">Font Size</string> + <string name="twenty_five_percent">25%</string> + <string name="fifty_percent">50%</string> + <string name="seventy_five_percent">75%</string> + <string name="one_hundred_percent">100%</string> + <string name="one_hundred_twenty_five_percent">125%</string> + <string name="one_hundred_fifty_percent">150%</string> + <string name="one_hundred_seventy_five_percent">175%</string> + <string name="two_hundred_percent">200%</string> + <string name="swipe_to_refresh_options_menu">Swipe to Refresh</string> + <string name="display_images">Display Images</string> + <string name="view_source">View Source</string> <string name="share">Share</string> <string name="find_on_page">Find on Page</string> <string name="print">Print</string> <string name="privacy_browser_web_page">Privacy Browser Web Page</string> - <string name="view_source">View Source</string> <string name="add_to_home_screen">Add to Home Screen</string> <string name="refresh">Refresh</string> @@ -229,16 +231,21 @@ <string name="domain_name">Domain name</string> <string name="domain_deleted">Domain deleted</string> <string name="domain_name_instructions">*. may be prepended to a domain to include all subdomains (eg. *.stoutner.com)</string> - <string-array name="display_webpage_images_array"> + <string-array name="swipe_to_refresh_array"> <item>System default</item> - <item>Images enabled</item> - <item>Images disabled</item> + <item>Swipe to refresh enabled</item> + <item>Swipe to refresh disabled</item> </string-array> <string-array name="night_mode_array"> <item>System default</item> <item>Night mode enabled</item> <item>Night mode disabled</item> </string-array> + <string-array name="display_webpage_images_array"> + <item>System default</item> + <item>Images enabled</item> + <item>Images disabled</item> + </string-array> <string name="pinned_ssl_certificate">Pinned SSL certificate</string> <string name="saved_ssl_certificate">Saved SSL certificate</string> <string name="current_website_ssl_certificate">Current website SSL certificate</string> @@ -448,8 +455,8 @@ <item>175</item> <item>200</item> </string-array> - <string name="swipe_to_refresh_enabled">Swipe to refresh</string> - <string name="swipe_to_refresh_enabled_summary">Some websites donât work well if swipe to refresh is enabled.</string> + <string name="swipe_to_refresh_preference">Swipe to refresh</string> + <string name="swipe_to_refresh_summary">Some websites donât work well if swipe to refresh is enabled.</string> <string name="display_additional_app_bar_icons">Display additional app bar icons</string> <string name="display_additional_app_bar_icons_summary">Display icons for toggling cookies, DOM storage, and form data in the app bar if there is room.</string> <string name="dark_theme">Dark theme</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index f4dcff29..0348df7f 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -242,9 +242,9 @@ <SwitchPreference android:key="swipe_to_refresh" - android:title="@string/swipe_to_refresh_enabled" - android:summary="@string/swipe_to_refresh_enabled_summary" - android:defaultValue="false" /> + android:title="@string/swipe_to_refresh_preference" + android:summary="@string/swipe_to_refresh_summary" + android:defaultValue="true" /> <SwitchPreference android:key="display_additional_app_bar_icons"