Secretary

Apps/contacts
Login

Apps/contacts

Secretary Contacts (Android)

Kontaktverwaltung als Android-App für den secretary-server (CardDAV) mit Offline-Cache, lokalen Kontakten und dem Zusammenführen von Messenger-Kontakten (WhatsApp, Telegram, Signal, Element, Skype, …) mit CardDAV-Kontakten.

What it does

Changelog

Every released version: Apps/contacts/changelog

Screenshots

Liste Detail

Verzeichnisstruktur

secretary-contacts-android/
├── build.gradle.kts              # Root-Build
├── settings.gradle.kts
├── gradle.properties
├── CONTEXT.md
├── doc/                          # (Architektur-Doku: Wiki Apps/contacts/architecture)
├── gradle/wrapper/
└── app/
    ├── build.gradle.kts
    ├── proguard-rules.pro
    └── src/main/
        ├── AndroidManifest.xml
        ├── res/values/
        │   ├── strings.xml
        │   └── themes.xml
        ├── java/org/beowulf/secretarycontacts/
        │   ├── SecretaryContactsApp.kt          # Application
        │   ├── MainActivity.kt                  # Single-Activity
        │   ├── data/
        │   │   ├── Models.kt                    # Contact, ContactValue, AddressBook
        │   │   ├── VCard.kt                     # RFC 2426 Parse/Serialize
        │   │   ├── CardDavClient.kt             # PROPFIND/REPORT/GET/PUT/DELETE/MKCOL
        │   │   ├── AccountResolver.kt           # zentrales Konto (secretary-account)
        │   │   ├── ContactsRepository.kt        # Prefs: Config, letztes Buch, gemergte Messenger
        │   │   ├── ContactStore.kt              # JSON-Cache + Offline-Pending-Queue
        │   │   ├── MessengerSource.kt           # Kontakte-Provider (Messenger-RawContacts)
        │   │   └── ContactMerge.kt              # Vorschläge + Union-Merge
│       ├── system/
│       │   ├── ContactSystemSyncAdapter.kt  # System-Provider-Sync (com.android.contacts)
│       │   ├── ContactSystemSyncService.kt  # Sync-Service (IBinder)
│       │   ├── ContactSystemScheduler.kt    # periodisch + manueller Sync
│       │   └── PhoneNumbers.kt              # TEL → Phone.NUMBER + NORMALIZED_NUMBER
        │   ├── vm/
        │   │   └── ContactsViewModel.kt         # App-State, Sync, Merge
        │   └── ui/
        │       ├── Theme.kt                     # Material 3
        │       ├── LoginScreen.kt
        │       ├── ContactListScreen.kt         # Liste, Suche, Adressbuch-Chips, Merge-Dialog
        │       ├── ContactEditScreen.kt
        │       ├── SettingsScreen.kt
        │       └── navigation/NavGraph.kt
        └── src/test/java/org/beowulf/secretarycontacts/data/
            ├── VCardTest.kt
            ├── CardDavClientTest.kt
            ├── ContactStoreTest.kt
            └── ContactMergeTest.kt

Befehle

Voraussetzungen: JDK 21, Android-SDK (Platform 37, Build-Tools 34) und Gradle 9.x. Im Repository liegt bewusst kein Gradle-Wrapper -- entweder Android Studio nutzen (bringt sein Gradle mit) oder Gradle 9 selbst installieren; die Beispiele unten rufen deshalb gradle direkt.

export ANDROID_HOME="$HOME/Android/Sdk"   # bzw. sdk.dir=... in local.properties

gradle :contacts:assembleDebug        # Debug-APK
gradle :contacts:testDebugUnitTest    # Unit-Tests
gradle :contacts:lintDebug            # Lint

Konzepte

Berechtigungen

Systemkontakte (Sync in den System-Provider)

Server-Referenz


Attachments: