immich/mobile/lib/presentation/widgets/action_buttons
Peter Ombodi 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
..
add_action_button.widget.dart feat: upload local assets to album from bottom sheet (#28531) 2026-05-30 13:14:49 -05:00
advanced_info_action_button.widget.dart feat(mobile): move buttons in the bottom sheet to the kebabu menu (#24175) 2025-12-15 16:44:27 -06:00
archive_action_button.widget.dart chore: add always_put_control_body_on_new_line lint (#28352) 2026-05-11 13:47:24 -04:00
base_action_button.widget.dart feat(mobile): slideshow view (#28421) 2026-05-15 18:12:04 -05:00
bulk_tag_assets_action_button.widget.dart feat(mobile): "Add Tags" asset multiselect option (#26269) 2026-05-18 20:29:09 +05:30
cast_action_button.widget.dart feat(mobile): move top bar buttons into kebabu menu in AssetViewer (#24461) 2025-12-09 18:26:28 +00:00
delete_action_button.widget.dart chore: add always_put_control_body_on_new_line lint (#28352) 2026-05-11 13:47:24 -04:00
delete_local_action_button.widget.dart fix: Refresh local album overview page after asset deletion (#28586) 2026-05-28 01:20:32 +05:30
delete_permanent_action_button.widget.dart fix(mobile): use correct delete action (#26575) 2026-05-14 11:57:19 +00:00
delete_trash_action_button.widget.dart feat(mobile): add confirmation dialog to permanent delete action (#26442) 2026-02-27 15:49:57 +00:00
download_action_button.widget.dart chore(mobile): add kebabu menu in asset viewer (#24387) 2025-12-05 19:51:59 +00:00
download_status_floating_button.widget.dart fix: download feedback (#22178) 2025-09-19 00:47:01 -05:00
edit_date_time_action_button.widget.dart feat: drift edit time and date action (#20377) 2025-07-30 14:40:13 -05:00
edit_image_action_button.widget.dart feat: mobile editing (#25397) 2026-04-15 09:26:40 -05:00
edit_location_action_button.widget.dart chore: bump dart sdk to 3.8 (#20355) 2025-07-28 14:04:03 -05:00
favorite_action_button.widget.dart fix(mobile): favorite button not updating state (#27271) 2026-03-30 21:24:56 -05:00
like_activity_action_button.widget.dart refactor: remove riverpod generator (#27874) 2026-04-17 20:01:44 +05:30
motion_photo_action_button.widget.dart feat(mobile): move top bar buttons into kebabu menu in AssetViewer (#24461) 2025-12-09 18:26:28 +00:00
move_to_lock_folder_action_button.widget.dart chore: add always_put_control_body_on_new_line lint (#28352) 2026-05-11 13:47:24 -04:00
open_in_browser_action_button.widget.dart fix: kekab icon colors in light mode (#28366) 2026-05-12 11:27:55 -05:00
remove_from_album_action_button.widget.dart fix(mobile): reflect asset deletions instantly (#26835) 2026-03-17 06:43:14 -05:00
remove_from_lock_folder_action_button.widget.dart feat(mobile): move buttons in the bottom sheet to the kebabu menu (#24175) 2025-12-15 16:44:27 -06:00
restore_action_button.widget.dart fix(mobile): add restore option to trashed assets (#27442) 2026-05-14 07:19:00 +00:00
restore_trash_action_button.widget.dart chore: bump dart sdk to 3.8 (#20355) 2025-07-28 14:04:03 -05:00
set_album_cover.widget.dart feat(mobile): Allow users to set album cover from mobile app (#25515) 2026-02-22 05:53:39 +00:00
set_profile_picture_action_button.widget.dart feat(mobile): Allow users to set profile picture from asset viewer (#25517) 2026-02-22 06:02:33 +00:00
share_action_button.widget.dart feat(mobile): improve downloading algorithm for sharing (#27312) 2026-05-27 17:00:49 +00:00
share_link_action_button.widget.dart feat(mobile): move buttons in the bottom sheet to the kebabu menu (#24175) 2025-12-15 16:44:27 -06:00
similar_photos_action_button.widget.dart fix(mobile): correct filter default and UI desync in similar photos search (#27516) 2026-05-07 15:22:35 +00:00
slideshow_action_button.widget.dart feat(mobile): slideshow view (#28421) 2026-05-15 18:12:04 -05:00
stack_action_button.widget.dart chore: bump dart sdk to 3.8 (#20355) 2025-07-28 14:04:03 -05:00
trash_action_button.widget.dart fix(mobile): reflect asset deletions instantly (#26835) 2026-03-17 06:43:14 -05:00
unarchive_action_button.widget.dart chore: add always_put_control_body_on_new_line lint (#28352) 2026-05-11 13:47:24 -04:00
unfavorite_action_button.widget.dart fix(mobile): favorite button not updating state (#27271) 2026-03-30 21:24:56 -05:00
unstack_action_button.widget.dart feat(mobile): move buttons in the bottom sheet to the kebabu menu (#24175) 2025-12-15 16:44:27 -06:00
upload_action_button.widget.dart feat(mobile): Android. Immich as a gallery / image viewer app (#26109) 2026-06-03 12:05:52 -05:00