# x13a/wasted architecture

> Architecture diagram of the GitHub repository x13a/wasted, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/x13a/wasted
- Repository: https://github.com/x13a/wasted

## Overview

Wasted is an Android emergency-response app: users configure trigger methods and an action, then an enabled trigger invokes the shared response logic to lock the device, optionally wipe it, or send a broadcast. The README documents additional trigger types and Work Profile behavior; those branches are represented at the subsystem level where source excerpts were unavailable. The wiring shown is limited to documented behavior and sampled calls.

Main entry points: [`app/src/main/java/me/lucky/wasted/Utils.kt`](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/Utils.kt) (Trigger response), [`app/src/main/java/me/lucky/wasted/fragment/SettingsFragment.kt`](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/fragment/SettingsFragment.kt) (Settings UI), [`app/src/main/java/me/lucky/wasted/TriggerReceiver.kt`](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/TriggerReceiver.kt) (Secret broadcast), [`app/src/main/java/me/lucky/wasted/trigger/notification/NotificationListenerService.kt`](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/notification/NotificationListenerService.kt) (Secret notification)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Configuration"]
  node_settings["Settings UI"]
  node_preferences[("Preferences<br/>[Preferences.kt]")]
  node_main["Main UI<br/>[MainActivity.kt]"]
  node_admin_ui["Admin settings<br/>[LockFragment.kt]"]
end

subgraph group_triggers["Trigger sources"]
  node_panic["PanicKit opt-in"]
  node_tile["Quick-settings tile<br/>[TileService.kt]"]
  node_shortcut["Shortcut<br/>[ShortcutManager.kt]"]
  node_broadcast["Secret broadcast<br/>[TriggerReceiver.kt]"]
  node_notification["Secret notification"]
  node_timeout["Inactivity timeout<br/>[LockJobService.kt]"]
  node_usb["Locked USB event"]
  node_fakeapp["Fake messenger"]
  node_duress["Duress password"]
end

subgraph group_response["Emergency response"]
  node_response_logic["Trigger response<br/>[Utils.kt]"]
  node_broadcast_out["Broadcast action<br/>[RecastFragment.kt]"]
  node_result["Lock or wipe"]
end

subgraph group_platform["Android integration"]
  node_admin["Device admin"]
end

node_user(("User"))
node_external_android{{"Android services"}}
node_work_profile(("Work Profile"))

node_user -->|"opens"| node_main
node_user -->|"configures"| node_settings
node_settings -->|"updates"| node_preferences
node_settings -->|"enables triggers"| node_external_android
node_user -->|"activates"| node_tile
node_user -->|"activates"| node_shortcut
node_user -->|"sends code"| node_broadcast
node_user -->|"sends code"| node_notification
node_panic -.->|"triggers"| node_response_logic
node_tile -->|"fires"| node_response_logic
node_shortcut -->|"dispatches"| node_broadcast
node_broadcast -->|"fires"| node_response_logic
node_notification -->|"fires"| node_response_logic
node_timeout -->|"fires"| node_response_logic
node_usb -->|"fires"| node_response_logic
node_fakeapp -->|"triggers"| node_response_logic
node_duress -.->|"triggers"| node_response_logic
node_response_logic -->|"locks or wipes"| node_admin
node_response_logic -->|"sends message"| node_broadcast_out
node_admin_ui -->|"configures"| node_admin
node_admin -->|"uses device policy"| node_external_android
node_external_android -->|"runs scheduled job"| node_timeout
node_external_android -->|"delivers USB event"| node_usb
node_external_android -->|"delivers notifications"| node_notification
node_external_android -.->|"provides profile"| node_work_profile

