Manually handle changes in screen layout. https://redmine.stoutner.com/issues/447
[PrivacyBrowser.git] / app / src / main / AndroidManifest.xml
index d19b67e..13a58e3 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2015-2016 Soren Stoutner <soren@stoutner.com>.
+  Copyright © 2015-2019 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"
-          xmlns:tools="http://schemas.android.com/tools"
-          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" />
+
+    <!-- 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" />
     <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:supportsRtl="true" >
+        android:supportsRtl="true"
+        android:networkSecurityConfig="@xml/network_security_config"
+        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.
-            `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. -->
+        <!-- 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 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=".activities.MainWebView"
+            android:name=".activities.MainWebViewActivity"
             android:label="@string/privacy_browser"
-            android:configChanges="orientation|screenSize"
+            android:theme="@style/PrivacyBrowserLight"
+            android:configChanges="orientation|screenSize|screenLayout|keyboard|keyboardHidden"
             android:launchMode="singleTask"
             android:screenOrientation="fullUser"
             android:persistableMode="persistNever"
                 <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 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=".activities.Bookmarks"
+            android:name=".activities.BookmarksActivity"
             android:label="@string/bookmarks"
-            android:theme="@style/PrivacyBrowser.SecondaryActivity"
-            android:parentActivityName=".activities.MainWebView"
-            android:configChanges="orientation|screenSize"
+            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=".activities.BookmarksDatabaseView"
+            android:name=".activities.BookmarksDatabaseViewActivity"
             android:label="@string/bookmarks_database_view"
-            android:theme="@style/PrivacyBrowser.SecondaryActivity"
-            android:parentActivityName=".activities.Bookmarks"
-            android:configChanges="orientation|screenSize"
+            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=".activities.Settings"
-            android:label="@string/privacy_browser_settings"
-            android:theme="@style/Settings"
-            android:parentActivityName=".activities.MainWebView"
-            android:configChanges="orientation|screenSize"
+            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: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="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.DomainsList"
+            android:name=".activities.DomainsActivity"
             android:label="@string/domains"
-            android:theme="@style/PrivacyBrowser.SecondaryActivity"
-            android:parentActivityName=".activities.MainWebView"
-            android:configChanges="orientation|screenSize"
+            android:parentActivityName=".activities.MainWebViewActivity"
+            android:configChanges="screenLayout|keyboard|keyboardHidden"
+            android:screenOrientation="fullUser"
+            android:windowSoftInputMode="stateAlwaysHidden"
+            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.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 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=".activities.Guide"
-            android:label="@string/privacy_browser_guide"
-            android:theme="@style/PrivacyBrowser.SecondaryActivity"
-            android:parentActivityName=".activities.MainWebView"
-            android:configChanges="orientation|screenSize"
+            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" />
 
-        <!-- `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=".activities.About"
+            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:theme="@style/PrivacyBrowser.SecondaryActivity"
-            android:parentActivityName=".activities.MainWebView"
-            android:configChanges="orientation|screenSize"
+            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>
+</manifest>
\ No newline at end of file