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="@string/app_name"
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        <action android:name="android.intent.action.VIEW"/>
84
85        <category android:name="android.intent.category.DEFAULT"/>
86        <category android:name="android.intent.category.BROWSABLE"/>
87      </intent-filter>
88
89      <!-- This has to be separate from the exp[s]:// scheme filter. No idea why -->
90      <intent-filter>
91        <data
92          android:host="exp.host"
93          android:pathPrefix="/@"
94          android:scheme="http"/>
95        <data
96          android:host="exp.host"
97          android:pathPrefix="/@"
98          android:scheme="https"/>
99        <data
100          android:host="*.exp.direct"
101          android:pathPattern=".*"
102          android:scheme="http"/>
103        <data
104          android:host="*.exp.direct"
105          android:pathPattern=".*"
106          android:scheme="https"/>
107
108        <action android:name="android.intent.action.VIEW"/>
109
110        <category android:name="android.intent.category.DEFAULT"/>
111        <category android:name="android.intent.category.BROWSABLE"/>
112      </intent-filter>
113
114      <intent-filter>
115          <category android:name="android.intent.category.DEFAULT" />
116          <category android:name="android.intent.category.BROWSABLE" />
117          <action android:name="expo.modules.notifications.OPEN_APP_ACTION"/>
118      </intent-filter>
119      <!-- END LAUNCHER INTENT FILTERS -->
120    </activity>
121
122    <activity
123      android:name=".experience.ExperienceActivity"
124      android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
125      android:theme="@style/Theme.Exponent.Light"
126      android:windowSoftInputMode="adjustResize">
127    </activity>
128
129    <activity
130      android:name=".MainActivity"
131      android:launchMode="singleTask"
132      android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
133      android:theme="@style/Theme.Exponent.Splash"
134      android:windowSoftInputMode="adjustResize">
135      <!-- ADD DETACH SCHEME HERE -->
136      <!-- ADD DETACH INTENT FILTERS HERE -->
137      <!-- ADD DETACH APP SPECIFIC INTENT FILTERS -->
138    </activity>
139
140    <activity
141      android:name=".experience.HomeActivity"
142      android:label="@string/app_name"
143      android:launchMode="singleTask"
144      android:screenOrientation="portrait"
145      android:theme="@style/Theme.Exponent.HomeActivity">
146      <!-- START HOME INTENT FILTERS -->
147      <intent-filter>
148        <action android:name="android.intent.action.MAIN"/>
149
150        <category android:name="android.intent.category.DEFAULT"/>
151        <category android:name="android.intent.category.LAUNCHER"/>
152      </intent-filter>
153      <intent-filter>
154        <data android:scheme="expauth"/>
155
156        <action android:name="android.intent.action.VIEW"/>
157
158        <category android:name="android.intent.category.DEFAULT"/>
159        <category android:name="android.intent.category.BROWSABLE"/>
160      </intent-filter>
161      <intent-filter>
162        <data android:scheme="expo-home"/>
163
164        <action android:name="android.intent.action.VIEW"/>
165
166        <category android:name="android.intent.category.DEFAULT"/>
167        <category android:name="android.intent.category.BROWSABLE"/>
168      </intent-filter>
169      <!-- END HOME INTENT FILTERS -->
170    </activity>
171
172    <activity
173      android:name=".experience.TvActivity"
174      android:label="@string/app_name"
175      android:theme="@style/Theme.Exponent.Light"
176      android:screenOrientation="landscape">
177     <intent-filter>
178       <action android:name="android.intent.action.MAIN" />
179       <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
180     </intent-filter>
181   </activity>
182
183
184
185    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
186    <!-- WHEN_PREPARING_SHELL_REMOVE_FROM_HERE -->
187    <!-- ADD DEV SETTINGS HERE -->
188    <!-- BEGIN_SDK_41 -->
189    <activity android:name="abi41_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
190    <!-- END_SDK_41 -->
191    <!-- BEGIN_SDK_40 -->
192    <activity android:name="abi40_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
193    <!-- END_SDK_40 -->
194    <!-- BEGIN_SDK_39 -->
195    <activity android:name="abi39_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
196    <!-- END_SDK_39 -->
197    <!-- WHEN_PREPARING_SHELL_REMOVE_TO_HERE -->
198
199    <activity
200        android:name="net.openid.appauth.RedirectUriReceiverActivity"
201        tools:node="replace">
202      <intent-filter>
203        <action android:name="android.intent.action.VIEW"/>
204        <category android:name="android.intent.category.DEFAULT"/>
205        <category android:name="android.intent.category.BROWSABLE"/>
206        <data android:scheme="host.exp.exponent" android:path="oauthredirect"/>
207      </intent-filter>
208    </activity>
209
210    <!-- START OF STRIPE SCHEMES -->
211    <activity
212        android:exported="true"
213        android:launchMode="singleTask"
214        android:name="expo.modules.payments.stripe.RedirectUriReceiver"
215        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
216        <intent-filter>
217            <action android:name="android.intent.action.VIEW" />
218            <category android:name="android.intent.category.DEFAULT" />
219            <category android:name="android.intent.category.BROWSABLE" />
220            <data android:scheme="expo.modules.payments.stripe" />
221        </intent-filter>
222    </activity>
223    <!-- Versioned Activity for Stripe -->
224    <!-- BEGIN_SDK_41 -->
225    <activity
226      android:exported="true"
227      android:launchMode="singleTask"
228      android:name="abi41_0_0.expo.modules.payments.stripe.RedirectUriReceiver"
229      android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
230      <intent-filter>
231        <action android:name="android.intent.action.VIEW" />
232        <category android:name="android.intent.category.DEFAULT" />
233        <category android:name="android.intent.category.BROWSABLE" />
234        <data android:scheme="abi41_0_0.expo.modules.payments.stripe" />
235      </intent-filter>
236    </activity>
237    <!-- END_SDK_41 -->
238    <!-- BEGIN_SDK_40 -->
239    <activity
240      android:exported="true"
241      android:launchMode="singleTask"
242      android:name="abi40_0_0.expo.modules.payments.stripe.RedirectUriReceiver"
243      android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
244      <intent-filter>
245        <action android:name="android.intent.action.VIEW" />
246        <category android:name="android.intent.category.DEFAULT" />
247        <category android:name="android.intent.category.BROWSABLE" />
248        <data android:scheme="abi40_0_0.expo.modules.payments.stripe" />
249      </intent-filter>
250    </activity>
251    <!-- END_SDK_40 -->
252    <!-- BEGIN_SDK_39 -->
253    <activity
254      android:exported="true"
255      android:launchMode="singleTask"
256      android:name="abi39_0_0.expo.modules.payments.stripe.RedirectUriReceiver"
257      android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
258      <intent-filter>
259        <action android:name="android.intent.action.VIEW" />
260        <category android:name="android.intent.category.DEFAULT" />
261        <category android:name="android.intent.category.BROWSABLE" />
262        <data android:scheme="abi39_0_0.expo.modules.payments.stripe" />
263      </intent-filter>
264    </activity>
265    <!-- END_SDK_39 -->
266    <!-- END OF STRIPE SCHEMES -->
267
268    <activity
269      android:name=".experience.ErrorActivity"
270      android:theme="@style/Theme.Exponent.Dark"
271      android:screenOrientation="portrait">
272    </activity>
273
274    <activity
275      android:name="com.facebook.FacebookActivity"
276      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
277      android:label="@string/app_name"
278      android:theme="@android:style/Theme.Translucent.NoTitleBar"
279      tools:replace="android:theme" />
280
281    <activity
282      android:name="com.facebook.CustomTabActivity"
283      android:exported="true">
284      <intent-filter>
285        <action android:name="android.intent.action.VIEW" />
286        <category android:name="android.intent.category.DEFAULT" />
287        <category android:name="android.intent.category.BROWSABLE" />
288        <!-- REPLACE WITH FACEBOOK SCHEME -->
289      </intent-filter>
290    </activity>
291
292    <activity
293      android:name="com.facebook.ads.InterstitialAdActivity"
294      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
295      android:label="@string/app_name"
296      android:theme="@android:style/Theme.Translucent.NoTitleBar" />
297
298    <service
299      android:name=".ExponentIntentService"
300      android:exported="false" />
301
302    <!-- Analytics -->
303    <receiver
304      android:name="host.exp.exponent.referrer.InstallReferrerReceiver"
305      android:exported="true">
306      <intent-filter>
307        <action android:name="com.android.vending.INSTALL_REFERRER" />
308      </intent-filter>
309    </receiver>
310
311    <!--
312    This crashes: https://code.google.com/p/analytics-issues/issues/detail?id=667
313    TODO: turn it back on when it's fixed
314    <service
315      android:name="com.google.android.gms.analytics.CampaignTrackingService"
316      android:enabled="true"
317      android:exported="false" />-->
318
319    <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver"
320              android:enabled="true">
321      <intent-filter>
322        <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
323      </intent-filter>
324    </receiver>
325
326    <service android:name="com.google.android.gms.analytics.AnalyticsService"
327             android:enabled="true"
328             android:exported="false"/>
329
330    <!-- FCM -->
331    <service
332      android:name=".fcm.ExpoFcmMessagingService">
333      <intent-filter>
334        <action android:name="com.google.firebase.MESSAGING_EVENT" />
335      </intent-filter>
336    </service>
337    <service
338      android:name=".fcm.FcmRegistrationIntentService"
339      android:exported="false">
340    </service>
341    <!-- Applied to Firebase data messages -->
342    <meta-data
343      android:name="expo.modules.notifications.default_notification_icon"
344      android:resource="@drawable/shell_notification_icon" />
345    <meta-data
346      android:name="expo.modules.notifications.default_notification_color"
347      android:resource="@color/notification_icon_color" />
348
349    <!-- Applied to Firebase notification messages -->
350    <meta-data
351      android:name="com.google.firebase.messaging.default_notification_icon"
352      android:resource="@drawable/shell_notification_icon" />
353    <meta-data
354      android:name="com.google.firebase.messaging.default_notification_color"
355      android:resource="@color/notification_icon_color" />
356
357
358    <!-- ImagePicker native module -->
359    <activity
360      android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
361      android:theme="@style/Base.Theme.AppCompat">
362    </activity>
363
364    <!-- ADD GOOGLE MAPS CONFIG HERE -->
365    <!-- BEGIN GOOGLE MAPS CONFIG -->
366    <meta-data
367      android:name="com.google.android.geo.API_KEY"
368      android:value="${GOOGLE_MAPS_API_KEY}"/>
369    <!-- END GOOGLE MAPS CONFIG -->
370
371    <!-- ADD GOOGLE MOBILE ADS CONFIG HERE -->
372    <!-- BEGIN GOOGLE MOBILE ADS CONFIG -->
373    <meta-data
374      android:name="com.google.android.gms.ads.APPLICATION_ID"
375      android:value="ca-app-pub-3940256099942544~3347511713"/>
376    <meta-data android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT" android:value="true"/>
377    <!-- END GOOGLE MOBILE ADS CONFIG -->
378
379    <!-- ADD BRANCH CONFIG HERE -->
380
381    <!-- ADD FACEBOOK APP ID CONFIG HERE -->
382    <!-- ADD FACEBOOK APP DISPLAY NAME CONFIG HERE -->
383    <!-- Tags below need to be in one line with no whitespace after android:value -->
384    <!-- in order for XDL to be able to replace values in them -->
385    <meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="false"/>
386    <meta-data android:name="com.facebook.sdk.AutoInitEnabled" android:value="false"/>
387    <meta-data android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled" android:value="false"/>
388
389    <!-- ADD HERE STRIPE SCHEME META DATA -->
390  </application>
391
392</manifest>
393