Add a context menu option to open images in a new tab. https://redmine.stoutner...
authorSoren Stoutner <soren@stoutner.com>
Tue, 7 May 2019 19:05:51 +0000 (12:05 -0700)
committerSoren Stoutner <soren@stoutner.com>
Tue, 7 May 2019 19:05:51 +0000 (12:05 -0700)
app/src/main/assets/de/about_changelog_dark.html
app/src/main/assets/de/about_changelog_light.html
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
fastlane/metadata/android/de-DE/changelogs/44.txt
fastlane/metadata/android/de-DE/full_description.txt
fastlane/metadata/android/en-US/full_description.txt
fastlane/metadata/android/es-ES/full_description.txt
fastlane/metadata/android/it-IT/full_description.txt
fastlane/metadata/android/ru-RU/full_description.txt
fastlane/metadata/android/tr-TR/full_description.txt

index 8d164e6..1b4e6b8 100644 (file)
         <h3><a href="https://www.stoutner.com/privacy-browser-3-0-1/">3.0.1</a> (version code 44)</h3>
         <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=fd8eedc7aab1062da69d65514cf5d0a6fd28abad">2. Mai 2019</a> - Mindest-API 19, Ziel-API 28</p>
         <ul>
-            <li>Fix a bug that allowed the app bar to be scrolled off the screen when app bar scrolling was disabled, with <a href="https://redmine.stoutner.com/issues/418">no way to scroll it back</a>.</li>
-            <li>Fix a bug that <a href="https://redmine.stoutner.com/issues/419">prevented the app bar from being displayed</a> after a tab was deleted if the new active tab was blank.</li>
-            <li>Fix a rare crash when some pages <a href="https://redmine.stoutner.com/issues/424">finished loading</a>.</li>
-            <li>Make the <a href="https://redmine.stoutner.com/issues/421">back button close a tab</a> if the WebView is at the beginning of the history list.</li>
+            <li>Behebung eines Bugs, durch den die App-Leiste vom Bildschirm verschwand und <a href="https://redmine.stoutner.com/issues/418">nicht mehr zurückgescrollt werden konnte</a>,
+                wenn das Scrollen der App-Leiste deaktiviert war.</li>
+            <li>Behebung eines Bugs, durch den die <a href="https://redmine.stoutner.com/issues/419">App-Leiste nicht angezeigt wurde</a>, nachdem ein Tab geschlossen wurde und der nächste Tab leer war.</li>
+            <li>Behebung eines Bugs, der in Ausnahmefällen zum Absturz führte, wenn <a href="https://redmine.stoutner.com/issues/424">Seiten fertig geladen wurden</a>.</li>
+            <li>Der Zurück-Button <a href="https://redmine.stoutner.com/issues/421">schliesst nun einen Tab</a>, wenn WebView den Beginn des Verlaufs erreicht hat.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-0/">3.0</a> (version code 43)</h3>
index 91a91b9..debd045 100644 (file)
         <h3><a href="https://www.stoutner.com/privacy-browser-3-0-1/">3.0.1</a> (version code 44)</h3>
         <p><a href="https://git.stoutner.com/?p=PrivacyBrowser.git;a=commitdiff;h=fd8eedc7aab1062da69d65514cf5d0a6fd28abad">2. Mai 2019</a> - Mindest-API 19, Ziel-API 28</p>
         <ul>
-            <li>Fix a bug that allowed the app bar to be scrolled off the screen when app bar scrolling was disabled, with <a href="https://redmine.stoutner.com/issues/418">no way to scroll it back</a>.</li>
-            <li>Fix a bug that <a href="https://redmine.stoutner.com/issues/419">prevented the app bar from being displayed</a> after a tab was deleted if the new active tab was blank.</li>
-            <li>Fix a rare crash when some pages <a href="https://redmine.stoutner.com/issues/424">finished loading</a>.</li>
-            <li>Make the <a href="https://redmine.stoutner.com/issues/421">back button close a tab</a> if the WebView is at the beginning of the history list.</li>
+            <li>Behebung eines Bugs, durch den die App-Leiste vom Bildschirm verschwand und <a href="https://redmine.stoutner.com/issues/418">nicht mehr zurückgescrollt werden konnte</a>,
+                wenn das Scrollen der App-Leiste deaktiviert war.</li>
+            <li>Behebung eines Bugs, durch den die <a href="https://redmine.stoutner.com/issues/419">App-Leiste nicht angezeigt wurde</a>, nachdem ein Tab geschlossen wurde und der nächste Tab leer war.</li>
+            <li>Behebung eines Bugs, der in Ausnahmefällen zum Absturz führte, wenn <a href="https://redmine.stoutner.com/issues/424">Seiten fertig geladen wurden</a>.</li>
+            <li>Der Zurück-Button <a href="https://redmine.stoutner.com/issues/421">schliesst nun einen Tab</a>, wenn WebView den Beginn des Verlaufs erreicht hat.</li>
         </ul>
 
         <h3><a href="https://www.stoutner.com/privacy-browser-3-0/">3.0</a> (version code 43)</h3>
