diff --git a/mobile/assets/2.0x/create_new_album.png b/mobile/assets/2.0x/create_new_album.png new file mode 100644 index 0000000000..79ed8833bb Binary files /dev/null and b/mobile/assets/2.0x/create_new_album.png differ diff --git a/mobile/assets/2.0x/new_empty_album.png b/mobile/assets/2.0x/new_empty_album.png new file mode 100644 index 0000000000..cbd3834a06 Binary files /dev/null and b/mobile/assets/2.0x/new_empty_album.png differ diff --git a/mobile/assets/3.0x/create_new_album.png b/mobile/assets/3.0x/create_new_album.png new file mode 100644 index 0000000000..94fe5819c7 Binary files /dev/null and b/mobile/assets/3.0x/create_new_album.png differ diff --git a/mobile/assets/3.0x/new_empty_album.png b/mobile/assets/3.0x/new_empty_album.png new file mode 100644 index 0000000000..a1be6b14a7 Binary files /dev/null and b/mobile/assets/3.0x/new_empty_album.png differ diff --git a/mobile/assets/create_new_album.png b/mobile/assets/create_new_album.png new file mode 100644 index 0000000000..c75de0bfb3 Binary files /dev/null and b/mobile/assets/create_new_album.png differ diff --git a/mobile/assets/new_empty_album.png b/mobile/assets/new_empty_album.png new file mode 100644 index 0000000000..495c2bb553 Binary files /dev/null and b/mobile/assets/new_empty_album.png differ diff --git a/mobile/lib/generated/intl/messages_cs.dart b/mobile/lib/generated/intl/messages_cs.dart index 34a5bccc3c..be2977a606 100644 --- a/mobile/lib/generated/intl/messages_cs.dart +++ b/mobile/lib/generated/intl/messages_cs.dart @@ -22,6 +22,100 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { + "addCollaborators": m0, + "addToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Add to hidden album"), + "addViewers": m1, + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), + "appLockDescription": MessageLookupByLibrary.simpleMessage( + "Choose between your device\\\'s default lock screen and a custom lock screen with a PIN or password."), + "autoLock": MessageLookupByLibrary.simpleMessage("Auto lock"), + "autoLockFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Time after which the app locks after being put in the background"), + "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( + "Change location of selected items?"), + "clusteringProgress": + MessageLookupByLibrary.simpleMessage("Clustering progress"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("Collect photos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), + "contacts": MessageLookupByLibrary.simpleMessage("Contacts"), + "createCollaborativeLink": + MessageLookupByLibrary.simpleMessage("Create collaborative link"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "This account is linked to other ente apps, if you use any.\\n\\nYour uploaded data, across all ente apps, will be scheduled for deletion, and your account will be permanently deleted."), + "descriptions": MessageLookupByLibrary.simpleMessage("Descriptions"), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), + "editLocation": MessageLookupByLibrary.simpleMessage("Edit location"), + "editsToLocationWillOnlyBeSeenWithinEnte": + MessageLookupByLibrary.simpleMessage( + "Edits to location will only be seen within Ente"), + "enterPersonName": + MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), + "faceRecognition": + MessageLookupByLibrary.simpleMessage("Face recognition"), + "fileTypes": MessageLookupByLibrary.simpleMessage("File types"), + "foundFaces": MessageLookupByLibrary.simpleMessage("Found faces"), + "guestView": MessageLookupByLibrary.simpleMessage("Guest view"), + "guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "To enable guest view, please setup device passcode or screen lock in your system settings."), + "hideContent": MessageLookupByLibrary.simpleMessage("Hide content"), + "hideContentDescriptionAndroid": MessageLookupByLibrary.simpleMessage( + "Hides app content in the app switcher and disables screenshots"), + "hideContentDescriptionIos": MessageLookupByLibrary.simpleMessage( + "Hides app content in the app switcher"), + "immediately": MessageLookupByLibrary.simpleMessage("Immediately"), + "indexingIsPaused": MessageLookupByLibrary.simpleMessage( + "Indexing is paused, will automatically resume when device is ready"), + "joinDiscord": MessageLookupByLibrary.simpleMessage("Join Discord"), + "locations": MessageLookupByLibrary.simpleMessage("Locations"), + "longPressAnEmailToVerifyEndToEndEncryption": + MessageLookupByLibrary.simpleMessage( + "Long press an email to verify end to end encryption."), + "modifyYourQueryOrTrySearchingFor": + MessageLookupByLibrary.simpleMessage( + "Modify your query, or try searching for"), + "moveToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Move to hidden album"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), + "next": MessageLookupByLibrary.simpleMessage("Next"), + "noQuickLinksSelected": + MessageLookupByLibrary.simpleMessage("No quick links selected"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), + "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( + "Password strength is calculated considering the length of the password, used characters, and whether or not the password appears in the top 10,000 most used passwords"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( + "Please select quick links to remove"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), + "removePersonLabel": + MessageLookupByLibrary.simpleMessage("Remove person label"), + "removePublicLinks": + MessageLookupByLibrary.simpleMessage("Remove public links"), + "search": MessageLookupByLibrary.simpleMessage("Search"), + "selectALocation": + MessageLookupByLibrary.simpleMessage("Select a location"), + "selectALocationFirst": + MessageLookupByLibrary.simpleMessage("Select a location first"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": + MessageLookupByLibrary.simpleMessage( + "This will remove public links of all selected quick links."), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), + "yourMap": MessageLookupByLibrary.simpleMessage("Your map") "localSyncErrorMessage": MessageLookupByLibrary.simpleMessage( "Looks like something went wrong since local photos sync is taking more time than expected. Please reach out to our support team") }; diff --git a/mobile/lib/generated/intl/messages_de.dart b/mobile/lib/generated/intl/messages_de.dart index 0d9253971a..092a006fba 100644 --- a/mobile/lib/generated/intl/messages_de.dart +++ b/mobile/lib/generated/intl/messages_de.dart @@ -500,9 +500,12 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage in Galerie gespeichert"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage( "Gemeinsam Event-Fotos sammeln"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Fotos sammeln"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Farbe"), "confirm": MessageLookupByLibrary.simpleMessage("Bestätigen"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1061,6 +1064,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Verschiebe Dateien in Album..."), "name": MessageLookupByLibrary.simpleMessage("Name"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Ente ist im Moment nicht erreichbar. Bitte versuchen Sie es später erneut. Sollte das Problem bestehen bleiben, wenden Sie sich bitte an den Support."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_en.dart b/mobile/lib/generated/intl/messages_en.dart index 4cb24bfebe..fdd02c9022 100644 --- a/mobile/lib/generated/intl/messages_en.dart +++ b/mobile/lib/generated/intl/messages_en.dart @@ -482,9 +482,12 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), "collageSaved": MessageLookupByLibrary.simpleMessage("Collage saved to gallery"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage("Collect event photos"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Collect photos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Color"), "confirm": MessageLookupByLibrary.simpleMessage("Confirm"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1016,6 +1019,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage("Moving files to album..."), "name": MessageLookupByLibrary.simpleMessage("Name"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Unable to connect to Ente, please retry after sometime. If the error persists, please contact support."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_es.dart b/mobile/lib/generated/intl/messages_es.dart index 58886ea00e..aeaa5fd635 100644 --- a/mobile/lib/generated/intl/messages_es.dart +++ b/mobile/lib/generated/intl/messages_es.dart @@ -482,10 +482,13 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Disposición"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage guardado en la galería"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage("Recopilar fotos del evento"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Recolectar fotos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Color"), "confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1029,6 +1032,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Moviendo archivos al álbum..."), "name": MessageLookupByLibrary.simpleMessage("Nombre"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "No se puede conectar a Ente. Por favor, vuelve a intentarlo pasado un tiempo. Si el error persiste, ponte en contacto con el soporte técnico."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_fr.dart b/mobile/lib/generated/intl/messages_fr.dart index 9421f754f1..00d21bb033 100644 --- a/mobile/lib/generated/intl/messages_fr.dart +++ b/mobile/lib/generated/intl/messages_fr.dart @@ -500,10 +500,13 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Disposition"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage sauvegardé dans la galerie"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage( "Collecter des photos de l\'événement"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Récupérer les photos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Couleur "), "confirm": MessageLookupByLibrary.simpleMessage("Confirmer"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1075,6 +1078,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Déplacement des fichiers vers l\'album..."), "name": MessageLookupByLibrary.simpleMessage("Nom"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Impossible de se connecter à Ente, veuillez réessayer après un certain temps. Si l\'erreur persiste, veuillez contacter le support."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_it.dart b/mobile/lib/generated/intl/messages_it.dart index 88d2095ae1..c5b92b5600 100644 --- a/mobile/lib/generated/intl/messages_it.dart +++ b/mobile/lib/generated/intl/messages_it.dart @@ -475,10 +475,13 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Disposizione"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage salvato nella galleria"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage( "Raccogli le foto di un evento"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Raccogli le foto"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Colore"), "confirm": MessageLookupByLibrary.simpleMessage("Conferma"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1005,6 +1008,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Spostamento dei file nell\'album..."), "name": MessageLookupByLibrary.simpleMessage("Nome"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Impossibile connettersi a Ente, riprova tra un po\' di tempo. Se l\'errore persiste, contatta l\'assistenza."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_ko.dart b/mobile/lib/generated/intl/messages_ko.dart index 99cecbb6ba..481505b3ea 100644 --- a/mobile/lib/generated/intl/messages_ko.dart +++ b/mobile/lib/generated/intl/messages_ko.dart @@ -22,6 +22,100 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { + "addCollaborators": m0, + "addToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Add to hidden album"), + "addViewers": m1, + "appLock": MessageLookupByLibrary.simpleMessage("App lock"), + "appLockDescription": MessageLookupByLibrary.simpleMessage( + "Choose between your device\\\'s default lock screen and a custom lock screen with a PIN or password."), + "autoLock": MessageLookupByLibrary.simpleMessage("Auto lock"), + "autoLockFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Time after which the app locks after being put in the background"), + "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( + "Change location of selected items?"), + "clusteringProgress": + MessageLookupByLibrary.simpleMessage("Clustering progress"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("Collect photos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), + "contacts": MessageLookupByLibrary.simpleMessage("Contacts"), + "createCollaborativeLink": + MessageLookupByLibrary.simpleMessage("Create collaborative link"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "This account is linked to other ente apps, if you use any.\\n\\nYour uploaded data, across all ente apps, will be scheduled for deletion, and your account will be permanently deleted."), + "descriptions": MessageLookupByLibrary.simpleMessage("Descriptions"), + "deviceLock": MessageLookupByLibrary.simpleMessage("Device lock"), + "editLocation": MessageLookupByLibrary.simpleMessage("Edit location"), + "editsToLocationWillOnlyBeSeenWithinEnte": + MessageLookupByLibrary.simpleMessage( + "Edits to location will only be seen within Ente"), + "enterPersonName": + MessageLookupByLibrary.simpleMessage("Enter person name"), + "enterPin": MessageLookupByLibrary.simpleMessage("Enter PIN"), + "faceRecognition": + MessageLookupByLibrary.simpleMessage("Face recognition"), + "fileTypes": MessageLookupByLibrary.simpleMessage("File types"), + "foundFaces": MessageLookupByLibrary.simpleMessage("Found faces"), + "guestView": MessageLookupByLibrary.simpleMessage("Guest view"), + "guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "To enable guest view, please setup device passcode or screen lock in your system settings."), + "hideContent": MessageLookupByLibrary.simpleMessage("Hide content"), + "hideContentDescriptionAndroid": MessageLookupByLibrary.simpleMessage( + "Hides app content in the app switcher and disables screenshots"), + "hideContentDescriptionIos": MessageLookupByLibrary.simpleMessage( + "Hides app content in the app switcher"), + "immediately": MessageLookupByLibrary.simpleMessage("Immediately"), + "indexingIsPaused": MessageLookupByLibrary.simpleMessage( + "Indexing is paused, will automatically resume when device is ready"), + "joinDiscord": MessageLookupByLibrary.simpleMessage("Join Discord"), + "locations": MessageLookupByLibrary.simpleMessage("Locations"), + "longPressAnEmailToVerifyEndToEndEncryption": + MessageLookupByLibrary.simpleMessage( + "Long press an email to verify end to end encryption."), + "modifyYourQueryOrTrySearchingFor": + MessageLookupByLibrary.simpleMessage( + "Modify your query, or try searching for"), + "moveToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Move to hidden album"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), + "next": MessageLookupByLibrary.simpleMessage("Next"), + "noQuickLinksSelected": + MessageLookupByLibrary.simpleMessage("No quick links selected"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), + "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( + "Password strength is calculated considering the length of the password, used characters, and whether or not the password appears in the top 10,000 most used passwords"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( + "Please select quick links to remove"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), + "removePersonLabel": + MessageLookupByLibrary.simpleMessage("Remove person label"), + "removePublicLinks": + MessageLookupByLibrary.simpleMessage("Remove public links"), + "search": MessageLookupByLibrary.simpleMessage("Search"), + "selectALocation": + MessageLookupByLibrary.simpleMessage("Select a location"), + "selectALocationFirst": + MessageLookupByLibrary.simpleMessage("Select a location first"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": + MessageLookupByLibrary.simpleMessage( + "This will remove public links of all selected quick links."), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "To enable app lock, please setup device passcode or screen lock in your system settings."), + "tooManyIncorrectAttempts": + MessageLookupByLibrary.simpleMessage("Too many incorrect attempts"), + "yourMap": MessageLookupByLibrary.simpleMessage("Your map") "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("다시 오신 것을 환영합니다!"), "askDeleteReason": diff --git a/mobile/lib/generated/intl/messages_nl.dart b/mobile/lib/generated/intl/messages_nl.dart index bbd5355bf6..778e757213 100644 --- a/mobile/lib/generated/intl/messages_nl.dart +++ b/mobile/lib/generated/intl/messages_nl.dart @@ -497,10 +497,13 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage opgeslagen in gallerij"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage( "Foto\'s van gebeurtenissen verzamelen"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Foto\'s verzamelen"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Kleur"), "confirm": MessageLookupByLibrary.simpleMessage("Bevestig"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1061,6 +1064,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Bestanden verplaatsen naar album..."), "name": MessageLookupByLibrary.simpleMessage("Naam"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Kan geen verbinding maken met Ente, probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met support."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_no.dart b/mobile/lib/generated/intl/messages_no.dart index 0b896460e2..b335db14c7 100644 --- a/mobile/lib/generated/intl/messages_no.dart +++ b/mobile/lib/generated/intl/messages_no.dart @@ -108,6 +108,14 @@ class MessageLookup extends MessageLookupByLibrary { "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( "Vennligst autentiser deg for å se gjennopprettingsnøkkelen din"), "cancel": MessageLookupByLibrary.simpleMessage("Avbryt"), + "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( + "Change location of selected items?"), + "clusteringProgress": + MessageLookupByLibrary.simpleMessage("Clustering progress"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("Collect photos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "cannotAddMorePhotosAfterBecomingViewer": m13, "changeEmail": MessageLookupByLibrary.simpleMessage("Endre e-postadresse"), @@ -352,6 +360,36 @@ class MessageLookup extends MessageLookupByLibrary { "scanThisBarcodeWithnyourAuthenticatorApp": MessageLookupByLibrary.simpleMessage( "Skann denne strekkoden med\nautentiseringsappen din"), + "moveToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Move to hidden album"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), + "next": MessageLookupByLibrary.simpleMessage("Next"), + "noQuickLinksSelected": + MessageLookupByLibrary.simpleMessage("No quick links selected"), + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("No system lock found"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), + "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( + "Password strength is calculated considering the length of the password, used characters, and whether or not the password appears in the top 10,000 most used passwords"), + "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), + "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( + "Please select quick links to remove"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Re-enter password"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Re-enter PIN"), + "removePersonLabel": + MessageLookupByLibrary.simpleMessage("Remove person label"), + "removePublicLinks": + MessageLookupByLibrary.simpleMessage("Remove public links"), + "search": MessageLookupByLibrary.simpleMessage("Search"), + "selectALocation": + MessageLookupByLibrary.simpleMessage("Select a location"), + "selectALocationFirst": + MessageLookupByLibrary.simpleMessage("Select a location first"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Set new password"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Set new PIN"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "security": MessageLookupByLibrary.simpleMessage("Sikkerhet"), "selectAll": MessageLookupByLibrary.simpleMessage("Velg alle"), "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_pl.dart b/mobile/lib/generated/intl/messages_pl.dart index 3efda62f20..9c5bd20467 100644 --- a/mobile/lib/generated/intl/messages_pl.dart +++ b/mobile/lib/generated/intl/messages_pl.dart @@ -499,9 +499,12 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Układ"), "collageSaved": MessageLookupByLibrary.simpleMessage("Kolaż zapisano w galerii"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage("Zbierz zdjęcia z wydarzenia"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Zbierz zdjęcia"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Kolor"), "confirm": MessageLookupByLibrary.simpleMessage("Potwierdź"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1057,6 +1060,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Przenoszenie plików do albumów..."), "name": MessageLookupByLibrary.simpleMessage("Nazwa"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Nie można połączyć się z Ente, spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z pomocą techniczną."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_pt.dart b/mobile/lib/generated/intl/messages_pt.dart index 490a93844b..0f99719486 100644 --- a/mobile/lib/generated/intl/messages_pt.dart +++ b/mobile/lib/generated/intl/messages_pt.dart @@ -495,9 +495,12 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), "collageSaved": MessageLookupByLibrary.simpleMessage("Colagem salva na galeria"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage("Coletar fotos do evento"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Colete fotos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Cor"), "confirm": MessageLookupByLibrary.simpleMessage("Confirme"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1052,6 +1055,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Enviando arquivos para o álbum..."), "name": MessageLookupByLibrary.simpleMessage("Nome"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Não foi possível conectar ao Ente, tente novamente após algum tempo. Se o erro persistir, entre em contato com o suporte."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_ru.dart b/mobile/lib/generated/intl/messages_ru.dart index ff3a5e7fb1..7e465b4449 100644 --- a/mobile/lib/generated/intl/messages_ru.dart +++ b/mobile/lib/generated/intl/messages_ru.dart @@ -482,10 +482,13 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Разметка"), "collageSaved": MessageLookupByLibrary.simpleMessage("Коллаж сохранен в галерее"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage("Собрать фото события"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Собрать фотографии"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Цвет"), "confirm": MessageLookupByLibrary.simpleMessage("Подтвердить"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -1037,6 +1040,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Перемещение файлов в альбом..."), "name": MessageLookupByLibrary.simpleMessage("Имя"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Не удается подключиться к Ente, пожалуйста, повторите попытку через некоторое время. Если ошибка не устраняется, обратитесь в службу поддержки."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_tr.dart b/mobile/lib/generated/intl/messages_tr.dart index a61436b88e..fd0bf79331 100644 --- a/mobile/lib/generated/intl/messages_tr.dart +++ b/mobile/lib/generated/intl/messages_tr.dart @@ -425,10 +425,13 @@ class MessageLookup extends MessageLookupByLibrary { "collageLayout": MessageLookupByLibrary.simpleMessage("Düzen"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Kolajınız galeriye kaydedildi"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage( "Etkinlik fotoğraflarını topla"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Fotoğrafları topla"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("Renk"), "confirm": MessageLookupByLibrary.simpleMessage("Onayla"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( @@ -902,6 +905,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Dosyalar albüme taşınıyor..."), "name": MessageLookupByLibrary.simpleMessage("İsim"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "Ente\'ye bağlanılamıyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse lütfen desteğe başvurun."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/intl/messages_zh.dart b/mobile/lib/generated/intl/messages_zh.dart index 2a4e3b77d4..be6a80085a 100644 --- a/mobile/lib/generated/intl/messages_zh.dart +++ b/mobile/lib/generated/intl/messages_zh.dart @@ -423,8 +423,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("协作者可以将照片和视频添加到共享相册中。"), "collageLayout": MessageLookupByLibrary.simpleMessage("布局"), "collageSaved": MessageLookupByLibrary.simpleMessage("拼贴已保存到相册"), + "collect": MessageLookupByLibrary.simpleMessage("Collect"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage("收集活动照片"), "collectPhotos": MessageLookupByLibrary.simpleMessage("收集照片"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Create a link where your friends can upload photos in original quality."), "color": MessageLookupByLibrary.simpleMessage("颜色"), "confirm": MessageLookupByLibrary.simpleMessage("确认"), "confirm2FADisable": @@ -867,6 +870,7 @@ class MessageLookup extends MessageLookupByLibrary { "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage("正在将文件移动到相册..."), "name": MessageLookupByLibrary.simpleMessage("名称"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Name the album"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( "无法连接到 Ente,请稍后重试。如果错误仍然存在,请联系支持人员。"), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index 12b927ec1b..09480a572d 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -9435,6 +9435,16 @@ class S { ); } + /// `Name the album` + String get nameTheAlbum { + return Intl.message( + 'Name the album', + name: 'nameTheAlbum', + desc: '', + args: [], + ); + } + /// `Choose between your device's default lock screen and a custom lock screen with a PIN or password.` String get appLockDescriptions { return Intl.message( @@ -9445,6 +9455,16 @@ class S { ); } + /// `Create a link where your friends can upload photos in original quality.` + String get collectPhotosDescription { + return Intl.message( + 'Create a link where your friends can upload photos in original quality.', + name: 'collectPhotosDescription', + desc: '', + args: [], + ); + } + /// `To enable app lock, please setup device passcode or screen lock in your system settings.` String get toEnableAppLockPleaseSetupDevicePasscodeOrScreen { return Intl.message( @@ -9455,6 +9475,16 @@ class S { ); } + /// `Collect` + String get collect { + return Intl.message( + 'Collect', + name: 'collect', + desc: '', + args: [], + ); + } + /// `Please authenticate to view your passkey` String get authToViewPasskey { return Intl.message( diff --git a/mobile/lib/l10n/intl_cs.arb b/mobile/lib/l10n/intl_cs.arb index 87b8ff36b4..9075db9a0b 100644 --- a/mobile/lib/l10n/intl_cs.arb +++ b/mobile/lib/l10n/intl_cs.arb @@ -1,4 +1,64 @@ { "@@locale ": "en", + "addToHiddenAlbum": "Add to hidden album", + "moveToHiddenAlbum": "Move to hidden album", + "fileTypes": "File types", + "deleteConfirmDialogBody": "This account is linked to other ente apps, if you use any.\\n\\nYour uploaded data, across all ente apps, will be scheduled for deletion, and your account will be permanently deleted.", + "yourMap": "Your map", + "modifyYourQueryOrTrySearchingFor": "Modify your query, or try searching for", + "contacts": "Contacts", + "editLocation": "Edit location", + "selectALocation": "Select a location", + "selectALocationFirst": "Select a location first", + "changeLocationOfSelectedItems": "Change location of selected items?", + "editsToLocationWillOnlyBeSeenWithinEnte": "Edits to location will only be seen within Ente", + "joinDiscord": "Join Discord", + "locations": "Locations", + "descriptions": "Descriptions", + "addViewers": "{count, plural, zero {Add viewer} one {Add viewer} other {Add viewers}}", + "addCollaborators": "{count, plural, zero {Add collaborator} one {Add collaborator} other {Add collaborators}}", + "longPressAnEmailToVerifyEndToEndEncryption": "Long press an email to verify end to end encryption.", + "createCollaborativeLink": "Create collaborative link", + "search": "Search", + "enterPersonName": "Enter person name", + "removePersonLabel": "Remove person label", + "faceRecognition": "Face recognition", + "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", + "foundFaces": "Found faces", + "clusteringProgress": "Clustering progress", + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "passwordLock": "Password lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts", + "appLockDescription": "Choose between your device\\'s default lock screen and a custom lock screen with a PIN or password.", + "swipeLockEnablePreSteps": "To enable swipe lock, please setup device passcode or screen lock in your system settings.", + "autoLock": "Auto lock", + "immediately": "Immediately", + "autoLockFeatureDescription": "Time after which the app locks after being put in the background", + "hideContent": "Hide content", + "hideContentDescriptionAndroid": "Hides app content in the app switcher and disables screenshots", + "hideContentDescriptionIos": "Hides app content in the app switcher", + "passwordStrengthInfo": "Password strength is calculated considering the length of the password, used characters, and whether or not the password appears in the top 10,000 most used passwords", + "noQuickLinksSelected": "No quick links selected", + "pleaseSelectQuickLinksToRemove": "Please select quick links to remove", + "removePublicLinks": "Remove public links", + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "This will remove public links of all selected quick links.", + "guestView": "Guest view", + "guestViewEnablePreSteps": "To enable guest view, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotos": "Collect photos", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "localSyncErrorMessage": "Looks like something went wrong since local photos sync is taking more time than expected. Please reach out to our support team" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_de.arb b/mobile/lib/l10n/intl_de.arb index 86526b1fd5..e7635a686f 100644 --- a/mobile/lib/l10n/intl_de.arb +++ b/mobile/lib/l10n/intl_de.arb @@ -1310,6 +1310,9 @@ "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Hiermit werden die öffentlichen Links aller ausgewählten schnellen Links entfernt.", "guestView": "Gastansicht", "guestViewEnablePreSteps": "Bitte richte einen Gerätepasscode oder eine Bildschirmsperre ein, um die Gastansicht zu nutzen.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "appLockDescriptions": "Wähle zwischen dem Standard-Sperrbildschirm deines Gerätes und einem eigenen Sperrbildschirm mit PIN oder Passwort.", "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Um die App-Sperre zu aktivieren, konfiguriere bitte den Gerätepasscode oder die Bildschirmsperre in den Systemeinstellungen.", "authToViewPasskey": "Bitte authentifizieren, um deinen Passkey zu sehen", diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index 7b1a60ef36..16cb361484 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -1310,6 +1310,9 @@ "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "This will remove public links of all selected quick links.", "guestView": "Guest view", "guestViewEnablePreSteps": "To enable guest view, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "appLockDescriptions": "Choose between your device's default lock screen and a custom lock screen with a PIN or password.", "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", "authToViewPasskey": "Please authenticate to view your passkey", diff --git a/mobile/lib/l10n/intl_es.arb b/mobile/lib/l10n/intl_es.arb index 67072a18f1..44b8408e2c 100644 --- a/mobile/lib/l10n/intl_es.arb +++ b/mobile/lib/l10n/intl_es.arb @@ -1249,6 +1249,12 @@ "right": "Derecha", "whatsNew": "Qué hay de nuevo", "reviewSuggestions": "Revisar sugerencias", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "appLockDescription": "Choose between your device\\'s default lock screen and a custom lock screen with a PIN or password.", + "swipeLockEnablePreSteps": "To enable swipe lock, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "useAsCover": "Usar como cubierta", "notPersonLabel": "¿No es {name}?", "@notPersonLabel": { diff --git a/mobile/lib/l10n/intl_fr.arb b/mobile/lib/l10n/intl_fr.arb index dfe8688fee..0d013b675d 100644 --- a/mobile/lib/l10n/intl_fr.arb +++ b/mobile/lib/l10n/intl_fr.arb @@ -1222,6 +1222,12 @@ "joinDiscord": "Rejoindre Discord", "locations": "Emplacements", "descriptions": "Descriptions", + "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", + "appLockDescription": "Choose between your device\\'s default lock screen and a custom lock screen with a PIN or password.", + "swipeLockEnablePreSteps": "To enable swipe lock, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "addAName": "Ajouter un nom", "findPeopleByName": "Trouver des personnes rapidement par leur nom", "addViewers": "{count, plural, zero {Ajouter un lecteur} one {Ajouter un lecteur} other {Ajouter des lecteurs}}", diff --git a/mobile/lib/l10n/intl_it.arb b/mobile/lib/l10n/intl_it.arb index f8b3ce27b5..74053eab8a 100644 --- a/mobile/lib/l10n/intl_it.arb +++ b/mobile/lib/l10n/intl_it.arb @@ -1166,6 +1166,22 @@ "viewAddOnButton": "Visualizza componenti aggiuntivi", "addOns": "Componenti aggiuntivi", "addOnPageSubtitle": "Dettagli dei componenti aggiuntivi", + "longPressAnEmailToVerifyEndToEndEncryption": "Long press an email to verify end to end encryption.", + "createCollaborativeLink": "Create collaborative link", + "search": "Search", + "enterPersonName": "Enter person name", + "removePersonLabel": "Remove person label", + "faceRecognition": "Face recognition", + "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", + "foundFaces": "Found faces", + "clusteringProgress": "Clustering progress", + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "next": "Next", + "appLockDescription": "Choose between your device\\'s default lock screen and a custom lock screen with a PIN or password.", + "swipeLockEnablePreSteps": "To enable swipe lock, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "yourMap": "La tua mappa", "modifyYourQueryOrTrySearchingFor": "Modifica la tua interrogazione o prova a cercare", "blackFridaySale": "Offerta del Black Friday", diff --git a/mobile/lib/l10n/intl_ko.arb b/mobile/lib/l10n/intl_ko.arb index b340f0746a..ea3fb5a196 100644 --- a/mobile/lib/l10n/intl_ko.arb +++ b/mobile/lib/l10n/intl_ko.arb @@ -1,5 +1,65 @@ { "@@locale ": "en", + "addToHiddenAlbum": "Add to hidden album", + "moveToHiddenAlbum": "Move to hidden album", + "fileTypes": "File types", + "deleteConfirmDialogBody": "This account is linked to other ente apps, if you use any.\\n\\nYour uploaded data, across all ente apps, will be scheduled for deletion, and your account will be permanently deleted.", + "yourMap": "Your map", + "modifyYourQueryOrTrySearchingFor": "Modify your query, or try searching for", + "contacts": "Contacts", + "editLocation": "Edit location", + "selectALocation": "Select a location", + "selectALocationFirst": "Select a location first", + "changeLocationOfSelectedItems": "Change location of selected items?", + "editsToLocationWillOnlyBeSeenWithinEnte": "Edits to location will only be seen within Ente", + "joinDiscord": "Join Discord", + "locations": "Locations", + "descriptions": "Descriptions", + "addViewers": "{count, plural, zero {Add viewer} one {Add viewer} other {Add viewers}}", + "addCollaborators": "{count, plural, zero {Add collaborator} one {Add collaborator} other {Add collaborators}}", + "longPressAnEmailToVerifyEndToEndEncryption": "Long press an email to verify end to end encryption.", + "createCollaborativeLink": "Create collaborative link", + "search": "Search", + "enterPersonName": "Enter person name", + "removePersonLabel": "Remove person label", + "faceRecognition": "Face recognition", + "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", + "foundFaces": "Found faces", + "clusteringProgress": "Clustering progress", + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "passwordLock": "Password lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts", + "appLockDescription": "Choose between your device\\'s default lock screen and a custom lock screen with a PIN or password.", + "swipeLockEnablePreSteps": "To enable swipe lock, please setup device passcode or screen lock in your system settings.", + "autoLock": "Auto lock", + "immediately": "Immediately", + "autoLockFeatureDescription": "Time after which the app locks after being put in the background", + "hideContent": "Hide content", + "hideContentDescriptionAndroid": "Hides app content in the app switcher and disables screenshots", + "hideContentDescriptionIos": "Hides app content in the app switcher", + "passwordStrengthInfo": "Password strength is calculated considering the length of the password, used characters, and whether or not the password appears in the top 10,000 most used passwords", + "noQuickLinksSelected": "No quick links selected", + "pleaseSelectQuickLinksToRemove": "Please select quick links to remove", + "removePublicLinks": "Remove public links", + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "This will remove public links of all selected quick links.", + "guestView": "Guest view", + "guestViewEnablePreSteps": "To enable guest view, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotos": "Collect photos", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "enterYourEmailAddress": "이메일을 입력하세요", "accountWelcomeBack": "다시 오신 것을 환영합니다!", "email": "이메일", diff --git a/mobile/lib/l10n/intl_nl.arb b/mobile/lib/l10n/intl_nl.arb index 75c13733b7..af19d8c85f 100644 --- a/mobile/lib/l10n/intl_nl.arb +++ b/mobile/lib/l10n/intl_nl.arb @@ -1304,6 +1304,9 @@ "hideContentDescriptionAndroid": "Verbergt app-inhoud in de app-schakelaar en schakelt schermopnamen uit", "hideContentDescriptionIos": "Verbergt de inhoud van de app in de app-schakelaar", "passwordStrengthInfo": "De wachtwoordsterkte wordt berekend aan de hand van de lengte van het wachtwoord, de gebruikte tekens en of het wachtwoord al dan niet in de top 10.000 van meest gebruikte wachtwoorden staat", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "noQuickLinksSelected": "Geen snelle links geselecteerd", "pleaseSelectQuickLinksToRemove": "Selecteer snelle links om te verwijderen", "removePublicLinks": "Verwijder publieke link", diff --git a/mobile/lib/l10n/intl_no.arb b/mobile/lib/l10n/intl_no.arb index 0bb6c5e7b1..da9cdf40fc 100644 --- a/mobile/lib/l10n/intl_no.arb +++ b/mobile/lib/l10n/intl_no.arb @@ -13,6 +13,64 @@ "feedback": "Tilbakemelding", "kindlyHelpUsWithThisInformation": "Vær vennlig og hjelp oss med denne informasjonen", "confirmAccountDeletion": "Bekreft sletting av konto", + "addToHiddenAlbum": "Add to hidden album", + "moveToHiddenAlbum": "Move to hidden album", + "fileTypes": "File types", + "deleteConfirmDialogBody": "This account is linked to other ente apps, if you use any.\\n\\nYour uploaded data, across all ente apps, will be scheduled for deletion, and your account will be permanently deleted.", + "yourMap": "Your map", + "modifyYourQueryOrTrySearchingFor": "Modify your query, or try searching for", + "contacts": "Contacts", + "editLocation": "Edit location", + "selectALocation": "Select a location", + "selectALocationFirst": "Select a location first", + "changeLocationOfSelectedItems": "Change location of selected items?", + "editsToLocationWillOnlyBeSeenWithinEnte": "Edits to location will only be seen within Ente", + "joinDiscord": "Join Discord", + "locations": "Locations", + "descriptions": "Descriptions", + "addViewers": "{count, plural, zero {Add viewer} one {Add viewer} other {Add viewers}}", + "addCollaborators": "{count, plural, zero {Add collaborator} one {Add collaborator} other {Add collaborators}}", + "longPressAnEmailToVerifyEndToEndEncryption": "Long press an email to verify end to end encryption.", + "createCollaborativeLink": "Create collaborative link", + "search": "Search", + "enterPersonName": "Enter person name", + "removePersonLabel": "Remove person label", + "faceRecognition": "Face recognition", + "faceRecognitionIndexingDescription": "Please note that this will result in a higher bandwidth and battery usage until all items are indexed.", + "foundFaces": "Found faces", + "clusteringProgress": "Clustering progress", + "indexingIsPaused": "Indexing is paused, will automatically resume when device is ready", + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts", + "appLockDescription": "Choose between your device\\'s default lock screen and a custom lock screen with a PIN or password.", + "swipeLockEnablePreSteps": "To enable swipe lock, please setup device passcode or screen lock in your system settings.", + "autoLock": "Auto lock", + "immediately": "Immediately", + "autoLockFeatureDescription": "Time after which the app locks after being put in the background", + "hideContent": "Hide content", + "hideContentDescriptionAndroid": "Hides app content in the app switcher and disables screenshots", + "hideContentDescriptionIos": "Hides app content in the app switcher", + "passwordStrengthInfo": "Password strength is calculated considering the length of the password, used characters, and whether or not the password appears in the top 10,000 most used passwords", + "noQuickLinksSelected": "No quick links selected", + "pleaseSelectQuickLinksToRemove": "Please select quick links to remove", + "removePublicLinks": "Remove public links", + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "This will remove public links of all selected quick links.", + "guestView": "Guest view", + "guestViewEnablePreSteps": "To enable guest view, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "deleteAccountPermanentlyButton": "Slett bruker for altid", "yourAccountHasBeenDeleted": "Brukeren din har blitt slettet", "selectReason": "Velg grunn", diff --git a/mobile/lib/l10n/intl_pl.arb b/mobile/lib/l10n/intl_pl.arb index ac0347dfff..76db1eae82 100644 --- a/mobile/lib/l10n/intl_pl.arb +++ b/mobile/lib/l10n/intl_pl.arb @@ -1310,6 +1310,9 @@ "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Spowoduje to usunięcie publicznych linków wszystkich zaznaczonych szybkich linków.", "guestView": "Widok gościa", "guestViewEnablePreSteps": "Aby włączyć widok gościa, należy skonfigurować hasło urządzenia lub blokadę ekranu w ustawieniach Twojego systemu.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "appLockDescriptions": "Wybierz między domyślnym ekranem blokady urządzenia a niestandardowym ekranem blokady z kodem PIN lub hasłem.", "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Aby włączyć blokadę aplikacji, należy skonfigurować hasło urządzenia lub blokadę ekranu w ustawieniach systemu.", "authToViewPasskey": "Prosimy uwierzytelnić się, aby wyświetlić swój klucz dostępu", diff --git a/mobile/lib/l10n/intl_pt.arb b/mobile/lib/l10n/intl_pt.arb index 0878fac316..036f201f0f 100644 --- a/mobile/lib/l10n/intl_pt.arb +++ b/mobile/lib/l10n/intl_pt.arb @@ -1310,6 +1310,9 @@ "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Isto removerá links públicos de todos os links rápidos selecionados.", "guestView": "Visão de convidado", "guestViewEnablePreSteps": "Para ativar a visão de convidado, por favor ative um método de autenticação nas configurações do sistema do seu dispositivo.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "appLockDescriptions": "Escolha entre a tela de bloqueio padrão do seu dispositivo e uma tela de bloqueio personalizada com PIN ou senha.", "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio do app, configure uma senha no dispositivo ou tela de bloqueio nas configurações do sistema.", "authToViewPasskey": "Por favor, autentique-se para ver sua chave de acesso", diff --git a/mobile/lib/l10n/intl_ru.arb b/mobile/lib/l10n/intl_ru.arb index 430999af2d..243cdaa236 100644 --- a/mobile/lib/l10n/intl_ru.arb +++ b/mobile/lib/l10n/intl_ru.arb @@ -1259,6 +1259,12 @@ "left": "Влево", "right": "Вправо", "whatsNew": "Что нового", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "appLockDescription": "Choose between your device\\'s default lock screen and a custom lock screen with a PIN or password.", + "swipeLockEnablePreSteps": "To enable swipe lock, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "reviewSuggestions": "Посмотреть предложения", "useAsCover": "Использовать для обложки", "notPersonLabel": "Не {name}?", diff --git a/mobile/lib/l10n/intl_tr.arb b/mobile/lib/l10n/intl_tr.arb index 27e5326e23..fc8f53bdff 100644 --- a/mobile/lib/l10n/intl_tr.arb +++ b/mobile/lib/l10n/intl_tr.arb @@ -1172,5 +1172,76 @@ "invalidEndpointMessage": "Üzgünüz, girdiğiniz uç nokta geçersiz. Lütfen geçerli bir uç nokta girin ve tekrar deneyin.", "endpointUpdatedMessage": "Fatura başarıyla güncellendi", "customEndpoint": "{endpoint}'e bağlanıldı", + "createCollaborativeLink": "Create collaborative link", + "search": "Search", + "enterPersonName": "Enter person name", + "removePersonLabel": "Remove person label", + "autoPairDesc": "Auto pair works only with devices that support Chromecast.", + "manualPairDesc": "Pair with PIN works with any screen you wish to view your album on.", + "connectToDevice": "Connect to device", + "autoCastDialogBody": "You'll see available Cast devices here.", + "autoCastiOSPermission": "Make sure Local Network permissions are turned on for the Ente Photos app, in Settings.", + "noDeviceFound": "No device found", + "stopCastingTitle": "Stop casting", + "stopCastingBody": "Do you want to stop casting?", + "castIPMismatchTitle": "Failed to cast album", + "castIPMismatchBody": "Please make sure you are on the same network as the TV.", + "pairingComplete": "Pairing complete", + "savingEdits": "Saving edits...", + "autoPair": "Auto pair", + "pairWithPin": "Pair with PIN", + "faceRecognition": "Face recognition", + "foundFaces": "Found faces", + "clusteringProgress": "Clustering progress", + "indexingIsPaused": "Indexing is paused. It will automatically resume when device is ready.", + "trim": "Trim", + "crop": "Crop", + "rotate": "Rotate", + "left": "Left", + "right": "Right", + "whatsNew": "What's new", + "reviewSuggestions": "Review suggestions", + "useAsCover": "Use as cover", + "notPersonLabel": "Not {name}?", + "@notPersonLabel": { + "description": "Label to indicate that the person in the photo is not the person whose name is mentioned", + "placeholders": { + "name": { + "content": "{name}", + "type": "String" + } + } + }, + "reenterPassword": "Re-enter password", + "reenterPin": "Re-enter PIN", + "deviceLock": "Device lock", + "pinLock": "PIN lock", + "next": "Next", + "setNewPassword": "Set new password", + "enterPin": "Enter PIN", + "setNewPin": "Set new PIN", + "appLock": "App lock", + "noSystemLockFound": "No system lock found", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "To enable app lock, please setup device passcode or screen lock in your system settings.", + "tapToUnlock": "Tap to unlock", + "tooManyIncorrectAttempts": "Too many incorrect attempts", + "appLockDescription": "Choose between your device\\'s default lock screen and a custom lock screen with a PIN or password.", + "swipeLockEnablePreSteps": "To enable swipe lock, please setup device passcode or screen lock in your system settings.", + "autoLock": "Auto lock", + "immediately": "Immediately", + "autoLockFeatureDescription": "Time after which the app locks after being put in the background", + "hideContent": "Hide content", + "hideContentDescriptionAndroid": "Hides app content in the app switcher and disables screenshots", + "hideContentDescriptionIos": "Hides app content in the app switcher", + "passwordStrengthInfo": "Password strength is calculated considering the length of the password, used characters, and whether or not the password appears in the top 10,000 most used passwords", + "noQuickLinksSelected": "No quick links selected", + "pleaseSelectQuickLinksToRemove": "Please select quick links to remove", + "removePublicLinks": "Remove public links", + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "This will remove public links of all selected quick links.", + "guestView": "Guest view", + "guestViewEnablePreSteps": "To enable guest view, please setup device passcode or screen lock in your system settings.", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "localSyncErrorMessage": "Looks like something went wrong since local photos sync is taking more time than expected. Please reach out to our support team" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_zh.arb b/mobile/lib/l10n/intl_zh.arb index c1226b1730..d52976dadf 100644 --- a/mobile/lib/l10n/intl_zh.arb +++ b/mobile/lib/l10n/intl_zh.arb @@ -1315,5 +1315,8 @@ "authToViewPasskey": "请验证身份以查看您的通行密钥", "loopVideoOn": "循环播放视频开启", "loopVideoOff": "循环播放视频关闭", + "nameTheAlbum": "Name the album", + "collectPhotosDescription": "Create a link where your friends can upload photos in original quality.", + "collect": "Collect", "localSyncErrorMessage": "Looks like something went wrong since local photos sync is taking more time than expected. Please reach out to our support team" } \ No newline at end of file diff --git a/mobile/lib/ui/tabs/shared/empty_state.dart b/mobile/lib/ui/tabs/shared/empty_state.dart index d466e0aa07..b69d64b96d 100644 --- a/mobile/lib/ui/tabs/shared/empty_state.dart +++ b/mobile/lib/ui/tabs/shared/empty_state.dart @@ -7,6 +7,7 @@ import 'package:photos/ui/collections/collection_action_sheet.dart'; import 'package:photos/ui/components/buttons/button_widget.dart'; import "package:photos/ui/components/empty_state_item_widget.dart"; import "package:photos/ui/components/models/button_type.dart"; +import "package:photos/utils/collection_util.dart"; import "package:photos/utils/share_util.dart"; import "package:photos/utils/toast_util.dart"; @@ -80,10 +81,7 @@ class SharedEmptyStateWidget extends StatelessWidget { labelText: S.of(context).collectEventPhotos, icon: Icons.add_photo_alternate_outlined, onTap: () async { - showCollectionActionSheet( - context, - actionType: CollectionActionType.collectPhotos, - ); + await onTapCollectEventPhotos(context); }, ), const SizedBox(height: 6), diff --git a/mobile/lib/ui/tabs/shared_collections_tab.dart b/mobile/lib/ui/tabs/shared_collections_tab.dart index 92c044c9fe..7e93abca39 100644 --- a/mobile/lib/ui/tabs/shared_collections_tab.dart +++ b/mobile/lib/ui/tabs/shared_collections_tab.dart @@ -13,18 +13,15 @@ import 'package:photos/services/collections_service.dart'; import "package:photos/ui/collections/album/row_item.dart"; import "package:photos/ui/collections/collection_list_page.dart"; import 'package:photos/ui/common/loading_widget.dart'; -import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/buttons/icon_button_widget.dart"; -import "package:photos/ui/components/divider_widget.dart"; -import "package:photos/ui/components/models/button_type.dart"; import 'package:photos/ui/tabs/section_title.dart'; import "package:photos/ui/tabs/shared/all_quick_links_page.dart"; import "package:photos/ui/tabs/shared/empty_state.dart"; import "package:photos/ui/tabs/shared/quick_link_album_item.dart"; +import "package:photos/ui/viewer/gallery/collect_photos_card_widget.dart"; import "package:photos/ui/viewer/gallery/collection_page.dart"; import "package:photos/utils/debouncer.dart"; import "package:photos/utils/navigation_util.dart"; -import "package:photos/utils/share_util.dart"; class SharedCollectionsTab extends StatefulWidget { const SharedCollectionsTab({super.key}); @@ -293,31 +290,8 @@ class _SharedCollectionsTabState extends State ), ) : const SizedBox.shrink(), - collections.incoming.isNotEmpty - ? Column( - children: [ - const DividerWidget(dividerType: DividerType.bottomBar), - const SizedBox(height: 32), - Padding( - padding: const EdgeInsets.fromLTRB(24, 0, 24, 12), - child: ButtonWidget( - buttonType: numberOfQuickLinks == 0 && - collections.outgoing.isEmpty - ? ButtonType.trailingIconSecondary - : ButtonType.trailingIconPrimary, - labelText: S.of(context).inviteYourFriendsToEnte, - icon: Icons.ios_share_outlined, - onTap: () async { - // ignore: unawaited_futures - shareText( - S.of(context).shareTextRecommendUsingEnte, - ); - }, - ), - ), - ], - ) - : const SizedBox.shrink(), + const SizedBox(height: 4), + const CollectPhotosCardWidget(), const SizedBox(height: 32), ], ), diff --git a/mobile/lib/ui/viewer/gallery/collect_photos_bottom_buttons.dart b/mobile/lib/ui/viewer/gallery/collect_photos_bottom_buttons.dart new file mode 100644 index 0000000000..5cb6f6c876 --- /dev/null +++ b/mobile/lib/ui/viewer/gallery/collect_photos_bottom_buttons.dart @@ -0,0 +1,158 @@ +import "package:fast_base58/fast_base58.dart"; +import "package:flutter/material.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/models/collection/collection.dart"; +import "package:photos/models/selected_files.dart"; +import "package:photos/services/collections_service.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/actions/collection/collection_sharing_actions.dart"; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; +import "package:photos/ui/viewer/gallery/hooks/add_photos_sheet.dart"; +import "package:photos/utils/dialog_util.dart"; +import "package:photos/utils/share_util.dart"; + +class CollectPhotosBottomButtons extends StatefulWidget { + final Collection c; + final SelectedFiles? selectedFiles; + const CollectPhotosBottomButtons( + this.c, { + super.key, + this.selectedFiles, + }); + + @override + State createState() => _EmptyAlbumStateNewState(); +} + +class _EmptyAlbumStateNewState extends State { + final ValueNotifier _hasSelectedFilesNotifier = ValueNotifier(false); + final GlobalKey shareLinkAlbumButtonKey = GlobalKey(); + late CollectionActions collectionActions; + + @override + void initState() { + super.initState(); + collectionActions = CollectionActions(CollectionsService.instance); + widget.selectedFiles?.addListener(_selectedFilesListener); + } + + @override + void dispose() { + _hasSelectedFilesNotifier.dispose(); + widget.selectedFiles!.removeListener(_selectedFilesListener); + super.dispose(); + } + + Future _shareAlbumUrl() async { + final String collectionKey = Base58Encode( + CollectionsService.instance.getCollectionKey(widget.c.id), + ); + final String url = "${widget.c.publicURLs!.first!.url}#$collectionKey"; + await shareAlbumLinkWithPlaceholder( + context, + widget.c, + url, + shareLinkAlbumButtonKey, + ); + } + + Future _generateAlbumUrl() async { + final dialog = createProgressDialog( + context, + S.of(context).creatingLink, + isDismissible: true, + ); + await dialog.show(); + final bool hasUrl = widget.c.hasLink; + if (hasUrl) { + await _shareAlbumUrl(); + } else { + final bool result = await collectionActions.enableUrl(context, widget.c); + if (result) { + await _shareAlbumUrl(); + } else { + await showGenericErrorDialog(context: context, error: result); + } + } + await dialog.hide(); + } + + @override + Widget build(BuildContext context) { + return SafeArea( + child: ValueListenableBuilder( + valueListenable: _hasSelectedFilesNotifier, + builder: (context, value, child) { + return AnimatedCrossFade( + firstCurve: Curves.easeInOutExpo, + secondCurve: Curves.easeInOutExpo, + sizeCurve: Curves.easeInOutExpo, + duration: const Duration(milliseconds: 300), + crossFadeState: !_hasSelectedFilesNotifier.value + ? CrossFadeState.showFirst + : CrossFadeState.showSecond, + firstChild: Container( + decoration: BoxDecoration( + border: Border( + top: BorderSide( + color: getEnteColorScheme(context).strokeFaint, + ), + ), + color: getEnteColorScheme(context).backgroundElevated, + ), + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 15, 16, 18), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + decoration: BoxDecoration( + color: getEnteColorScheme(context).backgroundElevated2, + borderRadius: + const BorderRadius.all(Radius.circular(4)), + ), + child: ButtonWidget( + buttonType: ButtonType.secondary, + buttonSize: ButtonSize.large, + labelText: S.of(context).addPhotos, + icon: Icons.add_photo_alternate_outlined, + shouldSurfaceExecutionStates: false, + onTap: () async { + try { + await showAddPhotosSheet(context, widget.c); + } catch (e) { + await showGenericErrorDialog( + context: context, + error: e, + ); + } + }, + ), + ), + const SizedBox(height: 8), + ButtonWidget( + buttonType: ButtonType.primary, + buttonSize: ButtonSize.large, + labelText: S.of(context).share, + icon: Icons.adaptive.share, + shouldSurfaceExecutionStates: false, + onTap: () async { + await _generateAlbumUrl(); + }, + ), + ], + ), + ), + ), + secondChild: const SizedBox.shrink(), + ); + }, + ), + ); + } + + _selectedFilesListener() { + _hasSelectedFilesNotifier.value = widget.selectedFiles!.files.isNotEmpty; + } +} diff --git a/mobile/lib/ui/viewer/gallery/collect_photos_card_widget.dart b/mobile/lib/ui/viewer/gallery/collect_photos_card_widget.dart new file mode 100644 index 0000000000..7ace20a3b1 --- /dev/null +++ b/mobile/lib/ui/viewer/gallery/collect_photos_card_widget.dart @@ -0,0 +1,141 @@ +import "package:figma_squircle/figma_squircle.dart"; +import 'package:flutter/material.dart'; +import "package:photos/generated/l10n.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; +import "package:photos/utils/collection_util.dart"; + +class CollectPhotosCardWidget extends StatefulWidget { + const CollectPhotosCardWidget({super.key}); + + @override + State createState() => + _CollectPhotosCardWidgetState(); +} + +class _CollectPhotosCardWidgetState extends State { + @override + Widget build(BuildContext context) { + final textTheme = getEnteTextTheme(context); + final colorTheme = getEnteColorScheme(context); + return Stack( + children: [ + Positioned( + bottom: 22.5, + left: 14.5, + child: Container( + height: 125, + width: 125, + decoration: ShapeDecoration( + gradient: LinearGradient( + colors: [ + colorTheme.primary700.withOpacity(0.9), + colorTheme.backdropBase.withOpacity(0.6), + colorTheme.backdropBase, + ], + begin: Alignment.bottomLeft, + end: Alignment.topRight, + ), + shape: SmoothRectangleBorder( + borderRadius: SmoothBorderRadius( + cornerRadius: 12.0, + cornerSmoothing: 1.0, + ), + ), + ), + ), + ), + GestureDetector( + onTap: () => onTapCollectEventPhotos(context), + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 16, 16, 24), + child: Container( + decoration: ShapeDecoration( + color: colorTheme.backgroundElevated, + shadows: [ + BoxShadow( + color: colorTheme.textBase.withOpacity(0.1), + blurRadius: 4.0, + offset: const Offset(0, 1), + ), + ], + shape: SmoothRectangleBorder( + borderRadius: SmoothBorderRadius( + cornerRadius: 10.0, + cornerSmoothing: 1.0, + ), + ), + ), + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + S.of(context).collectPhotos, + style: textTheme.bodyBold, + ), + const SizedBox( + height: 16, + ), + Text( + S.of(context).collectPhotosDescription, + style: textTheme.smallMuted, + ), + const SizedBox( + height: 34, + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ButtonWidget( + buttonType: ButtonType.primary, + buttonSize: ButtonSize.small, + labelText: S.of(context).collect, + icon: Icons.add_photo_alternate_outlined, + shouldShowSuccessConfirmation: false, + shouldSurfaceExecutionStates: false, + onTap: () => onTapCollectEventPhotos(context), + ), + ], + ), + ], + ), + ), + ), + ), + ), + Positioned( + bottom: 24, + left: 16, + child: Container( + height: 90, + width: 90, + decoration: BoxDecoration( + borderRadius: + const BorderRadius.only(bottomLeft: Radius.circular(10)), + gradient: LinearGradient( + colors: [ + colorTheme.primary700.withOpacity(0.4), + colorTheme.backgroundElevated.withOpacity(0.6), + colorTheme.backgroundElevated, + ], + begin: Alignment.bottomLeft, + end: Alignment.topRight, + ), + ), + ), + ), + Positioned( + bottom: 25, + left: 20, + child: SizedBox( + child: Image.asset('assets/create_new_album.png'), + ), + ), + ], + ); + } +} diff --git a/mobile/lib/ui/viewer/gallery/collection_page.dart b/mobile/lib/ui/viewer/gallery/collection_page.dart index e0288f238b..5683c14b8a 100644 --- a/mobile/lib/ui/viewer/gallery/collection_page.dart +++ b/mobile/lib/ui/viewer/gallery/collection_page.dart @@ -12,6 +12,7 @@ import 'package:photos/models/gallery_type.dart'; import 'package:photos/models/selected_files.dart'; import 'package:photos/services/ignored_files_service.dart'; import 'package:photos/ui/viewer/actions/file_selection_overlay_bar.dart'; +import "package:photos/ui/viewer/gallery/collect_photos_bottom_buttons.dart"; import "package:photos/ui/viewer/gallery/empty_album_state.dart"; import 'package:photos/ui/viewer/gallery/empty_state.dart'; import 'package:photos/ui/viewer/gallery/gallery.dart'; @@ -22,11 +23,13 @@ class CollectionPage extends StatelessWidget { final CollectionWithThumbnail c; final String tagPrefix; final bool? hasVerifiedLock; + final bool isFromCollectPhotos; CollectionPage( this.c, { this.tagPrefix = "collection", this.hasVerifiedLock = false, + this.isFromCollectPhotos = false, Key? key, }) : super(key: key); @@ -86,8 +89,14 @@ class CollectionPage extends StatelessWidget { sortAsyncFn: () => c.collection.pubMagicMetadata.asc ?? false, showSelectAllByDefault: galleryType != GalleryType.sharedCollection, emptyState: galleryType == GalleryType.ownedCollection - ? EmptyAlbumState(c.collection) + ? EmptyAlbumState( + c.collection, + isFromCollectPhotos: isFromCollectPhotos, + ) : const EmptyState(), + footer: isFromCollectPhotos + ? const SizedBox(height: 20) + : const SizedBox(height: 212), ); return Scaffold( appBar: PreferredSize( @@ -97,8 +106,15 @@ class CollectionPage extends StatelessWidget { c.collection.displayName, _selectedFiles, collection: c.collection, + isFromCollectPhotos: isFromCollectPhotos, ), ), + bottomNavigationBar: isFromCollectPhotos + ? CollectPhotosBottomButtons( + c.collection, + selectedFiles: _selectedFiles, + ) + : const SizedBox.shrink(), body: SelectionState( selectedFiles: _selectedFiles, child: Stack( diff --git a/mobile/lib/ui/viewer/gallery/empty_album_state.dart b/mobile/lib/ui/viewer/gallery/empty_album_state.dart index c90721a687..72c13c226e 100644 --- a/mobile/lib/ui/viewer/gallery/empty_album_state.dart +++ b/mobile/lib/ui/viewer/gallery/empty_album_state.dart @@ -8,35 +8,51 @@ import "package:photos/utils/dialog_util.dart"; class EmptyAlbumState extends StatelessWidget { final Collection c; - const EmptyAlbumState(this.c, {super.key}); + final bool isFromCollectPhotos; + const EmptyAlbumState( + this.c, { + super.key, + this.isFromCollectPhotos = false, + }); @override Widget build(BuildContext context) { - return Stack( - children: [ - Center( - child: Opacity( - opacity: 0.5, - child: Image.asset('assets/loading_photos_background.png'), - ), - ), - Center( - child: ButtonWidget( - buttonType: ButtonType.primary, - buttonSize: ButtonSize.small, - labelText: S.of(context).addPhotos, - icon: Icons.add_photo_alternate_outlined, - shouldSurfaceExecutionStates: false, - onTap: () async { - try { - await showAddPhotosSheet(context, c); - } catch (e) { - await showGenericErrorDialog(context: context, error: e); - } - }, - ), - ), - ], - ); + return isFromCollectPhotos + ? Stack( + children: [ + Center( + child: Opacity( + opacity: 0.5, + child: Image.asset('assets/new_empty_album.png'), + ), + ), + ], + ) + : Stack( + children: [ + Center( + child: Opacity( + opacity: 0.5, + child: Image.asset('assets/loading_photos_background.png'), + ), + ), + Center( + child: ButtonWidget( + buttonType: ButtonType.primary, + buttonSize: ButtonSize.small, + labelText: S.of(context).addPhotos, + icon: Icons.add_photo_alternate_outlined, + shouldSurfaceExecutionStates: false, + onTap: () async { + try { + await showAddPhotosSheet(context, c); + } catch (e) { + await showGenericErrorDialog(context: context, error: e); + } + }, + ), + ), + ], + ); } } diff --git a/mobile/lib/ui/viewer/gallery/gallery_app_bar_widget.dart b/mobile/lib/ui/viewer/gallery/gallery_app_bar_widget.dart index 4535ce7c86..b0a35613ea 100644 --- a/mobile/lib/ui/viewer/gallery/gallery_app_bar_widget.dart +++ b/mobile/lib/ui/viewer/gallery/gallery_app_bar_widget.dart @@ -52,6 +52,7 @@ class GalleryAppBarWidget extends StatefulWidget { final SelectedFiles selectedFiles; final DeviceCollection? deviceCollection; final Collection? collection; + final bool isFromCollectPhotos; const GalleryAppBarWidget( this.type, @@ -60,6 +61,7 @@ class GalleryAppBarWidget extends StatefulWidget { Key? key, this.deviceCollection, this.collection, + this.isFromCollectPhotos = false, }) : super(key: key); @override @@ -306,7 +308,7 @@ class _GalleryAppBarWidgetState extends State { ), ); } - if (galleryType.isSharable()) { + if (galleryType.isSharable() && !widget.isFromCollectPhotos) { actions.add( Tooltip( message: "Share", diff --git a/mobile/lib/utils/collection_util.dart b/mobile/lib/utils/collection_util.dart new file mode 100644 index 0000000000..1c3eec49d2 --- /dev/null +++ b/mobile/lib/utils/collection_util.dart @@ -0,0 +1,49 @@ +import "package:flutter/material.dart"; +import "package:intl/intl.dart"; +import "package:logging/logging.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/models/collection/collection.dart"; +import "package:photos/models/collection/collection_items.dart"; +import "package:photos/services/collections_service.dart"; +import "package:photos/ui/viewer/gallery/collection_page.dart"; +import "package:photos/utils/dialog_util.dart"; +import "package:photos/utils/navigation_util.dart"; + +Future onTapCollectEventPhotos(BuildContext context) async { + final String currentDate = DateFormat('MMMM d, yyyy').format(DateTime.now()); + final result = await showTextInputDialog( + context, + title: S.of(context).nameTheAlbum, + submitButtonLabel: S.of(context).create, + hintText: S.of(context).enterAlbumName, + alwaysShowSuccessState: false, + initialValue: currentDate, + textCapitalization: TextCapitalization.words, + onSubmit: (String text) async { + // indicates user cancelled the rename request + if (text.trim() == "") { + return; + } + + try { + final Collection c = + await CollectionsService.instance.createAlbum(text); + // ignore: unawaited_futures + routeToPage( + context, + CollectionPage( + isFromCollectPhotos: true, + CollectionWithThumbnail(c, null), + ), + ); + } catch (e, s) { + Logger("Collect event photos from CollectPhotosCardWidget") + .severe("Failed to rename album", e, s); + rethrow; + } + }, + ); + if (result is Exception) { + await showGenericErrorDialog(context: context, error: result); + } +}