]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Add swipe to refresh to domain and on-the-fly settings. https://redmine.stoutner...
authorSoren Stoutner <soren@stoutner.com>
Tue, 29 May 2018 18:39:39 +0000 (11:39 -0700)
committerSoren Stoutner <soren@stoutner.com>
Tue, 29 May 2018 18:39:39 +0000 (11:39 -0700)
36 files changed:
.idea/dictionaries/soren.xml
app/src/free/assets/de/about_permissions_dark.html
app/src/free/assets/de/about_permissions_light.html
app/src/free/assets/en/about_permissions_dark.html
app/src/free/assets/en/about_permissions_light.html
app/src/free/assets/es/about_permissions_dark.html
app/src/free/assets/es/about_permissions_light.html
app/src/free/assets/it/about_permissions_dark.html
app/src/free/assets/it/about_permissions_light.html
app/src/free/assets/ru/about_permissions_dark.html
app/src/free/assets/ru/about_permissions_light.html
app/src/main/assets/de/about_changelog_dark.html
app/src/main/assets/de/about_changelog_light.html
app/src/main/assets/en/about_changelog_dark.html
app/src/main/assets/en/about_changelog_light.html
app/src/main/assets/es/about_changelog_dark.html
app/src/main/assets/es/about_changelog_light.html
app/src/main/assets/it/about_changelog_dark.html
app/src/main/assets/it/about_changelog_light.html
app/src/main/assets/ru/about_changelog_dark.html
app/src/main/assets/ru/about_changelog_light.html
app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.java
app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java
app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.java
app/src/main/res/layout/domain_settings_fragment.xml
app/src/main/res/layout/domain_settings_spinner_dropdown_item.xml [deleted file]
app/src/main/res/layout/domain_settings_spinner_dropdown_items.xml [new file with mode: 0644]
app/src/main/res/menu/webview_options_menu.xml
app/src/main/res/values-de/strings.xml
app/src/main/res/values-es/strings.xml
app/src/main/res/values-it/strings.xml
app/src/main/res/values-ru/strings.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/preferences.xml

index 57f654991b4d43dc8aeaff821728703547e418cb..50e8c8b082bb740517f66dc27f8fe7c0581142c3 100644 (file)
@@ -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>
       <w>subdomain</w>
       <w>subdomains</w>
       <w>subfolders</w>
+      <w>swipetorefresh</w>
       <w>tablayout</w>
       <w>techrepublic</w>
       <w>textarea</w>
index e5664bc8295eaf0efcb7494d2136e9de1b5a6e0d..61a437c78b71415045e5f1a3ca18932b3ed227a9 100644 (file)
         <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).
index 51801b71ef6d211409fadad100d1800bd8746447..22ea5121c4a33556b13303d3b63bd7fd04242701 100644 (file)
         <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).
index 7e6c4c0d93d73fea866a566d8612b54db43f851a..3dd5af583abe2be91e1e48e134a6770cb02225a8 100644 (file)
         <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).
index f080c069107aa5a8ed7451184793eb5f67aff00b..6cafabac6408aec5c65e2964ff586be72679a09c 100644 (file)
         <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).
index 0617985f13ae2f19a6844f24642caa58c6998550..9041dd81bbf0d7d51108a7086678bb976c358193 100644 (file)
         <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).
index 45011194d5254b5414376e4c7f8d29e0ce70661d..f9553b652a53c5a5c6d5b692e3f4bec41ae2c4af 100644 (file)
         <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).
index 5054f87437fa3f7abfdfb65eef08f8b76288384b..2604326c757d68ee1359279c53015fa870867363 100644 (file)
         <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).
index 6f5fd19a729b835948db9061bf8be1775c4fc701..62ee6abe84b7404b4644a815ac058f7142468a27 100644 (file)
         <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).
index 2d4c025ad093f89c1db1830cacc073a65ccf6cc7..372303f99bcd785e8c33774af916560272766658 100644 (file)
         <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>Позволяет рекламе узнавать наличие подключения к интернету (возможно, таким образом предотвращаются попытки загрузки рекламы при отсутствии активного соединения).
index 389d2c03ee97af45f8301eb0d78f980e19f04d1d..90eaaf08d39ccb55424e034512d22b27db9e1190 100644 (file)
         <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>Позволяет рекламе узнавать наличие подключения к интернету (возможно, таким образом предотвращаются попытки загрузки рекламы при отсутствии активного соединения).
index 48d856de7b1eebfdf45ae7ddb3d174d8959f9377..91fdef8d05f0b9c1755cb4249647e4931d8dc9ac 100644 (file)
@@ -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>
index b5e8a07f526bfee601b4e625c5a192a56466a8f1..709ef8b3e9fb8d8e248231184798e680948ca6a3 100644 (file)
@@ -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>
index c275aa46bc97a7a186e57ca96c922c36830fbe3f..0f45bd8be55ec01e9e88bbf11435630ccea9284a 100644 (file)
@@ -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>
index 0bd4574717a2873bd56497396a4bab3fe29929ab..92c0c9e33afab3e89a090cc4a01ec168af17ee04 100644 (file)
@@ -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>
index 5ada0c2f2ede65e1f89e182d906440daa0b6f722..8c3d357af167329625156f108511c7bd9960d735 100644 (file)
@@ -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>
index 93fd2917205ea4f231e17ea2de6ab54d52f25d91..a4d18bb6cf85eeb4ba448516fa4535fa648ad13e 100644 (file)
@@ -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>
index f09b264e1fb480c8f3d32b61ce6c514530840617..d8decb549f0c71dbff382f08318fb2f79eab74d7 100644 (file)
@@ -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>
index 9cdec7dfb27e1606ca13869e769c25a5dd03c912..b23aa9ae3a1cb82b7e1b6e76d20ba17a5386ff5a 100644 (file)
@@ -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>
index 505a3aa35a6eb92f511ca7c483c570585759c521..e1f07cff66afd5298f0d6a901d8fc4abf575bea4 100644 (file)
@@ -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>
index 4cd307574dc9dbd084833ef6cad7a8e8f074645f..56b3f76e995639843b5e83ba16bcaeefdb336742 100644 (file)
@@ -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>
index 05df4abc596262c2334c5b09b4bae17a0e074053..430bf90e3e639dcd98fa68d33d51ad6a9b2a1a86 100644 (file)
@@ -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);
         }
     }
 
index 6e296677f8c01102e66d5050766679e29d5437b8..02b7025580a541e409dead26d4e87cf3fc64157e 100644 (file)
@@ -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;
index dd1385956d5afa1f87473537bf12a5789b1e02d4..ea57bc355a0e1d9f6fea0bf81727810ac3ee593e 100644 (file)
@@ -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) -> {
index 55b852e1e54917692587f726be81b4a7060f23f5..88d57994e0460532bd1a33e87713c2e7508711dd 100644 (file)
@@ -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&amp;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 {
index 350b33b9da5b75261acf6eee862c90773d1b738b..563040a3d8aeebb0ac859943fa820324827966cd 100644 (file)
@@ -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);
index 769072a7449d463182fd8b804eb85d28f8d01342..64d3747f009c5ae759b7c2a8bd9c067a3e5a78ff 100644 (file)
 
         </LinearLayout>
 
-        <!-- Display Images. -->
+        <!-- Swipe to Refresh. -->
         <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: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"
                 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 (file)
index 6d746b6..0000000
+++ /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 (file)
index 0000000..6d746b6
--- /dev/null
@@ -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
index 72b9fd6c8505df631a8244dddfa1bbfff86b807b..0a239ee72509356e5d9af7f0e2a4751f18b2194b 100644 (file)
     <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
index 7fe51aaa9d1ab8f8eb65b44e16c3dd9797bbe0ad..59abd86661dd1af8afcd01ea35f3d0c30ba6dcb2 100644 (file)
         <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>
 
 
     <!-- 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>
     <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>
             <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>
 
index e3f0bcfcb544e7443bacf9424fc960478cb8dced..b997e808ebec6159922f7a226327885f2e5d5635 100644 (file)
         <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>
 
 
     <!-- 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>
     <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>
                 <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>
index 4d08575789338e465250cbc2dda708a1f21a9148..4748157d6a462ab1818d66f9be7f54a40c9c789b 100644 (file)
         <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>
 
 
     <!-- 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>
     <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>
                 <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>
index b1f3b2060c44094a3f8c87f7343da338b9d74c38..5f0c473ff8a1171f0190fb2d3c5eead025ef03b9 100644 (file)
         <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>
 
     <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>Ð\98зобÑ\80ажениÑ\8f Ð²ÐºÐ»Ñ\8eÑ\87енÑ\8b</item>
-        <item>Ð\98зобÑ\80ажениÑ\8f Ð²Ñ\8bклÑ\8eÑ\87енÑ\8b</item>
+        <item>Ð\9fоÑ\82Ñ\8fнÑ\83Ñ\82Ñ\8c Ð´Ð»Ñ\8f Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ\8f enabled</item>
+        <item>Ð\9fоÑ\82Ñ\8fнÑ\83Ñ\82Ñ\8c Ð´Ð»Ñ\8f Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ\8f 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>
                 <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>
index 235f9be7357868165cd0fa533291e71a9ab0bb4f..f77ab2d72ccc21bd8fa130b95f2683902817f171 100644 (file)
         <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>
 
     <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>
                 <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>
index f4dcff29fea5accdc5485a5237e01505e3098962..0348df7fb0fb0ed4272a6631a28e2233f4e131cd 100644 (file)
 
         <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"