<p><a href="https://developer.android.com/reference/android/Manifest.permission.html#INSTALL_SHORTCUT">com.android.launcher.permission.INSTALL_SHORTCUT</a></p>
<p>Benötigt, um Verknüpfungen zu Websites auf Ihrer Startseite zu erstellen.</p>
- <h3>Write storage</h3>
+ <h3>Schreibrechte im Dateisystem</h3>
<p><a href="https://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE"> android.permission.WRITE_EXTERNAL_STORAGE</a></p>
- <p>Required to download files to the public download folder.
- On Android Marshmallow (API 23) and newer, if this permission is denied Privacy Browser will store downloads in the app’s download folder instead.</p>
+ <p>Benötigt, um Dateien im öffentlichen Download-Ordner abzuspeichern.
+ In Android Marshmallow (API 23) und neuer werden Downloads im Downdload-Ordner der App gespeichert, falls die Berechtigung verweigert wurde.</p>
<br/>
<hr/>
<p><a href="https://developer.android.com/reference/android/Manifest.permission.html#INSTALL_SHORTCUT">com.android.launcher.permission.INSTALL_SHORTCUT</a></p>
<p>Benötigt, um Verknüpfungen zu Websites auf Ihrer Startseite zu erstellen.</p>
- <h3>Write storage</h3>
+ <h3>Schreibrechte im Dateisystem</h3>
<p><a href="https://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE"> android.permission.WRITE_EXTERNAL_STORAGE</a></p>
- <p>Required to download files to the public download folder.
- On Android Marshmallow (API 23) and newer, if this permission is denied Privacy Browser will store downloads in the app’s download folder instead.</p>
+ <p>Benötigt, um Dateien im öffentlichen Download-Ordner abzuspeichern.
+ In Android Marshmallow (API 23) und neuer werden Downloads im Downdload-Ordner der App gespeichert, falls die Berechtigung verweigert wurde.</p>
<br/>
<hr/>
<p><a href="https://developer.android.com/reference/android/Manifest.permission.html#INSTALL_SHORTCUT">com.android.launcher.permission.INSTALL_SHORTCUT</a></p>
<p>Benötigt, um Verknüpfungen zu Websites auf Ihrer Startseite zu erstellen.</p>
- <h3>Write storage</h3>
+ <h3>Schreibrechte im Dateisystem</h3>
<p><a href="https://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE"> android.permission.WRITE_EXTERNAL_STORAGE</a></p>
- <p>Required to download files to the public download folder.
- On Android Marshmallow (API 23) and newer, if this permission is denied Privacy Browser will store downloads in the app’s download folder instead.</p>
+ <p>Benötigt, um Dateien im öffentlichen Download-Ordner abzuspeichern.
+ In Android Marshmallow (API 23) und neuer werden Downloads im Downdload-Ordner der App gespeichert, falls die Berechtigung verweigert wurde.</p>
</body>
</html>
\ No newline at end of file
<p><a href="https://developer.android.com/reference/android/Manifest.permission.html#INSTALL_SHORTCUT">com.android.launcher.permission.INSTALL_SHORTCUT</a></p>
<p>Benötigt, um Verknüpfungen zu Websites auf Ihrer Startseite zu erstellen.</p>
- <h3>Write storage</h3>
+ <h3>Schreibrechte im Dateisystem</h3>
<p><a href="https://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE"> android.permission.WRITE_EXTERNAL_STORAGE</a></p>
- <p>Required to download files to the public download folder.
- On Android Marshmallow (API 23) and newer, if this permission is denied Privacy Browser will store downloads in the app’s download folder instead.</p>
+ <p>Benötigt, um Dateien im öffentlichen Download-Ordner abzuspeichern.
+ In Android Marshmallow (API 23) und neuer werden Downloads im Downdload-Ordner der App gespeichert, falls die Berechtigung verweigert wurde.</p>
</body>
</html>
\ No newline at end of file
// `privacyBrowserRuntime` is used in `onCreate()`, `onOptionsItemSelected()`, and `applyAppSettings()`.
private Runtime privacyBrowserRuntime;
+ // `proxyThroughOrbot` is used in `onRestart()` and `applyAppSettings()`.
+ boolean proxyThroughOrbot;
+
// `incognitoModeEnabled` is used in `onCreate()` and `applyAppSettings()`.
private boolean incognitoModeEnabled;
// Run the default commands.
super.onRestart();
+ // Make sure Orbot is running if Privacy Browser is proxying through Orbot.
+ if (proxyThroughOrbot) {
+ // Request Orbot to start. If Orbot is already running no hard will be caused by this request.
+ Intent orbotIntent = new Intent("org.torproject.android.intent.action.START");
+
+ // Send the intent to the Orbot package.
+ orbotIntent.setPackage("org.torproject.android");
+
+ // Make it so.
+ sendBroadcast(orbotIntent);
+ }
+
// Apply the app settings if returning from the Settings activity..
if (reapplyAppSettingsOnRestart) {
// Apply the app settings.
String searchCustomURLString = sharedPreferences.getString("search_custom_url", "");
incognitoModeEnabled = sharedPreferences.getBoolean("incognito_mode", false);
boolean doNotTrackEnabled = sharedPreferences.getBoolean("do_not_track", false);
- boolean proxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false);
+ proxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false);
fullScreenBrowsingModeEnabled = sharedPreferences.getBoolean("full_screen_browsing_mode", false);
hideSystemBarsOnFullscreen = sharedPreferences.getBoolean("hide_system_bars", false);
translucentNavigationBarOnFullscreen = sharedPreferences.getBoolean("translucent_navigation_bar", true);
// Use reflection to apply the new proxy values.
try {
Class applicationClass = Class.forName("android.app.Application");
- Field mLoadedApkField = applicationClass.getDeclaredField("mLoadedApk");
- // `setAccessible(true)` allows us to change the value of `mLoadedApkField`.
+
+ // Suppress the lint warning that `mLoadedApk` cannot be resolved.
+ @SuppressWarnings("JavaReflectionMemberAccess") Field mLoadedApkField = applicationClass.getDeclaredField("mLoadedApk");
+
+ // `setAccessible(true)` allows the value of `mLoadedApkField` to be changed..
mLoadedApkField.setAccessible(true);
Object mLoadedApkObject = mLoadedApkField.get(privacyBrowserContext);
+ // Suppress the lint warning that reflection may not alwasy work in the future and on all devices.
@SuppressLint("PrivateApi") Class loadedApkClass = Class.forName("android.app.LoadedApk");
Field mReceiversField = loadedApkClass.getDeclaredField("mReceivers");
- // `setAccessible(true)` allows us to change the value of `mReceiversField`.
+
+ // `setAccessible(true)` allows the value of `mReceiversField` to be changed.
mReceiversField.setAccessible(true);
ArrayMap receivers = (ArrayMap) mReceiversField.get(mLoadedApkObject);
for (Object receiverMap : receivers.values()) {
for (Object receiver : ((ArrayMap) receiverMap).keySet()) {
- // We have to use `Class<?>`, which is an `unbounded wildcard parameterized type`, instead of `Class`, which is a `raw type`.
+ // `Class<?>`, which is an `unbounded wildcard parameterized type`, must be used instead of `Class`, which is a `raw type`.
// Otherwise, `receiveClass.getDeclaredMethod` below will produce an error.
Class<?> receiverClass = receiver.getClass();
if (receiverClass.getName().contains("ProxyChangeListener")) {
<string name="open_navigation_drawer">Navigationspanel öffnen</string>
<string name="close_navigation_drawer">Navigationspanel schließen</string>
<string name="no_title">Kein Titel</string>
+ <string name="unrecognized_url">Unbekannte URL:</string>
<!-- Save As. -->
<string name="save_as">Speichern Unter</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>
+ <!-- Download Location -->
+ <string name="download_location">Download-Zielordner</string>
+ <string name="download_location_message">Privacy Browser benötigt die Berechtigung zur Speicherung im öffentlichen Download-Ordner. Anderenfalls wird der Download-Ordner der App verwendet.</string>
+ <string name="ok">OK</string>
+
<!-- Orbot. -->
<string name="orbot_proxy_not_installed">Orbot-Proxy wird nicht funktionieren, solange Orbot nicht installiert ist.</string>
<string name="waiting_for_orbot">Warte, bis sich Orbot verbindet...</string>
<string name="open_navigation_drawer">Abrir la caja de navegación</string>
<string name="close_navigation_drawer">Cerrar la caja de navegación</string>
<string name="no_title">Sin título</string>
+ <string name="unrecognized_url">URL no reconocida:</string>
<!-- Save As. -->
<string name="save_as">Guardar como</string>
</string-array>
<string name="custom_user_agent">Agente de usuario personalizado</string>
<string name="incognito_mode">Modo incógnito</string>
- <string name="incognito_mode_summary">Borrar el historial y el caché después de que cada página web termine de cargar. Forward and back do not work in Incognito Mode.</string>
+ <string name="incognito_mode_summary">Borrar el historial y el caché después de que cada página web termine de cargar. Adelante y atrás no funcionan en el Modo incógnito.</string>
<string name="do_not_track">No rastrear</string>
<string name="do_not_track_summary">Enviar la cabecera de no rastrear (DNT) que educadamente sugiere que los servidores web no rastreen este navegador.</string>
<string name="block_lists">Listas de bloqueo</string>
<string name="open_navigation_drawer">Открыть панель навигации</string>
<string name="close_navigation_drawer">Закрыть панель навигации</string>
<string name="no_title">Без названия</string>
+ <string name="unrecognized_url">Нераспознанный URL:</string>
<!-- Save As. -->
<string name="save_as">Сохранить как</string>
</string-array>
<string name="custom_user_agent">Пользовательский user agent</string>
<string name="incognito_mode">Режим инкогнито</string>
- <string name="incognito_mode_summary">Очистка журнала и кэша после завершения загрузки каждой веб-страницы. Forward and back do not work in Incognito Mode.</string>
+ <string name="incognito_mode_summary">Очистка журнала и кэша после завершения загрузки каждой веб-страницы. Кнопки \'Вперед\' и \'Назад\' не работают в этом режиме.</string>
<string name="do_not_track">Не отслеживать</string>
<string name="do_not_track_summary">Отправлять заголовок \'не отслеживать\', являющийся пожеланием веб-серверу не отслеживать этот браузер.</string>
<string name="block_lists">Списки блокировки</string>