Repository navigation
feat(drive): Orte und Personen in den Fotos (Drive 1.16) - #170
Merged
Merged
Conversation
added 3 commits
November 1, 2026 08:17
Drive › Fotos findet Fotos jetzt nach Ort und Person, wenn der Server `photoPlaces` bzw. `photoPeople` meldet. Ohne die Features bleibt alles wie bisher. Orte (`photoPlaces`) - Die Foto-Sicherung schickt beim Commit `geo` (EXIF-Koordinaten aus DriveTakenAt.shot), nur mit „Aufnahmeort mitsichern“ (keepGeo). - „Orte nachtragen“: WorkManager-Job über `photos?unlocated=1`; ein Foto, dessen Original noch auf dem Handy liegt, bekommt seinen Ort bzw. `none` (PUT nodes/<id>/geo). Fotos, die nicht hier liegen, bleiben für andere Geräte. - Karte (osmdroid wie in Familie, gleiche User-Agent-/Kachel-Policy, Attribution sichtbar): Bündel aus `photos/map`, beim Verschieben und Zoomen gedrosselt nachgeladen (gepolsterte Box, Zoomwechsel, 450 ms). Blatt mit Vorschau, Zeitraum und Personen, „Ort suchen“, „Mein Standort“, Privat/Arbeit. - Ort: kleine Karte, Fotos nach Tag mit Ortsteil, Personen als Filter, „Als Album speichern“. Personen (`photoPeople`) - Gesichter erkennt das Handy selbst: YuNet (5 Punkte) und SFace (128 Werte, Modell-ID `sface-2021dec`) aus OpenCV Zoo, ONNX Runtime 1.23.2 (ohne Telemetrie). Ausrichtung auf 112×112 wie OpenCVs alignCrop (Ähnlichkeitstransformation, bilinear), Ausgabe L2-normiert, base64 von Float32 LE (PUT nodes/<id>/faces). Kein OpenCV nötig. - Die Modelle (fp32, unverändert) holt der Build mit SHA-256-Prüfung (Task faceModels); int8 passt nicht zu fp32 und rechnet auf x86/ARM verschieden. - WorkManager-Job nur mit `people` an: WLAN, Akku nicht schwach, mit „Nur beim Laden“ (Gerätewahl, Standard an) beim Laden. Neue Fotos nach der Sicherung aus dem Original, alte über `unfaced` aus dem Original auf dem Handy oder der Vorschau. Kinderordner nur mit `peopleKids`. - Personen, Person (unsichere Treffer, Zusammen mit, Orte, Jahre, Verknüpfen, Zusammenführen, Ausblenden), „Wer ist das?“ mit Namensvorschlägen aus Familie und Mail-Kontakten, Rückgängig. Fotos und Suche - Suchfeld, Personenleiste mit „Wer ist das?“, Orte-Karte mit Chips, Karten-Knopf in der Leiste. - Suche mit Vorschlägen (`photos/suggest`) und Marken (`search.people`, `search.places`). - Einstellungen „Orte und Personen“: Aufnahmeort, Ort beim Teilen entfernen (nur wenn gemeldet), Orte nachtragen, Orte löschen, Personen erkennen (Aus löscht alle Gesichtsdaten), Nur beim Laden, Kinderordner. Lizenzen (YuNet MIT, SFace Apache-2.0, ONNX Runtime MIT) in NOTICE, assets/faces und auf der Einstellungsseite; Datenschutzerklärung (DE/EN, HTML) und Play-Notizen ergänzt. Unit-Tests: Ausrichtung und Matrix gegen OpenCV, YuNet-Dekodierung, base64, Bündel-Logik, Tage, Suchmarken, Filter, Namensvorschläge, JSON. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
SFace (fp32, 39 MB) ist nicht mehr in APK und AAB. Die App lädt es, sobald „Personen erkennen“ eingeschaltet wird; YuNet (0,2 MB) liegt weiter in assets/faces, onnxruntime bleibt in der App. - Quellen in dieser Reihenfolge: das Asset des eigenen Releases (releases/download/v<versionName>/face_recognition_sface_2021dec.onnx), sonst OpenCV Zoo auf GitHub, dann Hugging Face. - Immer mit SHA-256-Prüfung: Falsche Bytes werden verworfen, die nächste Quelle wird versucht. Ziel ist noBackupFilesDir/faces/. Die Datei entsteht erst durch Umbenennen der fertigen .part-Datei; nach einem Abbruch geht es per Range an derselben Quelle weiter. - WorkManager-Job, standardmäßig nur im WLAN. „Jetzt über mobile Daten laden“ auf Wunsch, „Erneut versuchen“ nach einem Fehler. - Fortschritt „Erkennungsmodell wird geladen · 12 von 39 MB“ in den Einstellungen und auf der Seite Personen. - Der Erkennungs-Job startet erst, wenn das Modell da ist. Ausschalten (auch auf einem anderen Gerät) löscht die Modelldatei. - release.yml holt SFace per :app:faceModels mit SHA-256-Prüfung und hängt es an jedes Release an. Der Task packt nichts mehr ins APK. - Datenschutzerklärung (DE/EN, HTML), NOTICE und „So funktioniert es“ nennen den einmaligen Download (nur IP und Verbindungsdaten, keine Fotos). - Unit-Tests: Reihenfolge der Quellen, falscher Hash wird verworfen, Fortsetzen nur an derselben Quelle, Fortschritt, Abbruch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
Ein langer Druck auf ein Foto startete den Auswahlmodus. Die Leiste „N ausgewählt“ ersetzte dabei den ganzen Kopf: Titel, Dateien/Fotos, Filter-Chips und Hinweisband verschwanden. Das Raster sprang um etwa ein Drittel nach oben, und der Finger, der noch auf dem Bildschirm lag, markierte beim Weiterziehen oder beim nächsten Tipp andere Fotos. - SelectionSwap: Die Auswahlleiste ersetzt nur die Titelzeile, in einer Zeile so hoch wie die höhere der beiden (beide werden gemessen, gezeigt wird eine). Die Hinweiszeile der Auswahlleiste ist einzeilig, damit die Höhe nicht vom Text abhängt. - Drive-Tab: Die Titelzeile tauscht in der Leiste des Tabs (Fotos und Dateien); Dateien/Fotos, Suchfeld, Filter-Chips und Hinweisbänder bleiben stehen, im Auswahlmodus abgeblendet und ohne Eingaben. Der Kopf des Rasters (Personen, Orte, Erinnerungen) bleibt ebenfalls. - Ebenso in Ordner, Album, Suche, Speicher und Tresor. Personen und Ort haben keinen Auswahlmodus. - Ausgewählte Kacheln schrumpfen nur innerhalb ihrer eigenen Zelle, die Nachbarn bleiben (Test). - Compose-UI-Test auf Robolectric (DriveSelectionSwapTest): die Y-Position einer Kachel vor und nach dem Ein- und Ausstieg, und die Lage der Nachbarn einer ausgewählten Kachel. Robolectrics Android-Jar kommt über Gradle (robolectricDeps, offline-Modus). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
CallMeTechie
pushed a commit
that referenced
this pull request
Nov 1, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
CallMeTechie
pushed a commit
that referenced
this pull request
Nov 1, 2026
…CI aus dem Speicher Seit Drive 1.16 bricht compileReleaseKotlin mit 2 GB (GC overhead limit exceeded) ab, auch auf main (Lint nach #170). Die Runner haben 16 GB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
CallMeTechie
added a commit
that referenced
this pull request
Nov 1, 2026
…d Kalenderauswahl (Drive 1.17) (#171) * feat(drive): Fristen auch in einen Mail-Kalender – „Fristen aus …“ und Kalenderauswahl (Drive 1.17) - Drive-Einstellungen, „KI für Dokumente“: unter jedem Bereich mit KI die Zeile „Fristen aus <Bereich>“, rechts das Ziel; Tippen öffnet die Auswahl Nicht eintragen, Familienkalender (nur wenn erreichbar), Mail-Kalender nach Konto (Feature 'deadlineMailCalendar', GET|PUT deadlines/targets, GET deadlines/calendars). - Ohne das Feature bleibt der Schalter in den Familienkalender, jetzt mit eindeutigem Titel „Fristen aus <Bereich>“ (Bereichsname aus den Daten). - „Fristen“: „In Kalender eintragen“ fragt bei mehr als einem Ziel nach dem Kalender, vorausgewählt ist das Ziel des Bereichs (POST deadlines/<id>/calendar { target }); danach „Im Kalender · Outlook“. mail_unavailable bekommt einen eigenen Text. - Texte DE/EN; Unit-Tests für Auswahl, Gruppierung, Vorauswahl und JSON. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD * feat(drive): Gradle mit 4 GB Heap – compileReleaseKotlin lief in der CI aus dem Speicher Seit Drive 1.16 bricht compileReleaseKotlin mit 2 GB (GC overhead limit exceeded) ab, auch auf main (Lint nach #170). Die Runner haben 16 GB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD --------- Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Drive › Fotos findet Fotos nach Ort und Person (Drive 1.16, Vertrag „Orte und Personen“, Mockups 1–7). Alles hängt an
photoPlacesundphotoPeopleausGET me; ohne die Features bleibt die App wie bisher.Orte (
photoPlaces)geobeim Commit (EXIF ausDriveTakenAt.shot), nur mit „Aufnahmeort mitsichern“ (keepGeo). Aus heißt: nichts senden.photos?unlocated=1. Liegt das Original noch auf dem Handy, geht sein Ort (odernone) perPUT nodes/<id>/geohoch; Fotos, die nicht hier liegen, bleiben für andere Geräte. Fehlt der Zugriff auf Fotostandorte, fragt die Zeile danach.ui/familie/OsmMap.kt(gleiche User-Agent-/Kachel-Policy, Cache, Attribution „© OpenStreetMap-Mitwirkende“). Bündel ausphotos/map, beim Verschieben/Zoomen gedrosselt nachgeladen (gepolsterte Box, neu nur bei Zoomwechsel oder Verlassen der Box, 450 ms). Blatt mit Vorschau, Zeitraum, „Auf diesen Fotos“, „Alle ansehen“; „Ort suchen“, „Mein Standort“ (nur mit Standortrecht), Privat/Arbeit.Personen (
photoPeople)sface-2021dec) aus OpenCV Zoo, Laufzeitonnxruntime-android1.23.2 (die 1.27+ bringen einen Telemetrie-Provider mit, der beim App-Start lädt und an Microsoft sendet). Kein OpenCV: Ausrichtung auf 112×112 wieFaceRecognizerSF::alignCrop(Ähnlichkeitstransformation, bilinear), YuNet-Dekodierung wieFaceDetectorYN. Ausgabe L2-normiert, base64 von Float32 LE.drive-places-people-deviations.md(Abschnitt „Modell“) vermerkt; Vorverarbeitung und Testvektor für Windows indrive-face-model.md.…/releases/download/v<versionName>/face_recognition_sface_2021dec.onnx), sonst OpenCV Zoo auf GitHub, dann Hugging Face. Immer mit SHA-256-Prüfung (falsche Bytes werden verworfen, die nächste Quelle versucht), nachnoBackupFilesDir/faces/, atomar per Umbenennen, nach Abbruch perRangefortgesetzt. Standardmäßig nur im WLAN, „Jetzt über mobile Daten laden“ auf Wunsch. Fortschritt „Erkennungsmodell wird geladen · 12 von 39 MB“ in den Einstellungen und unter Personen, bei Fehlern „Erneut versuchen“. Erst wenn das Modell da ist, startet der Erkennungs-Job; Ausschalten löscht auch die Modelldatei.release.ymlholt SFace per:app:faceModels(SHA-256-Prüfung) und hängt es an jedes Release, zusammen mit APK und AAB. YuNet (0,2 MB) liegt unverändert inassets/faces/.peoplean: WLAN, Akku nicht schwach, mit „Nur beim Laden“ (Gerätewahl, Standard an) beim Laden. Neue Fotos nach der Sicherung aus dem Original, alte überphotos?unfaced=1&model=…aus dem Original auf dem Handy, sonst der Vorschau (largeUrl). Kinderordner nur mitpeopleKids(ein403 feature_offmitreason: kidsüberspringt nur das Foto).FamilieRepository) und Mail-Kontakten (MailPimRepository.cards), „Sieht aus wie …“ (similar), Ausblenden, danach Rückgängig (nicht nach Zusammenführen) und „Nächste Person“. Gesichtsausschnitte schneidet die App aus der Vorschau perbox.Fotos, Suche, Einstellungen
photos/suggest: Personen, Orte, Bildinhalt), „Kein Ort, keine Person …“, Tipp; Marken der Suche (search.people/places) als Chips mit ✕.Lizenzen, Datenschutz
NOTICE,assets/faces/(Lizenztexte) und auf der Einstellungsseite.docs/PRIVACY_POLICY.md,privacy-policy.html): Orte (Koordinaten an den eigenen Server), Gesichtsmerkmale (nur nach Einschalten, nur eigener Server) und der einmalige Download des Modells von GitHub bzw. Hugging Face (nur IP-Adresse und übliche Verbindungsdaten, keine Fotos).docs/GOOGLE_PLAY.mdnennt beides; die Datensicherheits-CSV ist unverändert.Auswahlmodus ohne Sprung (eigener Commit
fix(drive): …)Ein langer Druck auf ein Foto ersetzte bisher den ganzen Kopf (Titel, Dateien/Fotos, Chips, Hinweisband) durch „N ausgewählt“. Das Raster sprang nach oben, der noch aufliegende Finger markierte andere Fotos.
SelectionSwap: Die Auswahlleiste ersetzt nur die Titelzeile, in einer Zeile so hoch wie die höhere der beiden (beide werden gemessen, eine gezeigt). Die Hinweiszeile ist einzeilig.DriveSelectionSwapTest(Compose auf Robolectric) vergleicht die Lage einer Kachel vor und nach Ein- und Ausstieg sowie die Lage der Nachbarn einer ausgewählten Kachel. Robolectrics Android-Jar holt Gradle (robolectricDeps, Offline-Modus).APK
Debug-APK gegenüber
main: +20,4 MB (149,7 → 170,1 MB), davonlibonnxruntime.so19,3 MB (arm64, unkomprimiert, 16-KB-ausgerichtet) und YuNet 0,2 MB. SFace ist nicht mehr im Paket.assembleReleasewar lokal nicht signierbar.Tests
DriveFacesLogicTest(Matrix gegen OpenCVs Umeyama, Ausrichtung gegenwarpAffine, YuNet-Dekodierung, NMS, base64, Referenzvektoren),DrivePlacesLogicTest(Bündel/Nachladen, Tage, Zeitraum, Suchmarken, Vorschläge, Filter, Namensvorschläge),DrivePlacesJsonTest,DriveFaceModelFetcherTest(Reihenfolge der Quellen, falscher Hash wird verworfen, Fortsetzen, Fortschritt, Abbruch). Lokal::app:compileDebugKotlin,:app:testDebugUnitTest(1544 grün),:app:lintRelease,:app:assembleDebug.https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
Generated by Claude Code