mobile/android/base/AndroidManifest.xml.in
author Martyn Haigh <martyn.haigh@gmail.com>
Tue, 07 Apr 2015 14:18:33 +0100
changeset 237978 13c4aa8c19961e77387f138161824f18062b8665
parent 237059 e9e89c1c7e41859d5c18812342e69977fbcbc48b
child 238349 fc26d177eb06d433691b0f8f3e6759f9b5af080a
permissions -rw-r--r--
Bug 1149577 - Remove history and recents affecting flags from TabQueueDispatcher entry in AndroidManifest (r=mcomella)

#filter substitution
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="@ANDROID_PACKAGE_NAME@"
      android:installLocation="auto"
      android:versionCode="@ANDROID_VERSION_CODE@"
      android:versionName="@MOZ_APP_VERSION@"
#ifdef MOZ_ANDROID_SHARED_ID
      android:sharedUserId="@MOZ_ANDROID_SHARED_ID@"
#endif
      >
    <uses-sdk android:minSdkVersion="@MOZ_ANDROID_MIN_SDK_VERSION@"
#ifdef MOZ_ANDROID_MAX_SDK_VERSION
              android:maxSdkVersion="@MOZ_ANDROID_MAX_SDK_VERSION@"
#endif
              android:targetSdkVersion="@ANDROID_TARGET_SDK@"/>

#include ../services/manifests/FxAccountAndroidManifest_permissions.xml.in
#include ../services/manifests/HealthReportAndroidManifest_permissions.xml.in
#include ../services/manifests/SyncAndroidManifest_permissions.xml.in

#ifdef MOZ_ANDROID_SEARCH_ACTIVITY
#include ../search/manifests/SearchAndroidManifest_permissions.xml.in
#endif

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
    <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>

    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="@ANDROID_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER"/>
    <uses-permission android:name="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
    <uses-permission android:name="@ANDROID_PACKAGE_NAME@.permissions.FORMHISTORY_PROVIDER"/>
#ifdef MOZ_ANDROID_DOWNLOADS_INTEGRATION
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
#endif
#ifdef MOZ_WEBSMS_BACKEND
    <!-- WebSMS -->
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.WRITE_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
#endif

    <uses-feature android:name="android.hardware.location" android:required="false"/>
    <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
    <uses-feature android:name="android.hardware.touchscreen"/>

#ifdef NIGHTLY_BUILD
    <!-- Contacts API -->
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
#endif

#ifdef MOZ_ANDROID_TAB_QUEUE
    <!-- Tab Queue -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
#endif

#ifdef MOZ_ANDROID_BEAM
    <!-- Android Beam support -->
    <uses-permission android:name="android.permission.NFC"/>
    <uses-feature android:name="android.hardware.nfc" android:required="false"/>
#endif

#ifdef MOZ_WEBRTC
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-feature android:name="android.hardware.audio.low_latency" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.any" android:required="false"/>
    <uses-feature android:name="android.hardware.microphone" android:required="false"/>
#endif
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>

    <!-- App requires OpenGL ES 2.0 -->
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />

    <application android:label="@string/moz_app_displayname"
                 android:icon="@drawable/icon"
                 android:logo="@drawable/logo"
                 android:name="org.mozilla.gecko.GeckoApplication"
                 android:hardwareAccelerated="true"
# The preprocessor does not yet support arbitrary parentheses, so this cannot
# be parenthesized thus to clarify that the logical AND operator has precedence:
#   !defined(MOZILLA_OFFICIAL) || (defined(NIGHTLY_BUILD) && defined(MOZ_DEBUG))
#if !defined(MOZILLA_OFFICIAL) || defined(NIGHTLY_BUILD) && defined(MOZ_DEBUG)
                 android:debuggable="true">
#else
                 android:debuggable="false">
#endif

        <meta-data android:name="com.sec.android.support.multiwindow" android:value="true"/>

