diff --git a/mobile/ios/Podfile.lock b/mobile/ios/Podfile.lock index 47f378bd59..dc42f83a4b 100644 --- a/mobile/ios/Podfile.lock +++ b/mobile/ios/Podfile.lock @@ -3,8 +3,6 @@ PODS: - Flutter - battery_info (0.0.1): - Flutter - - blurhash_ffi (0.0.1): - - Flutter - connectivity_plus (0.0.1): - Flutter - FlutterMacOS @@ -246,7 +244,6 @@ PODS: DEPENDENCIES: - background_fetch (from `.symlinks/plugins/background_fetch/ios`) - battery_info (from `.symlinks/plugins/battery_info/ios`) - - blurhash_ffi (from `.symlinks/plugins/blurhash_ffi/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) - dart_ui_isolate (from `.symlinks/plugins/dart_ui_isolate/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) @@ -330,8 +327,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/background_fetch/ios" battery_info: :path: ".symlinks/plugins/battery_info/ios" - blurhash_ffi: - :path: ".symlinks/plugins/blurhash_ffi/ios" connectivity_plus: :path: ".symlinks/plugins/connectivity_plus/darwin" dart_ui_isolate: @@ -442,7 +437,6 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: background_fetch: 2319bf7e18237b4b269430b7f14d177c0df09c5a battery_info: 09f5c9ee65394f2291c8c6227bedff345b8a730c - blurhash_ffi: 4831b96320d4273876c9a2fd3f7d50b8a3a53509 connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db dart_ui_isolate: d5bcda83ca4b04f129d70eb90110b7a567aece14 device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 diff --git a/mobile/ios/Runner.xcodeproj/project.pbxproj b/mobile/ios/Runner.xcodeproj/project.pbxproj index e3688f71ab..dd14771994 100644 --- a/mobile/ios/Runner.xcodeproj/project.pbxproj +++ b/mobile/ios/Runner.xcodeproj/project.pbxproj @@ -292,7 +292,6 @@ "${BUILT_PRODUCTS_DIR}/Toast/Toast.framework", "${BUILT_PRODUCTS_DIR}/background_fetch/background_fetch.framework", "${BUILT_PRODUCTS_DIR}/battery_info/battery_info.framework", - "${BUILT_PRODUCTS_DIR}/blurhash_ffi/blurhash_ffi.framework", "${BUILT_PRODUCTS_DIR}/connectivity_plus/connectivity_plus.framework", "${BUILT_PRODUCTS_DIR}/dart_ui_isolate/dart_ui_isolate.framework", "${BUILT_PRODUCTS_DIR}/device_info_plus/device_info_plus.framework", @@ -388,7 +387,6 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/background_fetch.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/battery_info.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/blurhash_ffi.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity_plus.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/dart_ui_isolate.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info_plus.framework", diff --git a/mobile/lib/generated/intl/messages_de.dart b/mobile/lib/generated/intl/messages_de.dart index 595d34ca43..a4cb6f2117 100644 --- a/mobile/lib/generated/intl/messages_de.dart +++ b/mobile/lib/generated/intl/messages_de.dart @@ -683,6 +683,8 @@ class MessageLookup extends MessageLookupByLibrary { "enableMaps": MessageLookupByLibrary.simpleMessage("Karten aktivieren"), "enableMapsDesc": MessageLookupByLibrary.simpleMessage( "Dies zeigt Ihre Fotos auf einer Weltkarte.\n\nDiese Karte wird von OpenStreetMap gehostet und die genauen Standorte Ihrer Fotos werden niemals geteilt.\n\nSie können diese Funktion jederzeit in den Einstellungen deaktivieren."), + "enableMultiPartUpload": MessageLookupByLibrary.simpleMessage( + "Mehrteiliges Hochladen aktivieren"), "encryptingBackup": MessageLookupByLibrary.simpleMessage("Verschlüssele Sicherung …"), "encryption": MessageLookupByLibrary.simpleMessage("Verschlüsselung"), diff --git a/mobile/lib/generated/intl/messages_en.dart b/mobile/lib/generated/intl/messages_en.dart index 5f9b7d5d27..0de39a7383 100644 --- a/mobile/lib/generated/intl/messages_en.dart +++ b/mobile/lib/generated/intl/messages_en.dart @@ -963,6 +963,16 @@ class MessageLookup extends MessageLookupByLibrary { "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "memoryCount": m34, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), + "mlConsent": + MessageLookupByLibrary.simpleMessage("Enable machine learning"), + "mlConsentConfirmation": MessageLookupByLibrary.simpleMessage( + "I understand, and wish to enable machine learning"), + "mlConsentDescription": MessageLookupByLibrary.simpleMessage( + "If you enable machine learning, Ente will extract information like face geometry from files. This will happen on your device, and any generated biometric information will be end-to-end encrypted."), + "mlConsentPrivacy": MessageLookupByLibrary.simpleMessage( + "Please click here for more details about this feature in our privacy policy"), + "mlConsentTitle": + MessageLookupByLibrary.simpleMessage("Enable machine learning?"), "mlFunctions": MessageLookupByLibrary.simpleMessage("ML functions"), "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( "Please note that machine learning will result in a higher bandwidth and battery usage until all items are indexed."), diff --git a/mobile/lib/generated/intl/messages_pl.dart b/mobile/lib/generated/intl/messages_pl.dart index 54b76e07cd..abb44e9cca 100644 --- a/mobile/lib/generated/intl/messages_pl.dart +++ b/mobile/lib/generated/intl/messages_pl.dart @@ -21,7 +21,7 @@ class MessageLookup extends MessageLookupByLibrary { String get localeName => 'pl'; static String m0(count) => - "${Intl.plural(count, one: 'Dodaj współpracownika', few: 'Dodaj współpracowników', many: 'Dodaj współpracowników', other: 'Dodaj współpracowników')}"; + "${Intl.plural(count, one: 'Dodaj współuczestnika', few: 'Dodaj współuczestników', many: 'Dodaj współuczestników', other: 'Dodaj współuczestników')}"; static String m2(count) => "${Intl.plural(count, one: 'Dodaj element', few: 'Dodaj elementy', other: 'Dodaj elementów')}"; @@ -48,7 +48,7 @@ class MessageLookup extends MessageLookupByLibrary { "Prosimy najpierw anulować istniejącą subskrypcję z ${paymentProvider}"; static String m10(user) => - "${user} nie będzie mógł dodać więcej zdjęć do tego albumu\n\nJednak nadal będzie mógł usunąć istniejące zdjęcia, które dodał"; + "${user} nie będzie mógł dodać więcej zdjęć do tego albumu\n\nJednak nadal będą mogli usunąć istniejące zdjęcia, które dodali"; static String m11(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { @@ -135,7 +135,7 @@ class MessageLookup extends MessageLookupByLibrary { "Porozmawiaj ze wsparciem ${providerName} jeśli zostałeś obciążony"; static String m40(endDate) => - "Bezpłatny okres próbny do ${endDate}.\nNastępnie możesz wybrać płatny plan."; + "Bezpłatny okres próbny ważny do ${endDate}.\nNastępnie możesz wybrać płatny plan."; static String m41(toEmail) => "Prosimy o kontakt mailowy pod adresem ${toEmail}"; @@ -175,7 +175,7 @@ class MessageLookup extends MessageLookupByLibrary { static String m54(emailIDs) => "Udostępnione z ${emailIDs}"; static String m55(fileType) => - "Ten ${fileType} zostanie usunięty z twojego urządzenia."; + "Ten ${fileType} zostanie usunięty z Twojego urządzenia."; static String m56(fileType) => "Ten ${fileType} jest zarówno w Ente, jak i na twoim urządzeniu."; @@ -205,7 +205,7 @@ class MessageLookup extends MessageLookupByLibrary { static String m65(count) => "${Intl.plural(count, zero: '', one: '${count} dzień', few: '${count} dni', other: '${count} dni')}"; - static String m66(endDate) => "Ważna do ${endDate}"; + static String m66(endDate) => "Ważne do ${endDate}"; static String m67(email) => "Zweryfikuj ${email}"; @@ -215,7 +215,7 @@ class MessageLookup extends MessageLookupByLibrary { static String m69(count) => "${Intl.plural(count, one: '${count} rok temu', few: '${count} lata temu', many: '${count} lat temu', other: '${count} lata temu')}"; - static String m70(storageSaved) => "Pomyślnie zwolniłeś ${storageSaved}!"; + static String m70(storageSaved) => "Pomyślnie zwolniłeś/aś ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -232,7 +232,7 @@ class MessageLookup extends MessageLookupByLibrary { "addANewEmail": MessageLookupByLibrary.simpleMessage("Dodaj nowy adres e-mail"), "addCollaborator": - MessageLookupByLibrary.simpleMessage("Dodaj kolaboratora"), + MessageLookupByLibrary.simpleMessage("Dodaj współuczestnika"), "addCollaborators": m0, "addFromDevice": MessageLookupByLibrary.simpleMessage("Dodaj z urządzenia"), @@ -252,7 +252,7 @@ class MessageLookup extends MessageLookupByLibrary { "addToEnte": MessageLookupByLibrary.simpleMessage("Dodaj do Ente"), "addToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Dodaj do ukrytego albumu"), - "addViewer": MessageLookupByLibrary.simpleMessage("Dodaj obserwatora"), + "addViewer": MessageLookupByLibrary.simpleMessage("Dodaj widza"), "addViewers": m1, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Dodaj swoje zdjęcia teraz"), @@ -261,10 +261,9 @@ class MessageLookup extends MessageLookupByLibrary { "addedSuccessfullyTo": m5, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Dodawanie do ulubionych..."), - "advanced": - MessageLookupByLibrary.simpleMessage("Ustawienia zaawansowane"), + "advanced": MessageLookupByLibrary.simpleMessage("Zaawansowane"), "advancedSettings": - MessageLookupByLibrary.simpleMessage("Ustawienia zaawansowane"), + MessageLookupByLibrary.simpleMessage("Zaawansowane"), "after1Day": MessageLookupByLibrary.simpleMessage("Po 1 dniu"), "after1Hour": MessageLookupByLibrary.simpleMessage("Po 1 godzinie"), "after1Month": MessageLookupByLibrary.simpleMessage("Po 1 miesiącu"), @@ -315,7 +314,7 @@ class MessageLookup extends MessageLookupByLibrary { "Wybierz między domyślnym ekranem blokady urządzenia a niestandardowym ekranem blokady z kodem PIN lub hasłem."), "appVersion": m7, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), - "apply": MessageLookupByLibrary.simpleMessage("Użyj"), + "apply": MessageLookupByLibrary.simpleMessage("Zastosuj"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Użyj kodu"), "appstoreSubscription": MessageLookupByLibrary.simpleMessage("Subskrypcja AppStore"), @@ -346,37 +345,37 @@ class MessageLookup extends MessageLookupByLibrary { "atAFalloutShelter": MessageLookupByLibrary.simpleMessage("w schronie"), "authToChangeEmailVerificationSetting": MessageLookupByLibrary.simpleMessage( - "Proszę uwierzytelnić się, aby zmienić weryfikację e-mail"), + "Prosimy uwierzytelnić się, aby zmienić weryfikację e-mail"), "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( - "Proszę uwierzytelnić się, aby zmienić ustawienia ekranu blokady"), + "Prosimy uwierzytelnić się, aby zmienić ustawienia ekranu blokady"), "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( - "Proszę uwierzytelnić się, aby zmienić swój adres e-mail"), + "Prosimy uwierzytelnić się, aby zmienić swój adres e-mail"), "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( - "Proszę uwierzytelnić się, aby zmienić hasło"), + "Prosimy uwierzytelnić się, aby zmienić hasło"), "authToConfigureTwofactorAuthentication": MessageLookupByLibrary.simpleMessage( "Uwierzytelnij się, aby skonfigurować uwierzytelnianie dwustopniowe"), "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( - "Proszę uwierzytelnić się, aby zainicjować usuwanie konta"), + "Prosimy uwierzytelnić się, aby zainicjować usuwanie konta"), "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( - "Proszę uwierzytelnić, aby wyświetlić swoje aktywne sesje"), + "Prosimy uwierzytelnić się, aby wyświetlić swoje aktywne sesje"), "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( - "Proszę uwierzytelnić się, aby wyświetlić ukryte pliki"), + "Prosimy uwierzytelnić się, aby wyświetlić ukryte pliki"), "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( "Proszę uwierzytelnić się, aby wyświetlić swoje wspomnienia"), "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( - "Proszę uwierzytelnić się, aby wyświetlić swój klucz odzyskiwania"), + "Prosimy uwierzytelnić się, aby wyświetlić swój klucz odzyskiwania"), "authenticating": MessageLookupByLibrary.simpleMessage("Uwierzytelnianie..."), "authenticationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( - "Uwierzytelnianie nie powiodło się, proszę spróbować ponownie"), + "Uwierzytelnianie nie powiodło się, prosimy spróbować ponownie"), "authenticationSuccessful": MessageLookupByLibrary.simpleMessage( "Uwierzytelnianie powiodło się!"), "autoCastDialogBody": MessageLookupByLibrary.simpleMessage( "Tutaj zobaczysz dostępne urządzenia Cast."), "autoCastiOSPermission": MessageLookupByLibrary.simpleMessage( - "Upewnij się, że uprawnienia sieci lokalnej są włączone dla aplikacji Ente Zdjęcia w Ustawieniach."), + "Upewnij się, że uprawnienia sieci lokalnej są włączone dla aplikacji Zdjęcia Ente w Ustawieniach."), "autoLock": MessageLookupByLibrary.simpleMessage("Automatyczna blokada"), "autoLockFeatureDescription": MessageLookupByLibrary.simpleMessage( @@ -449,9 +448,9 @@ class MessageLookup extends MessageLookupByLibrary { "claimed": MessageLookupByLibrary.simpleMessage("Odebrano"), "claimedStorageSoFar": m11, "cleanUncategorized": - MessageLookupByLibrary.simpleMessage("Wyczyść niekategoryzowane"), + MessageLookupByLibrary.simpleMessage("Wyczyść Nieskategoryzowane"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( - "Usuń wszystkie pliki z niekategoryzowanych, które są obecne w innych albumach"), + "Usuń wszystkie pliki z Nieskategoryzowanych, które są obecne w innych albumach"), "clearCaches": MessageLookupByLibrary.simpleMessage("Wyczyść pamięć podręczną"), "clearIndexes": MessageLookupByLibrary.simpleMessage("Wyczyść indeksy"), @@ -464,7 +463,7 @@ class MessageLookup extends MessageLookupByLibrary { "clubByFileName": MessageLookupByLibrary.simpleMessage("Club według nazwy pliku"), "clusteringProgress": - MessageLookupByLibrary.simpleMessage("Postęp grupowania"), + MessageLookupByLibrary.simpleMessage("Postęp tworzenia klastrów"), "codeAppliedPageTitle": MessageLookupByLibrary.simpleMessage("Kod został zastosowany"), "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -472,14 +471,14 @@ class MessageLookup extends MessageLookupByLibrary { "codeUsedByYou": MessageLookupByLibrary.simpleMessage("Kod użyty przez Ciebie"), "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( - "Utwórz link, aby umożliwić innym dodawanie i przeglądanie zdjęć w udostępnionym albumie bez konieczności korzystania z aplikacji lub konta ente. Świetne rozwiązanie do gromadzenia zdjęć ze wspólnych wydarzeń."), + "Utwórz link, aby umożliwić innym dodawanie i przeglądanie zdjęć w udostępnionym albumie bez konieczności korzystania z aplikacji lub konta Ente. Świetne rozwiązanie do gromadzenia zdjęć ze wspólnych wydarzeń."), "collaborativeLink": - MessageLookupByLibrary.simpleMessage("Link do kolaboracji"), + MessageLookupByLibrary.simpleMessage("Link do współpracy"), "collaborativeLinkCreatedFor": m12, - "collaborator": MessageLookupByLibrary.simpleMessage("Kolaborator"), + "collaborator": MessageLookupByLibrary.simpleMessage("Współuczestnik"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( - "Kolaboranci mogą dodawać zdjęcia i wideo do udostępnionego albumu."), + "Współuczestnicy mogą dodawać zdjęcia i wideo do udostępnionego albumu."), "collageLayout": MessageLookupByLibrary.simpleMessage("Układ"), "collageSaved": MessageLookupByLibrary.simpleMessage("Kolaż zapisano w galerii"), @@ -541,8 +540,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Stwórz nowe konto"), "createOrSelectAlbum": MessageLookupByLibrary.simpleMessage("Utwórz lub wybierz album"), - "createPublicLink": MessageLookupByLibrary.simpleMessage( - "Utwórz link dostępny publicznie"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Utwórz publiczny link"), "creatingLink": MessageLookupByLibrary.simpleMessage("Tworzenie linku..."), "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( @@ -571,7 +570,7 @@ class MessageLookup extends MessageLookupByLibrary { "Usunąć również zdjęcia (i wideo) znajdujące się w tym albumie ze wszystkich innych albumów, których są częścią?"), "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( "Spowoduje to usunięcie wszystkich pustych albumów. Jest to przydatne, gdy chcesz zmniejszyć ilość śmieci na liście albumów."), - "deleteAll": MessageLookupByLibrary.simpleMessage("Usuń wszystkie"), + "deleteAll": MessageLookupByLibrary.simpleMessage("Usuń Wszystko"), "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( "To konto jest połączone z innymi aplikacjami Ente, jeśli ich używasz. Twoje przesłane dane, we wszystkich aplikacjach Ente, zostaną zaplanowane do usunięcia, a Twoje konto zostanie trwale usunięte."), "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( @@ -594,9 +593,9 @@ class MessageLookup extends MessageLookupByLibrary { "deleteReason2": MessageLookupByLibrary.simpleMessage( "Aplikacja lub określona funkcja nie zachowuje się tak, jak sądzę, że powinna"), "deleteReason3": MessageLookupByLibrary.simpleMessage( - "Znalazłem inną, lepszą usługę"), + "Znalazłem/am inną, lepszą usługę"), "deleteReason4": MessageLookupByLibrary.simpleMessage( - "Inna, niewymieniona wyżej przyczyna"), + "Moja przyczyna nie jest wymieniona"), "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( "Twoje żądanie zostanie przetworzone w ciągu 72 godzin."), "deleteSharedAlbum": @@ -606,10 +605,10 @@ class MessageLookup extends MessageLookupByLibrary { "descriptions": MessageLookupByLibrary.simpleMessage("Opisy"), "deselectAll": MessageLookupByLibrary.simpleMessage("Odznacz wszystko"), "designedToOutlive": MessageLookupByLibrary.simpleMessage( - "Zaprojektowane do przetrwania na zawsze"), + "Zaprojektowane do przetrwania"), "details": MessageLookupByLibrary.simpleMessage("Szczegóły"), "developerSettings": - MessageLookupByLibrary.simpleMessage("Ustawienia deweloperskie"), + MessageLookupByLibrary.simpleMessage("Ustawienia dla programistów"), "developerSettingsWarning": MessageLookupByLibrary.simpleMessage( "Czy na pewno chcesz zmodyfikować ustawienia programisty?"), "deviceCodeHint": MessageLookupByLibrary.simpleMessage("Wprowadź kod"), @@ -676,6 +675,8 @@ class MessageLookup extends MessageLookupByLibrary { "enableMaps": MessageLookupByLibrary.simpleMessage("Włącz mapy"), "enableMapsDesc": MessageLookupByLibrary.simpleMessage( "To pokaże Twoje zdjęcia na mapie świata.\n\nTa mapa jest hostowana przez Open Street Map, a dokładne lokalizacje Twoich zdjęć nigdy nie są udostępniane.\n\nMożesz wyłączyć tę funkcję w każdej chwili w ustawieniach."), + "enableMultiPartUpload": MessageLookupByLibrary.simpleMessage( + "Włącz przesyłanie wieloczęściowe"), "encryptingBackup": MessageLookupByLibrary.simpleMessage( "Szyfrowanie kopii zapasowej..."), "encryption": MessageLookupByLibrary.simpleMessage("Szyfrowanie"), @@ -691,7 +692,7 @@ class MessageLookup extends MessageLookupByLibrary { "entePhotosPerm": MessageLookupByLibrary.simpleMessage( "Ente potrzebuje uprawnień aby przechowywać twoje zdjęcia"), "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( - "Ente zachowuje twoje wspomnienia, więc są zawsze dostępne dla Ciebie, nawet jeśli zgubisz urządzenie."), + "Ente zachowuje Twoje wspomnienia, więc są zawsze dostępne dla Ciebie, nawet jeśli zgubisz urządzenie."), "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( "Twoja rodzina może być również dodana do Twojego planu."), "enterAlbumName": @@ -715,9 +716,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Wprowadź kod polecenia"), "enterThe6digitCodeFromnyourAuthenticatorApp": MessageLookupByLibrary.simpleMessage( - "Wprowadź 6-cyfrowy kod z\ntwojej aplikacji uwierzytelniającej"), + "Wprowadź 6-cyfrowy kod z\nTwojej aplikacji uwierzytelniającej"), "enterValidEmail": MessageLookupByLibrary.simpleMessage( - "Podaj poprawny adres e-mail."), + "Prosimy podać prawidłowy adres e-mail."), "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage("Podaj swój adres e-mail"), "enterYourPassword": @@ -763,7 +764,7 @@ class MessageLookup extends MessageLookupByLibrary { "faqs": MessageLookupByLibrary.simpleMessage( "FAQ – Często zadawane pytania"), "favorite": MessageLookupByLibrary.simpleMessage("Dodaj do ulubionych"), - "feedback": MessageLookupByLibrary.simpleMessage("Informacja zwrotna"), + "feedback": MessageLookupByLibrary.simpleMessage("Opinia"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( "Nie udało się zapisać pliku do galerii"), "fileInfoAddDescHint": @@ -785,7 +786,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("dla twoich wspomnień"), "forgotPassword": MessageLookupByLibrary.simpleMessage("Nie pamiętam hasła"), - "foundFaces": MessageLookupByLibrary.simpleMessage("Znalezione twarze"), + "foundFaces": MessageLookupByLibrary.simpleMessage("Znaleziono twarze"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( "Bezpłatna pamięć, którą odebrano"), "freeStorageOnReferralSuccess": m26, @@ -809,7 +810,7 @@ class MessageLookup extends MessageLookupByLibrary { "Generowanie kluczy szyfrujących..."), "genericProgress": m31, "goToSettings": - MessageLookupByLibrary.simpleMessage("Przejdź do Ustawień"), + MessageLookupByLibrary.simpleMessage("Przejdź do ustawień"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Identyfikator Google Play"), "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( @@ -860,7 +861,7 @@ class MessageLookup extends MessageLookupByLibrary { "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( "Nieprawidłowy klucz odzyskiwania"), "indexedItems": - MessageLookupByLibrary.simpleMessage("Indeksowane elementy"), + MessageLookupByLibrary.simpleMessage("Zindeksowane elementy"), "indexingIsPaused": MessageLookupByLibrary.simpleMessage( "Wstrzymano indeksowanie. Zostanie ono automatycznie wznowione, gdy urządzenie będzie gotowe."), "insecureDevice": @@ -894,7 +895,7 @@ class MessageLookup extends MessageLookupByLibrary { "Wybrane elementy zostaną usunięte z tego albumu"), "joinDiscord": MessageLookupByLibrary.simpleMessage("Dołącz do serwera Discord"), - "keepPhotos": MessageLookupByLibrary.simpleMessage("Zachowaj zdjęcia"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("Zachowaj Zdjęcia"), "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("km"), "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage("Pomóż nam z tą informacją"), @@ -928,7 +929,7 @@ class MessageLookup extends MessageLookupByLibrary { "loadMessage3": MessageLookupByLibrary.simpleMessage( "Przechowujemy 3 kopie Twoich danych, jedną w podziemnym schronie"), "loadMessage4": MessageLookupByLibrary.simpleMessage( - "Wszystkie nasze aplikacje mają otwarte źródło"), + "Wszystkie nasze aplikacje są otwarto źródłowe"), "loadMessage5": MessageLookupByLibrary.simpleMessage( "Nasz kod źródłowy i kryptografia zostały poddane zewnętrznemu audytowi"), "loadMessage6": MessageLookupByLibrary.simpleMessage( @@ -999,8 +1000,8 @@ class MessageLookup extends MessageLookupByLibrary { "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( "Pamiętaj, że uczenie maszynowe spowoduje większe zużycie przepustowości i baterii, dopóki wszystkie elementy zostaną zindeksowane."), "mobileWebDesktop": MessageLookupByLibrary.simpleMessage( - "Aplikacja Mobilna, Strona Internetowa, Komputer"), - "moderateStrength": MessageLookupByLibrary.simpleMessage("Umiarkowana"), + "Aplikacja Mobilna, Strona Internetowa, Aplikacja Komputerowa"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Umiarkowane"), "modifyYourQueryOrTrySearchingFor": MessageLookupByLibrary.simpleMessage( "Zmodyfikuj zapytanie lub spróbuj wyszukać"), @@ -1023,14 +1024,14 @@ class MessageLookup extends MessageLookupByLibrary { "Nie można połączyć się z Ente, sprawdź ustawienia sieci i skontaktuj się z pomocą techniczną, jeśli błąd będzie się powtarzał."), "never": MessageLookupByLibrary.simpleMessage("Nigdy"), "newAlbum": MessageLookupByLibrary.simpleMessage("Nowy album"), - "newToEnte": MessageLookupByLibrary.simpleMessage("Nowy do Ente"), + "newToEnte": MessageLookupByLibrary.simpleMessage("Nowy/a do Ente"), "newest": MessageLookupByLibrary.simpleMessage("Najnowsze"), "next": MessageLookupByLibrary.simpleMessage("Dalej"), "no": MessageLookupByLibrary.simpleMessage("Nie"), "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( "Brak jeszcze albumów udostępnianych przez Ciebie"), - "noDeviceFound": - MessageLookupByLibrary.simpleMessage("Nie wykryto urządzenia"), + "noDeviceFound": MessageLookupByLibrary.simpleMessage( + "Nie znaleziono żadnego urządzenia"), "noDeviceLimit": MessageLookupByLibrary.simpleMessage("Brak"), "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( "Nie masz żadnych plików na tym urządzeniu, które można usunąć"), @@ -1084,8 +1085,7 @@ class MessageLookup extends MessageLookupByLibrary { "orPickAnExistingOne": MessageLookupByLibrary.simpleMessage("Lub wybierz istniejący"), "pair": MessageLookupByLibrary.simpleMessage("Sparuj"), - "pairWithPin": - MessageLookupByLibrary.simpleMessage("Sparuj z kodem PIN"), + "pairWithPin": MessageLookupByLibrary.simpleMessage("Sparuj kodem PIN"), "pairingComplete": MessageLookupByLibrary.simpleMessage("Parowanie zakończone"), "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), @@ -1136,8 +1136,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Wybierz punkt środkowy"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Przypnij album"), "pinLock": MessageLookupByLibrary.simpleMessage("Blokada PIN"), - "playOnTv": - MessageLookupByLibrary.simpleMessage("Odtwarzaj album w telewizji"), + "playOnTv": MessageLookupByLibrary.simpleMessage( + "Odtwórz album na telewizorze"), "playStoreFreeTrialValidTill": m40, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Subskrypcja PlayStore"), @@ -1151,8 +1151,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Skontaktuj się z pomocą techniczną, jeśli problem będzie się powtarzał"), "pleaseEmailUsAt": m41, - "pleaseGrantPermissions": - MessageLookupByLibrary.simpleMessage("Proszę przyznać uprawnienia"), + "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( + "Prosimy przyznać uprawnienia"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Zaloguj się ponownie"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( @@ -1163,12 +1163,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseVerifyTheCodeYouHaveEntered": MessageLookupByLibrary.simpleMessage( "Prosimy zweryfikować wprowadzony kod"), - "pleaseWait": MessageLookupByLibrary.simpleMessage("Proszę czekać..."), + "pleaseWait": MessageLookupByLibrary.simpleMessage("Prosimy czekać..."), "pleaseWaitDeletingAlbum": MessageLookupByLibrary.simpleMessage( "Prosimy czekać, usuwanie albumu"), "pleaseWaitForSometimeBeforeRetrying": MessageLookupByLibrary.simpleMessage( - "Proszę poczekać chwilę przed ponowną próbą"), + "Prosimy poczekać chwilę przed ponowną próbą"), "preparingLogs": MessageLookupByLibrary.simpleMessage("Przygotowywanie logów..."), "preserveMore": MessageLookupByLibrary.simpleMessage("Zachowaj więcej"), @@ -1178,7 +1178,7 @@ class MessageLookup extends MessageLookupByLibrary { "Naciśnij i przytrzymaj obraz, aby odtworzyć wideo"), "privacy": MessageLookupByLibrary.simpleMessage("Prywatność"), "privacyPolicyTitle": - MessageLookupByLibrary.simpleMessage("Polityka prywatności"), + MessageLookupByLibrary.simpleMessage("Polityka Prywatności"), "privateBackups": MessageLookupByLibrary.simpleMessage("Prywatne kopie zapasowe"), "privateSharing": @@ -1233,7 +1233,7 @@ class MessageLookup extends MessageLookupByLibrary { "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Wysyłanie poleceń jest obecnie wstrzymane"), "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( - "Również puste \"Ostatnio usunięte\" z \"Ustawienia\" -> \"Pamięć\", aby odebrać wolną przestrzeń"), + "Również opróżnij \"Ostatnio usunięte\" z \"Ustawienia\" -> \"Pamięć\", aby odebrać wolną przestrzeń"), "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( "Opróżnij również swój \"Kosz\", aby zwolnić miejsce"), "remoteImages": MessageLookupByLibrary.simpleMessage("Zdjęcia zdalne"), @@ -1354,7 +1354,7 @@ class MessageLookup extends MessageLookupByLibrary { "Wybierz foldery do stworzenia kopii zapasowej"), "selectItemsToAdd": MessageLookupByLibrary.simpleMessage("Wybierz elementy do dodania"), - "selectLanguage": MessageLookupByLibrary.simpleMessage("Wybierz język"), + "selectLanguage": MessageLookupByLibrary.simpleMessage("Wybierz Język"), "selectMorePhotos": MessageLookupByLibrary.simpleMessage("Wybierz więcej zdjęć"), "selectReason": MessageLookupByLibrary.simpleMessage("Wybierz powód"), @@ -1584,7 +1584,7 @@ class MessageLookup extends MessageLookupByLibrary { "Włącz kopię zapasową, aby automatycznie przesyłać pliki dodane do folderu urządzenia do Ente."), "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( - "2 miesiące za darmo w planach rocznych"), + "2 miesiące za darmo na planach rocznych"), "twofactor": MessageLookupByLibrary.simpleMessage( "Uwierzytelnianie dwustopniowe"), "twofactorAuthenticationHasBeenDisabled": @@ -1603,7 +1603,7 @@ class MessageLookup extends MessageLookupByLibrary { "unarchiveAlbum": MessageLookupByLibrary.simpleMessage("Przywróć album z archiwum"), "unarchiving": - MessageLookupByLibrary.simpleMessage("Odarchiwizowanie..."), + MessageLookupByLibrary.simpleMessage("Usuwanie z archiwum..."), "uncategorized": MessageLookupByLibrary.simpleMessage("Bez kategorii"), "unhide": MessageLookupByLibrary.simpleMessage("Odkryj"), "unhideToAlbum": @@ -1633,7 +1633,7 @@ class MessageLookup extends MessageLookupByLibrary { "useRecoveryKey": MessageLookupByLibrary.simpleMessage("Użyj kodu odzyskiwania"), "useSelectedPhoto": - MessageLookupByLibrary.simpleMessage("Użyj zaznaczonego zdjęcia"), + MessageLookupByLibrary.simpleMessage("Użyj zaznaczone zdjęcie"), "usedSpace": MessageLookupByLibrary.simpleMessage("Zajęta przestrzeń"), "validTill": m66, "verificationFailedPleaseTryAgain": @@ -1669,13 +1669,13 @@ class MessageLookup extends MessageLookupByLibrary { "viewLogs": MessageLookupByLibrary.simpleMessage("Wyświetl logi"), "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Zobacz klucz odzyskiwania"), - "viewer": MessageLookupByLibrary.simpleMessage("Obserwator"), + "viewer": MessageLookupByLibrary.simpleMessage("Widz"), "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Odwiedź stronę web.ente.io, aby zarządzać subskrypcją"), "waitingForVerification": MessageLookupByLibrary.simpleMessage( "Oczekiwanie na weryfikację..."), "waitingForWifi": - MessageLookupByLibrary.simpleMessage("Czekam na WiFi..."), + MessageLookupByLibrary.simpleMessage("Czekanie na WiFi..."), "weAreOpenSource": MessageLookupByLibrary.simpleMessage("Posiadamy otwarte źródło!"), "weDontSupportEditingPhotosAndAlbumsThatYouDont": @@ -1689,8 +1689,8 @@ class MessageLookup extends MessageLookupByLibrary { "yearsAgo": m69, "yes": MessageLookupByLibrary.simpleMessage("Tak"), "yesCancel": MessageLookupByLibrary.simpleMessage("Tak, anuluj"), - "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( - "Tak, konwertuj do oglądającego"), + "yesConvertToViewer": + MessageLookupByLibrary.simpleMessage("Tak, konwertuj na widza"), "yesDelete": MessageLookupByLibrary.simpleMessage("Tak, usuń"), "yesDiscardChanges": MessageLookupByLibrary.simpleMessage("Tak, odrzuć zmiany"), @@ -1725,8 +1725,8 @@ class MessageLookup extends MessageLookupByLibrary { "Twój plan został pomyślnie obniżony"), "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( "Twój plan został pomyślnie ulepszony"), - "yourPurchaseWasSuccessful": - MessageLookupByLibrary.simpleMessage("Twój zakup był udany"), + "yourPurchaseWasSuccessful": MessageLookupByLibrary.simpleMessage( + "Twój zakup zakończył się pomyślnie"), "yourStorageDetailsCouldNotBeFetched": MessageLookupByLibrary.simpleMessage( "Nie można pobrać szczegółów pamięci"), diff --git a/mobile/lib/generated/intl/messages_pt.dart b/mobile/lib/generated/intl/messages_pt.dart index 773b78fbf0..c12e70ab9f 100644 --- a/mobile/lib/generated/intl/messages_pt.dart +++ b/mobile/lib/generated/intl/messages_pt.dart @@ -676,6 +676,8 @@ class MessageLookup extends MessageLookupByLibrary { "enableMaps": MessageLookupByLibrary.simpleMessage("Habilitar Mapa"), "enableMapsDesc": MessageLookupByLibrary.simpleMessage( "Isto mostrará suas fotos em um mapa do mundo.\n\nEste mapa é hospedado pelo OpenStreetMap, e os exatos locais de suas fotos nunca são compartilhados.\n\nVocê pode desativar esse recurso a qualquer momento nas Configurações."), + "enableMultiPartUpload": MessageLookupByLibrary.simpleMessage( + "Ativar envio de várias partes"), "encryptingBackup": MessageLookupByLibrary.simpleMessage("Criptografando backup..."), "encryption": MessageLookupByLibrary.simpleMessage("Criptografia"), diff --git a/mobile/lib/generated/intl/messages_zh.dart b/mobile/lib/generated/intl/messages_zh.dart index 11ad164002..753968de1d 100644 --- a/mobile/lib/generated/intl/messages_zh.dart +++ b/mobile/lib/generated/intl/messages_zh.dart @@ -281,7 +281,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("AppStore 订阅"), "archive": MessageLookupByLibrary.simpleMessage("存档"), "archiveAlbum": MessageLookupByLibrary.simpleMessage("存档相册"), - "archiving": MessageLookupByLibrary.simpleMessage("正在归档中..."), + "archiving": MessageLookupByLibrary.simpleMessage("正在存档..."), "areYouSureThatYouWantToLeaveTheFamily": MessageLookupByLibrary.simpleMessage("您确定要离开家庭计划吗?"), "areYouSureYouWantToCancel": @@ -562,6 +562,7 @@ class MessageLookup extends MessageLookupByLibrary { "enableMaps": MessageLookupByLibrary.simpleMessage("启用地图"), "enableMapsDesc": MessageLookupByLibrary.simpleMessage( "这将在世界地图上显示您的照片。\n\n该地图由 Open Street Map 托管,并且您的照片的确切位置永远不会共享。\n\n您可以随时从“设置”中禁用此功能。"), + "enableMultiPartUpload": MessageLookupByLibrary.simpleMessage("启用分片上传"), "encryptingBackup": MessageLookupByLibrary.simpleMessage("正在加密备份..."), "encryption": MessageLookupByLibrary.simpleMessage("加密"), "encryptionKeys": MessageLookupByLibrary.simpleMessage("加密密钥"), @@ -669,9 +670,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("请在手机“设置”中授权软件访问所有照片"), "grantPermission": MessageLookupByLibrary.simpleMessage("授予权限"), "groupNearbyPhotos": MessageLookupByLibrary.simpleMessage("将附近的照片分组"), - "guestView": MessageLookupByLibrary.simpleMessage("Guest view"), - "guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage( - "To enable guest view, please setup device passcode or screen lock in your system settings."), + "guestView": MessageLookupByLibrary.simpleMessage("访客视图"), + "guestViewEnablePreSteps": + MessageLookupByLibrary.simpleMessage("要启用访客视图,请在系统设置中设置设备密码或屏幕锁。"), "hearUsExplanation": MessageLookupByLibrary.simpleMessage( "我们不跟踪应用程序安装情况。如果您告诉我们您是在哪里找到我们的,将会有所帮助!"), "hearUsWhereTitle": @@ -1208,10 +1209,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("您的订阅似乎已过期。请订阅以启用分享。"), "subscription": MessageLookupByLibrary.simpleMessage("订阅"), "success": MessageLookupByLibrary.simpleMessage("成功"), - "successfullyArchived": MessageLookupByLibrary.simpleMessage("归档成功"), + "successfullyArchived": MessageLookupByLibrary.simpleMessage("存档成功"), "successfullyHid": MessageLookupByLibrary.simpleMessage("已成功隐藏"), "successfullyUnarchived": - MessageLookupByLibrary.simpleMessage("取消归档成功"), + MessageLookupByLibrary.simpleMessage("取消存档成功"), "successfullyUnhid": MessageLookupByLibrary.simpleMessage("已成功取消隐藏"), "suggestFeatures": MessageLookupByLibrary.simpleMessage("建议新功能"), "support": MessageLookupByLibrary.simpleMessage("支持"), @@ -1291,7 +1292,7 @@ class MessageLookup extends MessageLookupByLibrary { "twofactorSetup": MessageLookupByLibrary.simpleMessage("双重认证设置"), "unarchive": MessageLookupByLibrary.simpleMessage("取消存档"), "unarchiveAlbum": MessageLookupByLibrary.simpleMessage("取消存档相册"), - "unarchiving": MessageLookupByLibrary.simpleMessage("正在取消归档..."), + "unarchiving": MessageLookupByLibrary.simpleMessage("正在取消存档..."), "uncategorized": MessageLookupByLibrary.simpleMessage("未分类的"), "unhide": MessageLookupByLibrary.simpleMessage("取消隐藏"), "unhideToAlbum": MessageLookupByLibrary.simpleMessage("取消隐藏到相册"), diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index c53e18ac82..e474623678 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -2866,6 +2866,56 @@ class S { ); } + /// `Enable machine learning` + String get mlConsent { + return Intl.message( + 'Enable machine learning', + name: 'mlConsent', + desc: '', + args: [], + ); + } + + /// `Enable machine learning?` + String get mlConsentTitle { + return Intl.message( + 'Enable machine learning?', + name: 'mlConsentTitle', + desc: '', + args: [], + ); + } + + /// `If you enable machine learning, Ente will extract information like face geometry from files. This will happen on your device, and any generated biometric information will be end-to-end encrypted.` + String get mlConsentDescription { + return Intl.message( + 'If you enable machine learning, Ente will extract information like face geometry from files. This will happen on your device, and any generated biometric information will be end-to-end encrypted.', + name: 'mlConsentDescription', + desc: '', + args: [], + ); + } + + /// `Please click here for more details about this feature in our privacy policy` + String get mlConsentPrivacy { + return Intl.message( + 'Please click here for more details about this feature in our privacy policy', + name: 'mlConsentPrivacy', + desc: '', + args: [], + ); + } + + /// `I understand, and wish to enable machine learning` + String get mlConsentConfirmation { + return Intl.message( + 'I understand, and wish to enable machine learning', + name: 'mlConsentConfirmation', + desc: '', + args: [], + ); + } + /// `Magic search` String get magicSearch { return Intl.message( diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index 129f9d109c..01f259efe1 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -409,6 +409,11 @@ "photoGridSize": "Photo grid size", "manageDeviceStorage": "Manage device storage", "machineLearning": "Machine learning", + "mlConsent": "Enable machine learning", + "mlConsentTitle": "Enable machine learning?", + "mlConsentDescription": "If you enable machine learning, Ente will extract information like face geometry from files. This will happen on your device, and any generated biometric information will be end-to-end encrypted.", + "mlConsentPrivacy": "Please click here for more details about this feature in our privacy policy", + "mlConsentConfirmation": "I understand, and wish to enable machine learning", "magicSearch": "Magic search", "mlIndexingDescription": "Please note that machine learning will result in a higher bandwidth and battery usage until all items are indexed.", "loadingModel": "Downloading models...", diff --git a/mobile/lib/services/user_remote_flag_service.dart b/mobile/lib/services/user_remote_flag_service.dart index 846f061b43..98c326e4d7 100644 --- a/mobile/lib/services/user_remote_flag_service.dart +++ b/mobile/lib/services/user_remote_flag_service.dart @@ -22,6 +22,7 @@ class UserRemoteFlagService { static const String recoveryVerificationFlag = "recoveryKeyVerified"; static const String mapEnabled = "mapEnabled"; + static const String mlEnabled = "faceSearchEnabled"; static const String needRecoveryKeyVerification = "needRecoveryKeyVerification"; @@ -48,6 +49,8 @@ class UserRemoteFlagService { bool defaultValue = false; if (key == mapEnabled) { defaultValue = flagService.mapEnabled; + } else if (key == mlEnabled) { + defaultValue = flagService.hasGrantedMLConsent; } return _prefs.getBool(key) ?? defaultValue; } diff --git a/mobile/lib/ui/settings/machine_learning_settings_page.dart b/mobile/lib/ui/settings/machine_learning_settings_page.dart index f4ea8a76d2..187691e307 100644 --- a/mobile/lib/ui/settings/machine_learning_settings_page.dart +++ b/mobile/lib/ui/settings/machine_learning_settings_page.dart @@ -20,6 +20,7 @@ import "package:photos/ui/components/menu_section_title.dart"; import "package:photos/ui/components/title_bar_title_widget.dart"; import "package:photos/ui/components/title_bar_widget.dart"; import "package:photos/ui/components/toggle_switch_widget.dart"; +import "package:photos/ui/settings/ml/enable_ml_consent.dart"; import "package:photos/utils/ml_util.dart"; import "package:photos/utils/wakelock_util.dart"; @@ -127,10 +128,22 @@ class _MachineLearningSettingsPageState trailingWidget: ToggleSwitchWidget( value: () => localSettings.isFaceIndexingEnabled, onChanged: () async { + if (!localSettings.isFaceIndexingEnabled) { + final result = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) { + return const EnableMachineLearningConsent(); + }, + ), + ); + if (result == null || result == false) { + return; + } + } final isEnabled = await localSettings.toggleFaceIndexing(); if (isEnabled) { await MLService.instance.init(firstTime: true); - await SemanticSearchService.instance.init(); unawaited(MLService.instance.runAllML(force: true)); } else {} diff --git a/mobile/lib/ui/settings/ml/enable_ml_consent.dart b/mobile/lib/ui/settings/ml/enable_ml_consent.dart new file mode 100644 index 0000000000..c3c0da5d79 --- /dev/null +++ b/mobile/lib/ui/settings/ml/enable_ml_consent.dart @@ -0,0 +1,156 @@ +import "package:flutter/material.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/services/user_remote_flag_service.dart"; +import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/common/web_page.dart"; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; +import "package:photos/ui/components/title_bar_title_widget.dart"; +import "package:photos/ui/components/title_bar_widget.dart"; +import "package:photos/utils/dialog_util.dart"; + +class EnableMachineLearningConsent extends StatefulWidget { + const EnableMachineLearningConsent({super.key}); + + @override + State createState() => + _EnableMachineLearningConsentState(); +} + +class _EnableMachineLearningConsentState + extends State { + final ValueNotifier _hasAckedPrivacyPolicy = ValueNotifier(false); + + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + _hasAckedPrivacyPolicy.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + primary: false, + slivers: [ + TitleBarWidget( + flexibleSpaceTitle: TitleBarTitleWidget( + title: S.of(context).mlConsentTitle, + ), + ), + SliverList( + delegate: SliverChildBuilderDelegate( + (delegateBuildContext, index) => Padding( + padding: const EdgeInsets.only(left: 16, right: 16), + child: Column( + children: [ + Text( + S.of(context).mlConsentDescription, + textAlign: TextAlign.left, + style: getEnteTextTheme(context).body.copyWith( + color: getEnteColorScheme(context).textMuted, + ), + ), + const SizedBox(height: 12), + GestureDetector( + onTap: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (BuildContext context) { + return WebPage( + S.of(context).privacyPolicyTitle, + "https://ente.io/privacy", + ); + }, + ), + ); + }, + child: Text( + S.of(context).mlConsentPrivacy, + textAlign: TextAlign.left, + style: getEnteTextTheme(context).body.copyWith( + color: getEnteColorScheme(context).textMuted, + decoration: TextDecoration.underline, + ), + ), + ), + const SizedBox(height: 36), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Checkbox( + value: _hasAckedPrivacyPolicy.value, + side: CheckboxTheme.of(context).side, + onChanged: (value) { + setState(() { + _hasAckedPrivacyPolicy.value = value!; + }); + }, + ), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 1), + child: Text( + S.of(context).mlConsentConfirmation, + style: getEnteTextTheme(context).bodyMuted, + textAlign: TextAlign.left, + ), + ), + ), + ], + ), + const SizedBox(height: 48), + ButtonWidget( + buttonType: ButtonType.primary, + labelText: S.of(context).mlConsent, + isDisabled: _hasAckedPrivacyPolicy.value == false, + onTap: () async { + await enableMlConsent(context); + }, + shouldSurfaceExecutionStates: true, + ), + const SizedBox(height: 8), + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).cancel, + onTap: () async { + Navigator.of(context).pop(); + }, + ), + const SafeArea( + child: SizedBox( + height: 12, + ), + ), + ], + ), + ), + childCount: 1, + ), + ), + ], + ), + ); + } + + Future enableMlConsent(BuildContext context) async { + try { + await UserRemoteFlagService.instance.setBoolValue( + UserRemoteFlagService.mlEnabled, + true, + ); + Navigator.of(context).pop(true); + } catch (e) { + // ignore: unawaited_futures + showGenericErrorDialog( + context: context, + error: e, + ); + } + } +} diff --git a/mobile/plugins/ente_feature_flag/lib/src/service.dart b/mobile/plugins/ente_feature_flag/lib/src/service.dart index 32dd5d3b95..bdbe5a6f02 100644 --- a/mobile/plugins/ente_feature_flag/lib/src/service.dart +++ b/mobile/plugins/ente_feature_flag/lib/src/service.dart @@ -71,5 +71,7 @@ class FlagService { bool get recoveryKeyVerified => flags.recoveryKeyVerified; + bool get hasGrantedMLConsent => flags.faceSearchEnabled; + bool get enableMobMultiPart => flags.enableMobMultiPart || internalUser; } diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 88c6d74b5a..73db1a24fa 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -1289,18 +1289,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "10.0.5" + version: "10.0.4" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.3" leak_tracker_testing: dependency: transitive description: @@ -1433,10 +1433,10 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.8.0" media_extension: dependency: "direct main" description: @@ -1521,10 +1521,10 @@ packages: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.12.0" mgrs_dart: dependency: transitive description: @@ -1893,10 +1893,10 @@ packages: dependency: transitive description: name: platform - sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.5" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: @@ -2402,26 +2402,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e" + sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073" url: "https://pub.dev" source: hosted - version: "1.25.7" + version: "1.25.2" test_api: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.0" test_core: dependency: transitive description: name: test_core - sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696" + sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4" url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.6.0" timezone: dependency: transitive description: @@ -2700,10 +2700,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "14.2.4" + version: "14.2.1" volume_controller: dependency: transitive description: