# Client Phone Usage Guide The client phone addon provides the in-game phone UI for contacts, SMS messages, email, and local utility apps such as notes, calendar events, world clocks, and alarms. ## Open Phone UI ```sqf call forge_client_phone_fnc_openUI; ``` The phone UI creates `RscPhone`, loads `ui/_site/index.html`, and routes browser alerts through `forge_client_phone_fnc_handleUIEvents`. ## State Ownership Contacts, messages, and emails are server-owned and requested through the server phone addon. Local utility app state is stored in `profileNamespace`: - notes - calendar events - world clocks - alarms - theme/preferences ## Phone Repository `forge_client_phone_fnc_initRepository` creates `GVAR(PhoneRepository)`. The phone repository owns local notes, events, clocks, alarms, and settings helpers. Contacts, messages, and emails continue to use server-backed request/response events. ## Browser Events ### Session and Preferences | Event | Client behavior | | --- | --- | | `phone::get::player` | Send player UID to browser with `setPlayerUid`. | | `phone::get::theme` | Send saved light/dark theme to browser. | | `phone::set::theme` | Save theme preference to `profileNamespace`. | ### Contacts | Event | Client behavior | | --- | --- | | `phone::get::contacts` | Load cached contacts and request server refresh. | | `phone::refresh::contacts` | Request contacts from server. | | `phone::add::contact` | Add contact by phone number. | | `phone::add::contact::by::phone` | Add contact by phone number. | | `phone::add::contact::by::email` | Add contact by email. | | `phone::remove::contact` | Remove contact by UID. | ### Messages | Event | Client behavior | | --- | --- | | `phone::get::messages` | Request messages from server. | | `phone::get::message::thread` | Request thread with another UID. | | `phone::send::message` | Send SMS through server. | | `phone::mark::message::read` | Mark message read on server. | | `phone::delete::message` | Delete message on server. | ### Email | Event | Client behavior | | --- | --- | | `phone::get::emails` | Request emails from server. | | `phone::send::email` | Send email through server. | | `phone::mark::email::read` | Mark email read on server. | | `phone::delete::email` | Delete email on server. | ### Local Utility Apps | Event | Client behavior | | --- | --- | | `phone::get::notes` | Load local notes. | | `phone::save::note` | Save local note. | | `phone::delete::note` | Delete local note. | | `phone::get::events` | Load local calendar events. | | `phone::save::event` | Save local calendar event. | | `phone::delete::event` | Delete local calendar event. | | `phone::get::clocks` | Load local world clocks. | | `phone::save::clock` | Save local world clock. | | `phone::delete::clock` | Delete local world clock. | | `phone::get::alarms` | Load local alarms. | | `phone::save::alarm` | Save local alarm. | | `phone::delete::alarm` | Delete local alarm. | | `phone::toggle::alarm` | Toggle local alarm enabled state. | ## Usage Rules - Send contact, message, and email mutations to the server phone addon. - Keep local-only utility apps in `profileNamespace` until they are migrated to server-backed storage. - Do not treat local phone utility state as shared multiplayer state. - Validate required UID, phone, email, subject, and message fields before sending server requests. ## Related Guides - [Phone Usage Guide](./PHONE_USAGE_GUIDE.md) - [Client Notifications Usage Guide](./CLIENT_NOTIFICATIONS_USAGE_GUIDE.md)