* Add permission handling for audio input
- Introduced `CheckPermission` and `RequestPermission` operations in `CxOsOp` for managing audio input permissions.
- Implemented permission status checks and requests across iOS, macOS, and Android.
- Added a new `Permission` module to define permission types and statuses.
- Updated event handling to include permission results in the event system.
- Updated manifest files to include necessary permissions for audio input on Android.
* Add audio example project
- Added a new example project for audio processing and permission handling
- Implemented UI components for audio device selection, microphone capture, and playback controls.
- Integrated permission handling for audio input and updated the workspace configuration to include the new example.
* Implement audio permission in Web, catch up Linux and Windows
* Refactor iOS permission handling to avoid ios_app re-entrancy
* Implement iOS mic capture and add sample rate to AudioInfo
* Ensure iOS audio output uses loudspeaker, only when not using external devices
* Enhance audio example by handling sample rates and resampling
* Allow users of `TextInput` to know when a keypress had no effect
This PR makes the `TextInput` widget emit a `TextInputAction::KeyDownUnhandled`
action upon keypresses that don't actually make any change to the widget's selection.
This action is currently only emitted for the Up, Down, Left, and Right arrow keys,
but we can certainly add it to others like Backspace, Delete, etc if desired.
Use case: if you want to enable custom behavior when the user uses arrow keys
to navigate an empty TextInput widget, such as jumping up out of the TextInput focus
to edit the most recent message you just sent in a chat app, then this PR
is necessary. Otherwise there's no way to know whether a given input actually had
any effect on the TextInput's inner cursor/selection state.
* Add the FaceID usage description to iOS Info.plist
Allows Makepad apps to use biometric auth on iOS
* Add `Dock::replace_tab()`: change the inner widget content of a tab
without having to remove and recreate the actual tab itself.
* Fix StackNavigation to forward non-visibility events to all subviews
* Allow saving/restoring the state of the `TextInput` widget
This redoes the changes introduced in #533, but modified for the new version of TextInput
* Add KeyModifiers parameter to `TextInputAction::Returned`
* Fix bug in text centering
* Properly restore the state of the TextInput
* undo version bumps for `makepad-android-state` and `makepad-jni-sys`
---------
Co-authored-by: Eddy Bruel <me@eddybruel.com>