#ifdef MOZ_NATIVE_DEVICES
        <!-- This resources comes from Google Play Services. Required for casting support. -->
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
#endif

        <!-- If the windowSoftInputMode adjust* flag changes below, the
             setSoftInputMode call in BrowserSearch#onStop must also be updated. -->
        <activity android:name="org.mozilla.gecko.BrowserApp"
                  android:label="@string/moz_app_displayname"
                  android:taskAffinity="@ANDROID_PACKAGE_NAME@.BROWSER"
                  android:alwaysRetainTaskState="true"
                  android:configChanges="keyboard|keyboardHidden|mcc|mnc|orientation|screenSize|locale|layoutDirection"
                  android:windowSoftInputMode="stateUnspecified|adjustResize"
                  android:launchMode="singleTask"
                  android:exported="true"
                  android:theme="@style/Gecko.App">
          <!-- We export this activity so that it can be launched by explicit
               intents, in particular homescreen shortcuts.  See Bug 1032217.
               In future we would prefer to move all intent filters off the .App
               alias and onto BrowserApp so that we can deprecate activities
               that refer to pre-processed class names. -->
        </activity>

        <!-- Fennec is shipped as the Android package named
             org.mozilla.{fennec,firefox,firefox_beta}.  The internal Java package
             hierarchy inside the Android package has both an
             org.mozilla.{fennec,firefox,firefox_beta} subtree *and* an
             org.mozilla.gecko subtree.  The non-org.mozilla.gecko is deprecated
             and we would like to get rid of it entirely.  Until that happens, we
             have external consumers (such as intents and bookmarks) of
             non-org.mozilla.gecko Activity classes, so we define activity aliases
             for backwards compatibility. -->
        <activity-alias android:name=".App"
                        android:label="@MOZ_APP_DISPLAYNAME@"
                        android:targetActivity="org.mozilla.gecko.BrowserApp">
            <!-- android:priority ranges between -1000 and 1000.  We never want
                 another activity to usurp the MAIN action, so we ratchet our
                 priority up. -->
            <intent-filter android:priority="999">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <meta-data android:name="com.sec.minimode.icon.portrait.normal"
                       android:resource="@drawable/icon"/>

            <meta-data android:name="com.sec.minimode.icon.landscape.normal"
                       android:resource="@drawable/icon" />

            <intent-filter>
                <action android:name="org.mozilla.gecko.ACTION_ALERT_CALLBACK" />
            </intent-filter>

            <intent-filter>
                <action android:name="org.mozilla.gecko.GUEST_SESSION_INPROGRESS" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <!-- Notification API V2 -->
            <intent-filter>
                <action android:name="@ANDROID_PACKAGE_NAME@.helperBroadcastAction" />
                <data android:scheme="moz-notification" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <intent-filter>
                <action android:name="org.mozilla.gecko.UPDATE"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
#ifndef MOZ_ANDROID_TAB_QUEUE
            <!-- The main reason for the Tab Queue build flag is to not mess with the VIEW intent filter
                 before the rest of the plumbing is in place -->

            <!-- The entry point for Intent.VIEW actions will move to the TabQueue activity -->

            <!-- Default browser intents -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:scheme="about" />
                <data android:scheme="javascript" />
            </intent-filter>
            <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="http" />
                <data android:scheme="https" />
                <data android:mimeType="text/html"/>
                <data android:mimeType="text/plain"/>
                <data android:mimeType="application/xhtml+xml"/>
            </intent-filter>
#endif
            <intent-filter>
                <action android:name="android.intent.action.WEB_SEARCH" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="" />
                <data android:scheme="http" />
                <data android:scheme="https" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>

            <!-- For XPI installs from websites and the download manager. -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="file" />
                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:mimeType="application/x-xpinstall" />
            </intent-filter>

            <!-- For XPI installs from file: URLs. -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:host="" />
                <data android:scheme="file" />
                <data android:pathPattern=".*\\.xpi" />
            </intent-filter>

#ifdef MOZ_ANDROID_BEAM
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
                <data android:scheme="https" />
            </intent-filter>
#endif

            <meta-data android:name="android.app.searchable"
                       android:resource="@xml/searchable" />

            <!-- For debugging -->
            <intent-filter>
                <action android:name="org.mozilla.gecko.DEBUG" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity-alias>

#ifdef MOZ_ANDROID_TAB_QUEUE
        <!-- The main reason for the Tab Queue build flag is to not mess with the VIEW intent filter
             before the rest of the plumbing is in place -->

        <service android:name="org.mozilla.gecko.tabqueue.TabQueueService" />

        <activity android:name="org.mozilla.gecko.tabqueue.TabQueueDispatcher"
                  android:label="@MOZ_APP_DISPLAYNAME@"
                  android:launchMode="singleTask"
                  android:theme="@style/TabQueueActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="http" />
                <data android:scheme="https" />
                <data android:scheme="about" />
                <data android:scheme="javascript" />
            </intent-filter>
            <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="http" />
                <data android:scheme="https" />
                <data android:mimeType="text/html"/>
                <data android:mimeType="text/plain"/>
                <data android:mimeType="application/xhtml+xml"/>
            </intent-filter>
        </activity>
