[notifications][Android] Convert all exported modules to new API (#24499)# Why Converts all exported modules to new API in `expo-notifications`. # Test Plan - bare-expo ✅ - expo go ✅
[notifications][Android] Convert remaining modules to Kotlin (#24494)# Why Converts remaining modules to Kotlin. # Test Plan - bare-expo ✅
[notifications][Android] Convert almost all exported modules to Kotlin (#24462)# Why I'm in the middle of rewriting the expo-notifications to a new API. I decided to split the work across multip
[notifications][Android] Convert almost all exported modules to Kotlin (#24462)# Why I'm in the middle of rewriting the expo-notifications to a new API. I decided to split the work across multiple PRs. Converts almost all exported modules to Kotlin, besides those with more complicated scoping logic. # Test Plan - expo-go ✅
show more ...
[secure-store][android] Secure store audit (#23804)# Why ENG-6327 Secure-store was using the old modules API. We wanted to add synchronous functions to the API, so it's possible to use SecureSto
[secure-store][android] Secure store audit (#23804)# Why ENG-6327 Secure-store was using the old modules API. We wanted to add synchronous functions to the API, so it's possible to use SecureStore in the global JS scope. During the migration I've also found some bugs/unexpected behaviours which were corrected # How - Migrated `secure-store` to Kotlin and the new modules API - Changed callback-based authentication prompt to Kotlin coroutines - Added `getItemSync` and `setItemSync` functions - Both functions call the same functions as Async versions, but on the main thread - It is now possible to save values which require authentication and ones that don't under one keychain on the JS side. This is archived by creating two separate keys on the native side. - Before it wasn't possible to save a no-authentication value under a keychain, which was initialised with a require-auth value (an exception was thrown). It was possible to save a value which requires authentication into a keychain which was already initialised as no-auth, but it wasn't really encrypted with the necessity of auth and could've been decrypted without authentication (although `secure-store` always asked for biometrics correctly) - It is now possible to save values under different keychains but the same key. `Secure-store` can now differentiate between them. Before saving `value1` under `key1` and `keychain1` and `value2` under `key1` and `keychain2` would overwrite the `value1` under `key1` with a new value. Now they are separate. This archived by saving the items in shared preferences under a key which includes the keychain eq. `keychain1-key1` and `keychain2-key1`. This emulates the `ios` `secure-store` behavior - Backwards compatibility with the current naming scheme of keystore aliases has been kept - Improved invalidated key exception handling. When removing a key from the key store all values under that key will be removed from shared preferences in order to avoid exceptions caused by decryption fails. This doesn't apply to values stored with previous versions of `expo-secure-store` as it is not possible to determine if value was stored with a keychain without making an decryption attempt. - Updated the docs - Removed SDK20 read support # Test Plan Tested in Bare Expo and Expo Go on a physical android 13 and 7 devices (forced api < 23 functions on android 7 only for testing since we don't have such an old device) --------- Co-authored-by: Expo Bot <[email protected]>
[font][Android] Migrate to new API (#24015)# Why Migrate to the new API # Test Plan - bare-expo ✅ - expo go ✅
[go][Android] Add `ExpoGoModule` (#23710)# Why Adds an almost empty `ExpoGoModule` specific to the Expo Go app. This module is present in the Home app too. # How Add a decorator function
[go][Android] Add `ExpoGoModule` (#23710)# Why Adds an almost empty `ExpoGoModule` specific to the Expo Go app. This module is present in the Home app too. # How Add a decorator function that allows us to extend created `AppContext`. # Test Plan - run an experience in the expo go app and check if the `ExpoGoModule` is present ✅
[expo-updates] Updates state machine for iOS and Android, E2E tests (#22845)# Why Implement state machine on Android and iOS. # How - New state machine classes on Android and iOS - Integr
[expo-updates] Updates state machine for iOS and Android, E2E tests (#22845)# Why Implement state machine on Android and iOS. # How - New state machine classes on Android and iOS - Integration with UpdatesController/AppController - State machine change events sent to JS - Test hook in `@expo/use-updates` to allow E2E tests - E2E tests for both platforms # Test Plan - Manual testing on both platforms - Unit tests for state machine on both platforms - New E2E tests for state machine feature - Existing E2E tests and existing `expo-updates` functionality should be unaffected # Checklist <!-- Please check the appropriate items below if they apply to your diff. This is required for changes to Expo modules. --> - [x] Documentation is up to date to reflect these changes (eg: https://docs.expo.dev and README.md). - [x] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin).
[android][file-system] Migrate to new modules API (#22728)[android][file-system] Migrate to new modules API (#22728)
[android] Remove scoped error recovery module
[expo-firebase-*] Remove libraries (#20979)# Why We deprecated `expo-firebase-analytics` / `expo-firebase-recaptcha` (and hence, `expo-firebase-core`) in SDK 47, with removal planned in 48.
[expo-firebase-*] Remove libraries (#20979)# Why We deprecated `expo-firebase-analytics` / `expo-firebase-recaptcha` (and hence, `expo-firebase-core`) in SDK 47, with removal planned in 48. # How Remove `expo-firebase-analytics`, `expo-firebase-recaptcha`, `expo-firebase-core` packages. Updated dependencies in test apps/ Expo Go, removed Scoped Firebase class. Needed to update `com.google.firebase:firebase-core` to 21.1.0 in **expoview/build.gradle** due to the below error. I think this was related to the Expo Firebase packages requiring this version anyway, which was likely inhibiting the error. ``` Duplicate class com.google.android.gms.internal.firebase_messaging.zza found in modules jetified-firebase-iid-20.0.2-runtime (com.google.firebase:firebase-iid:20.0.2) and jetified-firebase-messaging-22.0.0-runtime (com.google.firebase:firebase-messaging:22.0.0) ... Duplicate class com.google.firebase.iid.FirebaseInstanceIdReceiver found in modules jetified-firebase-iid-20.0.2-runtime (com.google.firebase:firebase-iid:20.0.2) and jetified-firebase-messaging-22.0.0-runtime (com.google.firebase:firebase-messaging:22.0.0) ``` # Test Plan Tested building bare-expo and Expo Go on iOS and Android. # Checklist ~~**NOTE**: will open up a separate PR to update documentation; there's a decent amount of cross-linked stuff, don't want to miss that in a large-ish diff.~~ - [ ] Documentation is up to date to reflect these changes (eg: https://docs.expo.dev and README.md). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) - [x] This diff will work correctly for `expo prebuild` & EAS Build (eg: updated a module plugin).
[android] Fix cancelScheduledNotificationAsync double promise resolving crash (#19694)# Why Fix cancelScheduledNotificationAsync double promise resolving crash # How there are several issu
[android] Fix cancelScheduledNotificationAsync double promise resolving crash (#19694)# Why Fix cancelScheduledNotificationAsync double promise resolving crash # How there are several issues in the `ScopedNotificationScheduler.cancelScheduledNotificationAsync`: - if `shouldHandleNotification` returns false and resolving the promise. the call should return. otherwise, calling `doCancelScheduledNotificationAsync` will cause the promise resolving again and crash from JSI interop. - the key to get the request from `resultData?.getParcelable` is `NOTIFICATION_REQUEST_KEY` not `NOTIFICATION_REQUESTS_KEY` - support android sdk 33 type-safe [`getParcelable`](https://developer.android.com/reference/android/os/Bundle#getParcelable(java.lang.String,%20java.lang.Class%3CT%3E)) # Test Plan android unversioned expo go + test-suite Notifications
[expo-updates] add docblocks to most classes (#19491)
[av][android] upgrade exoplayer to 2.18.1 (#19332)# Why close ENG-6246 # How - upgrade exoplayer to 2.18.1 - migrate breaking changes - kotlinize _packages/expo-av/android/src/main/java/
[av][android] upgrade exoplayer to 2.18.1 (#19332)# Why close ENG-6246 # How - upgrade exoplayer to 2.18.1 - migrate breaking changes - kotlinize _packages/expo-av/android/src/main/java/expo/modules/av/player/datasource/CustomHeadersOkHttpDataSourceFactory.java_ - remove _android/expoview/src/main/java/versioned/host/exp/exponent/modules/universal/av/CustomHeadersOkHttpDataSourceFactory.kt_ which is exactly the same to the CustomHeadersOkHttpDataSourceFactory inside expo-av package. # Test Plan - android unversioned expo go + NCL Video
[expo-analytics-amplitude] Remove library (#18230)
[android] Fix build errors after #18168 removed packages (#18219)# Why fix android expo go build errors from #18168 removed some packages # How - removed integration code - port `BundleJS
[android] Fix build errors after #18168 removed packages (#18219)# Why fix android expo go build errors from #18168 removed some packages # How - removed integration code - port `BundleJSONConverter` from internal facebook sdk to our code - add necessary 3rd party sdks to versioned sdk dependencies. that is to make sure sdk 44/45 still works # Test Plan - unversioned android expo go + NCL - versioned android expo go + NCL
[expo-updates] add current and embedded update id headers to manifest requests (#17033)
[av][Android] Bump `com.google.android.exoplayer:exoplayer` from `2.9.2` to `2.13.3` (#16123)
[sweet][kotlin] Fix versioning (#15437)# Why The modules created using the new sweet API weren't versioned correctly. # How Made an `ExperiencePackagePicker` a module provider that export
[sweet][kotlin] Fix versioning (#15437)# Why The modules created using the new sweet API weren't versioned correctly. # How Made an `ExperiencePackagePicker` a module provider that exports all the modules available in expo go. Noticed that `ExpoModulesPackageList` won't be versioned and that is correct behavior. This class won't be used by expo go anymore. # Test Plan - expo go ✅ - run `et add-sdk -p android -s 44.0.0` and everything was looking good. I couldn't test it, cause I got a crash at the start of the application. However, it also occurred without my changes. But this might be an issue on my end.
[expo-file-system] Fix build (#15121)
[expo-facebook] Fix build for class override in expoview (#14905)
[expo-updates][android] Kotlinize expo-updates (#14818)
[expo-go][android] revert non-nullabillity (#14580)
[client] Fix ConstantsBinding on new kotlinized ConstantsService (#14491)
[android] Fix kotlin nullability issues (#14333)
[expo-manifests] Remove reliance upon stableLegacyId/originalFullName (#14265)
12345