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