Commit Graph
600 Commits
Author SHA1 Message Date
Santo Shakilandmertalev b3414d7595 feat(mobile): avif decoder (#32809)
* 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>
2026-11-06 21:35:53 +03:00
Codex 062ae648d7 feat: support local Android passkeys and prepare local.7 2026-11-05 21:00:26 +03:00
Santo Shakil 11e9a4b4da fix(mobile): clear the app's cookies on logout (#32965) 2026-11-05 20:35:16 +03:00
Santo Shakil f2f2093e41 feat(mobile): passkey bridge for android (#32779)
* 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
2026-11-05 20:35:01 +03:00
Adam Gastineau faaf0e410b chore(android): Build Flutter config before Fastlane builds (#33000) 2026-11-05 20:34:15 +03:00
Codex 2800192c76 feat: add private file storage for web and Android 2026-10-31 23:07:09 +03:00
immich-push-o-matic[bot] 5dfa7214df chore: version v3.4.0-rc.0
(cherry picked from commit 81778c8c4a9e015511af21eada4bbf829296580d)
2026-10-31 07:22:44 +03:00
Santo Shakil 3127dbec71 refactor(mobile): move the native core decoders into a codecs crate (#32765)
* refactor(mobile): move the native core decoders into a codecs crate

* make Format private

* rename the decode export and options for what they hold

* drop the unused ios and server groups and rename the target params

(cherry picked from commit 11bf875313782b8a9e10269bb6f85226b7bdcd72)
2026-10-28 20:40:53 +03:00
Codex a5b2dcb3c2 Define the JPEG XL decode bound for the local Android image pipeline 2026-10-24 12:21:17 +03:00
Mert 70ef2884f0 feat(mobile): jxl decoder (#32592) 2026-10-24 11:52:05 +03:00
Santo Shakil 918d66fbdb fix(mobile): cancel cronet image requests only between reads (#32659)
* fix(mobile): cancel cronet image requests only between reads

* rename cronet callback flags
2026-10-24 11:51:43 +03:00
Codex 6665bb4796 feat: add verified Android and web update checks in settings 2026-10-15 14:54:44 +03:00
immich-push-o-matic[bot] d2dac658fe chore: version v3.3.3 2026-10-14 16:30:09 +00:00
immich-push-o-matic[bot] 3dcaa05cd7 chore: version v3.3.2 2026-10-14 16:23:04 +00:00
immich-push-o-matic[bot] db6e11ecc8 chore: version v3.3.1 2026-10-08 21:21:16 +00:00
immich-push-o-matic[bot] e3b1656091 chore: version v3.3.0 2026-10-06 14:57:27 +00:00
immich-push-o-matic[bot] 20f103c4b9 chore: version v3.3.0-rc.2 2026-10-02 16:58:10 +00:00
immich-push-o-matic[bot] eace8c2809 chore: version v3.3.0-rc.1 2026-09-30 21:42:17 +00:00
immich-push-o-matic[bot] a9d102234b chore: version v3.3.0-rc.0 2026-09-28 21:54:03 +00:00
Santo Shakil a4af86282d fix(mobile): resume after the app was launched in the background (#31557)
* run the first resume after a background launch with a full local sync

* keep the untouched lines of the swift file as they were

* check the background launch at the first resume even after a pause
2026-09-24 10:15:44 +06:00
Santo Shakil 3e2e8e0fe8 fix(mobile): retry the background backup when connectivity is restored (#30909)
* fix(mobile): retry the background backup when connectivity is restored

* return the backup result from the zone and drop the unrelated upload test

* flip the background worker bool to needsRetry

* decide the background retry from the upload callbacks

* run the background worker offline again and retry on reconnect with a separate connected gated request

* retry the background backup when any upload fails and keep one worker at a time

* always hand the retry to the connected worker and release the worker lock if startWork throws

* respect the charging only setting on the connected retry worker
2026-09-23 17:27:45 +06:00
Santo Shakil e8c6218431 fix(mobile): show the real date for android local photos with no exif (#29193)
* fix(mobile): show the real date for android local photos with no exif

photos with no exif date showed their copy-to-phone date in the "on this device" albums instead of the real date. fall back to the earlier of date_modified/date_added (matches the server + ios), plus a migration to fix the rows already saved wrong.

* persist migration progress when the date backfill fails

* fix local date migration for trash and epoch rows

* cover epoch dates in both local asset tables

* simplify the created date pick and rework the migration test

* heal no-exif dates from mediastore in the v27 migration

* check gallery access from dart and skip dates that do not parse

* let the date heal run once and never block the version

* read the trashed assets through the same cast the sync uses
2026-09-17 19:05:07 +06:00
Santo Shakil aa8c5be42d chore(mobile): name pr builds after their pr number (#31541) 2026-09-14 19:34:14 +06:00
Jason Rasmussen c0eed4902a chore: version v3.2.0 (#31441)
chore: v3.2.0
2026-09-11 11:02:34 -04:00
immich-push-o-matic[bot] e61312084b chore: version v3.2.0-rc.0 2026-08-27 19:43:45 +00:00
Santo Shakil 9862e50aab fix(mobile): decode remote thumbnails at displayed size (#29965)
* fix(mobile): decode remote thumbnails at displayed size

* use nullable decode size and reuse the tapped thumbnail in the viewer

* clean up decode size naming and guards
2026-08-10 21:14:23 +06:00
shenlongandshenlong-tanwen f11d8b6a5a fix(mobile): stop disabling androidx.startup initializers (#30559)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-05 23:59:01 +05:30
shenlongandshenlong-tanwen 29512081db fix: use setRequireOriginal on SDK 29 and above (#29072)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-08-04 20:43:51 +05:30
Adam Gastineau 9a143f0047 chore(mobile): remove Pigeon generated code (#30343) 2026-07-30 15:14:50 -04:00
github-actions 8aa95c6747 chore: version v3.1.0 2026-07-27 18:20:33 +00:00
shenlongandshenlong-tanwen 7b0f58b2c1 refactor: gracefully stop during engine startup (#29179)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-21 19:08:13 +05:30
shenlongandshenlong-tanwen 507448d797 chore: pump home_widget (#29981)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-07-16 21:58:11 +05:30
Santo Shakil 2cdbd0d00f fix(mobile): apply exif orientation to remote raw photos on android (#29906) 2026-07-14 19:10:41 -04:00
github-actions cd308ad930 chore: version v3.0.3 2026-07-14 21:10:19 +00:00
Daniel Dietzler 3c43e8d6c1 fix: revert "fix(mobile): send a full datetime from the android memories widget" (#29913) 2026-07-14 14:41:43 +00:00
Santo Shakil 9c8d718ddc fix(mobile): send a full datetime from the android memories widget (#29689) 2026-07-14 09:25:06 -05:00
github-actions 443b856ac3 chore: version v3.0.2 2026-07-09 17:33:21 +00:00
Santo Shakilandmertalev 58b1c5e8fb fix(mobile): fix 10-bit heic and avif colors on android (#29631)
* fix(mobile): fix 10-bit heic and avif colors on android

* fix(mobile): share the decode pool across flutter engines

* vectorize conversion

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
2026-07-06 21:16:09 +00:00
github-actions f77c8a4699 chore: version v3.0.1 2026-07-02 19:24:13 +00:00
github-actions 05d838b560 chore: version v3.0.0 2026-06-30 20:03:47 +00:00
Santo Shakil af2efda310 fix(mobile): apply exif orientation to android raw photos (#29337) 2026-06-29 10:59:09 -04:00
github-actions ac74bca18b chore: version v3.0.0-rc.4 2026-06-27 13:14:47 +00:00
github-actions 09d4a6815f chore: version v3.0.0-rc.3 2026-06-26 16:49:02 +00:00
Alex b24a617142 chore: bump mobile build (#29215) 2026-06-19 12:50:20 -05:00
github-actions 38920fc4ca chore: version v3.0.0-rc.2 2026-06-18 23:20:14 +00:00
github-actions c9aa9ba711 chore: version v3.0.0-rc.1 2026-06-16 19:50:41 +00:00
github-actions e4dbe777a0 chore: version v3.0.0-rc.0 2026-06-12 14:55:39 +00:00
Santo Shakil 59d036a2ed fix(mobile): give android notification channels proper names (#28986) 2026-06-11 15:07:37 +00:00
shenlongandshenlong-tanwen de70d19d20 feat: show notification and battery optimization warning (#26610)
* feat: show notification and battery optimization warning

* cleanup

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-06-04 12:24:39 +00:00
9d4a6614b1 feat(mobile): Android. Immich as a gallery / image viewer app (#26109)
* feat(mobile): handle Android ACTION_VIEW intent
- add ViewIntent Pigeon API and generated bindings
- implement Android ViewIntentPlugin + iOS no-op host
- route ExternalMediaViewer by ViewIntentAttachment
- buffer pending view intents and flush on user ready/resume

* feat(mobile): fallback to computed checksum for timeline match
- hash local asset on-demand when checksum missing
- search main timeline by localId or checksum before standalone viewer
- persist computed hash into local_asset_entity

* fix(mobile): proper handling is user authenticated

* feat(mobile): open ACTION_VIEW fallback in AssetViewer
drop ExternalMediaViewer route

* feat(mobile): add logger

* test(mobile): add unit tests for view intent pending/flush flow

* fix(mobile): fix format

* fix(mobile): remove redundant iOS code
update code related to LocalAsset model and asset viewer

* refactor(mobile): simplify view intent flow and support file-backed ACTION_VIEW assets
remove redundant view intent model/repository layer
handle transient ACTION_VIEW files in viewer/upload flow
clean up managed temp files for fallback assets

* refactor(mobile): extract MediaStore utils and resolve view intents via merged assets

* refactor(mobile): move deferred view intents into providers, split view-intent providers, and clean up ACTION_VIEW handling

* refactor(mobile): resolve merge conflicts
use NativeSyncApi for hash files instead method from removed BackgroundServicePlugin.kt

* style(mobile): format files

* style(mobile): format files #2

* refactor(mobile): lazily materialize view-intent files and clean up temp-file handling

* fix(mobile): flush pending view intents after login navigation

* refactor(mobile): split view intent handler by platform and trigger it from app events

* refactor(mobile): move view intent handling behind platform-specific factories

* refactor(mobile): simplify code

* fix(mobile): hand off deep-link viewer to main timeline after upload
Add MainTimelineHandoffCoordinator to switch the asset viewer to the main timeline once a view-intent asset is uploaded and becomes available, and guard viewer reload/navigation transitions to avoid race conditions and crashes.

* refactor(mobile): use remote asset ids for view intent handoff and simplify resolver

* refactor(mobile): resolve merge conflicts

* style(mobile): reformat code

* style(mobile): reformat code #2

* fix(mobile): stabilize Android view intent asset resolution and fallback viewer

* refactor(mobile): share AssetViewer pre-navigation state preparation

* fix(mobile): wait for main timeline before deferred view intent handoff

* refactor(mobile): decouple view intent asset resolver from providers

* fix(mobile): avoid double pop when canceling upload dialog

* fix(mobile): resolve view intent MIME type with fallbacks

* docs(mobile): clarify view intent fallback asset TODO

* fix(mobile): resolve merge conflicts

* cleanup

* lint

---------

Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2026-06-03 12:05:52 -05:00