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