index 50f6a2c..0e303a2 100644 (file)
@@ -2488,7 +2488,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // Set the target URL as the title of the `ContextMenu`.
                 menu.setHeaderTitle(linkUrl);
 
-                // Add a Load URL entry.
+                // Add an Open in New Tab entry.
                 menu.add(R.string.open_in_new_tab).setOnMenuItemClickListener((MenuItem item) -> {
                     // Add a new tab.
                     addTab(null);
@@ -2596,89 +2596,26 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 menu.add(R.string.cancel);
                 break;
 
-            // `IMAGE_TYPE` is an image.
+            // `IMAGE_TYPE` is an image. `SRC_IMAGE_ANCHOR_TYPE` is an image that is also a link.  Privacy Browser processes them the same.
             case WebView.HitTestResult.IMAGE_TYPE:
+            case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
                 // Get the image URL.
                 imageUrl = hitTestResult.getExtra();
 
-                // Set the image URL as the title of the `ContextMenu`.
+                // Set the image URL as the title of the context menu.
                 menu.setHeaderTitle(imageUrl);
 
-                // Add a View Image entry.
-                menu.add(R.string.view_image).setOnMenuItemClickListener(item -> {
-                    loadUrl(imageUrl);
-                    return false;
-                });
-
-                // Add a Download Image entry.
-                menu.add(R.string.download_image).setOnMenuItemClickListener((MenuItem item) -> {
-                    // Check if the download should be processed by an external app.
-                    if (sharedPreferences.getBoolean("download_with_external_app", false)) {  // Download with an external app.
-                        openUrlWithExternalApp(imageUrl);
-                    } else {  // Download with Android's download manager.
-                        // Check to see if the storage permission has already been granted.
-                        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {  // The storage permission needs to be requested.
-                            // Store the image URL for use by `onRequestPermissionResult()`.
-                            downloadImageUrl = imageUrl;
-
-                            // Show a dialog if the user has previously denied the permission.
-                            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {  // Show a dialog explaining the request first.
-                                // Instantiate the download location permission alert dialog and set the download type to DOWNLOAD_IMAGE.
-                                DialogFragment downloadLocationPermissionDialogFragment = DownloadLocationPermissionDialog.downloadType(DownloadLocationPermissionDialog.DOWNLOAD_IMAGE);
-
-                                // Show the download location permission alert dialog.  The permission will be requested when the dialog is closed.
-                                downloadLocationPermissionDialogFragment.show(fragmentManager, getString(R.string.download_location));
-                            } else {  // Show the permission request directly.
-                                // Request the permission.  The download dialog will be launched by `onRequestPermissionResult().
-                                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, DOWNLOAD_IMAGE_REQUEST_CODE);
-                            }
-                        } else {  // The storage permission has already been granted.
-                            // Get a handle for the download image alert dialog.
-                            DialogFragment downloadImageDialogFragment = DownloadImageDialog.imageUrl(imageUrl);
-
-                            // Show the download image alert dialog.
-                            downloadImageDialogFragment.show(fragmentManager, getString(R.string.download));
-                        }
-                    }
-                    return false;
-                });
-
-                // Add a Copy URL entry.
-                menu.add(R.string.copy_url).setOnMenuItemClickListener(item -> {
-                    // Save the image URL in a `ClipData`.
-                    ClipData srcImageTypeClipData = ClipData.newPlainText(getString(R.string.url), imageUrl);
-
-                    // Set the `ClipData` as the clipboard's primary clip.
-                    clipboardManager.setPrimaryClip(srcImageTypeClipData);
-                    return false;
-                });
-
-                // Add an Open with App entry.
-                menu.add(R.string.open_with_app).setOnMenuItemClickListener((MenuItem item) -> {
-                    openWithApp(imageUrl);
-                    return false;
-                });
+                // Add an Open in New Tab entry.
+                menu.add(R.string.open_in_new_tab).setOnMenuItemClickListener((MenuItem item) -> {
+                    // Add a new tab.
+                    addTab(null);
 
-                // Add an Open with Browser entry.
-                menu.add(R.string.open_with_browser).setOnMenuItemClickListener((MenuItem item) -> {
-                    openWithBrowser(imageUrl);
+                    // Load the URL.
+                    loadUrl(imageUrl);
                     return false;
                 });
 
-                // Add a `Cancel` entry, which by default closes the `ContextMenu`.
-                menu.add(R.string.cancel);
-                break;
-
-
-            // `SRC_IMAGE_ANCHOR_TYPE` is an image that is also a link.
-            case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
-                // Get the image URL.
-                imageUrl = hitTestResult.getExtra();
-
-                // Set the image URL as the title of the `ContextMenu`.
-                menu.setHeaderTitle(imageUrl);
-
-                // Add a `View Image` entry.
+                // Add a View Image entry.
                 menu.add(R.string.view_image).setOnMenuItemClickListener(item -> {
                     loadUrl(imageUrl);
                     return false;
index 2756823..3085602 100644 (file)
@@ -1,4 +1,4 @@
-• Fix a bug that allowed the app bar to be scrolled off the screen when app bar scrolling was disabled, with no way to scroll it back.
-• Fix a bug that prevented the app bar from being displayed after a tab was deleted if the new active tab was blank.
-• Fix a rare crash when some pages finished loading.
-• Make the back button close a tab if the WebView is at the beginning of the history list.
\ No newline at end of file
+• Behebung eines Bugs, durch den die App-Leiste vom Bildschirm verschwand und nicht mehr zurückgescrollt werden konnte, wenn das Scrollen der App-Leiste deaktiviert war.
+• Behebung eines Bugs, durch den die App-Leiste nicht angezeigt wurde, nachdem ein Tab geschlossen wurde und der nächste Tab leer war.
+• Behebung eines Bugs, der in Ausnahmefällen zum Absturz führte, wenn Seiten fertig geladen wurden.
+• Der Zurück-Button schliesst nun einen Tab, wenn WebView den Beginn des Verlaufs erreicht hat.
\ No newline at end of file
index e1fefd2..762c83b 100644 (file)
@@ -1,6 +1,12 @@
+Privacy Browser verfolgt zwei grundsätzliche Ziele:
+
+1. Die ins Internet gesendete Menge an Daten zu minimieren.
+
+2. Die auf dem Gerät gespeicherte Menge an Daten zu minimieren.
+
 Die meisten Browser plaudern still und heimlich jede Menge Informationen an Websiten aus, welche genutzt werden können, um deren Benutzer zu verfolgen und deren Privatsphäre zu kompromittieren. Webseiten und Werbenetzwerke nutzen Technologien wie JavaScript, Cookies, DOM-Speicher, User-Agents und andere, um jeden einzelnen Browser-Benutzer eindeutig zu identifizieren und ihn zwischen seinen Besuchen und sogar quer durch das Internet zu verfolgen.
 
-Privacy Browser wird entwickelt, um die Menge an Informationen, die an Websites geliefert wird, zu minimieren. In der Voreinstellung sind Funktionen, die Ihre Privatsphäre beeinträchtigen können, grundsätzlich deaktiviert. Wenn Webseiten jedoch spezielle Funktionen benötigen, um zu funktionieren, können diese beim Besuch der betreffenden Seite bewusst einmalig aktiviert werden. Darüber hinaus können spezielle Einstellungen für bestimmte Domains auch abgespeichert werden, damit sie bei jedem Besuch der betreffenden Seite automatisch aktiviert und danach wieder deaktiviert werden.
+In contrast, privacy sensitive features are disabled by default in Privacy Browser. Wenn Webseiten jedoch spezielle Funktionen benötigen, um zu funktionieren, können diese beim Besuch der betreffenden Seite bewusst einmalig aktiviert werden. Darüber hinaus können spezielle Einstellungen für bestimmte Domains auch abgespeichert werden, damit sie bei jedem Besuch der betreffenden Seite automatisch aktiviert und danach wieder deaktiviert werden.
 
 Privacy Browser nutzt aktuell Android's eingebaute WebView-Komponente, um Webseiten anzuzeigen. Er funktioniert daher am Besten, wenn die letzte Version von WebView installiert ist (siehe https://www.stoutner.com/privacy-browser/common-settings/webview/). Ab Version 4.x wird Privacy Browser eine abgeleitete Version von Android's WebView - Privacy WebView genannt - verwenden, um erweiterte Privatsphäre-Funktionen zu bieten.
 
index cd6520f..24030a9 100644 (file)
@@ -1,6 +1,6 @@
 Privacy Browser has two primary goals.
 
-1. Minimize the amount of information that is sent to web servers.
+1. Minimize the amount of information that is sent to the internet.
 
 2. Minimize the amount of information that is stored on the device.
 
index 1baa6bd..d8c68ed 100644 (file)
@@ -1,6 +1,12 @@
+Navegador Privado tiene dos objetivos principales.
+
+1. Minimizar la cantidad de información que se envía a Internet.
+
+2. Minimizar la cantidad de información que se almacena en el dispositivo.
+
 La mayoría de los navegadores proporcionan a los sitios web cantidades masivas de información que les permite rastrearte y comprometer tu privacidad. Los sitios web y las redes publicitarias utilizan tecnologías como JavaScript, cookies, almacenamiento DOM, agentes de usuario y muchas otras cosas para identificar de forma única a cada usuario y rastrearlo entre visitas y a través de la web.
 
-Navegador Privado está diseñado para minimizar la cantidad de información que el navegador presenta a los sitios web. De forma predeterminada, las funciones sensibles a la privacidad están desactivadas. Si una de estas tecnologías es necesaria para el correcto funcionamiento de un sitio web, el usuario puede optar por activarla sólo para esa visita. O bien, puede utilizar la configuración del dominio para activar automáticamente determinadas funciones al entrar en un sitio web específico y desactivarlas de nuevo al salir.
+Por el contrario, las funciones sensibles a la privacidad están desactivadas de forma predeterminada en el Navegador de privacidad. Si una de estas tecnologías es necesaria para el correcto funcionamiento de un sitio web, el usuario puede optar por activarla sólo para esa visita. O bien, puede utilizar la configuración del dominio para activar automáticamente determinadas funciones al entrar en un sitio web específico y desactivarlas de nuevo al salir.
 
 Navegador Privado utiliza actualmente el WebView incorporado de Android para renderizar las páginas web. Como tal, funciona mejor cuando se instala la última versión de WebView (ver https://www.stoutner.com/privacy-browser/common-settings/webview/). En la serie 4.x, Navegador Privado cambiará a una versión bifurcada del WebView de Android llamada Privacy WebView que permitirá características de privacidad avanzadas.
 
@@ -10,4 +16,4 @@ Características:
 • Bloqueo de anuncios EasyList integrado.
 • Soporte para proxy de Tor Orbot.
 • Fijación de certificados SSL.
-• Importar/Exportar la configuración y los marcadores.
\ No newline at end of file
+• Importar/exportar la configuración y los marcadores.
\ No newline at end of file
index 30f1208..cd2da76 100644 (file)
@@ -1,6 +1,12 @@
+Privacy Browser ha due obiettivi primari.
+
+1. Minimizzzare la quantità di informazioni inviate verso  internet.
+
+2. Minimizzare la quantità di informazioni salvate sul dispositivo.
+
 La maggioranza dei browser fornisce silenziosamente ai siti web un'enorme quantità di informazioni per permettere loro di tracciare l'utente e compromettere la sua privacy. I siti web e le reti pubblicitarie utilizzano diverse tecnologie, come JavaScript, i cookie, il DOM storage, gli user agent e molte altre, con lo scopo di identificare in modo univoco ogni utente e di tracciare la sua navigazione attraverso la rete.
 
-Privacy Browser è progettato con lo scopo di minimizzare la quantità di informazioni che il browser fornisce ai siti web. Le funzionalità sensibili alla privacy sono disabilitate di default. Se però una di queste tecnologie è necessaria per il corretto funzionamento di un sito web l'utente può abilitarla anche per un accesso momentaneo. In alternativa è possibile utilizzare le impostazioni dei domini per abilitare in modo automatico determinate funzionalità nel momento in cui si accede ad un determinato sito web, così che siano poi disabilitate nel momento in cui si abbandona il sito.
+Per migliorare la sicurezza le funzionalità sensibili al problema della privacy sono disabilitate di default in Privacy Browser. Se però una di queste tecnologie è necessaria per il corretto funzionamento di un sito web l'utente può abilitarla anche per un accesso momentaneo. In alternativa è possibile utilizzare le impostazioni dei domini per abilitare in modo automatico determinate funzionalità nel momento in cui si accede ad un determinato sito web, così che siano poi disabilitate nel momento in cui si abbandona il sito.
 
 Privacy Browser utilizza attualmente la WebView nativa di Android per la visualizzazione delle pagine web. Per questo motivo si ha un funzionamento ottimale solo se è installata la versione più recente di WebView (si veda in proposito https://www.stoutner.com/privacy-browser/common-settings/webview/). A partire dalle release della serie 4.x, Privacy Browser passerà ad una versione modificata della WebView di Android chiamata Privacy WebView che permetterà l'utilizzo di funzionalità di privacy più avanzate.
 
@@ -10,4 +16,4 @@ Funzionalità:
 • Blocco degli annunci EasyList integrato.
 • Possibilità di utilizzare il proxy Tor Orbot.
 • Salvataggio dei certificati SSL.
-• Import/Export delle impostazioni e dei segnalibri.
\ No newline at end of file
+• Import/export delle impostazioni e dei segnalibri.
\ No newline at end of file
index 5be1f92..042979c 100644 (file)
@@ -1,6 +1,12 @@
+У Privacy Browser две основные цели:
+
+1. Минимизация информации, которая отправляется в интернет.
+
+2. Минимизация информации, которая хранится на устройстве.
+
 Большинство браузеров скрытно предоставляют веб-сайтам огромное количество информации, которая позволяет им отслеживать вас и нарушать вашу конфиденциальность. Сайты и рекламные сети используют JavaScript, файлы cookie, DOM-хранилище, пользовательские агенты и многие другие технологии для уникальной идентификации каждого пользователя и его отслеживания при просмотре интернета.
 
-Privacy Browser разработан для минимизации объема информации, которую браузер представляет веб-сайтам. По умолчанию функции, чувствительные к конфиденциальности, отключены. Если одна из этих технологий необходима для корректной работы веб-сайта, пользователь может включить ее только для этого визита. Кроме того, можно использовать настройки домена, чтобы автоматически включать некоторые функции при входе на определенный веб-сайт и снова отключать их при выходе.
+Поэтому чувствительные к конфиденциальности функции отключены в Privacy Browser по умолчанию. Если одна из этих технологий необходима для корректной работы веб-сайта, пользователь может включить ее только для этого визита. Кроме того, можно использовать настройки домена, чтобы автоматически включать некоторые функции при входе на определенный веб-сайт и снова отключать их при выходе.
 
 В настоящее время для отображения веб-страниц в Privacy Browser используется встроенный в Android компонент WebView, поэтому наилучшие результаты работы браузера можно получить, используя последнюю версию этого компонента (см. https://www.stoutner.com/privacy-browser/common-settings/webview/). Начиная с версии 4.x Privacy Browser будет переключен на форк WebView под названием Privacy WebView, что позволит использовать более продвинутые функции обеспечения конфиденциальности.
 
index 1a6d102..b90f4f2 100644 (file)
@@ -1,6 +1,6 @@
 Çoğu tarayıcı, sizi takip etmelerini sağlayacak ve gizliliğinizi riske edecek büyük miktarda bilgiyi sessizce web sitelerine verir. Web siteleri ve reklam ağları, her kullanıcıyı benzersiz şekilde tanımlamak ve web genelinde ve ziyaretleri arasında hepsini takip etmek için JavaScript, çerezler, DOM depolama alanı, kullanıcı aracıları ve daha birçok farklı teknolojileri kullanır.
 
-Privacy Browser, bir tarayıcının web sitelerine verebileceği bilgi miktarını en aza indirecek şekilde tasarlanmıştır. Gizliliğe duyarlı özellikler varsayılan olarak devre dışıdır. Bir web sitesinin düzgün çalışması için bu teknolojilerden biri gerekliyse, kullanıcı bu ziyaret için o özelliği etkinleştirmeyi seçebilir. Veya, belirli bir web sitesine girerken belirli özellikleri otomatik olarak açmak ve çıkarken tekrar kapatmak için domain ayarlarını kullanabilir.
+In contrast, privacy sensitive features are disabled by default in Privacy Browser. Bir web sitesinin düzgün çalışması için bu teknolojilerden biri gerekliyse, kullanıcı bu ziyaret için o özelliği etkinleştirmeyi seçebilir. Veya, belirli bir web sitesine girerken belirli özellikleri otomatik olarak açmak ve çıkarken tekrar kapatmak için domain ayarlarını kullanabilir.
 
 Privacy Browser, web sayfalarını oluşturmak için şu anda Android'in yerleşik Web Görünümü'nü kullanıyor. Bu nedenle, en güncel Web Görünümü sürümü kurulu olduğunda en iyi şekilde çalışır (bakınız https://www.stoutner.com/privacy-browser/common-settings/webview/). 4.x serisinde, Privacy Browser, gelişmiş gizlilik özelliklerine izin verecek, Android Web Görünümü'nün bölünmüş bir sürümü olan Privacy Web Görünümü'ne geçecektir.