* feat(mobile): avif decoder
* decode avif in the core first on android, tone-map hdr like jxl and support premultiplied alpha
* decode avif with rav1d's safe api
* use rav1d's assembly
* thread avif decodes by their tile count
* convert colour-managed avif in bands
* use the codec dependencies' simd kernels
* free avif pictures before resizing
* map avif alpha through a table
* premultiply avif while writing alpha
* drop the avif container after decoding
* use core avif decoder on ios
* fall back to imageio on ios when the core can't decode an avif
---------
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* fix(mobile): delete leftover share files when the app starts
A share's downloaded file is deleted when the share sheet closes. If the
app is killed with the sheet still open, that never runs and the file
stays in the temp folder for good.
* clean up share downloads from the downloader's records
* build the share folder list with Future.wait
* feat(mobile): rename passkeys
* fix(mobile): refresh the passkey list from the store after a rename
* fix(mobile): skip the name dialog after creating a passkey
* feat(mobile): list passkeys
* fix(mobile): show the passkey list as the server's passkeys
* fix(mobile): reword and align the passkey list, refresh it from the store
* feat(mobile): login with passkey
* feat(mobile): use the server feature level on the login page
* refactor(mobile): share the steps after a login
* password, OAuth and passkey logins end with one finishLogin
* OAuth now also connects the websocket, like the password login
* fix(mobile): passkey login through the shared login steps
* fix(mobile): build the login response through its constructor
* feat(mobile): passkeys page with new passkey
* feat(mobile): passkeys entry under settings
* show it in settings when logged in and passkeys are on
* remove it from the profile menu
* feat(mobile): use the server feature level for passkeys
* hide passkeys below the passkeys feature level, without asking the server
* keep the server's feature level on ServerVersion
* fix(mobile): passkeys as a settings section through the store
* fix(mobile): filter the settings sections in SettingSection
* fix(mobile): remove the passkeys description and use the settings padding
* feat(mobile): passkey bridge for ios
* fix(mobile): ios passkey bridge in one file
* merge Passkeys.swift into PasskeyHostApiImpl.swift
* set up the host api on the main engine only
* map the json with Codable structs, with base64url in the coder data strategies
* throw on a missing attestation object or an unexpected credential type
* need iOS 17.4, where a passkey registration can exclude the account's passkeys
* fix(mobile): ios passkeys from ios 16
Passkeys are on from iOS 16 again. The platform registration only takes
excludedCredentials from iOS 17.4, so that check keeps its own comment.
* feat(mobile): passkey bridge for android
* fix(mobile): passkey plugin on the main engine only
* register it in configureFlutterEngine and cancel its scope on detach
* pass coroutine cancellation through instead of treating it as an error
* check for Play services 23.08+ before Android 14 in isSupported
* explain why NotAllowedError counts as a cancel
* share one perform function between register and authenticate