#endif

        <activity android:name="org.mozilla.gecko.StartPane"
                  android:theme="@style/GeckoStartPane"
                  android:excludeFromRecents="true"/>

        <activity android:name="org.mozilla.gecko.webapp.Dispatcher"
            android:noHistory="true" >
            <intent-filter>
                <!-- catch links from synthetic apks -->
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="application/webapp" />
            </intent-filter>
        </activity>

        <receiver android:name="org.mozilla.gecko.webapp.UninstallListener" >
          <intent-filter>
             <action android:name="android.intent.action.PACKAGE_REMOVED" />
             <data android:scheme="package" />
          </intent-filter>
        </receiver>

        <receiver android:name="org.mozilla.gecko.webapp.TaskKiller">
          <intent-filter>
             <action android:name="org.mozilla.webapp.TASK_REMOVED" />
             <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
        </receiver>

        <!-- Activity used for launching non-privileged WebApps via a URL -->
        <activity android:name="org.mozilla.gecko.Webapp"
                  android:label="@string/webapp_generic_name"
                  android:configChanges="keyboard|keyboardHidden|mcc|mnc|orientation|screenSize"
                  android:windowSoftInputMode="stateUnspecified|adjustResize"
                  android:launchMode="singleTask"
                  android:taskAffinity="org.mozilla.gecko.WEBAPP"
                  android:process=":@ANDROID_PACKAGE_NAME@.Webapp"
                  android:excludeFromRecents="true"
                  android:exported="true"
                  android:theme="@style/Gecko.App">
          <!-- We export this activity so that it can be launched by explicit
               intents, in particular old-style WebApp launching homescreen
               shortcuts. Such shortcuts were made before the new "synthetic
               APK" WebApps were deployed. See Bug 1032217. -->
        </activity>

        <!-- Alias Webapp so we can launch it from the package namespace. Prefer
             to launch with the fully qualified name "org.mozilla.gecko.Webapp". -->
        <activity-alias android:name=".Webapp"
                        android:label="@string/webapp_generic_name"
                        android:targetActivity="org.mozilla.gecko.Webapp">
            <intent-filter>
                <action android:name="org.mozilla.gecko.WEBAPP" />
            </intent-filter>
            <intent-filter>
                <action android:name="org.mozilla.gecko.ACTION_ALERT_CALLBACK" />
            </intent-filter>
        </activity-alias>

        <!-- Declare a predefined number of Webapp<num> activities. These are
             used so that each web app can launch in its own process. Keep
             this number in sync with the total number of web apps handled in
             WebappAllocator. -->

#define FRAGMENT WebappManifestFragment.xml.frag.in
#include WebappFragmentRepeater.inc

        <!-- Masquerade as the Resolver so that we can be opened from the Marketplace. -->
        <activity-alias
            android:name="com.android.internal.app.ResolverActivity"
            android:targetActivity="org.mozilla.gecko.BrowserApp"
            android:exported="true" />

        <receiver android:name="org.mozilla.gecko.GeckoUpdateReceiver">
            <intent-filter>
                <action android:name="@ANDROID_PACKAGE_NAME@.CHECK_UPDATE_RESULT" />
            </intent-filter>
        </receiver>

        <receiver android:name="org.mozilla.gecko.GeckoMessageReceiver"
                  android:permission="@ANDROID_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER">
            <intent-filter>
                  <action android:name="org.mozilla.gecko.INIT_PW"></action>
            </intent-filter>
        </receiver>

        <!-- Catch install referrer so we can do post-install work. -->
        <receiver android:name="org.mozilla.gecko.distribution.ReferrerReceiver"
                  android:exported="true">
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>

        <activity android:name="org.mozilla.gecko.Restarter"
                  android:process="@ANDROID_PACKAGE_NAME@Restarter"
                  android:noHistory="true"
                  android:theme="@style/Gecko">
          <intent-filter>
            <action android:name="org.mozilla.gecko.restart"/>
            <action android:name="org.mozilla.gecko.restart_update"/>
          </intent-filter>
        </activity>

#include ../services/manifests/FxAccountAndroidManifest_activities.xml.in
#include ../services/manifests/HealthReportAndroidManifest_activities.xml.in
#include ../services/manifests/SyncAndroidManifest_activities.xml.in
#ifdef MOZ_ANDROID_SEARCH_ACTIVITY
#include ../search/manifests/SearchAndroidManifest_activities.xml.in
#endif

#if MOZ_CRASHREPORTER
  <activity android:name="org.mozilla.gecko.CrashReporter"
            android:process="@ANDROID_PACKAGE_NAME@.CrashReporter"
            android:label="@string/crash_reporter_title"
            android:icon="@drawable/crash_reporter"
            android:theme="@style/Gecko"
            android:exported="false"
            android:excludeFromRecents="true">
          <intent-filter>
            <action android:name="org.mozilla.gecko.reportCrash" />
          </intent-filter>
  </activity>
