mobile/android/base/AndroidManifest.xml.in
author Michael Comella <michael.l.comella@gmail.com>
Tue, 31 Mar 2015 14:21:53 -0700
changeset 258253 b28b502e4aca
parent 257974 87465191828f
permissions -rw-r--r--
Bug 1132751 - Add android:logo to fennec application. r=liuche, a=sledru On Android v21, this logo is a padded version of android:icon which, to my knowledge, is only used by the ActionBar, which we only make visible in GeckoPreferences. On < 21, this icon is used via resource alias.

#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_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>

            <!-- 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>

            <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>

        <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>