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:networkSecurityConfig="@xml/network_security_config">
55
56    <activity
57      android:name=".LauncherActivity"
58      android:exported="true"
59      android:launchMode="singleTask"
60      android:screenOrientation="portrait"
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      <!-- This has to be separate from the exp[s]:// scheme filter. No idea why -->
74      <intent-filter>
75        <data
76          android:host="exp.host"
77          android:pathPrefix="/@"
78          android:scheme="http"/>
79        <data
80          android:host="exp.host"
81          android:pathPrefix="/@"
82          android:scheme="https"/>
83        <data
84          android:host="*.exp.direct"
85          android:pathPattern=".*"
86          android:scheme="http"/>
87        <data
88          android:host="*.exp.direct"
89          android:pathPattern=".*"
90          android:scheme="https"/>
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      <!-- END LAUNCHER INTENT FILTERS -->
98    </activity>
99
100    <activity
101      android:name=".experience.ExperienceActivity"
102      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
103      android:theme="@style/Theme.Exponent.Light"
104      android:windowSoftInputMode="adjustResize">
105    </activity>
106
107    <activity
108      android:name=".MainActivity"
109      android:launchMode="singleTask"
110      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
111      android:theme="@style/Theme.Exponent.Splash"
112      android:windowSoftInputMode="adjustResize">
113      <!-- ADD DETACH SCHEME HERE -->
114      <!-- ADD DETACH INTENT FILTERS HERE -->
115      <!-- ADD DETACH APP SPECIFIC INTENT FILTERS -->
116    </activity>
117
118    <activity
119      android:name=".experience.HomeActivity"
120      android:label="@string/app_name"
121      android:launchMode="singleTask"
122      android:screenOrientation="portrait"
123      android:theme="@style/Theme.Exponent.Light">
124      <!-- START HOME INTENT FILTERS -->
125      <intent-filter>
126        <action android:name="android.intent.action.MAIN"/>
127
128        <category android:name="android.intent.category.LAUNCHER"/>
129      </intent-filter>
130      <!-- END HOME INTENT FILTERS -->
131    </activity>
132
133    <activity
134      android:name=".experience.TvActivity"
135      android:label="@string/app_name"
136      android:theme="@style/Theme.Exponent.Light"
137      android:screenOrientation="landscape">
138     <intent-filter>
139       <action android:name="android.intent.action.MAIN" />
140       <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
141     </intent-filter>
142   </activity>
143
144
145
146    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
147    <!-- WHEN_PREPARING_SHELL_REMOVE_FROM_HERE -->
148    <!-- ADD DEV SETTINGS HERE -->
149    <activity android:name="abi32_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
150    <!-- BEGIN_SDK_31 -->
151    <activity android:name="abi31_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
152    <!-- END_SDK_31 -->
153    <!-- BEGIN_SDK_30 -->
154    <activity android:name="abi30_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
155    <!-- END_SDK_30 -->
156    <!-- BEGIN_SDK_29 -->
157    <activity android:name="abi29_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
158    <!-- END_SDK_29 -->
159    <!-- BEGIN_SDK_28 -->
160    <activity android:name="abi28_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
161    <!-- END_SDK_28 -->
162    <!-- BEGIN_SDK_27 -->
163    <activity android:name="abi27_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
164    <!-- END_SDK_27 -->
165    <!-- BEGIN_SDK_26 -->
166    <activity android:name="abi26_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
167    <!-- END_SDK_26 -->
168    <!-- WHEN_PREPARING_SHELL_REMOVE_TO_HERE -->
169
170    <activity
171      android:name=".ExponentDevActivity"
172      android:exported="true"
173      android:label="@string/dev_activity_name"
174      android:screenOrientation="portrait"
175      android:theme="@style/Theme.Exponent.Dark"
176      android:windowSoftInputMode="adjustPan">
177    </activity>
178
179    <activity
180      android:name=".oauth.OAuthWebViewActivity"
181      android:screenOrientation="portrait"
182      android:theme="@style/Theme.Exponent.Light">
183    </activity>
184
185    <activity
186        android:name="net.openid.appauth.RedirectUriReceiverActivity"
187        tools:node="replace">
188      <intent-filter>
189        <action android:name="android.intent.action.VIEW"/>
190        <category android:name="android.intent.category.DEFAULT"/>
191        <category android:name="android.intent.category.BROWSABLE"/>
192        <data android:scheme="host.exp.exponent" android:path="oauthredirect"/>
193      </intent-filter>
194    </activity>
195
196    <activity
197      android:name=".oauth.OAuthResultActivity">
198    </activity>
199
200    <activity
201      android:name="abi32_0_0.expo.modules.appauth.AppAuthBrowserActivity">
202    </activity>
203
204    <!-- START OF STRIPE SCHEMES -->
205    <activity
206        android:exported="true"
207        android:launchMode="singleTask"
208        android:name="expo.modules.payments.stripe.RedirectUriReceiver"
209        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
210        <intent-filter>
211            <action android:name="android.intent.action.VIEW" />
212            <category android:name="android.intent.category.DEFAULT" />
213            <category android:name="android.intent.category.BROWSABLE" />
214            <data android:scheme="expo.modules.payments.stripe" />
215        </intent-filter>
216    </activity>
217    <!-- Versioned Activity for Stripe -->
218    <activity
219        android:exported="true"
220        android:launchMode="singleTask"
221        android:name="abi31_0_0.expo.modules.payments.stripe.RedirectUriReceiver"
222        android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
223        <intent-filter>
224            <action android:name="android.intent.action.VIEW" />
225            <category android:name="android.intent.category.DEFAULT" />
226            <category android:name="android.intent.category.BROWSABLE" />
227            <data android:scheme="abi31_0_0.expo.modules.payments.stripe" />
228        </intent-filter>
229    </activity>
230
231    <!-- END OF STRIPE SCHEMES -->
232
233    <activity
234      android:name=".chrometabs.ChromeTabsManagerActivity">
235    </activity>
236
237    <activity
238      android:name=".experience.ErrorActivity"
239      android:theme="@style/Theme.Exponent.Dark"
240      android:screenOrientation="portrait">
241    </activity>
242
243    <activity
244      android:name=".experience.InfoActivity"
245      android:screenOrientation="portrait"
246      android:theme="@style/Theme.Exponent.Light">
247    </activity>
248
249    <activity
250      android:name="com.facebook.FacebookActivity"
251      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
252      android:label="@string/app_name"
253      android:theme="@android:style/Theme.Translucent.NoTitleBar"
254      tools:replace="android:theme" />
255
256    <activity
257      android:name="com.facebook.ads.InterstitialAdActivity"
258      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
259      android:label="@string/app_name"
260      android:theme="@android:style/Theme.Translucent.NoTitleBar" />
261
262    <service
263      android:name=".ExponentIntentService"
264      android:exported="false" />
265
266    <!-- Analytics -->
267    <receiver
268      android:name="host.exp.exponent.referrer.InstallReferrerReceiver"
269      android:exported="true">
270      <intent-filter>
271        <action android:name="com.android.vending.INSTALL_REFERRER" />
272      </intent-filter>
273    </receiver>
274
275    <!--
276    This crashes: https://code.google.com/p/analytics-issues/issues/detail?id=667
277    TODO: turn it back on when it's fixed
278    <service
279      android:name="com.google.android.gms.analytics.CampaignTrackingService"
280      android:enabled="true"
281      android:exported="false" />-->
282
283    <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver"
284              android:enabled="true">
285      <intent-filter>
286        <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
287      </intent-filter>
288    </receiver>
289
290    <service android:name="com.google.android.gms.analytics.AnalyticsService"
291             android:enabled="true"
292             android:exported="false"/>
293
294    <!-- GCM -->
295    <receiver
296      android:name="com.google.android.gms.gcm.GcmReceiver"
297      android:exported="true"
298      android:permission="com.google.android.c2dm.permission.SEND">
299      <intent-filter>
300        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
301        <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
302
303        <category android:name="host.exp.exponent"/>
304      </intent-filter>
305    </receiver>
306
307    <service
308      android:name=".gcm.ExponentGcmListenerService"
309      android:exported="false">
310      <intent-filter>
311        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
312      </intent-filter>
313    </service>
314    <service
315      android:name=".gcm.ExponentInstanceIDListenerService"
316      android:exported="false">
317      <intent-filter>
318        <action android:name="com.google.android.gms.iid.InstanceID"/>
319      </intent-filter>
320    </service>
321    <service
322      android:name=".gcm.GcmRegistrationIntentService"
323      android:exported="false">
324    </service>
325
326    <!-- FCM -->
327    <service
328      android:name=".fcm.ExpoFcmMessagingService">
329      <intent-filter>
330        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
331      </intent-filter>
332    </service>
333    <meta-data
334      android:name="com.google.firebase.messaging.default_notification_icon"
335      android:resource="@drawable/shell_notification_icon" />
336    <meta-data
337      android:name="com.google.firebase.messaging.default_notification_color"
338      android:resource="@color/colorAccent" />
339    <service
340      android:name=".fcm.FcmRegistrationIntentService"
341      android:exported="false">
342    </service>
343
344    <!-- ImagePicker native module -->
345    <activity
346      android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
347      android:theme="@style/Base.Theme.AppCompat">
348    </activity>
349
350
351    <!-- ADD FABRIC CONFIG HERE -->
352    <!-- BEGIN FABRIC CONFIG -->
353    <meta-data
354      android:name="io.fabric.ApiKey"
355      android:value="${FABRIC_API_KEY}"/>
356    <!-- END FABRIC CONFIG -->
357
358    <!-- ADD GOOGLE MAPS CONFIG HERE -->
359    <!-- BEGIN GOOGLE MAPS CONFIG -->
360    <meta-data
361      android:name="com.google.android.geo.API_KEY"
362      android:value="${GOOGLE_MAPS_API_KEY}"/>
363    <!-- END GOOGLE MAPS CONFIG -->
364
365    <!-- ADD BRANCH CONFIG HERE -->
366
367    <!-- The Facebook SDK runs FacebookInitProvider on startup and crashes if there isn't an ID here -->
368    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="fb0"/>
369
370    <!-- ADD HERE STRIPE SCHEME META DATA -->
371  </application>
372
373</manifest>
374