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