1#filter substitution 2<?xml version="1.0" encoding="utf-8"?> 3<manifest xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 package="@ANDROID_PACKAGE_NAME@" 6 android:installLocation="internalOnly" 7 android:versionCode="@ANDROID_VERSION_CODE@" 8 android:versionName="@MOZ_APP_VERSION@" 9#ifdef MOZ_ANDROID_SHARED_ID 10 android:sharedUserId="@MOZ_ANDROID_SHARED_ID@" 11#endif 12 > 13 <uses-sdk android:minSdkVersion="@MOZ_ANDROID_MIN_SDK_VERSION@" 14#ifdef MOZ_ANDROID_MAX_SDK_VERSION 15 android:maxSdkVersion="@MOZ_ANDROID_MAX_SDK_VERSION@" 16#endif 17 android:targetSdkVersion="@ANDROID_TARGET_SDK@"/> 18 19 20<!-- 21 The separated permission file is for bouncer.apk. Since it's removed, 22 we can merge the permission declaration back. See Bug 1411809. 23 --> 24#include FennecManifest_permissions.xml.in 25 26 <application android:label="@string/moz_app_displayname" 27 android:icon="@drawable/icon" 28 android:logo="@drawable/logo" 29 android:name="@MOZ_ANDROID_APPLICATION_CLASS@" 30 android:hardwareAccelerated="true" 31 android:supportsRtl="true" 32 android:allowBackup="false" 33 > 34 35 <meta-data android:name="com.sec.android.support.multiwindow" android:value="true"/> 36 37 <meta-data android:name="android.max_aspect" android:value="2.1"/> 38 39#ifdef MOZ_NATIVE_DEVICES 40 <service android:name="org.mozilla.gecko.RemotePresentationService" android:exported="false"/> 41#endif 42 43 <!-- This activity handles all incoming Intents and dispatches them to other activities. --> 44 <activity android:name="org.mozilla.gecko.LauncherActivity" 45 android:theme="@android:style/Theme.Translucent.NoTitleBar" 46 android:relinquishTaskIdentity="true" 47 android:taskAffinity="" 48 android:exported="true" 49 android:excludeFromRecents="true" /> 50 51 <!-- Fennec is shipped as the Android package named 52 org.mozilla.{fennec,firefox,firefox_beta}. The internal Java 53 package hierarchy inside the Android package used to have an 54 org.mozilla.{fennec,firefox,firefox_beta} subtree *and* an 55 org.mozilla.gecko subtree; it now only has org.mozilla.gecko. --> 56 <activity android:name="@MOZ_ANDROID_BROWSER_INTENT_CLASS@" 57 android:label="@string/moz_app_displayname" 58 android:taskAffinity="@ANDROID_PACKAGE_NAME@.BROWSER" 59 android:alwaysRetainTaskState="true" 60 android:configChanges="keyboard|keyboardHidden|mcc|mnc|orientation|screenSize|locale|layoutDirection|smallestScreenSize|screenLayout" 61 android:windowSoftInputMode="stateUnspecified|adjustResize" 62 android:launchMode="singleTask" 63 android:exported="true" 64 android:theme="@style/Gecko.App" /> 65 66 <!-- Bug 1256615 / Bug 1268455: We published an .App alias and we need to maintain it 67 forever. If we don't, home screen shortcuts will disappear because the intent 68 filter details change. --> 69 <activity-alias android:name=".App" 70 android:label="@MOZ_APP_DISPLAYNAME@" 71 android:targetActivity="org.mozilla.gecko.LauncherActivity"> 72 73 <!-- android:priority ranges between -1000 and 1000. We never want 74 another activity to usurp the MAIN action, so we ratchet our 75 priority up. --> 76 <intent-filter android:priority="999"> 77 <action android:name="android.intent.action.MAIN" /> 78 <category android:name="android.intent.category.LAUNCHER" /> 79 <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER"/> 80 <category android:name="android.intent.category.APP_BROWSER" /> 81 <category android:name="android.intent.category.DEFAULT" /> 82 </intent-filter> 83 84 <intent-filter> 85 <action android:name="android.intent.action.VIEW" /> 86 <category android:name="android.intent.category.DEFAULT" /> 87 <category android:name="android.intent.category.BROWSABLE" /> 88 <data android:scheme="http" /> 89 <data android:scheme="https" /> 90 <data android:scheme="about" /> 91 <data android:scheme="javascript" /> 92 <data android:scheme="firefox" /> 93 </intent-filter> 94 <intent-filter> 95 <action android:name="android.intent.action.VIEW" /> 96 <category android:name="android.intent.category.BROWSABLE" /> 97 <category android:name="android.intent.category.DEFAULT" /> 98 <data android:scheme="file" /> 99 <data android:scheme="http" /> 100 <data android:scheme="https" /> 101 <data android:mimeType="text/html"/> 102 <data android:mimeType="text/plain"/> 103 <data android:mimeType="application/xhtml+xml"/> 104 <data android:mimeType="image/svg+xml"/> 105 </intent-filter> 106 107 <meta-data android:name="com.sec.minimode.icon.portrait.normal" 108 android:resource="@drawable/icon"/> 109 110 <meta-data android:name="com.sec.minimode.icon.landscape.normal" 111 android:resource="@drawable/icon" /> 112 113 <intent-filter> 114 <action android:name="org.mozilla.gecko.ACTION_ALERT_CALLBACK" /> 115 </intent-filter> 116 117 <intent-filter> 118 <action android:name="org.mozilla.gecko.GUEST_SESSION_INPROGRESS" /> 119 <category android:name="android.intent.category.DEFAULT" /> 120 </intent-filter> 121 122 <intent-filter> 123 <action android:name="org.mozilla.gecko.UPDATE"/> 124 <category android:name="android.intent.category.DEFAULT" /> 125 </intent-filter> 126 127 <intent-filter tools:ignore="AppLinkUrlError"> 128 <action android:name="android.intent.action.WEB_SEARCH" /> 129 <category android:name="android.intent.category.DEFAULT" /> 130 <category android:name="android.intent.category.BROWSABLE" /> 131 <data android:scheme="" /> 132 <data android:scheme="http" /> 133 <data android:scheme="https" /> 134 </intent-filter> 135 136 <intent-filter> 137 <action android:name="android.intent.action.ASSIST"/> 138 <category android:name="android.intent.category.DEFAULT"/> 139 </intent-filter> 140 141 <!-- Pre Lollipop devices display a generic search icon, if none is 142 provided here. To use this we need to set the resource to 0. 143 For Lollipop and later the search launcher icon ist used. 144 To retrieve the resource value the Bundle.getInt() method is 145 used, so we use integer resources instead of drawables, because 146 setting a drawable referenced to 0 results in errors when used 147 as a real drawable resource somewhere else. --> 148 <meta-data 149 android:name="com.android.systemui.action_assist_icon" 150 android:resource="@integer/assist_launch_icon_res"/> 151 152 <!-- For XPI installs from websites and the download manager. --> 153 <intent-filter tools:ignore="AppLinkUrlError"> 154 <action android:name="android.intent.action.VIEW" /> 155 <category android:name="android.intent.category.DEFAULT" /> 156 <data android:scheme="file" /> 157 <data android:scheme="http" /> 158 <data android:scheme="https" /> 159 <data android:mimeType="application/x-xpinstall" /> 160 </intent-filter> 161 162 <!-- For XPI installs from file: URLs. --> 163 <intent-filter tools:ignore="AppLinkUrlError"> 164 <action android:name="android.intent.action.VIEW" /> 165 <category android:name="android.intent.category.DEFAULT" /> 166 <data android:host="" /> 167 <data android:scheme="file" /> 168 <data android:pathPattern=".*\\.xpi" /> 169 </intent-filter> 170 171#ifdef MOZ_ANDROID_BEAM 172 <intent-filter> 173 <action android:name="android.nfc.action.NDEF_DISCOVERED"/> 174 <category android:name="android.intent.category.DEFAULT" /> 175 <data android:scheme="http" /> 176 <data android:scheme="https" /> 177 </intent-filter> 178#endif 179 180 <!-- For debugging --> 181 <intent-filter> 182 <action android:name="org.mozilla.gecko.DEBUG" /> 183 <category android:name="android.intent.category.DEFAULT" /> 184 </intent-filter> 185 </activity-alias> 186 187 <service android:name="org.mozilla.gecko.GeckoService" /> 188 189 <activity android:name="org.mozilla.gecko.trackingprotection.TrackingProtectionPrompt" 190 android:launchMode="singleTop" 191 android:theme="@style/OverlayActivity" /> 192 193 <activity android:name="org.mozilla.gecko.promotion.SimpleHelperUI" 194 android:launchMode="singleTop" 195 android:theme="@style/OverlayActivity" /> 196 197 <activity android:name="org.mozilla.gecko.promotion.HomeScreenPrompt" 198 android:launchMode="singleTop" 199 android:theme="@style/OverlayActivity" /> 200 201 <!-- The main reason for the Tab Queue build flag is to not mess with the VIEW intent filter 202 before the rest of the plumbing is in place --> 203 204 <service android:name="org.mozilla.gecko.tabqueue.TabQueueService" /> 205 206 <activity android:name="org.mozilla.gecko.tabqueue.TabQueuePrompt" 207 android:launchMode="singleTop" 208 android:theme="@style/OverlayActivity" /> 209 210 <receiver android:name="org.mozilla.gecko.restrictions.RestrictionProvider"> 211 <intent-filter> 212 <action android:name="android.intent.action.GET_RESTRICTION_ENTRIES" /> 213 </intent-filter> 214 </receiver> 215 216 <!-- Masquerade as the Resolver so that we can be opened from the Marketplace. --> 217 <activity-alias 218 android:name="com.android.internal.app.ResolverActivity" 219 android:targetActivity="@MOZ_ANDROID_BROWSER_INTENT_CLASS@" 220 android:exported="true" /> 221 222 <receiver android:name="org.mozilla.gecko.GeckoUpdateReceiver"> 223 <intent-filter> 224 <action android:name="@ANDROID_PACKAGE_NAME@.CHECK_UPDATE_RESULT" /> 225 </intent-filter> 226 </receiver> 227 228 <receiver android:name="org.mozilla.gecko.GeckoMessageReceiver" 229 android:exported="false"> 230 </receiver> 231 232 <!-- Catch install referrer so we can do post-install work. --> 233 <receiver android:name="org.mozilla.gecko.distribution.ReferrerReceiver" 234 android:exported="true"> 235 <intent-filter> 236 <action android:name="com.android.vending.INSTALL_REFERRER" /> 237 </intent-filter> 238 </receiver> 239 240 <service android:name="org.mozilla.gecko.Restarter" 241 android:exported="false" 242 android:process="@MANGLED_ANDROID_PACKAGE_NAME@.Restarter"> 243 </service> 244 245 <service android:name="org.mozilla.gecko.media.MediaControlService" 246 android:exported="false" 247 android:stopWithTask="true"> 248 </service> 249 250 <receiver 251 android:name="org.mozilla.gecko.notifications.WhatsNewReceiver" 252 android:exported="false"> 253 <intent-filter> 254 <action android:name="android.intent.action.PACKAGE_REPLACED" /> 255 <data android:scheme="package" android:path="org.mozilla.gecko" /> 256 </intent-filter> 257 </receiver> 258 259 <receiver 260 android:name="org.mozilla.gecko.notifications.NotificationReceiver" 261 android:exported="false"> 262 <!-- Notification API V2 --> 263 <intent-filter> 264 <action android:name="@ANDROID_PACKAGE_NAME@.helperBroadcastAction" /> 265 <action android:name="@ANDROID_PACKAGE_NAME@.NOTIFICATION_CLICK" /> 266 <action android:name="@ANDROID_PACKAGE_NAME@.NOTIFICATION_CLOSE" /> 267 <data android:scheme="moz-notification" /> 268 <category android:name="android.intent.category.DEFAULT" /> 269 </intent-filter> 270 </receiver> 271 272#include ../services/manifests/FxAccountAndroidManifest_activities.xml.in 273 274#ifdef MOZ_CRASHREPORTER 275 <activity android:name="org.mozilla.gecko.CrashReporter" 276 android:process="@ANDROID_PACKAGE_NAME@.CrashReporter" 277 android:label="@string/crash_reporter_title" 278 android:icon="@drawable/crash_reporter" 279 android:theme="@style/Gecko" 280 android:exported="false" 281 android:excludeFromRecents="true"> 282 <intent-filter> 283 <action android:name="org.mozilla.gecko.reportCrash" /> 284 </intent-filter> 285 </activity> 286#endif 287 288 <activity android:name="org.mozilla.gecko.preferences.GeckoPreferences" 289 android:theme="@style/Gecko.Preferences" 290 android:configChanges="orientation|screenSize|locale|layoutDirection" 291 android:excludeFromRecents="true"/> 292 293 <provider android:name="org.mozilla.gecko.db.BrowserProvider" 294 android:authorities="@ANDROID_PACKAGE_NAME@.db.browser" 295 android:exported="false"/> 296 297 <provider android:name="org.mozilla.gecko.distribution.PartnerBookmarksProviderProxy" 298 android:authorities="@ANDROID_PACKAGE_NAME@.partnerbookmarks" 299 android:exported="false"/> 300 301 <!-- Share overlay activity 302 303 Setting launchMode="singleTop" ensures onNewIntent is called when the Activity is 304 reused. Ideally we create a new instance but Android L breaks this (bug 1137928). --> 305 <activity android:name="org.mozilla.gecko.overlays.ui.ShareDialog" 306 android:label="@string/overlay_share_label" 307 android:theme="@style/OverlayActivity" 308 android:configChanges="keyboard|keyboardHidden|mcc|mnc|locale|layoutDirection" 309 android:launchMode="singleTop" 310 android:windowSoftInputMode="stateAlwaysHidden|adjustResize"> 311 312 <intent-filter> 313 <action android:name="android.intent.action.SEND" /> 314 <category android:name="android.intent.category.DEFAULT" /> 315 <data android:mimeType="text/plain" /> 316 </intent-filter> 317 318 </activity> 319 320 <activity android:name="org.mozilla.gecko.customtabs.CustomTabsActivity" 321 android:configChanges="keyboard|keyboardHidden|mcc|mnc|orientation|screenSize|locale|layoutDirection|smallestScreenSize|screenLayout" 322 android:windowSoftInputMode="stateUnspecified|adjustResize" 323 android:theme="@style/GeckoCustomTabs" /> 324 325 <activity android:name="org.mozilla.gecko.webapps.WebAppActivity" 326 android:theme="@style/Theme.AppCompat.NoActionBar" /> 327 328 <!-- Declare a predefined number of WebApp<num> activities. These are 329 used so that each web app can launch in its own activity. --> 330#define FRAGMENT WebAppManifestFragment.xml.frag.in 331#include WebAppFragmentRepeater.inc 332 333 334 <!-- Service to handle requests from overlays. --> 335 <service android:name="org.mozilla.gecko.overlays.service.OverlayActionService" /> 336 337 <!-- 338 Ensure that passwords provider runs in its own process. (Bug 718760.) 339 Process name is per-application to avoid loading CPs from multiple 340 Fennec versions into the same process. (Bug 749727.) 341 Process name is a mangled version to avoid a Talos bug. (Bug 750548.) 342 --> 343 <provider android:name="org.mozilla.gecko.db.PasswordsProvider" 344 android:label="@string/sync_configure_engines_title_passwords" 345 android:authorities="@ANDROID_PACKAGE_NAME@.db.passwords" 346 android:exported="false" 347 android:process="@MANGLED_ANDROID_PACKAGE_NAME@.PasswordsProvider"/> 348 349 <provider android:name="org.mozilla.gecko.db.LoginsProvider" 350 android:label="@string/sync_configure_engines_title_passwords" 351 android:authorities="@ANDROID_PACKAGE_NAME@.db.logins" 352 android:exported="false"/> 353 354 <provider android:name="org.mozilla.gecko.db.FormHistoryProvider" 355 android:label="@string/sync_configure_engines_title_history" 356 android:authorities="@ANDROID_PACKAGE_NAME@.db.formhistory" 357 android:exported="false"/> 358 359 <provider android:name="org.mozilla.gecko.GeckoProfilesProvider" 360 android:authorities="@ANDROID_PACKAGE_NAME@.profiles" 361 android:exported="false"/> 362 363 <provider android:name="org.mozilla.gecko.db.TabsProvider" 364 android:label="@string/sync_configure_engines_title_tabs" 365 android:authorities="@ANDROID_PACKAGE_NAME@.db.tabs" 366 android:exported="false"/> 367 368 <provider android:name="org.mozilla.gecko.db.HomeProvider" 369 android:authorities="@ANDROID_PACKAGE_NAME@.db.home" 370 android:exported="false"/> 371 372 <provider android:name="org.mozilla.gecko.db.SearchHistoryProvider" 373 android:authorities="@ANDROID_PACKAGE_NAME@.db.searchhistory" 374 android:exported="false"/> 375 376 <service 377 android:exported="false" 378 android:name="org.mozilla.gecko.updater.UpdateService" 379 android:process="@MANGLED_ANDROID_PACKAGE_NAME@.UpdateService"> 380 </service> 381 382 <service 383 android:exported="false" 384 android:name="org.mozilla.gecko.notifications.NotificationService"> 385 </service> 386 387 <service 388 android:exported="false" 389 android:name="org.mozilla.gecko.dlc.DownloadContentService"> 390 </service> 391 392 <!-- DON'T EXPORT THIS, please! An attacker could delete arbitrary files. --> 393 <service 394 android:exported="false" 395 android:name="org.mozilla.gecko.cleanup.FileCleanupService"> 396 </service> 397 398 <receiver 399 android:name="org.mozilla.gecko.PackageReplacedReceiver" 400 android:exported="false"> 401 <intent-filter> 402 <action android:name="android.intent.action.MY_PACKAGE_REPLACED"></action> 403 </intent-filter> 404 </receiver> 405 406 <service 407 android:name="org.mozilla.gecko.telemetry.TelemetryUploadService" 408 android:exported="false"/> 409 410 <service 411 android:name="org.mozilla.gecko.customtabs.GeckoCustomTabsService" 412 android:exported="true"> 413 <intent-filter> 414 <action android:name="android.support.customtabs.action.CustomTabsService" /> 415 </intent-filter> 416 </service> 417 418#include ../services/manifests/FxAccountAndroidManifest_services.xml.in 419 420 <service 421 android:name="org.mozilla.gecko.tabqueue.TabReceivedService" 422 android:exported="false" /> 423 424 425#ifdef MOZ_ANDROID_MLS_STUMBLER 426#include ../stumbler/manifests/StumblerManifest_services.xml.in 427#endif 428 429#ifdef MOZ_ANDROID_GCM 430#include GcmAndroidManifest_services.xml.in 431#endif 432 433 <service 434 android:name="org.mozilla.gecko.media.MediaManager" 435 android:enabled="true" 436 android:exported="false" 437 android:process=":media" 438 android:isolatedProcess="false"> 439 </service> 440 441 <!-- New child services must also be added to the GeckoView AndroidManifest.xml --> 442 <service 443 android:name="org.mozilla.gecko.process.GeckoServiceChildProcess$geckomediaplugin" 444 android:enabled="true" 445 android:exported="false" 446 android:process=":geckomediaplugin" 447 android:isolatedProcess="false"> 448 </service> 449 450 <service 451 android:name="org.mozilla.gecko.process.GeckoServiceChildProcess$tab" 452 android:enabled="true" 453 android:exported="false" 454 android:process=":tab" 455 android:isolatedProcess="false"> 456 </service> 457 458 <service 459 android:name="org.mozilla.gecko.gfx.SurfaceAllocatorService" 460 android:enabled="true" 461 android:exported="false" 462 android:isolatedProcess="false"> 463 </service> 464 465#ifdef MOZ_ANDROID_MMA 466#include MmaAndroidManifest_services.xml.in 467#endif 468 469#ifdef MOZ_ANDROID_GOOGLE_PLAY_SERVICES 470 <!-- This resources comes from Google Play Services. Required for casting support. --> 471 <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 472#endif 473 474 </application> 475</manifest> 476