* Dismiss an Android bottom sheet with Back instead of the screen Bottom sheets render through a portal inside the app's own view tree rather than a native modal window, so Android offered Back to the navigator underneath them. On the model selector that meant one Back press left the chat and the app, with the sheet still open. `IsolatedBottomSheetModal` now claims `hardwareBackPress` for as long as the sheet is on screen and dismisses itself instead. Listeners are offered the press newest-first, so a stacked sheet answers before the one below it, and Back falls back through to the navigator once no sheet is left. * Move the Back press onto the sheet visibility tracker The first version held the press in `IsolatedBottomSheetModal` with its own `isOnScreen` state and a merged ref, duplicating the phase the visibility tracker already keeps, and it could only be tested through JSDOM with `vi.mock` and `vi.hoisted`, which docs/testing.md rules out. The tracker already owns presentation state and the sheet controller, so it takes a `BackPressSource` port and holds the press for exactly the window it is in the `presented` phase. `IsolatedBottomSheetModal` goes back to what it was on main. Every sheet call site reaches the tracker through `useIsolatedBottomSheetVisibility`, so coverage is unchanged. The real source registers nothing off Android, where there is no such press and `react-native-web`'s `BackHandler` logs an error on subscribe. The test is now a plain unit test against a fake adapter, with no mocks, no JSDOM, and no component mounting. --------- Co-authored-by: paseo-bot[bot] <266920839+paseo-bot[bot]@users.noreply.github.com>
Welcome to your Expo app 👋
This is an Expo project created with create-expo-app.
Get started
-
Install dependencies
npm install -
Start the app
npx expo start
In the output, you'll find options to open the app in a
- development build
- Android emulator
- iOS simulator
- Expo Go, a limited sandbox for trying out app development with Expo
You can start developing by editing the files inside the app directory. This project uses file-based routing.
Get a fresh project
When you're ready, run:
npm run reset-project
This command will move the starter code to the app-example directory and create a blank app directory where you can start developing.
Learn more
To learn more about developing your project with Expo, look at the following resources:
- Expo documentation: Learn fundamentals, or go into advanced topics with our guides.
- Learn Expo tutorial: Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web.
Join the community
Join our community of developers creating universal apps.
- Expo on GitHub: View our open source platform and contribute.
- Discord community: Chat with Expo users and ask questions.
Dictation debugging
Set EXPO_PUBLIC_ENABLE_AUDIO_DEBUG=1 before running npx expo start to render the in-app audio debug card. Pair it with the server-side STT_DEBUG_AUDIO_DIR flag so every dictation includes a copyable path to the saved raw audio file.