click node_settings "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/fragment/SettingsFragment.kt"
click node_preferences "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/Preferences.kt"
click node_main "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/MainActivity.kt"
click node_panic "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/panic/PanicConnectionActivity.kt"
click node_tile "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/tile/TileService.kt"
click node_shortcut "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/shortcut/ShortcutManager.kt"
click node_broadcast "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/TriggerReceiver.kt"
click node_notification "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/notification/NotificationListenerService.kt"
click node_timeout "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/lock/LockJobService.kt"
click node_usb "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/shared/ForegroundService.kt"
click node_fakeapp "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/application/ApplicationActivity.kt"
click node_duress "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/panic/PanicResponderActivity.kt"
click node_response_logic "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/Utils.kt"
click node_admin_ui "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/fragment/LockFragment.kt"
click node_admin "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/admin/DeviceAdminManager.kt"
click node_broadcast_out "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/fragment/RecastFragment.kt"
click node_result "https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/admin/DeviceAdminManager.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_settings,node_preferences,node_main,node_admin_ui,node_user toneBlue
class node_panic,node_tile,node_shortcut,node_broadcast,node_notification,node_timeout,node_usb,node_fakeapp,node_duress toneAmber
class node_response_logic,node_broadcast_out,node_result toneMint
class node_admin toneRose
class node_external_android,node_work_profile toneIndigo
```

## Components

### Configuration

- [Settings UI](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/fragment/SettingsFragment.kt): `app/src/main/java/me/lucky/wasted/fragment/SettingsFragment.kt`
- [Preferences](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/Preferences.kt): `app/src/main/java/me/lucky/wasted/Preferences.kt`
- [Main UI](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/MainActivity.kt): `app/src/main/java/me/lucky/wasted/MainActivity.kt`
- [Admin settings](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/fragment/LockFragment.kt): `app/src/main/java/me/lucky/wasted/fragment/LockFragment.kt`

### Trigger sources

- [PanicKit opt-in](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/panic/PanicConnectionActivity.kt): `app/src/main/java/me/lucky/wasted/trigger/panic/PanicConnectionActivity.kt`
- [Quick-settings tile](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/tile/TileService.kt): `app/src/main/java/me/lucky/wasted/trigger/tile/TileService.kt`
- [Shortcut](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/shortcut/ShortcutManager.kt): `app/src/main/java/me/lucky/wasted/trigger/shortcut/ShortcutManager.kt`
- [Secret broadcast](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/TriggerReceiver.kt): `app/src/main/java/me/lucky/wasted/TriggerReceiver.kt`
- [Secret notification](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/notification/NotificationListenerService.kt): `app/src/main/java/me/lucky/wasted/trigger/notification/NotificationListenerService.kt`
- [Inactivity timeout](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/lock/LockJobService.kt): `app/src/main/java/me/lucky/wasted/trigger/lock/LockJobService.kt`
- [Locked USB event](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/shared/ForegroundService.kt): `app/src/main/java/me/lucky/wasted/trigger/shared/ForegroundService.kt`
- [Fake messenger](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/application/ApplicationActivity.kt): `app/src/main/java/me/lucky/wasted/trigger/application/ApplicationActivity.kt`
- [Duress password](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/trigger/panic/PanicResponderActivity.kt): `app/src/main/java/me/lucky/wasted/trigger/panic/PanicResponderActivity.kt`

### Emergency response

- [Trigger response](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/Utils.kt): `app/src/main/java/me/lucky/wasted/Utils.kt`
- [Broadcast action](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/fragment/RecastFragment.kt): `app/src/main/java/me/lucky/wasted/fragment/RecastFragment.kt`
- [Lock or wipe](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/admin/DeviceAdminManager.kt): `app/src/main/java/me/lucky/wasted/admin/DeviceAdminManager.kt`

### Android integration

- [Device admin](https://github.com/x13a/wasted/blob/main/app/src/main/java/me/lucky/wasted/admin/DeviceAdminManager.kt): `app/src/main/java/me/lucky/wasted/admin/DeviceAdminManager.kt`

### Other components

- **User**
- **Android services**
- **Work Profile**

## Connections

- User → Main UI: opens
- User → Settings UI: configures
- Settings UI → Preferences: updates
- Settings UI → Android services: enables triggers
- User → Quick-settings tile: activates
- User → Shortcut: activates
- User → Secret broadcast: sends code
- User → Secret notification: sends code
- PanicKit opt-in → Trigger response: triggers
- Quick-settings tile → Trigger response: fires
- Shortcut → Secret broadcast: dispatches
- Secret broadcast → Trigger response: fires
- Secret notification → Trigger response: fires
- Inactivity timeout → Trigger response: fires
- Locked USB event → Trigger response: fires
- Fake messenger → Trigger response: triggers
- Duress password → Trigger response: triggers
- Trigger response → Device admin: locks or wipes
- Trigger response → Broadcast action: sends message
- Admin settings → Device admin: configures
- Device admin → Android services: uses device policy
- Android services → Inactivity timeout: runs scheduled job
- Android services → Locked USB event: delivers USB event
- Android services → Secret notification: delivers notifications
- Android services → Work Profile: provides profile
