Commit Graph
563 Commits
Author SHA1 Message Date
Santo Shakil 7aba6c3f88 feat(mobile): delete passkeys (#32785)
* feat(mobile): delete passkeys

* fix(mobile): refresh the passkey list from the store after a delete
2026-11-05 20:35:16 +03:00
Santo Shakil f727e8edb4 feat(mobile): rename passkeys (#32784)
* 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
2026-11-05 20:35:16 +03:00
Santo Shakil 28a52948a9 feat(mobile): passkeys page with new passkey (#32781)
* 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
2026-11-05 20:35:16 +03:00
Codex 2800192c76 feat: add private file storage for web and Android 2026-10-31 23:07:09 +03:00
DawidKrynski c8a957a116 fix(mobile): use context search once server features are loaded (#31800)
Co-authored-by: Dawid Krynski <188586034+DawidKrynski@users.noreply.github.com>
Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>
(cherry picked from commit be8e42526700d9ec5e72061e33f5039d50e40bae)
2026-10-29 20:43:01 +03:00
Brent Saltzman 3c383e46d1 fix: avoid duplicate manufacturer in camera name (#32657)
* fix(web,mobile): avoid duplicate manufacturer in camera name

Some cameras (e.g. Canon) already include the manufacturer in the EXIF
model, which made the details view show "Canon Canon EOS R6m2". Only
prepend the make when the model does not already start with it.

* refactor(web,mobile): address review feedback on camera name helper

- Use toLowerCase instead of toLocaleLowerCase for the comparison
- Hoist the whitespace regex to a static in the Dart helper
- Match any word of the make, so "EASTMAN KODAK COMPANY" with
  "KODAK EASYSHARE C875" is deduplicated too
- Compute the camera name once in DetailPanel

---------

Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
(cherry picked from commit cb2ea1e308d8a85f2f340f50b646f161d3528670)
2026-10-29 20:41:02 +03:00
shenlong c581bce715 fix: include partner shared assets for people even without showInTimeline (#32675)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
(cherry picked from commit 21ed7454836073a646273c7475b347e043439a90)
2026-10-28 20:41:41 +03:00
Yaros 919a4fd9ef fix: watch asset delete/archive in search (#31343)
* fix: watch asset delete/archive in search

* fix: restore via toast

* chore: format

* refactor: simplify search asset pruning

* chore: implement suggestions

* chore: more suggestions

* fix: mounted check

(cherry picked from commit f7b8ae5da370f947223b006618e5b4e5fb42fd33)
2026-10-26 22:35:01 +03:00
gitTurboflieger 3aa65809b1 fix(mobile): stop trashing assets after deletion cancellation (#32522)
* fix(mobile): stop trashing assets after deletion cancellation

* fix(mobile): handle Android system delete cancellation

* fix(mobile): simplify

* simplify test

(cherry picked from commit 3517973b8a316c8fb729bf82fe4bbf95884b9146)
2026-10-22 20:43:53 +03:00
Tiago Deane 6aaebd167d feat: option for mobile smooth timeline scrubbing (#32552)
* feat(mobile): add smooth timeline scrubbing setting

* refactor: read smooth scrubbing setting where the scrubber is built

(cherry picked from commit 222d9276d31e890d3d9beb6dae5d96a6f6ab52f0)
2026-10-22 05:21:00 +03:00
Mateus Navarro 434b7efd66 fix(mobile): border radius on list tiles in library page (#32476) (#32503)
* fix(mobile): standardize list tile radius in Quick Access Button List when pressed (#32476)

* fix(mobile): adjust list tile border radius based on partner presence in Quick Access Button List

* refactor(mobile): improve way to handle border radius of items in the QuickAccessButtonList

(cherry picked from commit fff2bd73f9b38a5a5b510ea69a77a470dd1acf56)
2026-10-22 05:18:40 +03:00
f3db8d8b59 fix: unsupported locale for date format (#32267)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Santo Shakil <shakil.mezbah@gmail.com>
2026-10-19 20:27:19 +03:00
MaximAL 9af9d35040 chore(mobile): Change x to typographically correct × (&times; in HTML) symbol (#32518)
Similar to #31304
2026-10-19 20:27:19 +03:00
Dag Stuan 92ab6e9c41 fix(mobile): Keep asset viewer controls hidden if they were hidden before zooming. (#31832) 2026-10-16 20:51:28 +03:00
Luis Nachtigall 645f333d04 feat(mobile): limit max zoom by image pixel size (#32423)
* fix(mobile): limit max zoom by visible image pixels

* fix(mobile): limit max zoom by image pixel size

(cherry picked from commit b246fa7c8a458da2d89c0efa2b2a8db85182ea9c)
2026-10-14 21:24:14 +03:00
Will 1daf922555 feat(mobile): mobile tags (#30753)
* feat(mobile): mobile tags

* fix(mobile); refactoring, replaced hook

* tag provider through asset service

* make search use a tag set

* use tag action directly

* use notification listener

* untag action

* handle untag response

* fix tests and add untag action test

* fix material error from tag picker dialog

* fix(mobile): clip tag picker tiles and update tag overflow

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Santo Shakil <shakil.mezbah@gmail.com>
(cherry picked from commit 83c7ec50056bbefa10869c78457f8882c72275e2)
2026-10-14 21:24:13 +03:00
Codex 5d204f646f Merge tag 'v3.3.3' into codex/immich-release-20261014
# Conflicts:
#	mobile/pubspec.yaml
2026-10-14 21:24:13 +03:00
Luis Nachtigall d63fc2088f refactor(mobile): cleanup image providers (#31824)
* refactor(mobile): remove redundant cancellation checks in image providers

* refactor(mobile): extract request helpers in full image providers

(cherry picked from commit 795507cfec262f8a6a9bd3ddd6f5647781e605ca)
2026-10-12 20:39:12 +03:00
immich-push-o-matic[bot]andSanto Shakil 762748f9ea fix(mobile): show the memories date in every app language (#32262)
fix(mobile): show the memories date in every app language (#32259)

(cherry picked from commit 116a9436ad1f8164d9dee904551e5067d724be99)

Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>
2026-10-09 09:04:03 +00:00
f6fc530734 fix: show date on memories page (#32245)
fix: show date on memories page (#32206)

* fix: show date on memories page

* Clean up API

* Drop imports

---------


(cherry picked from commit 108a3cadbfe3b3e4305c04d8e4217aafb445f626)

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Adam Gastineau <adam@agg.im>
2026-10-08 20:38:58 +00:00
immich-push-o-matic[bot]andAdam Gastineau f7dd3ccdc6 fix(mobile): prevent rapid toggling and rerendering of cells (#32236)
fix(mobile): prevent rapid toggling and rerendering of cells (#32200)

* fix(mobile): prevent rapid toggling and rerendering of cells

* Apply Shakil's fix

(cherry picked from commit 9640d9f5d2b3cc2e0fab441401be54c0c03de4f5)

Co-authored-by: Adam Gastineau <adam@agg.im>
2026-10-08 18:16:57 +00:00
immich-push-o-matic[bot]andSanto Shakil e9f171c441 fix(mobile): keep memories full screen while swiping (#32174)
fix(mobile): keep memories full screen while swiping (#32171)

(cherry picked from commit 86fed468a7f625c759072cb07a0d82accb74cf5e)

Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>
2026-10-07 06:52:13 +00:00
immich-push-o-matic[bot]andAlex 62bcb0601f feat: birthday memory on mobile (#32165)
feat: birthday memory on mobile (#32113)

* feat: birthday memory on mobile

* chore: remove yellow bg colors

* pr feedback

(cherry picked from commit 82cfc4b28b55c660d9c2da00c57437a20585a47b)

Co-authored-by: Alex <alex.tran1502@gmail.com>
2026-10-06 13:51:26 +00:00
immich-push-o-matic[bot]andSanto Shakil 234cb6d19b fix(mobile): face thumbnail stuck blank after renaming a person (#32001)
fix(mobile): face thumbnail stuck blank after renaming a person (#30769)

* fix(mobile): face thumbnail stuck blank after renaming a person

* flatten the codec error guard and rework the tests around framework driven reuse

* trim the image provider tests and note the per load state rule

* keep two small image provider tests: the renamed face and a late failure of a cancelled load

* clearer image provider tests: return the created completer, comment the steps, drop the unused listener, rename to thumbWithChecksum

* use the provider constructor with a lint ignore in the cache key test

(cherry picked from commit a29153e90e127ee26ad7555f6fb7c562b97b4abe)

Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>
2026-10-02 07:22:01 +00:00
c263b0d4d2 feat(mobile): editors can update album title & description (#31959)
feat(mobile): editors can update album title & description (#31954)


(cherry picked from commit cc916979502390640e186e421f84f3ce7414c884)

Co-authored-by: shenlong <139912620+shenlong-tanwen@users.noreply.github.com>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-09-30 21:26:59 +00:00
c12d5e6d35 feat: people management (#31620)
Co-authored-by: Jason Rasmussen <jason@rasm.me>
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
2026-09-28 21:29:15 +02:00
Luis Nachtigall 523c26e723 fix(mobile): don't clear cached initial image operation on completion (#31822) 2026-09-26 17:44:11 -04:00
Luis Nachtigall 93f65b750e fix(mobile): make cancellation in image providers consistent (#31823)
fix(mobile): handle cancellation in image providers
2026-09-26 17:39:15 -04:00
Santo Shakil fbff5f41be fix(mobile): ask before deleting local only photos on android 10 and below (#31146)
* ask before deleting local only photos on android 10 and below

* move the delete consent prompt into _cleanupLocalAssets

* ask on android 11 as well before deleting local photos

* ask before deleting only where android shows no prompt

* split the local delete prompt into its own helper

* pick the local delete dialog in one flat branch and rename notBackedUp to isLocalOnly
2026-09-25 20:19:01 +06:00
Adam Gastineau 2ccd0effc8 chore(mobile): enable dead code CI (#31753)
* chore(mobile): enable dead code CI

* Restore accidentally removed test and set mise default
2026-09-24 06:57:06 -07:00
Santo Shakil 2466eaeecd fix(mobile): play the server copy when the local video file cannot be read (#31606)
* play the server copy when the local video file cannot be read

* flatten the video source choice and add tests for it

* drop the platform override from the video viewer test
2026-09-24 10:15:33 +06:00
Adam Gastineau 91247f1492 chore(mobile): migrate OCR, Tag, and UserMetadata to Store (#31704)
* chore(mobile): migrate OCR, Tag, and UserMetadata to Store

* Add comments to Tag HTTP repository

* Add mounted check
2026-09-22 18:29:33 +00:00
Adam Gastineau f367ab2121 fix(mobile): prevent SurfaceLayer crashing on maps in Viewer on Android (#31709) 2026-09-22 20:55:22 +05:30
Adam Gastineau 241ca1e2a2 chore(mobile): make Person Store reactive via Drift (#31661) 2026-09-18 11:21:31 -07:00
Luis Nachtigall 9994eb3bed fix(mobile): prevent live photo from getting stuck during dismiss animation (#28080)
* update animation methods to return futures

* fix(mobile): prevent live photo from getting stuck during dismiss animation

* chore: rename variables + comment
2026-09-17 10:32:20 -07:00
Luis Nachtigall 5c8037301c fix(mobile): fill video placeholder to prevent flicker on open (#31621) 2026-09-17 05:44:08 -07:00
TokenLimitExceeded 810454a343 fix: set limit maximum zoom in asset viewer (#31609)
* set maxScale in asset viewer

fix #31496 by setting a a maximum of 10× the fitted size

* change maxScale to 20x

* moved the multiplier to a constant

* type fix

* fix mismerge
2026-09-16 12:15:21 -07:00
Adam Gastineau bd59a373de fix(mobile): make EXIF provider reactive (#31552)
* fix(mobile): make EXIF provider reactive

* Fix tests

* Remove unnecessary invalidations
2026-09-16 17:36:37 +00:00
Adam Gastineau 2e98d745bf fix(mobile): load more than one image on Android with Remove animations (#31587)
* fix(mobile): load more than one image on Android with Remove animations

* Wrap album Mesmerizing Slivers with ProgressiveImage
2026-09-16 13:47:23 +00:00
Adam Gastineau 64de38092e chore(mobile): centralize duplicate mesmerizing header components (#31590)
* chore(mobile): centralize duplicate mesmerizing header components

* Fix formatting
2026-09-15 12:33:15 -07:00
Jason Rasmussen 99fd561144 chore: transition to nullable user.oauthId (#31560) 2026-09-15 09:33:15 -04:00
Adam Gastineau 6874c07dbe chore(mobile): static Store to unify and streamline reactivity (#31099)
* chore(mobile): static Store to unify and streamline reactivity

* Add tests of caching and new stores

* Don't instantiate PeopleDbRepository

* Slight DB rename and fix throwing store methods
2026-09-11 10:56:00 -07:00
ArthurandArthur 7a6cfa65a9 chore(mobile): correctly rename person form state class (#31428)
chore: correctly name _PersonBirthdayEditFormState

Co-authored-by: Arthur <arthur@freye.in>
2026-09-11 06:08:15 -07:00
Damiano Ferrari d6dc6dcc3b refactor(mobile): convert CropAspectRatio to an enhanced enum (#31119)
* chore: migrate `CropAspectRatio` to enhanced enum

* chore: remove wrongly added file

* chore: implemented mertalev suggested changes

* fix: Added translations

* fix: address linter errors
2026-09-09 11:57:21 -07:00
Adam Gastineau ed38695209 chore(mobile): split out Timeline dragging into new widget (#31255) 2026-09-08 12:27:15 -07:00
Yaros 956330958f fix(mobile): hide negative age (#31341) 2026-09-08 10:25:56 -07:00
Adam Gastineau df7494b49e chore(mobile): split Timeline widget into smaller parts (#31223) 2026-09-08 07:11:04 -07:00
8d90cbeafc chore(mobile): remove unused code (#31280)
* chore: remove unused methods

* Remove dead test group

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
Co-authored-by: Adam Gastineau <adam@agg.im>
2026-09-08 13:56:46 +00:00
Adam Gastineau a6d43828f6 fix(mobile): rewrite slideshow controller system (#30771)
* fix(mobile): rewrite slideshow controller system

* Normalize playback status changes

* Improve preloading assets

* Added controller and widget tests

* Minor fixes from PR comments

* More minor fixes

* Move slideshow test after rename
2026-09-04 07:48:49 -07:00
Adam Gastineau 8fbddc8f3a fix(mobile): use timeline scroll velocity to add placeholders (#29443)
* fix(mobile): use timeline scroll velocity to add placeholders

* Switch to using Flutter recommendDeferredLoading

* Shared debounce logic
2026-09-03 16:29:14 +00:00