<?xml version="1.0" encoding="utf-8"?>
<!--
- Copyright 2015-2016 Soren Stoutner <soren@stoutner.com>.
+ Copyright © 2015-2020 Soren Stoutner <soren@stoutner.com>.
This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
You should have received a copy of the GNU General Public License
along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>. -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.stoutner.privacybrowser" >
+<!-- Install location auto allows users to move Privacy Browser to an SD card if desired. -->
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="com.stoutner.privacybrowser"
+ android:installLocation="auto" >
<!-- Required to load websites. -->
<uses-permission android:name="android.permission.INTERNET" />
- <!-- Required to create homescreen shortcuts. -->
+ <!-- Required to create home screen shortcuts. -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
+ <!-- Required to import settings from external storage. -->
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <!-- For API >= 23, app data is automatically backed up to Google cloud servers unless android:allowBackup="false" and android:fullBackupContent="false" is set. -->
+ <!-- Required to export settings and save files to public storage. -->
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+
+
+ <!-- Support Chromebooks that don't have a touch screen. -->
+ <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
+
+
+ <!-- For API >= 23, app data is automatically backed up to Google cloud servers unless `android:allowBackup="false"` and `android:fullBackupContent="false"` is set.
+ `android:requestLegacyExternalStorage="true"` makes Android 10 storage permissions work like previous versions of Android. It is a temporary workaround. <https://redmine.stoutner.com/issues/546> -->
<application
android:label="@string/privacy_browser"
android:icon="@mipmap/privacy_browser"
- android:theme="@style/PrivacyBrowser"
+ android:roundIcon="@mipmap/privacy_browser_round"
android:allowBackup="false"
- android:fullBackupContent="false" >
+ android:fullBackupContent="false"
+ android:supportsRtl="true"
+ android:networkSecurityConfig="@xml/network_security_config"
+ android:requestLegacyExternalStorage="true"
+ tools:ignore="UnusedAttribute" >
- <!-- If android:name="android.webkit.WebView.MetricsOptOut" is not "true" then WebViews will upload metrics to Google.
- https://developer.android.com/reference/android/webkit/WebView.html -->
+ <!-- If `android:name="android.webkit.WebView.MetricsOptOut"` is not `true` then `WebViews` will upload metrics to Google. <https://developer.android.com/reference/android/webkit/WebView.html> -->
<meta-data
android:name="android.webkit.WebView.MetricsOptOut"
android:value="true" />
- <!-- android:configChanges="orientation|screenSize" makes the activity not reload when the orientation changes, which preserves scroll location in the WebView.
- android:launchMode="singleTask" makes the app launch in a new task instead of inside the task of the program that sends it an intent.
- It also makes it reuse an existing Privacy Browser activity if available instead of launching a new one.
- android:persistableMode="persistNever" removes Privacy Browser from the recents screen on a device reboot. -->
+ <!-- Explicitly disable "Safe Browsing". -->
+ <meta-data
+ android:name="android.webkit.WebView.EnableSafeBrowsing"
+ android:value="false" />
+
+ <!-- Specify the Application ID used by the ads in the free flavor. -->
+ <meta-data
+ android:name="com.google.android.gms.ads.APPLICATION_ID"
+ android:value="@string/google_app_id" />
+
+ <!-- Don't initialize the ad system in the free flavor until it is explicitly called. -->
+ <meta-data
+ android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
+ android:value="true"/>
+
+ <!-- The file provider is required to encrypt files with OpenKeychain. -->
+ <provider
+ android:name="androidx.core.content.FileProvider"
+ android:authorities="@string/file_provider"
+ android:exported="false"
+ android:grantUriPermissions="true" >
+
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/file_provider_paths" />
+ </provider>
+
+ <!-- The label uses the short name so that it isn't truncated under the icon in the launcher on most phones.
+ The theme has to be defined here or an ugly title bar is displayed when the app launches.
+ `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:launchMode="singleTask"` makes the app launch in a new task instead of inside the task of the program that sends it an intent.
+ It also makes it reuse an existing Privacy Browser activity if available instead of launching a new one.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
<activity
- android:name=".MainWebViewActivity"
- android:label="@string/privacy_browser"
- android:theme="@style/PrivacyBrowser.MainWebView"
- android:configChanges="orientation|screenSize"
+ android:name=".activities.MainWebViewActivity"
+ android:label="@string/short_name"
+ android:theme="@style/PrivacyBrowser"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
android:launchMode="singleTask"
- android:persistableMode="persistNever" >
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
- <!-- android.intent.action.VIEW with the two data schemes enables processing of web intents. -->
+ <!-- Process web intents. -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
+
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
+
<data android:scheme="http" />
<data android:scheme="https" />
</intent-filter>
+
+ <!-- Process content intents for text files. -->
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.BROWSABLE" />
+ <category android:name="android.intent.category.DEFAULT" />
+
+ <data android:scheme="content" />
+ <data android:mimeType="text/*" />
+ </intent-filter>
+
+ <!-- Process intents for MHT archives. -->
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+
+ <category android:name="android.intent.category.BROWSABLE" />
+ <category android:name="android.intent.category.DEFAULT" />
+
+ <data android:scheme="file" />
+ <data android:scheme="content" />
+
+ <data android:host="*" />
+
+ <!-- This pattern matches any file that starts with a `/`, has at least one character, followed by any number of other characters, terminating with `.mht`. -->
+ <data android:pathPattern="/.*\.mht" />
+ <data android:mimeType="*/*" />
+ </intent-filter>
+
+ <!-- Process web search intents. -->
+ <intent-filter>
+ <action android:name="android.intent.action.WEB_SEARCH" />
+
+ <category android:name="android.intent.category.BROWSABLE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
</activity>
- <!-- android:configChanges="orientation|screenSize" makes the activity not reload when the orientation changes.
- android:persistableMode="persistNever" removes Privacy Browser from the recents screen on a device reboot. -->
+
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
<activity
- android:name=".GuideActivity"
- android:label="@string/privacy_browser_guide"
- android:theme="@style/PrivacyBrowser.TabActivity"
- android:parentActivityName=".MainWebViewActivity"
- android:configChanges="orientation|screenSize"
- android:persistableMode="persistNever" >
-
- <!-- android.support.PARENT_ACTIVITY is necessary for API <= 15. -->
- <meta-data
- android:name="android.support.PARENT_ACTIVITY"
- android:value=".MainWebViewActivity" />
- </activity>
+ android:name=".activities.BookmarksActivity"
+ android:label="@string/bookmarks"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
- <!-- android:configChanges="orientation|screenSize" makes the activity not reload when the orientation changes.
- android:persistableMode="persistNever" removes Privacy Browser from the recents screen on a device reboot. -->
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
<activity
- android:name=".SettingsActivity"
- android:label="@string/privacy_browser_settings"
- android:theme="@style/PrivacyBrowser.Settings"
- android:parentActivityName=".MainWebViewActivity"
- android:configChanges="orientation|screenSize"
- android:persistableMode="persistNever" >
-
- <!-- android.support.PARENT_ACTIVITY is necessary for API <= 15. -->
- <meta-data
- android:name="android.support.PARENT_ACTIVITY"
- android:value=".MainWebViewActivity" />
- </activity>
+ android:name=".activities.BookmarksDatabaseViewActivity"
+ android:label="@string/bookmarks_database_view"
+ android:parentActivityName=".activities.BookmarksActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
- <!-- android:configChanges="orientation|screenSize" makes the activity not reload when the orientation changes.
- android:persistableMode="persistNever" removes Privacy Browser from the recents screen on a device reboot. -->
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
<activity
- android:name=".AboutActivity"
- android:label="@string/about_privacy_browser"
- android:theme="@style/PrivacyBrowser.TabActivity"
- android:parentActivityName=".MainWebViewActivity"
- android:configChanges="orientation|screenSize"
- android:persistableMode="persistNever" >
+ android:name=".activities.RequestsActivity"
+ android:label="@string/requests"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
- <!-- android.support.PARENT_ACTIVITY is necessary for API <= 15. -->
- <meta-data
- android:name="android.support.PARENT_ACTIVITY"
- android:value=".MainWebViewActivity" />
- </activity>
+ <!-- `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not reload when a bluetooth keyboard is activated/goes to sleep.
+ `android:windowSoftInputMode="stateAlwaysHidden"` keeps the keyboard from displaying when the screen is rotated and after the `AddDomainDialog` is dismissed.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
+ <activity
+ android:name=".activities.DomainsActivity"
+ android:label="@string/domains"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:windowSoftInputMode="stateAlwaysHidden"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
- </application>
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
+ <activity
+ android:name=".activities.SettingsActivity"
+ android:label="@string/settings"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
+
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
+ <activity
+ android:name=".activities.ImportExportActivity"
+ android:label="@string/import_export"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
+
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
+ <activity
+ android:name=".activities.LogcatActivity"
+ android:label="@string/logcat"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
-</manifest>
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
+ <activity
+ android:name=".activities.GuideActivity"
+ android:label="@string/guide"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
+
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
+ <activity
+ android:name=".activities.AboutActivity"
+ android:label="@string/about_privacy_browser"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
+
+ <!-- `android:configChanges="orientation|screenSize"` makes the activity not restart when the orientation changes, which preserves scroll location in the WebView.
+ `android:configChanges="screenLayout"` makes the activity not restart when entering or exiting split screen mode.
+ `android:configChanges="keyboard|keyboardHidden"` makes the activity not restart when a bluetooth keyboard is activated/goes to sleep.
+ `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot.
+ `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
+ <activity
+ android:name=".activities.ViewSourceActivity"
+ android:label="@string/view_source"
+ android:parentActivityName=".activities.MainWebViewActivity"
+ android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
+ android:screenOrientation="fullUser"
+ android:persistableMode="persistNever"
+ tools:ignore="UnusedAttribute" />
+ </application>
+</manifest>
\ No newline at end of file