* 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
* fix(mobile): log out before resetting the local database
* fix(mobile): use a stateful widget for the reset state instead of hooks
* fix(mobile): run the reset tests' db work on the real clock
* 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)
* fix(mobile): hide server addresses and tokens in shared logs
* feat(mobile): share logs from the startup error screen
* use only the shared logs patterns on the startup error screen
* fix(mobile): stop writing server urls and oauth values to the log
* fix(mobile): redact logs where they are read
* redact the startup error screen share
* fix(mobile): hide server addresses and tokens in shared logs
* fix(mobile): stop writing server urls and oauth values to the log
* fix(mobile): redact logs where they are read
* fix(mobile): redact logs when they are written
* log the startup error and share it as a log row
* fix(mobile): hide ipv6 addresses and name labels after their settings
* comment why the startup error row is only added here
(cherry picked from commit f7fa8a3a2d2c3b0ab59f90fbcc3c230c58a2aede)
* fix(mobile): hide server addresses and tokens in shared logs
* fix(mobile): stop writing server urls and oauth values to the log
* fix(mobile): redact logs where they are read
* fix(mobile): redact logs when they are written
* fix(mobile): hide ipv6 addresses and name labels after their settings
(cherry picked from commit 89d2de1274a3e1a70a6169f4cfe1feebfb327791)
* 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)
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>
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>
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>
fix(mobile): don't re-upload a photo the server already has (#31941)
(cherry picked from commit 02063972e82b1bfd17b6fc2e3b3ff39936229ea5)
Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>
fix(mobile): don't start the foreground backup in iOS background launches (#31943)
* fix(mobile): don't start the foreground backup in iOS background launches
* add a TODO to remove the background launch check
(cherry picked from commit 3e4492924541a0e73ea3c326fcfcfcd053871610)
Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>
fix(mobile): make the iOS background batch wait for its remote sync (#31942)
* fix(mobile): make the iOS background batch wait for its remote sync
* test onIosUpload itself, the worker reads its sync services from the providers
(cherry picked from commit ad93370f0287faafa7db615c726f32bd9e6d30e7)
Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>
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>
* 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
* 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
* 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