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