#endif

        <activity android:name="org.mozilla.gecko.preferences.GeckoPreferences"
                  android:theme="@style/Gecko.Preferences"
                  android:configChanges="orientation|screenSize|locale|layoutDirection"
                  android:excludeFromRecents="true"/>

        <provider android:name="org.mozilla.gecko.db.BrowserProvider"
                  android:authorities="@ANDROID_PACKAGE_NAME@.db.browser"
                  android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER">

            <path-permission android:pathPrefix="/search_suggest_query"
                             android:readPermission="android.permission.GLOBAL_SEARCH" />

        </provider>

#ifdef MOZ_ANDROID_SHARE_OVERLAY
        <!-- Share overlay activity

             Setting launchMode="singleTop" ensures onNewIntent is called when the Activity is
             reused. Ideally we create a new instance but Android L breaks this (bug 1137928). -->
        <activity android:name="org.mozilla.gecko.overlays.ui.ShareDialog"
                  android:label="@string/overlay_share_label"
                  android:theme="@style/ShareOverlayActivity"
                  android:configChanges="keyboard|keyboardHidden|mcc|mnc|locale|layoutDirection"
                  android:launchMode="singleTop"
                  android:windowSoftInputMode="stateAlwaysHidden|adjustResize">

            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
            </intent-filter>

        </activity>

        <!-- Service to handle requests from overlays. -->
        <service android:name="org.mozilla.gecko.overlays.service.OverlayActionService" />
#endif
        <!--
          Ensure that passwords provider runs in its own process. (Bug 718760.)
          Process name is per-application to avoid loading CPs from multiple
          Fennec versions into the same process. (Bug 749727.)
          Process name is a mangled version to avoid a Talos bug. (Bug 750548.)
          -->
        <provider android:name="org.mozilla.gecko.db.PasswordsProvider"
                  android:label="@string/sync_configure_engines_title_passwords"
                  android:authorities="@ANDROID_PACKAGE_NAME@.db.passwords"
                  android:permission="@ANDROID_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER"
                  android:process="@MANGLED_ANDROID_PACKAGE_NAME@.PasswordsProvider"/>

        <provider android:name="org.mozilla.gecko.db.FormHistoryProvider"
                  android:label="@string/sync_configure_engines_title_history"
                  android:authorities="@ANDROID_PACKAGE_NAME@.db.formhistory"
                  android:permission="@ANDROID_PACKAGE_NAME@.permissions.FORMHISTORY_PROVIDER"
                  android:protectionLevel="signature"/>

        <provider android:name="org.mozilla.gecko.GeckoProfilesProvider"
                  android:authorities="@ANDROID_PACKAGE_NAME@.profiles"/>

        <provider android:name="org.mozilla.gecko.db.TabsProvider"
                  android:label="@string/sync_configure_engines_title_tabs"
                  android:authorities="@ANDROID_PACKAGE_NAME@.db.tabs"
                  android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>

        <provider android:name="org.mozilla.gecko.db.HomeProvider"
                  android:authorities="@ANDROID_PACKAGE_NAME@.db.home"
                  android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>

        <provider android:name="org.mozilla.gecko.db.ReadingListProvider"
                  android:authorities="@ANDROID_PACKAGE_NAME@.db.readinglist"
                  android:exported="false"
                  android:label="@string/reading_list_title"
                  android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>

        <provider android:name="org.mozilla.gecko.db.SearchHistoryProvider"
                  android:authorities="@ANDROID_PACKAGE_NAME@.db.searchhistory"
                  android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>

        <service
            android:exported="false"
            android:name="org.mozilla.gecko.updater.UpdateService"
            android:process="@MANGLED_ANDROID_PACKAGE_NAME@.UpdateService">
        </service>

        <service
            android:exported="false"
            android:name="org.mozilla.gecko.NotificationService">
        </service>


#include ../services/manifests/FxAccountAndroidManifest_services.xml.in
#include ../services/manifests/HealthReportAndroidManifest_services.xml.in
#include ../services/manifests/SyncAndroidManifest_services.xml.in
#ifdef MOZ_ANDROID_SEARCH_ACTIVITY
#include ../search/manifests/SearchAndroidManifest_services.xml.in
#endif
#ifdef MOZ_ANDROID_MLS_STUMBLER
#include ../stumbler/manifests/StumblerManifest_services.xml.in
#endif

    </application>

    <permission android:name="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"
                android:protectionLevel="signature"/>

    <permission android:name="@ANDROID_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER"
                android:protectionLevel="signature"/>

    <permission android:name="@ANDROID_PACKAGE_NAME@.permissions.FORMHISTORY_PROVIDER"
                android:protectionLevel="signature"/>

</manifest>