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