# Architecture: Messages (Android, ohne Google) Same conventions as the others; **no network permission** (SMS goes through the radio, not the internet). | Schicht | Wahl | warum | | --- | --- | --- | | UI | Compose, M3 Expressive, dynamic colour | same as the others | | Rolle | `RoleManager.ROLE_SMS` | only the default SMS app may write the SMS provider and receives SMS_DELIVER | | Empfangen | `SMS_DELIVER` receiver (BROADCAST_SMS), joins multipart PDUs, inserts into `Telephony.Sms.Inbox` | default app duty | | MMS-Pflicht | `WAP_PUSH_DELIVER` receiver (accepted, stored later with MMS support) | required for the role | | Senden | `SmsManager.divideMessage` + `sendMultipartTextMessage` with sent/delivered PendingIntents; row in outbox → sent/failed | status updates in the provider | | Antwort ohne UI | `RESPOND_VIA_MESSAGE` service (SEND_RESPOND_VIA_MESSAGE) | phone app "decline with message"; required for the role | | Daten | system provider via ContentResolver + ContentObserver | no copies | | Kontakte | PhoneLookup, same helper as Telefon | | Data: no own schema (DataStore for settings). Bites: multipart and encoding, dual SIM (`SubscriptionManager`), status callbacks after process death (receiver updates by message id), notification grouping per thread, short codes and alphanumeric senders (no reply possible). Build order: role + receive + list → conversation + send + status → notifications with reply → new chat, search, archive, delete → MMS.