1<?xml version="1.0" encoding="utf-8"?>
2<manifest
3  package="host.exp.exponent"
4  xmlns:android="http://schemas.android.com/apk/res/android"
5  xmlns:tools="http://schemas.android.com/tools">
6
7  <permission
8    android:name="host.exp.exponent.permission.C2D_MESSAGE"
9    android:protectionLevel="signature"/>
10
11  <!-- These are required permissions to make the app run -->
12  <uses-permission android:name="host.exp.exponent.permission.C2D_MESSAGE" />
13  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
14  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
15  <uses-permission android:name="android.permission.INTERNET" />
16  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
17  <uses-permission android:name="android.permission.WAKE_LOCK" />
18
19  <!-- ADD PERMISSIONS HERE -->
20  <!-- BEGIN OPTIONAL PERMISSIONS -->
21  <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
22  <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
23  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
24  <uses-permission android:name="android.permission.USE_FINGERPRINT" />
25  <uses-permission android:name="android.permission.VIBRATE" />
26  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
27  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
28
29  <!-- These require runtime permissions on M -->
30  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
31  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
32  <uses-permission android:name="android.permission.CAMERA" />
33  <uses-permission android:name="android.permission.READ_CONTACTS" />
34  <uses-permission android:name="android.permission.READ_CALENDAR" />
35  <uses-permission android:name="android.permission.WRITE_CALENDAR" />
36  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
37  <uses-permission android:name="android.permission.RECORD_AUDIO" />
38  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
39  <uses-permission android:name="android.permission.WRITE_SETTINGS" />
40  <!-- END OPTIONAL PERMISSIONS -->
41
42  <!-- ADD TEST PERMISSIONS HERE -->
43
44  <uses-feature android:glEsVersion="0x00020000" android:required="false" />
45  <uses-feature android:name="android.software.leanback" android:required="false" />
46  <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
47
48  <application
49    android:name=".MainApplication"
50    android:allowBackup="true"
51    android:icon="@mipmap/ic_launcher"
52    android:label="${appLabel}"
53    android:largeHeap="true"
54    android:requestLegacyExternalStorage="true"
55    android:usesCleartextTraffic="true">
56
57    <activity
58      android:name=".LauncherActivity"
59      android:exported="true"
60      android:launchMode="singleTask"
61      android:theme="@android:style/Theme.Translucent.NoTitleBar">
62      <!-- START LAUNCHER INTENT FILTERS -->
63      <intent-filter>
64        <data android:scheme="exp"/>
65        <data android:scheme="exps"/>
66
67        <action android:name="android.intent.action.VIEW"/>
68
69        <category android:name="android.intent.category.DEFAULT"/>
70        <category android:name="android.intent.category.BROWSABLE"/>
71      </intent-filter>
72
73      <intent-filter android:autoVerify="true">
74        <data
75          android:host="expo.io"
76          android:path="/expo-go"
77          android:scheme="https"/>
78        <data
79          android:host="expo.io"
80          android:path="/expo-go"
81          android:scheme="http"/>
82
83        <data
84          android:host="expo.dev"
85          android:path="/expo-go"
86          android:scheme="https"/>
87        <data
88          android:host="expo.dev"
89          android:path="/expo-go"
90          android:scheme="http"/>
91
92        <action android:name="android.intent.action.VIEW"/>
93
94        <category android:name="android.intent.category.DEFAULT"/>
95        <category android:name="android.intent.category.BROWSABLE"/>
96      </intent-filter>
97
98      <!-- This has to be separate from the exp[s]:// scheme filter. No idea why -->
99      <intent-filter>
100        <data
101          android:host="exp.host"
102          android:pathPrefix="/@"
103          android:scheme="http"/>
104        <data
105          android:host="exp.host"
106          android:pathPrefix="/@"
107          android:scheme="https"/>
108        <data
109          android:host="*.exp.direct"
110          android:pathPattern=".*"
111          android:scheme="http"/>
112        <data
113          android:host="*.exp.direct"
114          android:pathPattern=".*"
115          android:scheme="https"/>
116
117        <action android:name="android.intent.action.VIEW"/>
118
119        <category android:name="android.intent.category.DEFAULT"/>
120        <category android:name="android.intent.category.BROWSABLE"/>
121      </intent-filter>
122
123      <intent-filter>
124          <category android:name="android.intent.category.DEFAULT" />
125          <category android:name="android.intent.category.BROWSABLE" />
126          <action android:name="expo.modules.notifications.OPEN_APP_ACTION"/>
127      </intent-filter>
128      <!-- END LAUNCHER INTENT FILTERS -->
129    </activity>
130
131    <activity
132      android:name=".experience.ExperienceActivity"
133      android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
134      android:theme="@style/Theme.Exponent.Light"
135      android:windowSoftInputMode="adjustResize">
136    </activity>
137
138    <activity
139      android:name=".MainActivity"
140      android:launchMode="singleTask"
141      android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
142      android:theme="@style/Theme.Exponent.Splash"
143      android:windowSoftInputMode="adjustResize">
144      <!-- ADD DETACH SCHEME HERE -->
145      <!-- ADD DETACH INTENT FILTERS HERE -->
146      <!-- ADD DETACH APP SPECIFIC INTENT FILTERS -->
147    </activity>
148
149    <activity
150      android:name=".experience.HomeActivity"
151      android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
152      android:label="${appLabel}"
153      android:launchMode="singleTask"
154      android:screenOrientation="portrait"
155      android:theme="@style/Theme.Exponent.HomeActivity">
156      <!-- START HOME INTENT FILTERS -->
157      <intent-filter>
158        <action android:name="android.intent.action.MAIN"/>
159
160        <category android:name="android.intent.category.DEFAULT"/>
161        <category android:name="android.intent.category.LAUNCHER"/>
162      </intent-filter>
163      <intent-filter>
164        <data android:scheme="expauth"/>
165
166        <action android:name="android.intent.action.VIEW"/>
167
168        <category android:name="android.intent.category.DEFAULT"/>
169        <category android:name="android.intent.category.BROWSABLE"/>
170      </intent-filter>
171      <intent-filter>
172        <data android:scheme="expo-home"/>
173
174        <action android:name="android.intent.action.VIEW"/>
175
176        <category android:name="android.intent.category.DEFAULT"/>
177        <category android:name="android.intent.category.BROWSABLE"/>
178      </intent-filter>
179      <!-- END HOME INTENT FILTERS -->
180    </activity>
181
182    <activity
183      android:name=".experience.TvActivity"
184      android:label="${appLabel}"
185      android:theme="@style/Theme.Exponent.Light"
186      android:screenOrientation="landscape">
187     <intent-filter>
188       <action android:name="android.intent.action.MAIN" />
189       <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
190     </intent-filter>
191   </activity>
192
193
194
195    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
196    <!-- WHEN_PREPARING_SHELL_REMOVE_FROM_HERE -->
197    <!-- ADD DEV SETTINGS HERE -->
198    <!-- BEGIN_SDK_42 -->
199    <activity android:name="abi42_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
200    <!-- END_SDK_42 -->
201    <!-- BEGIN_SDK_41 -->
202    <activity android:name="abi41_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
203    <!-- END_SDK_41 -->
204    <!-- BEGIN_SDK_40 -->
205    <activity android:name="abi40_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
206    <!-- END_SDK_40 -->
207    <!-- BEGIN_SDK_39 -->
208    <activity android:name="abi39_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
209    <!-- END_SDK_39 -->
210    <!-- WHEN_PREPARING_SHELL_REMOVE_TO_HERE -->
211
212    <activity
213        android:name="net.openid.appauth.RedirectUriReceiverActivity"
214        tools:node="replace">
215      <intent-filter>
216        <action android:name="android.intent.action.VIEW"/>
217        <category android:name="android.intent.category.DEFAULT"/>
218        <category android:name="android.intent.category.BROWSABLE"/>
219        <data android:scheme="host.exp.exponent" android:path="oauthredirect"/>
220      </intent-filter>
221    </activity>
222
223    <!-- START OF STRIPE SCHEMES -->
224    <activity
225        android:exported="true"
226        android:launchMode="singleTask"
227        android:name="expo.modules.payments.stripe.RedirectUriReceiver"
228        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
229        <intent-filter>
230            <action android:name="android.intent.action.VIEW" />
231            <category android:name="android.intent.category.DEFAULT" />
232            <category android:name="android.intent.category.BROWSABLE" />
233            <data android:scheme="expo.modules.payments.stripe" />
234        </intent-filter>
235    </activity>
236    <!-- Versioned Activity for Stripe -->
237    <!-- BEGIN_SDK_42 -->
238    <activity
239      android:exported="true"
240      android:launchMode="singleTask"
241      android:name="abi42_0_0.expo.modules.payments.stripe.RedirectUriReceiver"
242      android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
243      <intent-filter>
244        <action android:name="android.intent.action.VIEW" />
245        <category android:name="android.intent.category.DEFAULT" />
246        <category android:name="android.intent.category.BROWSABLE" />
247        <data android:scheme="abi42_0_0.expo.modules.payments.stripe" />
248      </intent-filter>
249    </activity>
250    <!-- END_SDK_42 -->
251    <!-- BEGIN_SDK_41 -->
252    <activity
253      android:exported="true"
254      android:launchMode="singleTask"
255      android:name="abi41_0_0.expo.modules.payments.stripe.RedirectUriReceiver"
256      android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
257      <intent-filter>
258        <action android:name="android.intent.action.VIEW" />
259        <category android:name="android.intent.category.DEFAULT" />
260        <category android:name="android.intent.category.BROWSABLE" />
261        <data android:scheme="abi41_0_0.expo.modules.payments.stripe" />
262      </intent-filter>
263    </activity>
264    <!-- END_SDK_41 -->
265    <!-- BEGIN_SDK_40 -->
266    <activity
267      android:exported="true"
268      android:launchMode="singleTask"
269      android:name="abi40_0_0.expo.modules.payments.stripe.RedirectUriReceiver"
270      android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
271      <intent-filter>
272        <action android:name="android.intent.action.VIEW" />
273        <category android:name="android.intent.category.DEFAULT" />
274        <category android:name="android.intent.category.BROWSABLE" />
275        <data android:scheme="abi40_0_0.expo.modules.payments.stripe" />
276      </intent-filter>
277    </activity>
278    <!-- END_SDK_40 -->
279    <!-- BEGIN_SDK_39 -->
280    <activity
281      android:exported="true"
282      android:launchMode="singleTask"
283      android:name="abi39_0_0.expo.modules.payments.stripe.RedirectUriReceiver"
284      android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
285      <intent-filter>
286        <action android:name="android.intent.action.VIEW" />
287        <category android:name="android.intent.category.DEFAULT" />
288        <category android:name="android.intent.category.BROWSABLE" />
289        <data android:scheme="abi39_0_0.expo.modules.payments.stripe" />
290      </intent-filter>
291    </activity>
292    <!-- END_SDK_39 -->
293    <!-- END OF STRIPE SCHEMES -->
294
295    <activity
296      android:name=".experience.ErrorActivity"
297      android:theme="@style/Theme.Exponent.Dark"
298      android:screenOrientation="portrait">
299    </activity>
300
301    <activity
302      android:name="com.facebook.FacebookActivity"
303      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
304      android:label="${appLabel}"
305      android:theme="@android:style/Theme.Translucent.NoTitleBar"
306      tools:replace="android:theme" />
307
308    <activity
309      android:name="com.facebook.CustomTabActivity"
310      android:exported="true">
311      <intent-filter>
312        <action android:name="android.intent.action.VIEW" />
313        <category android:name="android.intent.category.DEFAULT" />
314        <category android:name="android.intent.category.BROWSABLE" />
315        <!-- REPLACE WITH FACEBOOK SCHEME -->
316      </intent-filter>
317    </activity>
318
319    <activity
320      android:name="com.facebook.ads.InterstitialAdActivity"
321      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
322      android:label="${appLabel}"
323      android:theme="@android:style/Theme.Translucent.NoTitleBar" />
324
325    <service
326      android:name=".ExponentIntentService"
327      android:exported="false" />
328
329    <!-- Analytics -->
330    <receiver
331      android:name="host.exp.exponent.referrer.InstallReferrerReceiver"
332      android:exported="true">
333      <intent-filter>
334        <action android:name="com.android.vending.INSTALL_REFERRER" />
335      </intent-filter>
336    </receiver>
337
338    <!--
339    This crashes: https://code.google.com/p/analytics-issues/issues/detail?id=667
340    TODO: turn it back on when it's fixed
341    <service
342      android:name="com.google.android.gms.analytics.CampaignTrackingService"
343      android:enabled="true"
344      android:exported="false" />-->
345
346    <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver"
347              android:enabled="true">
348      <intent-filter>
349        <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
350      </intent-filter>
351    </receiver>
352
353    <service android:name="com.google.android.gms.analytics.AnalyticsService"
354             android:enabled="true"
355             android:exported="false"/>
356
357    <!-- FCM -->
358    <service
359      android:name=".fcm.ExpoFcmMessagingService">
360      <intent-filter>
361        <action android:name="com.google.firebase.MESSAGING_EVENT" />
362      </intent-filter>
363    </service>
364    <service
365      android:name=".fcm.FcmRegistrationIntentService"
366      android:exported="false">
367    </service>
368    <!-- Applied to Firebase data messages -->
369    <meta-data
370      android:name="expo.modules.notifications.default_notification_icon"
371      android:resource="@drawable/shell_notification_icon" />
372    <meta-data
373      android:name="expo.modules.notifications.default_notification_color"
374      android:resource="@color/notification_icon_color" />
375
376    <!-- Applied to Firebase notification messages -->
377    <meta-data
378      android:name="com.google.firebase.messaging.default_notification_icon"
379      android:resource="@drawable/shell_notification_icon" />
380    <meta-data
381      android:name="com.google.firebase.messaging.default_notification_color"
382      android:resource="@color/notification_icon_color" />
383
384
385    <!-- ImagePicker native module -->
386    <activity
387      android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
388      android:theme="@style/Base.Theme.AppCompat">
389    </activity>
390
391    <!-- ADD GOOGLE MAPS CONFIG HERE -->
392    <!-- BEGIN GOOGLE MAPS CONFIG -->
393    <meta-data
394      android:name="com.google.android.geo.API_KEY"
395      android:value="${GOOGLE_MAPS_API_KEY}"/>
396    <!-- END GOOGLE MAPS CONFIG -->
397
398    <!-- ADD GOOGLE MOBILE ADS CONFIG HERE -->
399    <!-- BEGIN GOOGLE MOBILE ADS CONFIG -->
400    <meta-data
401      android:name="com.google.android.gms.ads.APPLICATION_ID"
402      android:value="ca-app-pub-3940256099942544~3347511713"/>
403    <meta-data android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT" android:value="true"/>
404    <!-- END GOOGLE MOBILE ADS CONFIG -->
405
406    <!-- ADD BRANCH CONFIG HERE -->
407
408    <!-- ADD FACEBOOK APP ID CONFIG HERE -->
409    <!-- ADD FACEBOOK APP DISPLAY NAME CONFIG HERE -->
410    <!-- Tags below need to be in one line with no whitespace after android:value -->
411    <!-- in order for XDL to be able to replace values in them -->
412    <meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="false"/>
413    <meta-data android:name="com.facebook.sdk.AutoInitEnabled" android:value="false"/>
414    <meta-data android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled" android:value="false"/>
415
416    <!-- ADD HERE STRIPE SCHEME META DATA -->
417  </application>
418
419</manifest>
420